From 6a058b0d21833dc16a8540794c11806a59078b9c Mon Sep 17 00:00:00 2001 From: Florian Vogt Date: Wed, 4 Sep 2024 15:43:36 +0200 Subject: [PATCH 01/10] [FEATURE] Migrate UI5 Tooling documentation to VitePress (#1006) Migrate to UI5 Vitepress --------- Co-authored-by: Konrad --- .github/workflows/deploy-docs-next.yml | 87 + .github/workflows/deploy-docs-stable.yml | 87 + .gitignore | 2 + .vitepress/cache/deps/_metadata.json | 52 + .vitepress/cache/deps/chunk-45KCXATN.js | 11482 +++++++++ .vitepress/cache/deps/chunk-45KCXATN.js.map | 7 + .vitepress/cache/deps/chunk-YVCV7MZG.js | 9258 +++++++ .vitepress/cache/deps/chunk-YVCV7MZG.js.map | 7 + .vitepress/cache/deps/package.json | 3 + .../deps/vitepress___@vue_devtools-api.js | 4347 ++++ .../deps/vitepress___@vue_devtools-api.js.map | 7 + .../cache/deps/vitepress___@vueuse_core.js | 567 + .../deps/vitepress___@vueuse_core.js.map | 7 + ...ess___@vueuse_integrations_useFocusTrap.js | 1101 + ...__@vueuse_integrations_useFocusTrap.js.map | 7 + .../vitepress___mark__js_src_vanilla__js.js | 1665 ++ ...itepress___mark__js_src_vanilla__js.js.map | 7 + .../cache/deps/vitepress___minisearch.js | 1837 ++ .../cache/deps/vitepress___minisearch.js.map | 7 + .vitepress/cache/deps/vue.js | 323 + .vitepress/cache/deps/vue.js.map | 7 + .vitepress/config.ts | 340 + .vitepress/pathConfigurations/nextconfig.ts | 339 + .vitepress/pathConfigurations/stableconfig.ts | 337 + .vitepress/syntaxes/abapcds.tmLanguage.json | 323 + .vitepress/syntaxes/cds.tmLanguage.json | 1054 + .vitepress/syntaxes/csv.tmLanguage.json | 22 + .vitepress/syntaxes/d2.tmLanguage.json | 566 + .vitepress/syntaxes/http.tmLanguage.json | 300 + .vitepress/syntaxes/log.tmLanguage.json | 77 + .vitepress/syntaxes/scsv.tmLanguage.json | 22 + .vitepress/theme/components/Badgen.vue | 83 + .vitepress/theme/components/Todo.vue | 325 + .vitepress/theme/components/TodoItem.vue | 34 + .vitepress/theme/components/TodoList.vue | 46 + .vitepress/theme/components/Trippin.vue | 137 + .vitepress/theme/custom.css | 317 + .vitepress/theme/index.ts | 52 + .vitepress/theme/loaders/trippin.data.js | 7 + .../theme/mixins/UI5WebComponentsMixin.js | 41 + .vitepress/theme/mixins/u-zoom-vanilla.js | 265 + .vitepress/theme/model/trippin/QTrippin.d.ts | 160 + .vitepress/theme/model/trippin/QTrippin.js | 207 + .../theme/model/trippin/TrippinModel.d.ts | 608 + .../theme/model/trippin/TrippinModel.js | 13 + .../theme/model/trippin/TrippinService.d.ts | 172 + .../theme/model/trippin/TrippinService.js | 495 + docs/{pages => }/Benchmarking.md | 3 + docs/{pages => }/Builder.md | 71 +- docs/{pages => }/CodeAnalysis.md | 41 +- docs/{pages => }/Configuration.md | 867 +- docs/ESSupport.md | 551 + docs/{pages => }/FAQ.md | 0 docs/{pages => }/FileSystem.md | 1 + docs/{pages => }/GettingStarted.md | 36 +- docs/Guidelines.md | 60 - docs/HomePage.md | 131 + docs/{pages => }/OpenUI5.md | 12 +- docs/{pages => }/Overview.md | 7 +- docs/{pages => }/Privacy.md | 0 docs/{pages => }/Project.md | 23 +- docs/README.md | 50 + docs/{pages => }/SAPUI5.md | 16 +- docs/{pages => }/Server.md | 5 +- docs/{pages => }/Troubleshooting.md | 6 +- docs/{pages => }/Workspace.md | 101 +- docs/extensibility/CustomServerMiddleware.md | 255 + docs/extensibility/CustomTasks.md | 454 + .../{pages => }/extensibility/ProjectShims.md | 0 docs/index.md | 4 +- docs/pages/ESSupport.md | 580 - .../extensibility/CustomServerMiddleware.md | 256 - docs/pages/extensibility/CustomTasks.md | 476 - docs/public/TripPinClassDiagram.jpg | Bin 0 -> 45518 bytes docs/public/UI5-VitePress-fire-and-water.jpg | Bin 0 -> 167975 bytes docs/public/favicon.ico | Bin 0 -> 15086 bytes docs/public/icons/logo/Autoprefixer.svg | 1 + docs/public/icons/logo/PlantUML.svg | 41 + docs/public/icons/logo/PostCSS.svg | 1 + docs/public/icons/logo/Rollup.svg | 3 + docs/public/icons/logo/TailwindCSS.svg | 4 + docs/public/icons/logo/TypeScript-wm.svg | 1 + docs/public/icons/logo/TypeScript.svg | 1 + docs/public/icons/logo/UI5.svg | 9 + docs/public/icons/logo/VitePress.svg | 1 + docs/public/icons/logo/Vitejs.svg | 15 + docs/public/icons/logo/Vuejs.svg | 1 + docs/public/icons/logo/Web-Components.svg | 1 + .../public/icons/logo/cssnano-wm-vertical.svg | 1 + docs/public/icons/logo/cssnano-wm.svg | 1 + docs/public/icons/logo/cssnano.svg | 8 + docs/public/icons/logo/markdown.svg | 1 + docs/public/icons/logo/powering-sap-btp.svg | 1 + docs/public/icons/ui5/B.svg | 1 + docs/public/icons/ui5/B_OpenUI5_H.svg | 1 + docs/public/icons/ui5/B_OpenUI5_V.svg | 1 + docs/public/icons/ui5/B_UI5_H.svg | 1 + docs/public/icons/ui5/B_UI5_V.svg | 1 + docs/public/icons/ui5/O.svg | 1 + docs/public/icons/ui5/O_OpenUI5_H.svg | 1 + docs/public/icons/ui5/O_OpenUI5_V.svg | 1 + docs/public/icons/ui5/O_UI5_H.svg | 1 + docs/public/icons/ui5/O_UI5_V.svg | 1 + docs/public/icons/ui5/UI5.svg | 9 + docs/public/learn-more.svg | 9 + .../tailwind-css-vsc-color-completion.png | Bin 0 -> 13680 bytes docs/stylesheets/extra.css | 199 - docs/updates/migrate-v3.md | 97 +- docs/updates/migrate-v4.md | 74 +- mkdocs.yml | 92 - overrides/partials/footer.html | 58 - package-lock.json | 20996 +++++++++------- package.json | 7 +- postcss.config.js | 7 + resources/UI5_CLI.graffle | Bin 464438 -> 0 bytes scripts/Dockerfile | 9 - scripts/buildDocs.sh | 30 - scripts/buildImage.sh | 22 - scripts/generateCliDoc.js | 21 +- scripts/generateStableConfig.js | 11 + scripts/generatenextConfig.js | 11 + scripts/hash.js | 18 - scripts/serveDocs.sh | 15 - tailwind.config.js | 96 + tsconfig.json | 33 + 125 files changed, 51831 insertions(+), 11299 deletions(-) create mode 100644 .github/workflows/deploy-docs-next.yml create mode 100644 .github/workflows/deploy-docs-stable.yml create mode 100644 .vitepress/cache/deps/_metadata.json create mode 100644 .vitepress/cache/deps/chunk-45KCXATN.js create mode 100644 .vitepress/cache/deps/chunk-45KCXATN.js.map create mode 100644 .vitepress/cache/deps/chunk-YVCV7MZG.js create mode 100644 .vitepress/cache/deps/chunk-YVCV7MZG.js.map create mode 100644 .vitepress/cache/deps/package.json create mode 100644 .vitepress/cache/deps/vitepress___@vue_devtools-api.js create mode 100644 .vitepress/cache/deps/vitepress___@vue_devtools-api.js.map create mode 100644 .vitepress/cache/deps/vitepress___@vueuse_core.js create mode 100644 .vitepress/cache/deps/vitepress___@vueuse_core.js.map create mode 100644 .vitepress/cache/deps/vitepress___@vueuse_integrations_useFocusTrap.js create mode 100644 .vitepress/cache/deps/vitepress___@vueuse_integrations_useFocusTrap.js.map create mode 100644 .vitepress/cache/deps/vitepress___mark__js_src_vanilla__js.js create mode 100644 .vitepress/cache/deps/vitepress___mark__js_src_vanilla__js.js.map create mode 100644 .vitepress/cache/deps/vitepress___minisearch.js create mode 100644 .vitepress/cache/deps/vitepress___minisearch.js.map create mode 100644 .vitepress/cache/deps/vue.js create mode 100644 .vitepress/cache/deps/vue.js.map create mode 100644 .vitepress/config.ts create mode 100644 .vitepress/pathConfigurations/nextconfig.ts create mode 100644 .vitepress/pathConfigurations/stableconfig.ts create mode 100644 .vitepress/syntaxes/abapcds.tmLanguage.json create mode 100644 .vitepress/syntaxes/cds.tmLanguage.json create mode 100644 .vitepress/syntaxes/csv.tmLanguage.json create mode 100644 .vitepress/syntaxes/d2.tmLanguage.json create mode 100644 .vitepress/syntaxes/http.tmLanguage.json create mode 100644 .vitepress/syntaxes/log.tmLanguage.json create mode 100644 .vitepress/syntaxes/scsv.tmLanguage.json create mode 100644 .vitepress/theme/components/Badgen.vue create mode 100644 .vitepress/theme/components/Todo.vue create mode 100644 .vitepress/theme/components/TodoItem.vue create mode 100644 .vitepress/theme/components/TodoList.vue create mode 100644 .vitepress/theme/components/Trippin.vue create mode 100644 .vitepress/theme/custom.css create mode 100644 .vitepress/theme/index.ts create mode 100644 .vitepress/theme/loaders/trippin.data.js create mode 100644 .vitepress/theme/mixins/UI5WebComponentsMixin.js create mode 100644 .vitepress/theme/mixins/u-zoom-vanilla.js create mode 100644 .vitepress/theme/model/trippin/QTrippin.d.ts create mode 100644 .vitepress/theme/model/trippin/QTrippin.js create mode 100644 .vitepress/theme/model/trippin/TrippinModel.d.ts create mode 100644 .vitepress/theme/model/trippin/TrippinModel.js create mode 100644 .vitepress/theme/model/trippin/TrippinService.d.ts create mode 100644 .vitepress/theme/model/trippin/TrippinService.js rename docs/{pages => }/Benchmarking.md (99%) rename docs/{pages => }/Builder.md (82%) rename docs/{pages => }/CodeAnalysis.md (95%) rename docs/{pages => }/Configuration.md (65%) create mode 100644 docs/ESSupport.md rename docs/{pages => }/FAQ.md (100%) rename docs/{pages => }/FileSystem.md (99%) rename docs/{pages => }/GettingStarted.md (82%) delete mode 100644 docs/Guidelines.md create mode 100644 docs/HomePage.md rename docs/{pages => }/OpenUI5.md (93%) rename docs/{pages => }/Overview.md (97%) rename docs/{pages => }/Privacy.md (100%) rename docs/{pages => }/Project.md (86%) create mode 100644 docs/README.md rename docs/{pages => }/SAPUI5.md (90%) rename docs/{pages => }/Server.md (94%) rename docs/{pages => }/Troubleshooting.md (95%) rename docs/{pages => }/Workspace.md (83%) create mode 100644 docs/extensibility/CustomServerMiddleware.md create mode 100644 docs/extensibility/CustomTasks.md rename docs/{pages => }/extensibility/ProjectShims.md (100%) delete mode 100644 docs/pages/ESSupport.md delete mode 100644 docs/pages/extensibility/CustomServerMiddleware.md delete mode 100644 docs/pages/extensibility/CustomTasks.md create mode 100644 docs/public/TripPinClassDiagram.jpg create mode 100644 docs/public/UI5-VitePress-fire-and-water.jpg create mode 100644 docs/public/favicon.ico create mode 100644 docs/public/icons/logo/Autoprefixer.svg create mode 100644 docs/public/icons/logo/PlantUML.svg create mode 100644 docs/public/icons/logo/PostCSS.svg create mode 100644 docs/public/icons/logo/Rollup.svg create mode 100644 docs/public/icons/logo/TailwindCSS.svg create mode 100644 docs/public/icons/logo/TypeScript-wm.svg create mode 100644 docs/public/icons/logo/TypeScript.svg create mode 100644 docs/public/icons/logo/UI5.svg create mode 100644 docs/public/icons/logo/VitePress.svg create mode 100644 docs/public/icons/logo/Vitejs.svg create mode 100644 docs/public/icons/logo/Vuejs.svg create mode 100644 docs/public/icons/logo/Web-Components.svg create mode 100644 docs/public/icons/logo/cssnano-wm-vertical.svg create mode 100644 docs/public/icons/logo/cssnano-wm.svg create mode 100644 docs/public/icons/logo/cssnano.svg create mode 100644 docs/public/icons/logo/markdown.svg create mode 100644 docs/public/icons/logo/powering-sap-btp.svg create mode 100644 docs/public/icons/ui5/B.svg create mode 100644 docs/public/icons/ui5/B_OpenUI5_H.svg create mode 100644 docs/public/icons/ui5/B_OpenUI5_V.svg create mode 100644 docs/public/icons/ui5/B_UI5_H.svg create mode 100644 docs/public/icons/ui5/B_UI5_V.svg create mode 100644 docs/public/icons/ui5/O.svg create mode 100644 docs/public/icons/ui5/O_OpenUI5_H.svg create mode 100644 docs/public/icons/ui5/O_OpenUI5_V.svg create mode 100644 docs/public/icons/ui5/O_UI5_H.svg create mode 100644 docs/public/icons/ui5/O_UI5_V.svg create mode 100644 docs/public/icons/ui5/UI5.svg create mode 100644 docs/public/learn-more.svg create mode 100644 docs/public/tailwind-css-vsc-color-completion.png delete mode 100644 docs/stylesheets/extra.css delete mode 100644 mkdocs.yml delete mode 100644 overrides/partials/footer.html create mode 100644 postcss.config.js delete mode 100644 resources/UI5_CLI.graffle delete mode 100644 scripts/Dockerfile delete mode 100755 scripts/buildDocs.sh delete mode 100755 scripts/buildImage.sh create mode 100644 scripts/generateStableConfig.js create mode 100644 scripts/generatenextConfig.js delete mode 100644 scripts/hash.js delete mode 100755 scripts/serveDocs.sh create mode 100644 tailwind.config.js create mode 100644 tsconfig.json diff --git a/.github/workflows/deploy-docs-next.yml b/.github/workflows/deploy-docs-next.yml new file mode 100644 index 0000000000..6366006e7a --- /dev/null +++ b/.github/workflows/deploy-docs-next.yml @@ -0,0 +1,87 @@ +# Sample workflow for building and deploying a VitePress site to GitHub Pages +# +name: Deploy VitePress site to Pages (next) + +on: + # Runs on pushes targeting the `main` branch. Change this to `master` if you're + # using the `master` branch as the default branch. + push: + branches: [main] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: write + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: pages + cancel-in-progress: false + +jobs: + # Build job + build: + runs-on: ubuntu-latest + env: + DOC_VERSION: v4 + DOC_ALIAS: stable + GIT_COMMITTER_NAME: "Konrad Kost" + GIT_COMMITTER_EMAIL: "xxxx" + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: npm + - name: Setup Pages + uses: actions/configure-pages@v4 + - name: Install dependencies + run: npm ci + - name: Fetch gh-pages branch + run: git fetch origin gh-pages --depth=1 + - name: Set /site ownership to current user + run: | + mkdir site + sudo chown -R $(id -u):$(id -g) ./site + - name: generate CLI doc + run: npm run generate-cli-doc + - name: generate next config + run: npm run replace-base-path-next + - name: Build jsdoc + run: npm run jsdoc-generate + - name: Build vitepress build + run: npm run docs-generate + - name: Build Schema + run: | + npm run schema-generate + npm run schema-workspace-generate + - name: Checkout gh-pages + uses: actions/checkout@v4 + with: + ref: gh-pages + path: gh-pages + - name: Copy the additional resources to gh-pages + run: | + rm -rf ./gh-pages/schema + cp -R ./site/schema ./gh-pages/ + rm -rf ./gh-pages/next/ + cp -R ./site ./gh-pages/next/ + cp ./scripts/resources/custom404.html ./gh-pages/404.html + - name: Publish Docs + run: | + cd ./gh-pages + git config --local user.email $GIT_COMMITTER_EMAIL + git config --local user.name $GIT_COMMITTER_NAME + git add . + git commit -m "Updating supplemental resources for ${DOC_VERSION} documentation deployment" + git push diff --git a/.github/workflows/deploy-docs-stable.yml b/.github/workflows/deploy-docs-stable.yml new file mode 100644 index 0000000000..c075d56e2b --- /dev/null +++ b/.github/workflows/deploy-docs-stable.yml @@ -0,0 +1,87 @@ +# Sample workflow for building and deploying a VitePress site to GitHub Pages +# +name: Deploy VitePress site to Pages (stable) + +on: + # Runs on pushes targeting the `main` branch. Change this to `master` if you're + # using the `master` branch as the default branch. + push: + branches: [main] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: write + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: pages + cancel-in-progress: false + +jobs: + # Build job + build: + runs-on: ubuntu-latest + env: + DOC_VERSION: v4 + DOC_ALIAS: stable + GIT_COMMITTER_NAME: "Konrad Kost" + GIT_COMMITTER_EMAIL: "xxxx" + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: npm + - name: Setup Pages + uses: actions/configure-pages@v4 + - name: Install dependencies + run: npm ci + - name: Fetch gh-pages branch + run: git fetch origin gh-pages --depth=1 + - name: Set /site ownership to current user + run: | + mkdir site + sudo chown -R $(id -u):$(id -g) ./site + - name: generate CLI doc + run: npm run generate-cli-doc + - name: generate stable Config + run: npm run replace-base-path-stable + - name: Build jsdoc + run: npm run jsdoc-generate + - name: Build vitepress build + run: npm run docs-generate + - name: Build Schema + run: | + npm run schema-generate + npm run schema-workspace-generate + - name: Checkout gh-pages + uses: actions/checkout@v4 + with: + ref: gh-pages + path: gh-pages + - name: Copy the additional resources to gh-pages + run: | + rm -rf ./gh-pages/schema + cp -R ./site/schema ./gh-pages/ + rm -rf ./gh-pages/stable/ + cp -R ./site ./gh-pages/stable/ + cp ./scripts/resources/custom404.html ./gh-pages/404.html + - name: Publish Docs + run: | + cd ./gh-pages + git config --local user.email $GIT_COMMITTER_EMAIL + git config --local user.name $GIT_COMMITTER_NAME + git add . + git commit -m "Updating supplemental resources for ${DOC_VERSION} documentation deployment" + git push diff --git a/.gitignore b/.gitignore index 1f157785d0..403a839112 100644 --- a/.gitignore +++ b/.gitignore @@ -61,3 +61,5 @@ site/ # Custom files docs/pages/CLI.md +docs/CLI.md + diff --git a/.vitepress/cache/deps/_metadata.json b/.vitepress/cache/deps/_metadata.json new file mode 100644 index 0000000000..29d5652a3c --- /dev/null +++ b/.vitepress/cache/deps/_metadata.json @@ -0,0 +1,52 @@ +{ + "hash": "b5613d59", + "configHash": "20d54342", + "lockfileHash": "23ddd169", + "browserHash": "87e1e698", + "optimized": { + "vue": { + "src": "../../../node_modules/vue/dist/vue.runtime.esm-bundler.js", + "file": "vue.js", + "fileHash": "457aabc7", + "needsInterop": false + }, + "vitepress > @vue/devtools-api": { + "src": "../../../node_modules/@vue/devtools-api/dist/index.js", + "file": "vitepress___@vue_devtools-api.js", + "fileHash": "a0e6c966", + "needsInterop": false + }, + "vitepress > @vueuse/core": { + "src": "../../../node_modules/@vueuse/core/index.mjs", + "file": "vitepress___@vueuse_core.js", + "fileHash": "61414c6a", + "needsInterop": false + }, + "vitepress > @vueuse/integrations/useFocusTrap": { + "src": "../../../node_modules/@vueuse/integrations/useFocusTrap.mjs", + "file": "vitepress___@vueuse_integrations_useFocusTrap.js", + "fileHash": "df15f6d5", + "needsInterop": false + }, + "vitepress > mark.js/src/vanilla.js": { + "src": "../../../node_modules/mark.js/src/vanilla.js", + "file": "vitepress___mark__js_src_vanilla__js.js", + "fileHash": "89b842e5", + "needsInterop": false + }, + "vitepress > minisearch": { + "src": "../../../node_modules/minisearch/dist/es/index.js", + "file": "vitepress___minisearch.js", + "fileHash": "3f20f67f", + "needsInterop": false + } + }, + "chunks": { + "chunk-YVCV7MZG": { + "file": "chunk-YVCV7MZG.js" + }, + "chunk-45KCXATN": { + "file": "chunk-45KCXATN.js" + } + } +} \ No newline at end of file diff --git a/.vitepress/cache/deps/chunk-45KCXATN.js b/.vitepress/cache/deps/chunk-45KCXATN.js new file mode 100644 index 0000000000..dcaf4f28e8 --- /dev/null +++ b/.vitepress/cache/deps/chunk-45KCXATN.js @@ -0,0 +1,11482 @@ +// node_modules/@vue/shared/dist/shared.esm-bundler.js +function makeMap(str, expectsLowerCase) { + const set2 = new Set(str.split(",")); + return expectsLowerCase ? (val) => set2.has(val.toLowerCase()) : (val) => set2.has(val); +} +var EMPTY_OBJ = true ? Object.freeze({}) : {}; +var EMPTY_ARR = true ? Object.freeze([]) : []; +var NOOP = () => { +}; +var NO = () => false; +var isOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // uppercase letter +(key.charCodeAt(2) > 122 || key.charCodeAt(2) < 97); +var isModelListener = (key) => key.startsWith("onUpdate:"); +var extend = Object.assign; +var remove = (arr, el) => { + const i = arr.indexOf(el); + if (i > -1) { + arr.splice(i, 1); + } +}; +var hasOwnProperty = Object.prototype.hasOwnProperty; +var hasOwn = (val, key) => hasOwnProperty.call(val, key); +var isArray = Array.isArray; +var isMap = (val) => toTypeString(val) === "[object Map]"; +var isSet = (val) => toTypeString(val) === "[object Set]"; +var isDate = (val) => toTypeString(val) === "[object Date]"; +var isRegExp = (val) => toTypeString(val) === "[object RegExp]"; +var isFunction = (val) => typeof val === "function"; +var isString = (val) => typeof val === "string"; +var isSymbol = (val) => typeof val === "symbol"; +var isObject = (val) => val !== null && typeof val === "object"; +var isPromise = (val) => { + return (isObject(val) || isFunction(val)) && isFunction(val.then) && isFunction(val.catch); +}; +var objectToString = Object.prototype.toString; +var toTypeString = (value) => objectToString.call(value); +var toRawType = (value) => { + return toTypeString(value).slice(8, -1); +}; +var isPlainObject = (val) => toTypeString(val) === "[object Object]"; +var isIntegerKey = (key) => isString(key) && key !== "NaN" && key[0] !== "-" && "" + parseInt(key, 10) === key; +var isReservedProp = makeMap( + // the leading comma is intentional so empty string "" is also included + ",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted" +); +var isBuiltInDirective = makeMap( + "bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo" +); +var cacheStringFunction = (fn) => { + const cache = /* @__PURE__ */ Object.create(null); + return (str) => { + const hit = cache[str]; + return hit || (cache[str] = fn(str)); + }; +}; +var camelizeRE = /-(\w)/g; +var camelize = cacheStringFunction((str) => { + return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : ""); +}); +var hyphenateRE = /\B([A-Z])/g; +var hyphenate = cacheStringFunction( + (str) => str.replace(hyphenateRE, "-$1").toLowerCase() +); +var capitalize = cacheStringFunction((str) => { + return str.charAt(0).toUpperCase() + str.slice(1); +}); +var toHandlerKey = cacheStringFunction((str) => { + const s = str ? `on${capitalize(str)}` : ``; + return s; +}); +var hasChanged = (value, oldValue) => !Object.is(value, oldValue); +var invokeArrayFns = (fns, ...arg) => { + for (let i = 0; i < fns.length; i++) { + fns[i](...arg); + } +}; +var def = (obj, key, value, writable = false) => { + Object.defineProperty(obj, key, { + configurable: true, + enumerable: false, + writable, + value + }); +}; +var looseToNumber = (val) => { + const n = parseFloat(val); + return isNaN(n) ? val : n; +}; +var toNumber = (val) => { + const n = isString(val) ? Number(val) : NaN; + return isNaN(n) ? val : n; +}; +var _globalThis; +var getGlobalThis = () => { + return _globalThis || (_globalThis = typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : {}); +}; +var GLOBALS_ALLOWED = "Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error"; +var isGloballyAllowed = makeMap(GLOBALS_ALLOWED); +function normalizeStyle(value) { + if (isArray(value)) { + const res = {}; + for (let i = 0; i < value.length; i++) { + const item = value[i]; + const normalized = isString(item) ? parseStringStyle(item) : normalizeStyle(item); + if (normalized) { + for (const key in normalized) { + res[key] = normalized[key]; + } + } + } + return res; + } else if (isString(value) || isObject(value)) { + return value; + } +} +var listDelimiterRE = /;(?![^(]*\))/g; +var propertyDelimiterRE = /:([^]+)/; +var styleCommentRE = /\/\*[^]*?\*\//g; +function parseStringStyle(cssText) { + const ret = {}; + cssText.replace(styleCommentRE, "").split(listDelimiterRE).forEach((item) => { + if (item) { + const tmp = item.split(propertyDelimiterRE); + tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim()); + } + }); + return ret; +} +function stringifyStyle(styles) { + let ret = ""; + if (!styles || isString(styles)) { + return ret; + } + for (const key in styles) { + const value = styles[key]; + if (isString(value) || typeof value === "number") { + const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key); + ret += `${normalizedKey}:${value};`; + } + } + return ret; +} +function normalizeClass(value) { + let res = ""; + if (isString(value)) { + res = value; + } else if (isArray(value)) { + for (let i = 0; i < value.length; i++) { + const normalized = normalizeClass(value[i]); + if (normalized) { + res += normalized + " "; + } + } + } else if (isObject(value)) { + for (const name in value) { + if (value[name]) { + res += name + " "; + } + } + } + return res.trim(); +} +function normalizeProps(props) { + if (!props) return null; + let { class: klass, style } = props; + if (klass && !isString(klass)) { + props.class = normalizeClass(klass); + } + if (style) { + props.style = normalizeStyle(style); + } + return props; +} +var HTML_TAGS = "html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot"; +var SVG_TAGS = "svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view"; +var MATH_TAGS = "annotation,annotation-xml,maction,maligngroup,malignmark,math,menclose,merror,mfenced,mfrac,mfraction,mglyph,mi,mlabeledtr,mlongdiv,mmultiscripts,mn,mo,mover,mpadded,mphantom,mprescripts,mroot,mrow,ms,mscarries,mscarry,msgroup,msline,mspace,msqrt,msrow,mstack,mstyle,msub,msubsup,msup,mtable,mtd,mtext,mtr,munder,munderover,none,semantics"; +var VOID_TAGS = "area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr"; +var isHTMLTag = makeMap(HTML_TAGS); +var isSVGTag = makeMap(SVG_TAGS); +var isMathMLTag = makeMap(MATH_TAGS); +var isVoidTag = makeMap(VOID_TAGS); +var specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`; +var isSpecialBooleanAttr = makeMap(specialBooleanAttrs); +var isBooleanAttr = makeMap( + specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected` +); +function includeBooleanAttr(value) { + return !!value || value === ""; +} +var isKnownHtmlAttr = makeMap( + `accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,inert,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap` +); +var isKnownSvgAttr = makeMap( + `xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,color-interpolation-filters,color-profile,color-rendering,contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,font-family,font-size,font-size-adjust,font-stretch,font-style,font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,overflow,overline-position,overline-thickness,panose-1,paint-order,path,pathLength,patternContentUnits,patternTransform,patternUnits,ping,pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,specularConstant,specularExponent,speed,spreadMethod,startOffset,stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,string,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,text-decoration,text-rendering,textLength,to,transform,transform-origin,type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xmlns:xlink,xml:base,xml:lang,xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan` +); +function isRenderableAttrValue(value) { + if (value == null) { + return false; + } + const type = typeof value; + return type === "string" || type === "number" || type === "boolean"; +} +function looseCompareArrays(a, b) { + if (a.length !== b.length) return false; + let equal = true; + for (let i = 0; equal && i < a.length; i++) { + equal = looseEqual(a[i], b[i]); + } + return equal; +} +function looseEqual(a, b) { + if (a === b) return true; + let aValidType = isDate(a); + let bValidType = isDate(b); + if (aValidType || bValidType) { + return aValidType && bValidType ? a.getTime() === b.getTime() : false; + } + aValidType = isSymbol(a); + bValidType = isSymbol(b); + if (aValidType || bValidType) { + return a === b; + } + aValidType = isArray(a); + bValidType = isArray(b); + if (aValidType || bValidType) { + return aValidType && bValidType ? looseCompareArrays(a, b) : false; + } + aValidType = isObject(a); + bValidType = isObject(b); + if (aValidType || bValidType) { + if (!aValidType || !bValidType) { + return false; + } + const aKeysCount = Object.keys(a).length; + const bKeysCount = Object.keys(b).length; + if (aKeysCount !== bKeysCount) { + return false; + } + for (const key in a) { + const aHasKey = a.hasOwnProperty(key); + const bHasKey = b.hasOwnProperty(key); + if (aHasKey && !bHasKey || !aHasKey && bHasKey || !looseEqual(a[key], b[key])) { + return false; + } + } + } + return String(a) === String(b); +} +function looseIndexOf(arr, val) { + return arr.findIndex((item) => looseEqual(item, val)); +} +var isRef = (val) => { + return !!(val && val.__v_isRef === true); +}; +var toDisplayString = (val) => { + return isString(val) ? val : val == null ? "" : isArray(val) || isObject(val) && (val.toString === objectToString || !isFunction(val.toString)) ? isRef(val) ? toDisplayString(val.value) : JSON.stringify(val, replacer, 2) : String(val); +}; +var replacer = (_key, val) => { + if (isRef(val)) { + return replacer(_key, val.value); + } else if (isMap(val)) { + return { + [`Map(${val.size})`]: [...val.entries()].reduce( + (entries, [key, val2], i) => { + entries[stringifySymbol(key, i) + " =>"] = val2; + return entries; + }, + {} + ) + }; + } else if (isSet(val)) { + return { + [`Set(${val.size})`]: [...val.values()].map((v) => stringifySymbol(v)) + }; + } else if (isSymbol(val)) { + return stringifySymbol(val); + } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) { + return String(val); + } + return val; +}; +var stringifySymbol = (v, i = "") => { + var _a; + return ( + // Symbol.description in es2019+ so we need to cast here to pass + // the lib: es2016 check + isSymbol(v) ? `Symbol(${(_a = v.description) != null ? _a : i})` : v + ); +}; + +// node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js +function warn(msg, ...args) { + console.warn(`[Vue warn] ${msg}`, ...args); +} +var activeEffectScope; +var EffectScope = class { + constructor(detached = false) { + this.detached = detached; + this._active = true; + this.effects = []; + this.cleanups = []; + this.parent = activeEffectScope; + if (!detached && activeEffectScope) { + this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push( + this + ) - 1; + } + } + get active() { + return this._active; + } + run(fn) { + if (this._active) { + const currentEffectScope = activeEffectScope; + try { + activeEffectScope = this; + return fn(); + } finally { + activeEffectScope = currentEffectScope; + } + } else if (true) { + warn(`cannot run an inactive effect scope.`); + } + } + /** + * This should only be called on non-detached scopes + * @internal + */ + on() { + activeEffectScope = this; + } + /** + * This should only be called on non-detached scopes + * @internal + */ + off() { + activeEffectScope = this.parent; + } + stop(fromParent) { + if (this._active) { + let i, l; + for (i = 0, l = this.effects.length; i < l; i++) { + this.effects[i].stop(); + } + for (i = 0, l = this.cleanups.length; i < l; i++) { + this.cleanups[i](); + } + if (this.scopes) { + for (i = 0, l = this.scopes.length; i < l; i++) { + this.scopes[i].stop(true); + } + } + if (!this.detached && this.parent && !fromParent) { + const last = this.parent.scopes.pop(); + if (last && last !== this) { + this.parent.scopes[this.index] = last; + last.index = this.index; + } + } + this.parent = void 0; + this._active = false; + } + } +}; +function effectScope(detached) { + return new EffectScope(detached); +} +function recordEffectScope(effect2, scope = activeEffectScope) { + if (scope && scope.active) { + scope.effects.push(effect2); + } +} +function getCurrentScope() { + return activeEffectScope; +} +function onScopeDispose(fn) { + if (activeEffectScope) { + activeEffectScope.cleanups.push(fn); + } else if (true) { + warn( + `onScopeDispose() is called when there is no active effect scope to be associated with.` + ); + } +} +var activeEffect; +var ReactiveEffect = class { + constructor(fn, trigger2, scheduler, scope) { + this.fn = fn; + this.trigger = trigger2; + this.scheduler = scheduler; + this.active = true; + this.deps = []; + this._dirtyLevel = 4; + this._trackId = 0; + this._runnings = 0; + this._shouldSchedule = false; + this._depsLength = 0; + recordEffectScope(this, scope); + } + get dirty() { + if (this._dirtyLevel === 2 || this._dirtyLevel === 3) { + this._dirtyLevel = 1; + pauseTracking(); + for (let i = 0; i < this._depsLength; i++) { + const dep = this.deps[i]; + if (dep.computed) { + triggerComputed(dep.computed); + if (this._dirtyLevel >= 4) { + break; + } + } + } + if (this._dirtyLevel === 1) { + this._dirtyLevel = 0; + } + resetTracking(); + } + return this._dirtyLevel >= 4; + } + set dirty(v) { + this._dirtyLevel = v ? 4 : 0; + } + run() { + this._dirtyLevel = 0; + if (!this.active) { + return this.fn(); + } + let lastShouldTrack = shouldTrack; + let lastEffect = activeEffect; + try { + shouldTrack = true; + activeEffect = this; + this._runnings++; + preCleanupEffect(this); + return this.fn(); + } finally { + postCleanupEffect(this); + this._runnings--; + activeEffect = lastEffect; + shouldTrack = lastShouldTrack; + } + } + stop() { + if (this.active) { + preCleanupEffect(this); + postCleanupEffect(this); + this.onStop && this.onStop(); + this.active = false; + } + } +}; +function triggerComputed(computed3) { + return computed3.value; +} +function preCleanupEffect(effect2) { + effect2._trackId++; + effect2._depsLength = 0; +} +function postCleanupEffect(effect2) { + if (effect2.deps.length > effect2._depsLength) { + for (let i = effect2._depsLength; i < effect2.deps.length; i++) { + cleanupDepEffect(effect2.deps[i], effect2); + } + effect2.deps.length = effect2._depsLength; + } +} +function cleanupDepEffect(dep, effect2) { + const trackId = dep.get(effect2); + if (trackId !== void 0 && effect2._trackId !== trackId) { + dep.delete(effect2); + if (dep.size === 0) { + dep.cleanup(); + } + } +} +function effect(fn, options) { + if (fn.effect instanceof ReactiveEffect) { + fn = fn.effect.fn; + } + const _effect = new ReactiveEffect(fn, NOOP, () => { + if (_effect.dirty) { + _effect.run(); + } + }); + if (options) { + extend(_effect, options); + if (options.scope) recordEffectScope(_effect, options.scope); + } + if (!options || !options.lazy) { + _effect.run(); + } + const runner = _effect.run.bind(_effect); + runner.effect = _effect; + return runner; +} +function stop(runner) { + runner.effect.stop(); +} +var shouldTrack = true; +var pauseScheduleStack = 0; +var trackStack = []; +function pauseTracking() { + trackStack.push(shouldTrack); + shouldTrack = false; +} +function resetTracking() { + const last = trackStack.pop(); + shouldTrack = last === void 0 ? true : last; +} +function pauseScheduling() { + pauseScheduleStack++; +} +function resetScheduling() { + pauseScheduleStack--; + while (!pauseScheduleStack && queueEffectSchedulers.length) { + queueEffectSchedulers.shift()(); + } +} +function trackEffect(effect2, dep, debuggerEventExtraInfo) { + var _a; + if (dep.get(effect2) !== effect2._trackId) { + dep.set(effect2, effect2._trackId); + const oldDep = effect2.deps[effect2._depsLength]; + if (oldDep !== dep) { + if (oldDep) { + cleanupDepEffect(oldDep, effect2); + } + effect2.deps[effect2._depsLength++] = dep; + } else { + effect2._depsLength++; + } + if (true) { + (_a = effect2.onTrack) == null ? void 0 : _a.call(effect2, extend({ effect: effect2 }, debuggerEventExtraInfo)); + } + } +} +var queueEffectSchedulers = []; +function triggerEffects(dep, dirtyLevel, debuggerEventExtraInfo) { + var _a; + pauseScheduling(); + for (const effect2 of dep.keys()) { + let tracking; + if (effect2._dirtyLevel < dirtyLevel && (tracking != null ? tracking : tracking = dep.get(effect2) === effect2._trackId)) { + effect2._shouldSchedule || (effect2._shouldSchedule = effect2._dirtyLevel === 0); + effect2._dirtyLevel = dirtyLevel; + } + if (effect2._shouldSchedule && (tracking != null ? tracking : tracking = dep.get(effect2) === effect2._trackId)) { + if (true) { + (_a = effect2.onTrigger) == null ? void 0 : _a.call(effect2, extend({ effect: effect2 }, debuggerEventExtraInfo)); + } + effect2.trigger(); + if ((!effect2._runnings || effect2.allowRecurse) && effect2._dirtyLevel !== 2) { + effect2._shouldSchedule = false; + if (effect2.scheduler) { + queueEffectSchedulers.push(effect2.scheduler); + } + } + } + } + resetScheduling(); +} +var createDep = (cleanup, computed3) => { + const dep = /* @__PURE__ */ new Map(); + dep.cleanup = cleanup; + dep.computed = computed3; + return dep; +}; +var targetMap = /* @__PURE__ */ new WeakMap(); +var ITERATE_KEY = Symbol(true ? "iterate" : ""); +var MAP_KEY_ITERATE_KEY = Symbol(true ? "Map key iterate" : ""); +function track(target, type, key) { + if (shouldTrack && activeEffect) { + let depsMap = targetMap.get(target); + if (!depsMap) { + targetMap.set(target, depsMap = /* @__PURE__ */ new Map()); + } + let dep = depsMap.get(key); + if (!dep) { + depsMap.set(key, dep = createDep(() => depsMap.delete(key))); + } + trackEffect( + activeEffect, + dep, + true ? { + target, + type, + key + } : void 0 + ); + } +} +function trigger(target, type, key, newValue, oldValue, oldTarget) { + const depsMap = targetMap.get(target); + if (!depsMap) { + return; + } + let deps = []; + if (type === "clear") { + deps = [...depsMap.values()]; + } else if (key === "length" && isArray(target)) { + const newLength = Number(newValue); + depsMap.forEach((dep, key2) => { + if (key2 === "length" || !isSymbol(key2) && key2 >= newLength) { + deps.push(dep); + } + }); + } else { + if (key !== void 0) { + deps.push(depsMap.get(key)); + } + switch (type) { + case "add": + if (!isArray(target)) { + deps.push(depsMap.get(ITERATE_KEY)); + if (isMap(target)) { + deps.push(depsMap.get(MAP_KEY_ITERATE_KEY)); + } + } else if (isIntegerKey(key)) { + deps.push(depsMap.get("length")); + } + break; + case "delete": + if (!isArray(target)) { + deps.push(depsMap.get(ITERATE_KEY)); + if (isMap(target)) { + deps.push(depsMap.get(MAP_KEY_ITERATE_KEY)); + } + } + break; + case "set": + if (isMap(target)) { + deps.push(depsMap.get(ITERATE_KEY)); + } + break; + } + } + pauseScheduling(); + for (const dep of deps) { + if (dep) { + triggerEffects( + dep, + 4, + true ? { + target, + type, + key, + newValue, + oldValue, + oldTarget + } : void 0 + ); + } + } + resetScheduling(); +} +function getDepFromReactive(object, key) { + const depsMap = targetMap.get(object); + return depsMap && depsMap.get(key); +} +var isNonTrackableKeys = makeMap(`__proto__,__v_isRef,__isVue`); +var builtInSymbols = new Set( + Object.getOwnPropertyNames(Symbol).filter((key) => key !== "arguments" && key !== "caller").map((key) => Symbol[key]).filter(isSymbol) +); +var arrayInstrumentations = createArrayInstrumentations(); +function createArrayInstrumentations() { + const instrumentations = {}; + ["includes", "indexOf", "lastIndexOf"].forEach((key) => { + instrumentations[key] = function(...args) { + const arr = toRaw(this); + for (let i = 0, l = this.length; i < l; i++) { + track(arr, "get", i + ""); + } + const res = arr[key](...args); + if (res === -1 || res === false) { + return arr[key](...args.map(toRaw)); + } else { + return res; + } + }; + }); + ["push", "pop", "shift", "unshift", "splice"].forEach((key) => { + instrumentations[key] = function(...args) { + pauseTracking(); + pauseScheduling(); + const res = toRaw(this)[key].apply(this, args); + resetScheduling(); + resetTracking(); + return res; + }; + }); + return instrumentations; +} +function hasOwnProperty2(key) { + if (!isSymbol(key)) key = String(key); + const obj = toRaw(this); + track(obj, "has", key); + return obj.hasOwnProperty(key); +} +var BaseReactiveHandler = class { + constructor(_isReadonly = false, _isShallow = false) { + this._isReadonly = _isReadonly; + this._isShallow = _isShallow; + } + get(target, key, receiver) { + const isReadonly2 = this._isReadonly, isShallow2 = this._isShallow; + if (key === "__v_isReactive") { + return !isReadonly2; + } else if (key === "__v_isReadonly") { + return isReadonly2; + } else if (key === "__v_isShallow") { + return isShallow2; + } else if (key === "__v_raw") { + if (receiver === (isReadonly2 ? isShallow2 ? shallowReadonlyMap : readonlyMap : isShallow2 ? shallowReactiveMap : reactiveMap).get(target) || // receiver is not the reactive proxy, but has the same prototype + // this means the receiver is a user proxy of the reactive proxy + Object.getPrototypeOf(target) === Object.getPrototypeOf(receiver)) { + return target; + } + return; + } + const targetIsArray = isArray(target); + if (!isReadonly2) { + if (targetIsArray && hasOwn(arrayInstrumentations, key)) { + return Reflect.get(arrayInstrumentations, key, receiver); + } + if (key === "hasOwnProperty") { + return hasOwnProperty2; + } + } + const res = Reflect.get(target, key, receiver); + if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) { + return res; + } + if (!isReadonly2) { + track(target, "get", key); + } + if (isShallow2) { + return res; + } + if (isRef2(res)) { + return targetIsArray && isIntegerKey(key) ? res : res.value; + } + if (isObject(res)) { + return isReadonly2 ? readonly(res) : reactive(res); + } + return res; + } +}; +var MutableReactiveHandler = class extends BaseReactiveHandler { + constructor(isShallow2 = false) { + super(false, isShallow2); + } + set(target, key, value, receiver) { + let oldValue = target[key]; + if (!this._isShallow) { + const isOldValueReadonly = isReadonly(oldValue); + if (!isShallow(value) && !isReadonly(value)) { + oldValue = toRaw(oldValue); + value = toRaw(value); + } + if (!isArray(target) && isRef2(oldValue) && !isRef2(value)) { + if (isOldValueReadonly) { + return false; + } else { + oldValue.value = value; + return true; + } + } + } + const hadKey = isArray(target) && isIntegerKey(key) ? Number(key) < target.length : hasOwn(target, key); + const result = Reflect.set(target, key, value, receiver); + if (target === toRaw(receiver)) { + if (!hadKey) { + trigger(target, "add", key, value); + } else if (hasChanged(value, oldValue)) { + trigger(target, "set", key, value, oldValue); + } + } + return result; + } + deleteProperty(target, key) { + const hadKey = hasOwn(target, key); + const oldValue = target[key]; + const result = Reflect.deleteProperty(target, key); + if (result && hadKey) { + trigger(target, "delete", key, void 0, oldValue); + } + return result; + } + has(target, key) { + const result = Reflect.has(target, key); + if (!isSymbol(key) || !builtInSymbols.has(key)) { + track(target, "has", key); + } + return result; + } + ownKeys(target) { + track( + target, + "iterate", + isArray(target) ? "length" : ITERATE_KEY + ); + return Reflect.ownKeys(target); + } +}; +var ReadonlyReactiveHandler = class extends BaseReactiveHandler { + constructor(isShallow2 = false) { + super(true, isShallow2); + } + set(target, key) { + if (true) { + warn( + `Set operation on key "${String(key)}" failed: target is readonly.`, + target + ); + } + return true; + } + deleteProperty(target, key) { + if (true) { + warn( + `Delete operation on key "${String(key)}" failed: target is readonly.`, + target + ); + } + return true; + } +}; +var mutableHandlers = new MutableReactiveHandler(); +var readonlyHandlers = new ReadonlyReactiveHandler(); +var shallowReactiveHandlers = new MutableReactiveHandler( + true +); +var shallowReadonlyHandlers = new ReadonlyReactiveHandler(true); +var toShallow = (value) => value; +var getProto = (v) => Reflect.getPrototypeOf(v); +function get(target, key, isReadonly2 = false, isShallow2 = false) { + target = target["__v_raw"]; + const rawTarget = toRaw(target); + const rawKey = toRaw(key); + if (!isReadonly2) { + if (hasChanged(key, rawKey)) { + track(rawTarget, "get", key); + } + track(rawTarget, "get", rawKey); + } + const { has: has2 } = getProto(rawTarget); + const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive; + if (has2.call(rawTarget, key)) { + return wrap(target.get(key)); + } else if (has2.call(rawTarget, rawKey)) { + return wrap(target.get(rawKey)); + } else if (target !== rawTarget) { + target.get(key); + } +} +function has(key, isReadonly2 = false) { + const target = this["__v_raw"]; + const rawTarget = toRaw(target); + const rawKey = toRaw(key); + if (!isReadonly2) { + if (hasChanged(key, rawKey)) { + track(rawTarget, "has", key); + } + track(rawTarget, "has", rawKey); + } + return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey); +} +function size(target, isReadonly2 = false) { + target = target["__v_raw"]; + !isReadonly2 && track(toRaw(target), "iterate", ITERATE_KEY); + return Reflect.get(target, "size", target); +} +function add(value, _isShallow = false) { + if (!_isShallow && !isShallow(value) && !isReadonly(value)) { + value = toRaw(value); + } + const target = toRaw(this); + const proto = getProto(target); + const hadKey = proto.has.call(target, value); + if (!hadKey) { + target.add(value); + trigger(target, "add", value, value); + } + return this; +} +function set(key, value, _isShallow = false) { + if (!_isShallow && !isShallow(value) && !isReadonly(value)) { + value = toRaw(value); + } + const target = toRaw(this); + const { has: has2, get: get2 } = getProto(target); + let hadKey = has2.call(target, key); + if (!hadKey) { + key = toRaw(key); + hadKey = has2.call(target, key); + } else if (true) { + checkIdentityKeys(target, has2, key); + } + const oldValue = get2.call(target, key); + target.set(key, value); + if (!hadKey) { + trigger(target, "add", key, value); + } else if (hasChanged(value, oldValue)) { + trigger(target, "set", key, value, oldValue); + } + return this; +} +function deleteEntry(key) { + const target = toRaw(this); + const { has: has2, get: get2 } = getProto(target); + let hadKey = has2.call(target, key); + if (!hadKey) { + key = toRaw(key); + hadKey = has2.call(target, key); + } else if (true) { + checkIdentityKeys(target, has2, key); + } + const oldValue = get2 ? get2.call(target, key) : void 0; + const result = target.delete(key); + if (hadKey) { + trigger(target, "delete", key, void 0, oldValue); + } + return result; +} +function clear() { + const target = toRaw(this); + const hadItems = target.size !== 0; + const oldTarget = true ? isMap(target) ? new Map(target) : new Set(target) : void 0; + const result = target.clear(); + if (hadItems) { + trigger(target, "clear", void 0, void 0, oldTarget); + } + return result; +} +function createForEach(isReadonly2, isShallow2) { + return function forEach(callback, thisArg) { + const observed = this; + const target = observed["__v_raw"]; + const rawTarget = toRaw(target); + const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive; + !isReadonly2 && track(rawTarget, "iterate", ITERATE_KEY); + return target.forEach((value, key) => { + return callback.call(thisArg, wrap(value), wrap(key), observed); + }); + }; +} +function createIterableMethod(method, isReadonly2, isShallow2) { + return function(...args) { + const target = this["__v_raw"]; + const rawTarget = toRaw(target); + const targetIsMap = isMap(rawTarget); + const isPair = method === "entries" || method === Symbol.iterator && targetIsMap; + const isKeyOnly = method === "keys" && targetIsMap; + const innerIterator = target[method](...args); + const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive; + !isReadonly2 && track( + rawTarget, + "iterate", + isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY + ); + return { + // iterator protocol + next() { + const { value, done } = innerIterator.next(); + return done ? { value, done } : { + value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value), + done + }; + }, + // iterable protocol + [Symbol.iterator]() { + return this; + } + }; + }; +} +function createReadonlyMethod(type) { + return function(...args) { + if (true) { + const key = args[0] ? `on key "${args[0]}" ` : ``; + warn( + `${capitalize(type)} operation ${key}failed: target is readonly.`, + toRaw(this) + ); + } + return type === "delete" ? false : type === "clear" ? void 0 : this; + }; +} +function createInstrumentations() { + const mutableInstrumentations2 = { + get(key) { + return get(this, key); + }, + get size() { + return size(this); + }, + has, + add, + set, + delete: deleteEntry, + clear, + forEach: createForEach(false, false) + }; + const shallowInstrumentations2 = { + get(key) { + return get(this, key, false, true); + }, + get size() { + return size(this); + }, + has, + add(value) { + return add.call(this, value, true); + }, + set(key, value) { + return set.call(this, key, value, true); + }, + delete: deleteEntry, + clear, + forEach: createForEach(false, true) + }; + const readonlyInstrumentations2 = { + get(key) { + return get(this, key, true); + }, + get size() { + return size(this, true); + }, + has(key) { + return has.call(this, key, true); + }, + add: createReadonlyMethod("add"), + set: createReadonlyMethod("set"), + delete: createReadonlyMethod("delete"), + clear: createReadonlyMethod("clear"), + forEach: createForEach(true, false) + }; + const shallowReadonlyInstrumentations2 = { + get(key) { + return get(this, key, true, true); + }, + get size() { + return size(this, true); + }, + has(key) { + return has.call(this, key, true); + }, + add: createReadonlyMethod("add"), + set: createReadonlyMethod("set"), + delete: createReadonlyMethod("delete"), + clear: createReadonlyMethod("clear"), + forEach: createForEach(true, true) + }; + const iteratorMethods = [ + "keys", + "values", + "entries", + Symbol.iterator + ]; + iteratorMethods.forEach((method) => { + mutableInstrumentations2[method] = createIterableMethod(method, false, false); + readonlyInstrumentations2[method] = createIterableMethod(method, true, false); + shallowInstrumentations2[method] = createIterableMethod(method, false, true); + shallowReadonlyInstrumentations2[method] = createIterableMethod( + method, + true, + true + ); + }); + return [ + mutableInstrumentations2, + readonlyInstrumentations2, + shallowInstrumentations2, + shallowReadonlyInstrumentations2 + ]; +} +var [ + mutableInstrumentations, + readonlyInstrumentations, + shallowInstrumentations, + shallowReadonlyInstrumentations +] = createInstrumentations(); +function createInstrumentationGetter(isReadonly2, shallow) { + const instrumentations = shallow ? isReadonly2 ? shallowReadonlyInstrumentations : shallowInstrumentations : isReadonly2 ? readonlyInstrumentations : mutableInstrumentations; + return (target, key, receiver) => { + if (key === "__v_isReactive") { + return !isReadonly2; + } else if (key === "__v_isReadonly") { + return isReadonly2; + } else if (key === "__v_raw") { + return target; + } + return Reflect.get( + hasOwn(instrumentations, key) && key in target ? instrumentations : target, + key, + receiver + ); + }; +} +var mutableCollectionHandlers = { + get: createInstrumentationGetter(false, false) +}; +var shallowCollectionHandlers = { + get: createInstrumentationGetter(false, true) +}; +var readonlyCollectionHandlers = { + get: createInstrumentationGetter(true, false) +}; +var shallowReadonlyCollectionHandlers = { + get: createInstrumentationGetter(true, true) +}; +function checkIdentityKeys(target, has2, key) { + const rawKey = toRaw(key); + if (rawKey !== key && has2.call(target, rawKey)) { + const type = toRawType(target); + warn( + `Reactive ${type} contains both the raw and reactive versions of the same object${type === `Map` ? ` as keys` : ``}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.` + ); + } +} +var reactiveMap = /* @__PURE__ */ new WeakMap(); +var shallowReactiveMap = /* @__PURE__ */ new WeakMap(); +var readonlyMap = /* @__PURE__ */ new WeakMap(); +var shallowReadonlyMap = /* @__PURE__ */ new WeakMap(); +function targetTypeMap(rawType) { + switch (rawType) { + case "Object": + case "Array": + return 1; + case "Map": + case "Set": + case "WeakMap": + case "WeakSet": + return 2; + default: + return 0; + } +} +function getTargetType(value) { + return value["__v_skip"] || !Object.isExtensible(value) ? 0 : targetTypeMap(toRawType(value)); +} +function reactive(target) { + if (isReadonly(target)) { + return target; + } + return createReactiveObject( + target, + false, + mutableHandlers, + mutableCollectionHandlers, + reactiveMap + ); +} +function shallowReactive(target) { + return createReactiveObject( + target, + false, + shallowReactiveHandlers, + shallowCollectionHandlers, + shallowReactiveMap + ); +} +function readonly(target) { + return createReactiveObject( + target, + true, + readonlyHandlers, + readonlyCollectionHandlers, + readonlyMap + ); +} +function shallowReadonly(target) { + return createReactiveObject( + target, + true, + shallowReadonlyHandlers, + shallowReadonlyCollectionHandlers, + shallowReadonlyMap + ); +} +function createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) { + if (!isObject(target)) { + if (true) { + warn( + `value cannot be made ${isReadonly2 ? "readonly" : "reactive"}: ${String( + target + )}` + ); + } + return target; + } + if (target["__v_raw"] && !(isReadonly2 && target["__v_isReactive"])) { + return target; + } + const existingProxy = proxyMap.get(target); + if (existingProxy) { + return existingProxy; + } + const targetType = getTargetType(target); + if (targetType === 0) { + return target; + } + const proxy = new Proxy( + target, + targetType === 2 ? collectionHandlers : baseHandlers + ); + proxyMap.set(target, proxy); + return proxy; +} +function isReactive(value) { + if (isReadonly(value)) { + return isReactive(value["__v_raw"]); + } + return !!(value && value["__v_isReactive"]); +} +function isReadonly(value) { + return !!(value && value["__v_isReadonly"]); +} +function isShallow(value) { + return !!(value && value["__v_isShallow"]); +} +function isProxy(value) { + return value ? !!value["__v_raw"] : false; +} +function toRaw(observed) { + const raw = observed && observed["__v_raw"]; + return raw ? toRaw(raw) : observed; +} +function markRaw(value) { + if (Object.isExtensible(value)) { + def(value, "__v_skip", true); + } + return value; +} +var toReactive = (value) => isObject(value) ? reactive(value) : value; +var toReadonly = (value) => isObject(value) ? readonly(value) : value; +var COMPUTED_SIDE_EFFECT_WARN = `Computed is still dirty after getter evaluation, likely because a computed is mutating its own dependency in its getter. State mutations in computed getters should be avoided. Check the docs for more details: https://vuejs.org/guide/essentials/computed.html#getters-should-be-side-effect-free`; +var ComputedRefImpl = class { + constructor(getter, _setter, isReadonly2, isSSR) { + this.getter = getter; + this._setter = _setter; + this.dep = void 0; + this.__v_isRef = true; + this["__v_isReadonly"] = false; + this.effect = new ReactiveEffect( + () => getter(this._value), + () => triggerRefValue( + this, + this.effect._dirtyLevel === 2 ? 2 : 3 + ) + ); + this.effect.computed = this; + this.effect.active = this._cacheable = !isSSR; + this["__v_isReadonly"] = isReadonly2; + } + get value() { + const self2 = toRaw(this); + if ((!self2._cacheable || self2.effect.dirty) && hasChanged(self2._value, self2._value = self2.effect.run())) { + triggerRefValue(self2, 4); + } + trackRefValue(self2); + if (self2.effect._dirtyLevel >= 2) { + if (this._warnRecursive) { + warn(COMPUTED_SIDE_EFFECT_WARN, ` + +getter: `, this.getter); + } + triggerRefValue(self2, 2); + } + return self2._value; + } + set value(newValue) { + this._setter(newValue); + } + // #region polyfill _dirty for backward compatibility third party code for Vue <= 3.3.x + get _dirty() { + return this.effect.dirty; + } + set _dirty(v) { + this.effect.dirty = v; + } + // #endregion +}; +function computed(getterOrOptions, debugOptions, isSSR = false) { + let getter; + let setter; + const onlyGetter = isFunction(getterOrOptions); + if (onlyGetter) { + getter = getterOrOptions; + setter = true ? () => { + warn("Write operation failed: computed value is readonly"); + } : NOOP; + } else { + getter = getterOrOptions.get; + setter = getterOrOptions.set; + } + const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter, isSSR); + if (debugOptions && !isSSR) { + cRef.effect.onTrack = debugOptions.onTrack; + cRef.effect.onTrigger = debugOptions.onTrigger; + } + return cRef; +} +function trackRefValue(ref2) { + var _a; + if (shouldTrack && activeEffect) { + ref2 = toRaw(ref2); + trackEffect( + activeEffect, + (_a = ref2.dep) != null ? _a : ref2.dep = createDep( + () => ref2.dep = void 0, + ref2 instanceof ComputedRefImpl ? ref2 : void 0 + ), + true ? { + target: ref2, + type: "get", + key: "value" + } : void 0 + ); + } +} +function triggerRefValue(ref2, dirtyLevel = 4, newVal, oldVal) { + ref2 = toRaw(ref2); + const dep = ref2.dep; + if (dep) { + triggerEffects( + dep, + dirtyLevel, + true ? { + target: ref2, + type: "set", + key: "value", + newValue: newVal, + oldValue: oldVal + } : void 0 + ); + } +} +function isRef2(r) { + return !!(r && r.__v_isRef === true); +} +function ref(value) { + return createRef(value, false); +} +function shallowRef(value) { + return createRef(value, true); +} +function createRef(rawValue, shallow) { + if (isRef2(rawValue)) { + return rawValue; + } + return new RefImpl(rawValue, shallow); +} +var RefImpl = class { + constructor(value, __v_isShallow) { + this.__v_isShallow = __v_isShallow; + this.dep = void 0; + this.__v_isRef = true; + this._rawValue = __v_isShallow ? value : toRaw(value); + this._value = __v_isShallow ? value : toReactive(value); + } + get value() { + trackRefValue(this); + return this._value; + } + set value(newVal) { + const useDirectValue = this.__v_isShallow || isShallow(newVal) || isReadonly(newVal); + newVal = useDirectValue ? newVal : toRaw(newVal); + if (hasChanged(newVal, this._rawValue)) { + const oldVal = this._rawValue; + this._rawValue = newVal; + this._value = useDirectValue ? newVal : toReactive(newVal); + triggerRefValue(this, 4, newVal, oldVal); + } + } +}; +function triggerRef(ref2) { + triggerRefValue(ref2, 4, true ? ref2.value : void 0); +} +function unref(ref2) { + return isRef2(ref2) ? ref2.value : ref2; +} +function toValue(source) { + return isFunction(source) ? source() : unref(source); +} +var shallowUnwrapHandlers = { + get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)), + set: (target, key, value, receiver) => { + const oldValue = target[key]; + if (isRef2(oldValue) && !isRef2(value)) { + oldValue.value = value; + return true; + } else { + return Reflect.set(target, key, value, receiver); + } + } +}; +function proxyRefs(objectWithRefs) { + return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers); +} +var CustomRefImpl = class { + constructor(factory) { + this.dep = void 0; + this.__v_isRef = true; + const { get: get2, set: set2 } = factory( + () => trackRefValue(this), + () => triggerRefValue(this) + ); + this._get = get2; + this._set = set2; + } + get value() { + return this._get(); + } + set value(newVal) { + this._set(newVal); + } +}; +function customRef(factory) { + return new CustomRefImpl(factory); +} +function toRefs(object) { + if (!isProxy(object)) { + warn(`toRefs() expects a reactive object but received a plain one.`); + } + const ret = isArray(object) ? new Array(object.length) : {}; + for (const key in object) { + ret[key] = propertyToRef(object, key); + } + return ret; +} +var ObjectRefImpl = class { + constructor(_object, _key, _defaultValue) { + this._object = _object; + this._key = _key; + this._defaultValue = _defaultValue; + this.__v_isRef = true; + } + get value() { + const val = this._object[this._key]; + return val === void 0 ? this._defaultValue : val; + } + set value(newVal) { + this._object[this._key] = newVal; + } + get dep() { + return getDepFromReactive(toRaw(this._object), this._key); + } +}; +var GetterRefImpl = class { + constructor(_getter) { + this._getter = _getter; + this.__v_isRef = true; + this.__v_isReadonly = true; + } + get value() { + return this._getter(); + } +}; +function toRef(source, key, defaultValue) { + if (isRef2(source)) { + return source; + } else if (isFunction(source)) { + return new GetterRefImpl(source); + } else if (isObject(source) && arguments.length > 1) { + return propertyToRef(source, key, defaultValue); + } else { + return ref(source); + } +} +function propertyToRef(source, key, defaultValue) { + const val = source[key]; + return isRef2(val) ? val : new ObjectRefImpl(source, key, defaultValue); +} +var TrackOpTypes = { + "GET": "get", + "HAS": "has", + "ITERATE": "iterate" +}; +var TriggerOpTypes = { + "SET": "set", + "ADD": "add", + "DELETE": "delete", + "CLEAR": "clear" +}; + +// node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js +var stack = []; +function pushWarningContext(vnode) { + stack.push(vnode); +} +function popWarningContext() { + stack.pop(); +} +var isWarning = false; +function warn$1(msg, ...args) { + if (isWarning) return; + isWarning = true; + pauseTracking(); + const instance = stack.length ? stack[stack.length - 1].component : null; + const appWarnHandler = instance && instance.appContext.config.warnHandler; + const trace = getComponentTrace(); + if (appWarnHandler) { + callWithErrorHandling( + appWarnHandler, + instance, + 11, + [ + // eslint-disable-next-line no-restricted-syntax + msg + args.map((a) => { + var _a, _b; + return (_b = (_a = a.toString) == null ? void 0 : _a.call(a)) != null ? _b : JSON.stringify(a); + }).join(""), + instance && instance.proxy, + trace.map( + ({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>` + ).join("\n"), + trace + ] + ); + } else { + const warnArgs = [`[Vue warn]: ${msg}`, ...args]; + if (trace.length && // avoid spamming console during tests + true) { + warnArgs.push(` +`, ...formatTrace(trace)); + } + console.warn(...warnArgs); + } + resetTracking(); + isWarning = false; +} +function getComponentTrace() { + let currentVNode = stack[stack.length - 1]; + if (!currentVNode) { + return []; + } + const normalizedStack = []; + while (currentVNode) { + const last = normalizedStack[0]; + if (last && last.vnode === currentVNode) { + last.recurseCount++; + } else { + normalizedStack.push({ + vnode: currentVNode, + recurseCount: 0 + }); + } + const parentInstance = currentVNode.component && currentVNode.component.parent; + currentVNode = parentInstance && parentInstance.vnode; + } + return normalizedStack; +} +function formatTrace(trace) { + const logs = []; + trace.forEach((entry, i) => { + logs.push(...i === 0 ? [] : [` +`], ...formatTraceEntry(entry)); + }); + return logs; +} +function formatTraceEntry({ vnode, recurseCount }) { + const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``; + const isRoot = vnode.component ? vnode.component.parent == null : false; + const open = ` at <${formatComponentName( + vnode.component, + vnode.type, + isRoot + )}`; + const close = `>` + postfix; + return vnode.props ? [open, ...formatProps(vnode.props), close] : [open + close]; +} +function formatProps(props) { + const res = []; + const keys = Object.keys(props); + keys.slice(0, 3).forEach((key) => { + res.push(...formatProp(key, props[key])); + }); + if (keys.length > 3) { + res.push(` ...`); + } + return res; +} +function formatProp(key, value, raw) { + if (isString(value)) { + value = JSON.stringify(value); + return raw ? value : [`${key}=${value}`]; + } else if (typeof value === "number" || typeof value === "boolean" || value == null) { + return raw ? value : [`${key}=${value}`]; + } else if (isRef2(value)) { + value = formatProp(key, toRaw(value.value), true); + return raw ? value : [`${key}=Ref<`, value, `>`]; + } else if (isFunction(value)) { + return [`${key}=fn${value.name ? `<${value.name}>` : ``}`]; + } else { + value = toRaw(value); + return raw ? value : [`${key}=`, value]; + } +} +function assertNumber(val, type) { + if (false) return; + if (val === void 0) { + return; + } else if (typeof val !== "number") { + warn$1(`${type} is not a valid number - got ${JSON.stringify(val)}.`); + } else if (isNaN(val)) { + warn$1(`${type} is NaN - the duration expression might be incorrect.`); + } +} +var ErrorCodes = { + "SETUP_FUNCTION": 0, + "0": "SETUP_FUNCTION", + "RENDER_FUNCTION": 1, + "1": "RENDER_FUNCTION", + "WATCH_GETTER": 2, + "2": "WATCH_GETTER", + "WATCH_CALLBACK": 3, + "3": "WATCH_CALLBACK", + "WATCH_CLEANUP": 4, + "4": "WATCH_CLEANUP", + "NATIVE_EVENT_HANDLER": 5, + "5": "NATIVE_EVENT_HANDLER", + "COMPONENT_EVENT_HANDLER": 6, + "6": "COMPONENT_EVENT_HANDLER", + "VNODE_HOOK": 7, + "7": "VNODE_HOOK", + "DIRECTIVE_HOOK": 8, + "8": "DIRECTIVE_HOOK", + "TRANSITION_HOOK": 9, + "9": "TRANSITION_HOOK", + "APP_ERROR_HANDLER": 10, + "10": "APP_ERROR_HANDLER", + "APP_WARN_HANDLER": 11, + "11": "APP_WARN_HANDLER", + "FUNCTION_REF": 12, + "12": "FUNCTION_REF", + "ASYNC_COMPONENT_LOADER": 13, + "13": "ASYNC_COMPONENT_LOADER", + "SCHEDULER": 14, + "14": "SCHEDULER", + "COMPONENT_UPDATE": 15, + "15": "COMPONENT_UPDATE" +}; +var ErrorTypeStrings$1 = { + ["sp"]: "serverPrefetch hook", + ["bc"]: "beforeCreate hook", + ["c"]: "created hook", + ["bm"]: "beforeMount hook", + ["m"]: "mounted hook", + ["bu"]: "beforeUpdate hook", + ["u"]: "updated", + ["bum"]: "beforeUnmount hook", + ["um"]: "unmounted hook", + ["a"]: "activated hook", + ["da"]: "deactivated hook", + ["ec"]: "errorCaptured hook", + ["rtc"]: "renderTracked hook", + ["rtg"]: "renderTriggered hook", + [0]: "setup function", + [1]: "render function", + [2]: "watcher getter", + [3]: "watcher callback", + [4]: "watcher cleanup function", + [5]: "native event handler", + [6]: "component event handler", + [7]: "vnode hook", + [8]: "directive hook", + [9]: "transition hook", + [10]: "app errorHandler", + [11]: "app warnHandler", + [12]: "ref function", + [13]: "async component loader", + [14]: "scheduler flush", + [15]: "component update" +}; +function callWithErrorHandling(fn, instance, type, args) { + try { + return args ? fn(...args) : fn(); + } catch (err) { + handleError(err, instance, type); + } +} +function callWithAsyncErrorHandling(fn, instance, type, args) { + if (isFunction(fn)) { + const res = callWithErrorHandling(fn, instance, type, args); + if (res && isPromise(res)) { + res.catch((err) => { + handleError(err, instance, type); + }); + } + return res; + } + if (isArray(fn)) { + const values = []; + for (let i = 0; i < fn.length; i++) { + values.push(callWithAsyncErrorHandling(fn[i], instance, type, args)); + } + return values; + } else if (true) { + warn$1( + `Invalid value type passed to callWithAsyncErrorHandling(): ${typeof fn}` + ); + } +} +function handleError(err, instance, type, throwInDev = true) { + const contextVNode = instance ? instance.vnode : null; + if (instance) { + let cur = instance.parent; + const exposedInstance = instance.proxy; + const errorInfo = true ? ErrorTypeStrings$1[type] : `https://vuejs.org/error-reference/#runtime-${type}`; + while (cur) { + const errorCapturedHooks = cur.ec; + if (errorCapturedHooks) { + for (let i = 0; i < errorCapturedHooks.length; i++) { + if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) { + return; + } + } + } + cur = cur.parent; + } + const appErrorHandler = instance.appContext.config.errorHandler; + if (appErrorHandler) { + pauseTracking(); + callWithErrorHandling( + appErrorHandler, + null, + 10, + [err, exposedInstance, errorInfo] + ); + resetTracking(); + return; + } + } + logError(err, type, contextVNode, throwInDev); +} +function logError(err, type, contextVNode, throwInDev = true) { + if (true) { + const info = ErrorTypeStrings$1[type]; + if (contextVNode) { + pushWarningContext(contextVNode); + } + warn$1(`Unhandled error${info ? ` during execution of ${info}` : ``}`); + if (contextVNode) { + popWarningContext(); + } + if (throwInDev) { + throw err; + } else { + console.error(err); + } + } else { + console.error(err); + } +} +var isFlushing = false; +var isFlushPending = false; +var queue = []; +var flushIndex = 0; +var pendingPostFlushCbs = []; +var activePostFlushCbs = null; +var postFlushIndex = 0; +var resolvedPromise = Promise.resolve(); +var currentFlushPromise = null; +var RECURSION_LIMIT = 100; +function nextTick(fn) { + const p2 = currentFlushPromise || resolvedPromise; + return fn ? p2.then(this ? fn.bind(this) : fn) : p2; +} +function findInsertionIndex(id) { + let start = flushIndex + 1; + let end = queue.length; + while (start < end) { + const middle = start + end >>> 1; + const middleJob = queue[middle]; + const middleJobId = getId(middleJob); + if (middleJobId < id || middleJobId === id && middleJob.pre) { + start = middle + 1; + } else { + end = middle; + } + } + return start; +} +function queueJob(job) { + if (!queue.length || !queue.includes( + job, + isFlushing && job.allowRecurse ? flushIndex + 1 : flushIndex + )) { + if (job.id == null) { + queue.push(job); + } else { + queue.splice(findInsertionIndex(job.id), 0, job); + } + queueFlush(); + } +} +function queueFlush() { + if (!isFlushing && !isFlushPending) { + isFlushPending = true; + currentFlushPromise = resolvedPromise.then(flushJobs); + } +} +function invalidateJob(job) { + const i = queue.indexOf(job); + if (i > flushIndex) { + queue.splice(i, 1); + } +} +function queuePostFlushCb(cb) { + if (!isArray(cb)) { + if (!activePostFlushCbs || !activePostFlushCbs.includes( + cb, + cb.allowRecurse ? postFlushIndex + 1 : postFlushIndex + )) { + pendingPostFlushCbs.push(cb); + } + } else { + pendingPostFlushCbs.push(...cb); + } + queueFlush(); +} +function flushPreFlushCbs(instance, seen, i = isFlushing ? flushIndex + 1 : 0) { + if (true) { + seen = seen || /* @__PURE__ */ new Map(); + } + for (; i < queue.length; i++) { + const cb = queue[i]; + if (cb && cb.pre) { + if (instance && cb.id !== instance.uid) { + continue; + } + if (checkRecursiveUpdates(seen, cb)) { + continue; + } + queue.splice(i, 1); + i--; + cb(); + } + } +} +function flushPostFlushCbs(seen) { + if (pendingPostFlushCbs.length) { + const deduped = [...new Set(pendingPostFlushCbs)].sort( + (a, b) => getId(a) - getId(b) + ); + pendingPostFlushCbs.length = 0; + if (activePostFlushCbs) { + activePostFlushCbs.push(...deduped); + return; + } + activePostFlushCbs = deduped; + if (true) { + seen = seen || /* @__PURE__ */ new Map(); + } + for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) { + const cb = activePostFlushCbs[postFlushIndex]; + if (checkRecursiveUpdates(seen, cb)) { + continue; + } + if (cb.active !== false) cb(); + } + activePostFlushCbs = null; + postFlushIndex = 0; + } +} +var getId = (job) => job.id == null ? Infinity : job.id; +var comparator = (a, b) => { + const diff = getId(a) - getId(b); + if (diff === 0) { + if (a.pre && !b.pre) return -1; + if (b.pre && !a.pre) return 1; + } + return diff; +}; +function flushJobs(seen) { + isFlushPending = false; + isFlushing = true; + if (true) { + seen = seen || /* @__PURE__ */ new Map(); + } + queue.sort(comparator); + const check = true ? (job) => checkRecursiveUpdates(seen, job) : NOOP; + try { + for (flushIndex = 0; flushIndex < queue.length; flushIndex++) { + const job = queue[flushIndex]; + if (job && job.active !== false) { + if (check(job)) { + continue; + } + callWithErrorHandling( + job, + job.i, + job.i ? 15 : 14 + ); + } + } + } finally { + flushIndex = 0; + queue.length = 0; + flushPostFlushCbs(seen); + isFlushing = false; + currentFlushPromise = null; + if (queue.length || pendingPostFlushCbs.length) { + flushJobs(seen); + } + } +} +function checkRecursiveUpdates(seen, fn) { + if (!seen.has(fn)) { + seen.set(fn, 1); + } else { + const count = seen.get(fn); + if (count > RECURSION_LIMIT) { + const instance = fn.i; + const componentName = instance && getComponentName(instance.type); + handleError( + `Maximum recursive updates exceeded${componentName ? ` in component <${componentName}>` : ``}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`, + null, + 10 + ); + return true; + } else { + seen.set(fn, count + 1); + } + } +} +var isHmrUpdating = false; +var hmrDirtyComponents = /* @__PURE__ */ new Map(); +if (true) { + getGlobalThis().__VUE_HMR_RUNTIME__ = { + createRecord: tryWrap(createRecord), + rerender: tryWrap(rerender), + reload: tryWrap(reload) + }; +} +var map = /* @__PURE__ */ new Map(); +function registerHMR(instance) { + const id = instance.type.__hmrId; + let record = map.get(id); + if (!record) { + createRecord(id, instance.type); + record = map.get(id); + } + record.instances.add(instance); +} +function unregisterHMR(instance) { + map.get(instance.type.__hmrId).instances.delete(instance); +} +function createRecord(id, initialDef) { + if (map.has(id)) { + return false; + } + map.set(id, { + initialDef: normalizeClassComponent(initialDef), + instances: /* @__PURE__ */ new Set() + }); + return true; +} +function normalizeClassComponent(component) { + return isClassComponent(component) ? component.__vccOpts : component; +} +function rerender(id, newRender) { + const record = map.get(id); + if (!record) { + return; + } + record.initialDef.render = newRender; + [...record.instances].forEach((instance) => { + if (newRender) { + instance.render = newRender; + normalizeClassComponent(instance.type).render = newRender; + } + instance.renderCache = []; + isHmrUpdating = true; + instance.effect.dirty = true; + instance.update(); + isHmrUpdating = false; + }); +} +function reload(id, newComp) { + const record = map.get(id); + if (!record) return; + newComp = normalizeClassComponent(newComp); + updateComponentDef(record.initialDef, newComp); + const instances = [...record.instances]; + for (let i = 0; i < instances.length; i++) { + const instance = instances[i]; + const oldComp = normalizeClassComponent(instance.type); + let dirtyInstances = hmrDirtyComponents.get(oldComp); + if (!dirtyInstances) { + if (oldComp !== record.initialDef) { + updateComponentDef(oldComp, newComp); + } + hmrDirtyComponents.set(oldComp, dirtyInstances = /* @__PURE__ */ new Set()); + } + dirtyInstances.add(instance); + instance.appContext.propsCache.delete(instance.type); + instance.appContext.emitsCache.delete(instance.type); + instance.appContext.optionsCache.delete(instance.type); + if (instance.ceReload) { + dirtyInstances.add(instance); + instance.ceReload(newComp.styles); + dirtyInstances.delete(instance); + } else if (instance.parent) { + instance.parent.effect.dirty = true; + queueJob(() => { + instance.parent.update(); + dirtyInstances.delete(instance); + }); + } else if (instance.appContext.reload) { + instance.appContext.reload(); + } else if (typeof window !== "undefined") { + window.location.reload(); + } else { + console.warn( + "[HMR] Root or manually mounted instance modified. Full reload required." + ); + } + } + queuePostFlushCb(() => { + hmrDirtyComponents.clear(); + }); +} +function updateComponentDef(oldComp, newComp) { + extend(oldComp, newComp); + for (const key in oldComp) { + if (key !== "__file" && !(key in newComp)) { + delete oldComp[key]; + } + } +} +function tryWrap(fn) { + return (id, arg) => { + try { + return fn(id, arg); + } catch (e) { + console.error(e); + console.warn( + `[HMR] Something went wrong during Vue component hot-reload. Full reload required.` + ); + } + }; +} +var devtools$1; +var buffer = []; +var devtoolsNotInstalled = false; +function emit$1(event, ...args) { + if (devtools$1) { + devtools$1.emit(event, ...args); + } else if (!devtoolsNotInstalled) { + buffer.push({ event, args }); + } +} +function setDevtoolsHook$1(hook, target) { + var _a, _b; + devtools$1 = hook; + if (devtools$1) { + devtools$1.enabled = true; + buffer.forEach(({ event, args }) => devtools$1.emit(event, ...args)); + buffer = []; + } else if ( + // handle late devtools injection - only do this if we are in an actual + // browser environment to avoid the timer handle stalling test runner exit + // (#4815) + typeof window !== "undefined" && // some envs mock window but not fully + window.HTMLElement && // also exclude jsdom + // eslint-disable-next-line no-restricted-syntax + !((_b = (_a = window.navigator) == null ? void 0 : _a.userAgent) == null ? void 0 : _b.includes("jsdom")) + ) { + const replay = target.__VUE_DEVTOOLS_HOOK_REPLAY__ = target.__VUE_DEVTOOLS_HOOK_REPLAY__ || []; + replay.push((newHook) => { + setDevtoolsHook$1(newHook, target); + }); + setTimeout(() => { + if (!devtools$1) { + target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null; + devtoolsNotInstalled = true; + buffer = []; + } + }, 3e3); + } else { + devtoolsNotInstalled = true; + buffer = []; + } +} +function devtoolsInitApp(app, version2) { + emit$1("app:init", app, version2, { + Fragment, + Text, + Comment, + Static + }); +} +function devtoolsUnmountApp(app) { + emit$1("app:unmount", app); +} +var devtoolsComponentAdded = createDevtoolsComponentHook( + "component:added" + /* COMPONENT_ADDED */ +); +var devtoolsComponentUpdated = createDevtoolsComponentHook( + "component:updated" + /* COMPONENT_UPDATED */ +); +var _devtoolsComponentRemoved = createDevtoolsComponentHook( + "component:removed" + /* COMPONENT_REMOVED */ +); +var devtoolsComponentRemoved = (component) => { + if (devtools$1 && typeof devtools$1.cleanupBuffer === "function" && // remove the component if it wasn't buffered + !devtools$1.cleanupBuffer(component)) { + _devtoolsComponentRemoved(component); + } +}; +function createDevtoolsComponentHook(hook) { + return (component) => { + emit$1( + hook, + component.appContext.app, + component.uid, + component.parent ? component.parent.uid : void 0, + component + ); + }; +} +var devtoolsPerfStart = createDevtoolsPerformanceHook( + "perf:start" + /* PERFORMANCE_START */ +); +var devtoolsPerfEnd = createDevtoolsPerformanceHook( + "perf:end" + /* PERFORMANCE_END */ +); +function createDevtoolsPerformanceHook(hook) { + return (component, type, time) => { + emit$1(hook, component.appContext.app, component.uid, component, type, time); + }; +} +function devtoolsComponentEmit(component, event, params) { + emit$1( + "component:emit", + component.appContext.app, + component, + event, + params + ); +} +var currentRenderingInstance = null; +var currentScopeId = null; +function setCurrentRenderingInstance(instance) { + const prev = currentRenderingInstance; + currentRenderingInstance = instance; + currentScopeId = instance && instance.type.__scopeId || null; + return prev; +} +function pushScopeId(id) { + currentScopeId = id; +} +function popScopeId() { + currentScopeId = null; +} +var withScopeId = (_id) => withCtx; +function withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot) { + if (!ctx) return fn; + if (fn._n) { + return fn; + } + const renderFnWithContext = (...args) => { + if (renderFnWithContext._d) { + setBlockTracking(-1); + } + const prevInstance = setCurrentRenderingInstance(ctx); + let res; + try { + res = fn(...args); + } finally { + setCurrentRenderingInstance(prevInstance); + if (renderFnWithContext._d) { + setBlockTracking(1); + } + } + if (true) { + devtoolsComponentUpdated(ctx); + } + return res; + }; + renderFnWithContext._n = true; + renderFnWithContext._c = true; + renderFnWithContext._d = true; + return renderFnWithContext; +} +function validateDirectiveName(name) { + if (isBuiltInDirective(name)) { + warn$1("Do not use built-in directive ids as custom directive id: " + name); + } +} +function withDirectives(vnode, directives) { + if (currentRenderingInstance === null) { + warn$1(`withDirectives can only be used inside render functions.`); + return vnode; + } + const instance = getComponentPublicInstance(currentRenderingInstance); + const bindings = vnode.dirs || (vnode.dirs = []); + for (let i = 0; i < directives.length; i++) { + let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i]; + if (dir) { + if (isFunction(dir)) { + dir = { + mounted: dir, + updated: dir + }; + } + if (dir.deep) { + traverse(value); + } + bindings.push({ + dir, + instance, + value, + oldValue: void 0, + arg, + modifiers + }); + } + } + return vnode; +} +function invokeDirectiveHook(vnode, prevVNode, instance, name) { + const bindings = vnode.dirs; + const oldBindings = prevVNode && prevVNode.dirs; + for (let i = 0; i < bindings.length; i++) { + const binding = bindings[i]; + if (oldBindings) { + binding.oldValue = oldBindings[i].value; + } + let hook = binding.dir[name]; + if (hook) { + pauseTracking(); + callWithAsyncErrorHandling(hook, instance, 8, [ + vnode.el, + binding, + vnode, + prevVNode + ]); + resetTracking(); + } + } +} +var leaveCbKey = Symbol("_leaveCb"); +var enterCbKey = Symbol("_enterCb"); +function useTransitionState() { + const state = { + isMounted: false, + isLeaving: false, + isUnmounting: false, + leavingVNodes: /* @__PURE__ */ new Map() + }; + onMounted(() => { + state.isMounted = true; + }); + onBeforeUnmount(() => { + state.isUnmounting = true; + }); + return state; +} +var TransitionHookValidator = [Function, Array]; +var BaseTransitionPropsValidators = { + mode: String, + appear: Boolean, + persisted: Boolean, + // enter + onBeforeEnter: TransitionHookValidator, + onEnter: TransitionHookValidator, + onAfterEnter: TransitionHookValidator, + onEnterCancelled: TransitionHookValidator, + // leave + onBeforeLeave: TransitionHookValidator, + onLeave: TransitionHookValidator, + onAfterLeave: TransitionHookValidator, + onLeaveCancelled: TransitionHookValidator, + // appear + onBeforeAppear: TransitionHookValidator, + onAppear: TransitionHookValidator, + onAfterAppear: TransitionHookValidator, + onAppearCancelled: TransitionHookValidator +}; +var recursiveGetSubtree = (instance) => { + const subTree = instance.subTree; + return subTree.component ? recursiveGetSubtree(subTree.component) : subTree; +}; +var BaseTransitionImpl = { + name: `BaseTransition`, + props: BaseTransitionPropsValidators, + setup(props, { slots }) { + const instance = getCurrentInstance(); + const state = useTransitionState(); + return () => { + const children = slots.default && getTransitionRawChildren(slots.default(), true); + if (!children || !children.length) { + return; + } + let child = children[0]; + if (children.length > 1) { + let hasFound = false; + for (const c of children) { + if (c.type !== Comment) { + if (hasFound) { + warn$1( + " can only be used on a single element or component. Use for lists." + ); + break; + } + child = c; + hasFound = true; + if (false) break; + } + } + } + const rawProps = toRaw(props); + const { mode } = rawProps; + if (mode && mode !== "in-out" && mode !== "out-in" && mode !== "default") { + warn$1(`invalid mode: ${mode}`); + } + if (state.isLeaving) { + return emptyPlaceholder(child); + } + const innerChild = getKeepAliveChild(child); + if (!innerChild) { + return emptyPlaceholder(child); + } + let enterHooks = resolveTransitionHooks( + innerChild, + rawProps, + state, + instance, + // #11061, ensure enterHooks is fresh after clone + (hooks) => enterHooks = hooks + ); + setTransitionHooks(innerChild, enterHooks); + const oldChild = instance.subTree; + const oldInnerChild = oldChild && getKeepAliveChild(oldChild); + if (oldInnerChild && oldInnerChild.type !== Comment && !isSameVNodeType(innerChild, oldInnerChild) && recursiveGetSubtree(instance).type !== Comment) { + const leavingHooks = resolveTransitionHooks( + oldInnerChild, + rawProps, + state, + instance + ); + setTransitionHooks(oldInnerChild, leavingHooks); + if (mode === "out-in" && innerChild.type !== Comment) { + state.isLeaving = true; + leavingHooks.afterLeave = () => { + state.isLeaving = false; + if (instance.update.active !== false) { + instance.effect.dirty = true; + instance.update(); + } + }; + return emptyPlaceholder(child); + } else if (mode === "in-out" && innerChild.type !== Comment) { + leavingHooks.delayLeave = (el, earlyRemove, delayedLeave) => { + const leavingVNodesCache = getLeavingNodesForType( + state, + oldInnerChild + ); + leavingVNodesCache[String(oldInnerChild.key)] = oldInnerChild; + el[leaveCbKey] = () => { + earlyRemove(); + el[leaveCbKey] = void 0; + delete enterHooks.delayedLeave; + }; + enterHooks.delayedLeave = delayedLeave; + }; + } + } + return child; + }; + } +}; +var BaseTransition = BaseTransitionImpl; +function getLeavingNodesForType(state, vnode) { + const { leavingVNodes } = state; + let leavingVNodesCache = leavingVNodes.get(vnode.type); + if (!leavingVNodesCache) { + leavingVNodesCache = /* @__PURE__ */ Object.create(null); + leavingVNodes.set(vnode.type, leavingVNodesCache); + } + return leavingVNodesCache; +} +function resolveTransitionHooks(vnode, props, state, instance, postClone) { + const { + appear, + mode, + persisted = false, + onBeforeEnter, + onEnter, + onAfterEnter, + onEnterCancelled, + onBeforeLeave, + onLeave, + onAfterLeave, + onLeaveCancelled, + onBeforeAppear, + onAppear, + onAfterAppear, + onAppearCancelled + } = props; + const key = String(vnode.key); + const leavingVNodesCache = getLeavingNodesForType(state, vnode); + const callHook3 = (hook, args) => { + hook && callWithAsyncErrorHandling( + hook, + instance, + 9, + args + ); + }; + const callAsyncHook = (hook, args) => { + const done = args[1]; + callHook3(hook, args); + if (isArray(hook)) { + if (hook.every((hook2) => hook2.length <= 1)) done(); + } else if (hook.length <= 1) { + done(); + } + }; + const hooks = { + mode, + persisted, + beforeEnter(el) { + let hook = onBeforeEnter; + if (!state.isMounted) { + if (appear) { + hook = onBeforeAppear || onBeforeEnter; + } else { + return; + } + } + if (el[leaveCbKey]) { + el[leaveCbKey]( + true + /* cancelled */ + ); + } + const leavingVNode = leavingVNodesCache[key]; + if (leavingVNode && isSameVNodeType(vnode, leavingVNode) && leavingVNode.el[leaveCbKey]) { + leavingVNode.el[leaveCbKey](); + } + callHook3(hook, [el]); + }, + enter(el) { + let hook = onEnter; + let afterHook = onAfterEnter; + let cancelHook = onEnterCancelled; + if (!state.isMounted) { + if (appear) { + hook = onAppear || onEnter; + afterHook = onAfterAppear || onAfterEnter; + cancelHook = onAppearCancelled || onEnterCancelled; + } else { + return; + } + } + let called = false; + const done = el[enterCbKey] = (cancelled) => { + if (called) return; + called = true; + if (cancelled) { + callHook3(cancelHook, [el]); + } else { + callHook3(afterHook, [el]); + } + if (hooks.delayedLeave) { + hooks.delayedLeave(); + } + el[enterCbKey] = void 0; + }; + if (hook) { + callAsyncHook(hook, [el, done]); + } else { + done(); + } + }, + leave(el, remove2) { + const key2 = String(vnode.key); + if (el[enterCbKey]) { + el[enterCbKey]( + true + /* cancelled */ + ); + } + if (state.isUnmounting) { + return remove2(); + } + callHook3(onBeforeLeave, [el]); + let called = false; + const done = el[leaveCbKey] = (cancelled) => { + if (called) return; + called = true; + remove2(); + if (cancelled) { + callHook3(onLeaveCancelled, [el]); + } else { + callHook3(onAfterLeave, [el]); + } + el[leaveCbKey] = void 0; + if (leavingVNodesCache[key2] === vnode) { + delete leavingVNodesCache[key2]; + } + }; + leavingVNodesCache[key2] = vnode; + if (onLeave) { + callAsyncHook(onLeave, [el, done]); + } else { + done(); + } + }, + clone(vnode2) { + const hooks2 = resolveTransitionHooks( + vnode2, + props, + state, + instance, + postClone + ); + if (postClone) postClone(hooks2); + return hooks2; + } + }; + return hooks; +} +function emptyPlaceholder(vnode) { + if (isKeepAlive(vnode)) { + vnode = cloneVNode(vnode); + vnode.children = null; + return vnode; + } +} +function getKeepAliveChild(vnode) { + if (!isKeepAlive(vnode)) { + return vnode; + } + if (vnode.component) { + return vnode.component.subTree; + } + const { shapeFlag, children } = vnode; + if (children) { + if (shapeFlag & 16) { + return children[0]; + } + if (shapeFlag & 32 && isFunction(children.default)) { + return children.default(); + } + } +} +function setTransitionHooks(vnode, hooks) { + if (vnode.shapeFlag & 6 && vnode.component) { + setTransitionHooks(vnode.component.subTree, hooks); + } else if (vnode.shapeFlag & 128) { + vnode.ssContent.transition = hooks.clone(vnode.ssContent); + vnode.ssFallback.transition = hooks.clone(vnode.ssFallback); + } else { + vnode.transition = hooks; + } +} +function getTransitionRawChildren(children, keepComment = false, parentKey) { + let ret = []; + let keyedFragmentCount = 0; + for (let i = 0; i < children.length; i++) { + let child = children[i]; + const key = parentKey == null ? child.key : String(parentKey) + String(child.key != null ? child.key : i); + if (child.type === Fragment) { + if (child.patchFlag & 128) keyedFragmentCount++; + ret = ret.concat( + getTransitionRawChildren(child.children, keepComment, key) + ); + } else if (keepComment || child.type !== Comment) { + ret.push(key != null ? cloneVNode(child, { key }) : child); + } + } + if (keyedFragmentCount > 1) { + for (let i = 0; i < ret.length; i++) { + ret[i].patchFlag = -2; + } + } + return ret; +} +function defineComponent(options, extraOptions) { + return isFunction(options) ? ( + // #8326: extend call and options.name access are considered side-effects + // by Rollup, so we have to wrap it in a pure-annotated IIFE. + (() => extend({ name: options.name }, extraOptions, { setup: options }))() + ) : options; +} +var isAsyncWrapper = (i) => !!i.type.__asyncLoader; +function defineAsyncComponent(source) { + if (isFunction(source)) { + source = { loader: source }; + } + const { + loader, + loadingComponent, + errorComponent, + delay = 200, + timeout, + // undefined = never times out + suspensible = true, + onError: userOnError + } = source; + let pendingRequest = null; + let resolvedComp; + let retries = 0; + const retry = () => { + retries++; + pendingRequest = null; + return load(); + }; + const load = () => { + let thisRequest; + return pendingRequest || (thisRequest = pendingRequest = loader().catch((err) => { + err = err instanceof Error ? err : new Error(String(err)); + if (userOnError) { + return new Promise((resolve2, reject) => { + const userRetry = () => resolve2(retry()); + const userFail = () => reject(err); + userOnError(err, userRetry, userFail, retries + 1); + }); + } else { + throw err; + } + }).then((comp) => { + if (thisRequest !== pendingRequest && pendingRequest) { + return pendingRequest; + } + if (!comp) { + warn$1( + `Async component loader resolved to undefined. If you are using retry(), make sure to return its return value.` + ); + } + if (comp && (comp.__esModule || comp[Symbol.toStringTag] === "Module")) { + comp = comp.default; + } + if (comp && !isObject(comp) && !isFunction(comp)) { + throw new Error(`Invalid async component load result: ${comp}`); + } + resolvedComp = comp; + return comp; + })); + }; + return defineComponent({ + name: "AsyncComponentWrapper", + __asyncLoader: load, + get __asyncResolved() { + return resolvedComp; + }, + setup() { + const instance = currentInstance; + if (resolvedComp) { + return () => createInnerComp(resolvedComp, instance); + } + const onError = (err) => { + pendingRequest = null; + handleError( + err, + instance, + 13, + !errorComponent + ); + }; + if (suspensible && instance.suspense || isInSSRComponentSetup) { + return load().then((comp) => { + return () => createInnerComp(comp, instance); + }).catch((err) => { + onError(err); + return () => errorComponent ? createVNode(errorComponent, { + error: err + }) : null; + }); + } + const loaded = ref(false); + const error = ref(); + const delayed = ref(!!delay); + if (delay) { + setTimeout(() => { + delayed.value = false; + }, delay); + } + if (timeout != null) { + setTimeout(() => { + if (!loaded.value && !error.value) { + const err = new Error( + `Async component timed out after ${timeout}ms.` + ); + onError(err); + error.value = err; + } + }, timeout); + } + load().then(() => { + loaded.value = true; + if (instance.parent && isKeepAlive(instance.parent.vnode)) { + instance.parent.effect.dirty = true; + queueJob(instance.parent.update); + } + }).catch((err) => { + onError(err); + error.value = err; + }); + return () => { + if (loaded.value && resolvedComp) { + return createInnerComp(resolvedComp, instance); + } else if (error.value && errorComponent) { + return createVNode(errorComponent, { + error: error.value + }); + } else if (loadingComponent && !delayed.value) { + return createVNode(loadingComponent); + } + }; + } + }); +} +function createInnerComp(comp, parent) { + const { ref: ref2, props, children, ce } = parent.vnode; + const vnode = createVNode(comp, props, children); + vnode.ref = ref2; + vnode.ce = ce; + delete parent.vnode.ce; + return vnode; +} +var isKeepAlive = (vnode) => vnode.type.__isKeepAlive; +var KeepAliveImpl = { + name: `KeepAlive`, + // Marker for special handling inside the renderer. We are not using a === + // check directly on KeepAlive in the renderer, because importing it directly + // would prevent it from being tree-shaken. + __isKeepAlive: true, + props: { + include: [String, RegExp, Array], + exclude: [String, RegExp, Array], + max: [String, Number] + }, + setup(props, { slots }) { + const instance = getCurrentInstance(); + const sharedContext = instance.ctx; + if (!sharedContext.renderer) { + return () => { + const children = slots.default && slots.default(); + return children && children.length === 1 ? children[0] : children; + }; + } + const cache = /* @__PURE__ */ new Map(); + const keys = /* @__PURE__ */ new Set(); + let current = null; + if (true) { + instance.__v_cache = cache; + } + const parentSuspense = instance.suspense; + const { + renderer: { + p: patch, + m: move, + um: _unmount, + o: { createElement } + } + } = sharedContext; + const storageContainer = createElement("div"); + sharedContext.activate = (vnode, container, anchor, namespace, optimized) => { + const instance2 = vnode.component; + move(vnode, container, anchor, 0, parentSuspense); + patch( + instance2.vnode, + vnode, + container, + anchor, + instance2, + parentSuspense, + namespace, + vnode.slotScopeIds, + optimized + ); + queuePostRenderEffect(() => { + instance2.isDeactivated = false; + if (instance2.a) { + invokeArrayFns(instance2.a); + } + const vnodeHook = vnode.props && vnode.props.onVnodeMounted; + if (vnodeHook) { + invokeVNodeHook(vnodeHook, instance2.parent, vnode); + } + }, parentSuspense); + if (true) { + devtoolsComponentAdded(instance2); + } + }; + sharedContext.deactivate = (vnode) => { + const instance2 = vnode.component; + invalidateMount(instance2.m); + invalidateMount(instance2.a); + move(vnode, storageContainer, null, 1, parentSuspense); + queuePostRenderEffect(() => { + if (instance2.da) { + invokeArrayFns(instance2.da); + } + const vnodeHook = vnode.props && vnode.props.onVnodeUnmounted; + if (vnodeHook) { + invokeVNodeHook(vnodeHook, instance2.parent, vnode); + } + instance2.isDeactivated = true; + }, parentSuspense); + if (true) { + devtoolsComponentAdded(instance2); + } + }; + function unmount(vnode) { + resetShapeFlag(vnode); + _unmount(vnode, instance, parentSuspense, true); + } + function pruneCache(filter) { + cache.forEach((vnode, key) => { + const name = getComponentName(vnode.type); + if (name && (!filter || !filter(name))) { + pruneCacheEntry(key); + } + }); + } + function pruneCacheEntry(key) { + const cached = cache.get(key); + if (cached && (!current || !isSameVNodeType(cached, current))) { + unmount(cached); + } else if (current) { + resetShapeFlag(current); + } + cache.delete(key); + keys.delete(key); + } + watch( + () => [props.include, props.exclude], + ([include, exclude]) => { + include && pruneCache((name) => matches(include, name)); + exclude && pruneCache((name) => !matches(exclude, name)); + }, + // prune post-render after `current` has been updated + { flush: "post", deep: true } + ); + let pendingCacheKey = null; + const cacheSubtree = () => { + if (pendingCacheKey != null) { + if (isSuspense(instance.subTree.type)) { + queuePostRenderEffect(() => { + cache.set(pendingCacheKey, getInnerChild(instance.subTree)); + }, instance.subTree.suspense); + } else { + cache.set(pendingCacheKey, getInnerChild(instance.subTree)); + } + } + }; + onMounted(cacheSubtree); + onUpdated(cacheSubtree); + onBeforeUnmount(() => { + cache.forEach((cached) => { + const { subTree, suspense } = instance; + const vnode = getInnerChild(subTree); + if (cached.type === vnode.type && cached.key === vnode.key) { + resetShapeFlag(vnode); + const da = vnode.component.da; + da && queuePostRenderEffect(da, suspense); + return; + } + unmount(cached); + }); + }); + return () => { + pendingCacheKey = null; + if (!slots.default) { + return null; + } + const children = slots.default(); + const rawVNode = children[0]; + if (children.length > 1) { + if (true) { + warn$1(`KeepAlive should contain exactly one component child.`); + } + current = null; + return children; + } else if (!isVNode(rawVNode) || !(rawVNode.shapeFlag & 4) && !(rawVNode.shapeFlag & 128)) { + current = null; + return rawVNode; + } + let vnode = getInnerChild(rawVNode); + if (vnode.type === Comment) { + current = null; + return vnode; + } + const comp = vnode.type; + const name = getComponentName( + isAsyncWrapper(vnode) ? vnode.type.__asyncResolved || {} : comp + ); + const { include, exclude, max } = props; + if (include && (!name || !matches(include, name)) || exclude && name && matches(exclude, name)) { + current = vnode; + return rawVNode; + } + const key = vnode.key == null ? comp : vnode.key; + const cachedVNode = cache.get(key); + if (vnode.el) { + vnode = cloneVNode(vnode); + if (rawVNode.shapeFlag & 128) { + rawVNode.ssContent = vnode; + } + } + pendingCacheKey = key; + if (cachedVNode) { + vnode.el = cachedVNode.el; + vnode.component = cachedVNode.component; + if (vnode.transition) { + setTransitionHooks(vnode, vnode.transition); + } + vnode.shapeFlag |= 512; + keys.delete(key); + keys.add(key); + } else { + keys.add(key); + if (max && keys.size > parseInt(max, 10)) { + pruneCacheEntry(keys.values().next().value); + } + } + vnode.shapeFlag |= 256; + current = vnode; + return isSuspense(rawVNode.type) ? rawVNode : vnode; + }; + } +}; +var KeepAlive = KeepAliveImpl; +function matches(pattern, name) { + if (isArray(pattern)) { + return pattern.some((p2) => matches(p2, name)); + } else if (isString(pattern)) { + return pattern.split(",").includes(name); + } else if (isRegExp(pattern)) { + return pattern.test(name); + } + return false; +} +function onActivated(hook, target) { + registerKeepAliveHook(hook, "a", target); +} +function onDeactivated(hook, target) { + registerKeepAliveHook(hook, "da", target); +} +function registerKeepAliveHook(hook, type, target = currentInstance) { + const wrappedHook = hook.__wdc || (hook.__wdc = () => { + let current = target; + while (current) { + if (current.isDeactivated) { + return; + } + current = current.parent; + } + return hook(); + }); + injectHook(type, wrappedHook, target); + if (target) { + let current = target.parent; + while (current && current.parent) { + if (isKeepAlive(current.parent.vnode)) { + injectToKeepAliveRoot(wrappedHook, type, target, current); + } + current = current.parent; + } + } +} +function injectToKeepAliveRoot(hook, type, target, keepAliveRoot) { + const injected = injectHook( + type, + hook, + keepAliveRoot, + true + /* prepend */ + ); + onUnmounted(() => { + remove(keepAliveRoot[type], injected); + }, target); +} +function resetShapeFlag(vnode) { + vnode.shapeFlag &= ~256; + vnode.shapeFlag &= ~512; +} +function getInnerChild(vnode) { + return vnode.shapeFlag & 128 ? vnode.ssContent : vnode; +} +function injectHook(type, hook, target = currentInstance, prepend = false) { + if (target) { + const hooks = target[type] || (target[type] = []); + const wrappedHook = hook.__weh || (hook.__weh = (...args) => { + pauseTracking(); + const reset = setCurrentInstance(target); + const res = callWithAsyncErrorHandling(hook, target, type, args); + reset(); + resetTracking(); + return res; + }); + if (prepend) { + hooks.unshift(wrappedHook); + } else { + hooks.push(wrappedHook); + } + return wrappedHook; + } else if (true) { + const apiName = toHandlerKey(ErrorTypeStrings$1[type].replace(/ hook$/, "")); + warn$1( + `${apiName} is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup(). If you are using async setup(), make sure to register lifecycle hooks before the first await statement.` + ); + } +} +var createHook = (lifecycle) => (hook, target = currentInstance) => { + if (!isInSSRComponentSetup || lifecycle === "sp") { + injectHook(lifecycle, (...args) => hook(...args), target); + } +}; +var onBeforeMount = createHook("bm"); +var onMounted = createHook("m"); +var onBeforeUpdate = createHook("bu"); +var onUpdated = createHook("u"); +var onBeforeUnmount = createHook("bum"); +var onUnmounted = createHook("um"); +var onServerPrefetch = createHook("sp"); +var onRenderTriggered = createHook( + "rtg" +); +var onRenderTracked = createHook( + "rtc" +); +function onErrorCaptured(hook, target = currentInstance) { + injectHook("ec", hook, target); +} +var COMPONENTS = "components"; +var DIRECTIVES = "directives"; +function resolveComponent(name, maybeSelfReference) { + return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name; +} +var NULL_DYNAMIC_COMPONENT = Symbol.for("v-ndc"); +function resolveDynamicComponent(component) { + if (isString(component)) { + return resolveAsset(COMPONENTS, component, false) || component; + } else { + return component || NULL_DYNAMIC_COMPONENT; + } +} +function resolveDirective(name) { + return resolveAsset(DIRECTIVES, name); +} +function resolveAsset(type, name, warnMissing = true, maybeSelfReference = false) { + const instance = currentRenderingInstance || currentInstance; + if (instance) { + const Component = instance.type; + if (type === COMPONENTS) { + const selfName = getComponentName( + Component, + false + ); + if (selfName && (selfName === name || selfName === camelize(name) || selfName === capitalize(camelize(name)))) { + return Component; + } + } + const res = ( + // local registration + // check instance[type] first which is resolved for options API + resolve(instance[type] || Component[type], name) || // global registration + resolve(instance.appContext[type], name) + ); + if (!res && maybeSelfReference) { + return Component; + } + if (warnMissing && !res) { + const extra = type === COMPONENTS ? ` +If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.` : ``; + warn$1(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`); + } + return res; + } else if (true) { + warn$1( + `resolve${capitalize(type.slice(0, -1))} can only be used in render() or setup().` + ); + } +} +function resolve(registry, name) { + return registry && (registry[name] || registry[camelize(name)] || registry[capitalize(camelize(name))]); +} +function renderList(source, renderItem, cache, index) { + let ret; + const cached = cache && cache[index]; + if (isArray(source) || isString(source)) { + ret = new Array(source.length); + for (let i = 0, l = source.length; i < l; i++) { + ret[i] = renderItem(source[i], i, void 0, cached && cached[i]); + } + } else if (typeof source === "number") { + if (!Number.isInteger(source)) { + warn$1(`The v-for range expect an integer value but got ${source}.`); + } + ret = new Array(source); + for (let i = 0; i < source; i++) { + ret[i] = renderItem(i + 1, i, void 0, cached && cached[i]); + } + } else if (isObject(source)) { + if (source[Symbol.iterator]) { + ret = Array.from( + source, + (item, i) => renderItem(item, i, void 0, cached && cached[i]) + ); + } else { + const keys = Object.keys(source); + ret = new Array(keys.length); + for (let i = 0, l = keys.length; i < l; i++) { + const key = keys[i]; + ret[i] = renderItem(source[key], key, i, cached && cached[i]); + } + } + } else { + ret = []; + } + if (cache) { + cache[index] = ret; + } + return ret; +} +function createSlots(slots, dynamicSlots) { + for (let i = 0; i < dynamicSlots.length; i++) { + const slot = dynamicSlots[i]; + if (isArray(slot)) { + for (let j = 0; j < slot.length; j++) { + slots[slot[j].name] = slot[j].fn; + } + } else if (slot) { + slots[slot.name] = slot.key ? (...args) => { + const res = slot.fn(...args); + if (res) res.key = slot.key; + return res; + } : slot.fn; + } + } + return slots; +} +function renderSlot(slots, name, props = {}, fallback, noSlotted) { + if (currentRenderingInstance.isCE || currentRenderingInstance.parent && isAsyncWrapper(currentRenderingInstance.parent) && currentRenderingInstance.parent.isCE) { + if (name !== "default") props.name = name; + return createVNode("slot", props, fallback && fallback()); + } + let slot = slots[name]; + if (slot && slot.length > 1) { + warn$1( + `SSR-optimized slot function detected in a non-SSR-optimized render function. You need to mark this component with $dynamic-slots in the parent template.` + ); + slot = () => []; + } + if (slot && slot._c) { + slot._d = false; + } + openBlock(); + const validSlotContent = slot && ensureValidVNode(slot(props)); + const rendered = createBlock( + Fragment, + { + key: (props.key || // slot content array of a dynamic conditional slot may have a branch + // key attached in the `createSlots` helper, respect that + validSlotContent && validSlotContent.key || `_${name}`) + // #7256 force differentiate fallback content from actual content + (!validSlotContent && fallback ? "_fb" : "") + }, + validSlotContent || (fallback ? fallback() : []), + validSlotContent && slots._ === 1 ? 64 : -2 + ); + if (!noSlotted && rendered.scopeId) { + rendered.slotScopeIds = [rendered.scopeId + "-s"]; + } + if (slot && slot._c) { + slot._d = true; + } + return rendered; +} +function ensureValidVNode(vnodes) { + return vnodes.some((child) => { + if (!isVNode(child)) return true; + if (child.type === Comment) return false; + if (child.type === Fragment && !ensureValidVNode(child.children)) + return false; + return true; + }) ? vnodes : null; +} +function toHandlers(obj, preserveCaseIfNecessary) { + const ret = {}; + if (!isObject(obj)) { + warn$1(`v-on with no argument expects an object value.`); + return ret; + } + for (const key in obj) { + ret[preserveCaseIfNecessary && /[A-Z]/.test(key) ? `on:${key}` : toHandlerKey(key)] = obj[key]; + } + return ret; +} +var getPublicInstance = (i) => { + if (!i) return null; + if (isStatefulComponent(i)) return getComponentPublicInstance(i); + return getPublicInstance(i.parent); +}; +var publicPropertiesMap = ( + // Move PURE marker to new line to workaround compiler discarding it + // due to type annotation + extend(/* @__PURE__ */ Object.create(null), { + $: (i) => i, + $el: (i) => i.vnode.el, + $data: (i) => i.data, + $props: (i) => true ? shallowReadonly(i.props) : i.props, + $attrs: (i) => true ? shallowReadonly(i.attrs) : i.attrs, + $slots: (i) => true ? shallowReadonly(i.slots) : i.slots, + $refs: (i) => true ? shallowReadonly(i.refs) : i.refs, + $parent: (i) => getPublicInstance(i.parent), + $root: (i) => getPublicInstance(i.root), + $emit: (i) => i.emit, + $options: (i) => __VUE_OPTIONS_API__ ? resolveMergedOptions(i) : i.type, + $forceUpdate: (i) => i.f || (i.f = () => { + i.effect.dirty = true; + queueJob(i.update); + }), + $nextTick: (i) => i.n || (i.n = nextTick.bind(i.proxy)), + $watch: (i) => __VUE_OPTIONS_API__ ? instanceWatch.bind(i) : NOOP + }) +); +var isReservedPrefix = (key) => key === "_" || key === "$"; +var hasSetupBinding = (state, key) => state !== EMPTY_OBJ && !state.__isScriptSetup && hasOwn(state, key); +var PublicInstanceProxyHandlers = { + get({ _: instance }, key) { + if (key === "__v_skip") { + return true; + } + const { ctx, setupState, data, props, accessCache, type, appContext } = instance; + if (key === "__isVue") { + return true; + } + let normalizedProps; + if (key[0] !== "$") { + const n = accessCache[key]; + if (n !== void 0) { + switch (n) { + case 1: + return setupState[key]; + case 2: + return data[key]; + case 4: + return ctx[key]; + case 3: + return props[key]; + } + } else if (hasSetupBinding(setupState, key)) { + accessCache[key] = 1; + return setupState[key]; + } else if (data !== EMPTY_OBJ && hasOwn(data, key)) { + accessCache[key] = 2; + return data[key]; + } else if ( + // only cache other properties when instance has declared (thus stable) + // props + (normalizedProps = instance.propsOptions[0]) && hasOwn(normalizedProps, key) + ) { + accessCache[key] = 3; + return props[key]; + } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) { + accessCache[key] = 4; + return ctx[key]; + } else if (!__VUE_OPTIONS_API__ || shouldCacheAccess) { + accessCache[key] = 0; + } + } + const publicGetter = publicPropertiesMap[key]; + let cssModule, globalProperties; + if (publicGetter) { + if (key === "$attrs") { + track(instance.attrs, "get", ""); + markAttrsAccessed(); + } else if (key === "$slots") { + track(instance, "get", key); + } + return publicGetter(instance); + } else if ( + // css module (injected by vue-loader) + (cssModule = type.__cssModules) && (cssModule = cssModule[key]) + ) { + return cssModule; + } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) { + accessCache[key] = 4; + return ctx[key]; + } else if ( + // global properties + globalProperties = appContext.config.globalProperties, hasOwn(globalProperties, key) + ) { + { + return globalProperties[key]; + } + } else if (currentRenderingInstance && (!isString(key) || // #1091 avoid internal isRef/isVNode checks on component instance leading + // to infinite warning loop + key.indexOf("__v") !== 0)) { + if (data !== EMPTY_OBJ && isReservedPrefix(key[0]) && hasOwn(data, key)) { + warn$1( + `Property ${JSON.stringify( + key + )} must be accessed via $data because it starts with a reserved character ("$" or "_") and is not proxied on the render context.` + ); + } else if (instance === currentRenderingInstance) { + warn$1( + `Property ${JSON.stringify(key)} was accessed during render but is not defined on instance.` + ); + } + } + }, + set({ _: instance }, key, value) { + const { data, setupState, ctx } = instance; + if (hasSetupBinding(setupState, key)) { + setupState[key] = value; + return true; + } else if (setupState.__isScriptSetup && hasOwn(setupState, key)) { + warn$1(`Cannot mutate + + \ No newline at end of file diff --git a/.vitepress/theme/components/Todo.vue b/.vitepress/theme/components/Todo.vue new file mode 100644 index 0000000000..9b64ed984c --- /dev/null +++ b/.vitepress/theme/components/Todo.vue @@ -0,0 +1,325 @@ + + + + + \ No newline at end of file diff --git a/.vitepress/theme/components/TodoItem.vue b/.vitepress/theme/components/TodoItem.vue new file mode 100644 index 0000000000..971fb4eb15 --- /dev/null +++ b/.vitepress/theme/components/TodoItem.vue @@ -0,0 +1,34 @@ + + + + + \ No newline at end of file diff --git a/.vitepress/theme/components/TodoList.vue b/.vitepress/theme/components/TodoList.vue new file mode 100644 index 0000000000..6f7bc3fc6e --- /dev/null +++ b/.vitepress/theme/components/TodoList.vue @@ -0,0 +1,46 @@ + + + + + \ No newline at end of file diff --git a/.vitepress/theme/components/Trippin.vue b/.vitepress/theme/components/Trippin.vue new file mode 100644 index 0000000000..9d270fd295 --- /dev/null +++ b/.vitepress/theme/components/Trippin.vue @@ -0,0 +1,137 @@ + + + \ No newline at end of file diff --git a/.vitepress/theme/custom.css b/.vitepress/theme/custom.css new file mode 100644 index 0000000000..4673825cc6 --- /dev/null +++ b/.vitepress/theme/custom.css @@ -0,0 +1,317 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + /** + * Colors + * -------------------------------------------------------------------------- */ + :root { + /* Fire */ + --ui5-fire-main: #ff5a37; /* outrageous-orange-400 */ + --ui5-fire-secondary: #ffa42c; /* sunshade-400 */ + --ui5-fire-background: #000000; /* black */ + + /* Water */ + --ui5-water-main: #1873b4; /* denim-600 */ + --ui5-water-secondary: #53b8de; /* viking-400 */ + --ui5-water-background: #ffffff; /* white */ + + --vp-home-hero-image-background-image: linear-gradient(90deg, rgba(255,255,255,0.5) 0%, rgba(83,184,222,0.5) 35%, rgba(0,212,255,0.5) 100%); + --vp-home-hero-image-filter: blur(40px); + --vp-home-hero-name-color: #1873b4; + --vp-c-brand-2: #53b8de; /* lochmara-500 */ + /* The color for solid background, such as bg color of the button. */ + --vp-c-brand-3: #1873b4; /* endeavour-700 */ + } + .dark { --vp-home-hero-image-background-image: linear-gradient(90deg, rgba(255,90,55,0.5) 0%, rgba(255,164,44,0.5) 35%, rgba(56, 60, 61,0.5) 100%); + --vp-home-hero-name-color: #ff5a37; + } + @media (min-width: 640px) { :root { --vp-home-hero-image-filter: blur(56px); } } + @media (min-width: 960px) { :root { --vp-home-hero-image-filter: blur(72px); } } + .VPFeature .icon { background-color: transparent; + /* Tailwind CSS Color Generator + ** https://uicolors.app/create + */ + + /* VP */ + /* The most solid color used mainly for colored text. */ + --vp-c-brand-1: #1873b4; /* lochmara-600 */ + /* The color used mainly for hover state of the button. */ + + /* The color used for subtle background such as custom container or badges. */ + /* The soft color must be semi transparent alpha channel. */ + /*--vp-c-brand-soft: rgba(12, 72, 120, 0.14);*/ /* --brand-dark-blue */ + --vp-c-brand-soft: rgba(3, 103, 161, 0.14); /* lochmara-700 */ + + + + } + .dark { + /* The most solid color used mainly for colored text. */ + --vp-c-brand-1: #ff5a37; /* lochmara-600 */ + /* The color used mainly for hover state of the button. */ + --vp-c-brand-2: #ffa42c; /* lochmara-500 */ + /* The color for solid background, such as bg color of the button. */ + --vp-c-brand-3: #ff5a37; /* endeavour-700 */ + + /* The bg color used for main screen */ + --vp-c-bg: #000000; + /* The alternative bg color used in places such as "sidebar" or "code block". */ + + /* The elevated bg color. This is used at parts where it "floats", such as "dialog". */ + /*--vp-c-bg-elv: red;*/ /* #1d2025;*/ + /* The bg color to slightly ditinguish some components from the page. + ** Used for things like "carbon ads" or "table". + */ + --vp-c-bg-soft: #2b313a; /* 202127 */ + /* This is used for separators. This is used to divide sections within the same components, + ** such as having separator on "h2" heading. + */ + --vp-c-divider: rgba(82,82,89,0.32); /*#2e2e32;*/ + /* This is designed for borders on interactive components. + ** For example this should be used for a button outline. */ + /*--vp-c-border: #3c3f44; */ + /* This is used to divide components in the page. For example the header and the rest of the page. */ + /*--vp-c-gutter: var(--vp-c-bg-alt);*/ /* #000000 */ + --vp-c-gutter: transparent; /* #000000 */ + } + + img { + @apply rounded-md; + } + + /* fix Tailwind default issue for Search button */ + .DocSearch.button, + .DocSearch[type="button"] { + background-color: var(--vp-c-bg-alt); + } +} + +/* Implement udina design language by avoiding repeated utility patterns */ +@layer components { + /* reset vpdoc */ + .vp-doc .u-list-reset { + @apply list-none list-image-none p-0 m-0; + } + + .vp-doc .u-list-reset li + li { + @apply mt-0; + } + + /* Default KBD + ** https://flowbite.com/docs/components/kbd/ + */ + .u-kbd { + @apply px-2 py-1 text-xs font-semibold text-gray-800 bg-gray-50 border border-gray-300 rounded-lg dark:bg-gray-600 dark:text-gray-100 dark:border-gray-500; + } + + /* udina design language */ + .udina { + @apply font-sans font-extrabold; + } + + .u-right-brand { + @apply float-right ml-4 w-12 md:ml-8 md:w-20 lg:w-24; + } + + .u-p-white { + @apply p-2 bg-white; + } + + .u-bar { + @apply flex flex-col md:flex-row md:justify-between md:items-center space-y-2 md:space-y-0; + } + + .u-bar-content { + @apply flex items-center; + } + + .u-bar-singleLineContent { + @apply flex md:items-center flex-col md:flex-row space-y-2 md:space-y-0; + } +} + +/** + * Prototypes + * -------------------------------------------------------------------------- */ + +/* disable anchor undeline */ +.vp-doc a { + text-decoration: none; +} + +.u-pi { + color: transparent; + font-size: 1rem; + transition: all .2s ease-in-out; +} + +.u-pi:hover { + font-size: 2rem; + color: inherit; +} + +/** +* Custom Block +* -------------------------------------------------------------------------- */ +.vp-doc .custom-block { + padding: 16px; +} + +.vp-doc .custom-block.tip { + border-color: var(--vp-c-tip-1); +} + +.vp-doc .custom-block.warning { + border-color: var(--vp-c-warning-1); +} + +.vp-doc .custom-block.danger { + border-color: var(--vp-c-danger-1); +} + +.vp-doc .custom-block:not(.info) { + /*font-size: 95%;*/ + border-width: 0 0 0 7px; +} + +/* allow blue/udina color links in blocks */ +.vp-doc .custom-block a { + color: var(--vp-c-brand); +} + +/* clearfix to avoid overlapping float-right image inside custom block */ +.vp-doc .custom-block:after { + content: ""; + display: table; + clear: both; +} + +/** +* zoom vanilla +* -------------------------------------------------------------------------- */ +img[data-action="zoom"] { + cursor: zoom-in; +} + +.zoom-img, +.zoom-img-wrap { + position: relative; + z-index: 666; + /*z-index: 20;*/ + transition: all 300ms; +} + +img.zoom-img { + cursor: zoom-out; + /* UDINA */ + /*z-index: 21;*/ + /* reset u-right-brand margin-left */ + margin: 0; +} + +.zoom-overlay { + cursor: zoom-out; + z-index: 420; + background: #fff; + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + filter: "alpha(opacity=0)"; + opacity: 0; + transition: opacity 300ms; + /* UDINA */ + background-color: var(--vp-c-bg); +} + +.zoom-overlay-open .zoom-overlay { + filter: "alpha(opacity=100)"; + opacity: 1; +} + +/** +* Blockquotes +* -------------------------------------------------------------------------- */ +.udina-quote { + font-family: Georgia, Times, "Times New Roman", serif; + font-size: 1.25em; + font-style: italic; + position: relative; + z-index: 0; +} + +.udina-quote:before { + content: ""; + position: absolute; + top: 50%; + left: -4px; + height: 1em; + background-color: var(--c-bg); + width: 5px; + margin-top: -0.5em; +} + +.udina-quote:after { + content: "“"; + position: absolute; + top: 50%; + left: -0.5em; + color: var(--c-border-dark); + font-size: 2em; + line-height: 2em; + text-align: center; + text-indent: -2px; + width: 0.8em; + margin-top: -0.75em; +} + +.udina-quote cite { + display: block; + font-size: 0.75em; + margin-top: 0.5em; +} + +/** +* Figure (used by markdown-it-figure) +* -------------------------------------------------------------------------- */ +figure { + margin-inline-start: 0; + margin-inline-end: 0; + text-align: center; + text-align: -webkit-center; + margin: 1rem 0; +} + +figcaption { + margin-top: 0.5rem; + font-style: italic; + font-size: small; + text-align: center; + text-align: -webkit-center; +} + +/** +* Learn more +* -------------------------------------------------------------------------- */ +.learn-more { + font-style: italic; + margin-top: -5px; + margin-bottom: 5px; + display: block; +} + +li .learn-more { + margin-top: 0; +} + +.learn-more:before { + content: url(/learn-more.svg); + display: inline-block; + width: 20px; + height: 20px; + margin-right: 5px; + vertical-align: middle; +} diff --git a/.vitepress/theme/index.ts b/.vitepress/theme/index.ts new file mode 100644 index 0000000000..82c2a17338 --- /dev/null +++ b/.vitepress/theme/index.ts @@ -0,0 +1,52 @@ +import DefaultTheme from "vitepress/theme"; +import { EnhanceAppContext } from 'vitepress/dist/client/index.js' +import { useRoute } from "vitepress"; +import { onMounted, watch, nextTick } from "vue"; + +// custom css +import "./custom.css"; + +// global components +import Badgen from "@theme/components/Badgen.vue"; + +export default { + ...DefaultTheme, + + enhanceApp(ctx: EnhanceAppContext) { + // app is the Vue 3 app instance from `createApp()`. + // router is VitePress' custom router. `siteData` is + // a `ref` of current site-level metadata. + + // extend default theme custom behaviour. + DefaultTheme.enhanceApp(ctx); + + // register your custom global components + ctx.app.component("Badgen", Badgen); + }, + + setup() { + // this function will be executed inside VitePressApp's setup hook. + // all composition APIs are available here. + const route = useRoute(); + let initZoom: () => void; + + onMounted(async () => { + // initialize components based on data attribute selectors + //initCarousels(); + + (await import("./mixins/u-zoom-vanilla.js")).default; + initZoom = () => { + // no zoom inside links or disabled by class=".no-zoom" + document.querySelectorAll(".main img:not(a>img):not(.no-zoom)").forEach(el => { + el.setAttribute("data-action", "zoom"); + }); + }; + + initZoom(); + }); + watch( + () => route.path, + () => nextTick(() => initZoom()) + ); + }, +}; diff --git a/.vitepress/theme/loaders/trippin.data.js b/.vitepress/theme/loaders/trippin.data.js new file mode 100644 index 0000000000..14ab54779e --- /dev/null +++ b/.vitepress/theme/loaders/trippin.data.js @@ -0,0 +1,7 @@ +export default { + async load() { + // fetch remote data + const service = 'https://services.odata.org/Trippin_Staging/(S(iw1anra4xygjyssbeef0yeyy))' + return (await fetch(`${service}/People?$select=FirstName,LastName,UserName&$orderBy=LastName,FirstName&$top=100`)).json() + } +} \ No newline at end of file diff --git a/.vitepress/theme/mixins/UI5WebComponentsMixin.js b/.vitepress/theme/mixins/UI5WebComponentsMixin.js new file mode 100644 index 0000000000..6db233c800 --- /dev/null +++ b/.vitepress/theme/mixins/UI5WebComponentsMixin.js @@ -0,0 +1,41 @@ +import { setTheme } from "@ui5/webcomponents-base/dist/config/Theme.js"; + +// import dark theme assets +import "@ui5/webcomponents/dist/Assets.js"; +//import "@ui5/webcomponents-fiori/dist/Assets.js"; + +export default { + mounted() { + // theme handler + this.mutationTarget = document.querySelector("html"); + + // initially apply theme depending on darkMode + this.onClassChange(this.mutationTarget.classList.value); + + // observe html class list + this.observer = new MutationObserver((mutations) => { + for (const m of mutations) { + const newValue = m.target.getAttribute(m.attributeName); + this.$nextTick(() => { + this.onClassChange(newValue); + }); + } + }); + + // observe html class list + this.observer.observe(this.mutationTarget, { + attributes: true, + attributeFilter: ["class"], + }); + }, + beforeDestroy() { + this.observer.disconnect(); + }, + methods: { + onClassChange: function (classAttrValue) { + const classList = classAttrValue.split(" "); + + setTheme(classList.includes("dark") ? "sap_horizon_dark" : "sap_horizon"); + }, + }, +}; diff --git a/.vitepress/theme/mixins/u-zoom-vanilla.js b/.vitepress/theme/mixins/u-zoom-vanilla.js new file mode 100644 index 0000000000..b8a9493e83 --- /dev/null +++ b/.vitepress/theme/mixins/u-zoom-vanilla.js @@ -0,0 +1,265 @@ +export default +function () { + "use strict"; + var OFFSET = 80 + + // From http://youmightnotneedjquery.com/#offset + function offset(element) { + var rect = element.getBoundingClientRect() + var scrollTop = window.pageYOffset || + document.documentElement.scrollTop || + document.body.scrollTop || + 0 + var scrollLeft = window.pageXOffset || + document.documentElement.scrollLeft || + document.body.scrollLeft || + 0 + return { + top: rect.top + scrollTop, + left: rect.left + scrollLeft + } + } + + function zoomListener() { + var activeZoom = null + var initialScrollPosition = null + var initialTouchPosition = null + + function listen() { + document.body.addEventListener('click', function (event) { + if (event.target.getAttribute('data-action') !== 'zoom' || + event.target.tagName !== 'IMG') return + + zoom(event) + }) + } + + function zoom(event) { + event.stopPropagation() + + if (document.body.classList.contains('zoom-overlay-open')) return + + if (event.metaKey || event.ctrlKey) return openInNewWindow() + + closeActiveZoom({ forceDispose: true }) + + activeZoom = vanillaZoom(event.target) + activeZoom.zoomImage() + + addCloseActiveZoomListeners() + } + + function openInNewWindow() { + window.open(event.target.getAttribute('data-original') || + event.target.currentSrc || + event.target.src, + '_blank') + } + + function closeActiveZoom(options) { + options = options || { forceDispose: false } + if (!activeZoom) return + + activeZoom[options.forceDispose ? 'dispose' : 'close']() + removeCloseActiveZoomListeners() + activeZoom = null + } + + function addCloseActiveZoomListeners() { + // todo(fat): probably worth throttling this + window.addEventListener('scroll', handleScroll) + document.addEventListener('click', handleClick) + document.addEventListener('keyup', handleEscPressed) + document.addEventListener('touchstart', handleTouchStart) + document.addEventListener('touchend', handleClick) + } + + function removeCloseActiveZoomListeners() { + window.removeEventListener('scroll', handleScroll) + document.removeEventListener('keyup', handleEscPressed) + document.removeEventListener('click', handleClick) + document.removeEventListener('touchstart', handleTouchStart) + document.removeEventListener('touchend', handleClick) + } + + function handleScroll(event) { + if (initialScrollPosition === null) initialScrollPosition = window.pageYOffset + var deltaY = initialScrollPosition - window.pageYOffset + if (Math.abs(deltaY) >= 40) closeActiveZoom() + } + + function handleEscPressed(event) { + if (event.keyCode == 27) closeActiveZoom() + } + + function handleClick(event) { + event.stopPropagation() + event.preventDefault() + closeActiveZoom() + } + + function handleTouchStart(event) { + initialTouchPosition = event.touches[0].pageY + event.target.addEventListener('touchmove', handleTouchMove) + } + + function handleTouchMove(event) { + if (Math.abs(event.touches[0].pageY - initialTouchPosition) <= 10) return + closeActiveZoom() + event.target.removeEventListener('touchmove', handleTouchMove) + } + + return { listen: listen } + } + + var vanillaZoom = (function () { + var fullHeight = null + var fullWidth = null + var overlay = null + var imgScaleFactor = null + + var targetImage = null + var targetImageWrap = null + var targetImageClone = null + + function zoomImage() { + var img = document.createElement('img') + img.onload = function () { + fullHeight = Number(img.height) + fullWidth = Number(img.width) + zoomOriginal() + } + img.src = targetImage.currentSrc || targetImage.src + } + + function zoomOriginal() { + targetImageWrap = document.createElement('div') + targetImageWrap.className = 'zoom-img-wrap' + targetImageWrap.style.position = 'absolute' + targetImageWrap.style.top = offset(targetImage).top + 'px' + targetImageWrap.style.left = offset(targetImage).left + 'px' + + targetImageClone = targetImage.cloneNode() + targetImageClone.style.visibility = 'hidden' + + targetImage.style.width = targetImage.offsetWidth + 'px' + targetImage.parentNode.replaceChild(targetImageClone, targetImage) + + document.body.appendChild(targetImageWrap) + targetImageWrap.appendChild(targetImage) + + targetImage.classList.add('zoom-img') + targetImage.setAttribute('data-action', 'zoom-out') + + overlay = document.createElement('div') + overlay.className = 'zoom-overlay' + + document.body.appendChild(overlay) + + calculateZoom() + triggerAnimation() + } + + function calculateZoom() { + // UDINA + var maxWidth = window.innerWidth * 0.8 + var ratio = targetImage.width / targetImage.height + var isSVG = targetImage?.src?.endsWith(".svg") + + targetImage.offsetWidth // repaint before animating + + //var originalFullImageWidth = fullWidth + var originalFullImageWidth = (isSVG) ? maxWidth : fullWidth + //var originalFullImageHeight = fullHeight + var originalFullImageHeight = (isSVG) ? maxWidth / ratio : fullHeight + + var maxScaleFactor = originalFullImageWidth / targetImage.width + //var maxScaleFactor = originalFullImageWidth / originalFullImageHeight + + var viewportHeight = window.innerHeight - OFFSET + var viewportWidth = window.innerWidth - OFFSET + + var imageAspectRatio = originalFullImageWidth / originalFullImageHeight + var viewportAspectRatio = viewportWidth / viewportHeight + + if (originalFullImageWidth < viewportWidth && originalFullImageHeight < viewportHeight) { + imgScaleFactor = maxScaleFactor + } else if (imageAspectRatio < viewportAspectRatio) { + imgScaleFactor = (viewportHeight / originalFullImageHeight) * maxScaleFactor + } else { + imgScaleFactor = (viewportWidth / originalFullImageWidth) * maxScaleFactor + } + } + + function triggerAnimation() { + targetImage.offsetWidth // repaint before animating + + var imageOffset = offset(targetImage) + var scrollTop = window.pageYOffset + + var viewportY = scrollTop + (window.innerHeight / 2) + var viewportX = (window.innerWidth / 2) + + var imageCenterY = imageOffset.top + (targetImage.height / 2) + var imageCenterX = imageOffset.left + (targetImage.width / 2) + + var translateY = Math.round(viewportY - imageCenterY) + var translateX = Math.round(viewportX - imageCenterX) + + var targetImageTransform = 'scale(' + imgScaleFactor + ')' + var targetImageWrapTransform = + 'translate(' + translateX + 'px, ' + translateY + 'px) translateZ(0)' + + targetImage.style.webkitTransform = targetImageTransform + targetImage.style.msTransform = targetImageTransform + targetImage.style.transform = targetImageTransform + + targetImageWrap.style.webkitTransform = targetImageWrapTransform + targetImageWrap.style.msTransform = targetImageWrapTransform + targetImageWrap.style.transform = targetImageWrapTransform + + document.body.classList.add('zoom-overlay-open') + } + + function close() { + document.body.classList.remove('zoom-overlay-open') + document.body.classList.add('zoom-overlay-transitioning') + + targetImage.style.webkitTransform = '' + targetImage.style.msTransform = '' + targetImage.style.transform = '' + + targetImageWrap.style.webkitTransform = '' + targetImageWrap.style.msTransform = '' + targetImageWrap.style.transform = '' + + if (!'transition' in document.body.style) return dispose() + + targetImageWrap.addEventListener('transitionend', dispose) + targetImageWrap.addEventListener('webkitTransitionEnd', dispose) + } + + function dispose() { + targetImage.removeEventListener('transitionend', dispose) + targetImage.removeEventListener('webkitTransitionEnd', dispose) + + if (!targetImageWrap || !targetImageWrap.parentNode) return + + targetImage.classList.remove('zoom-img') + targetImage.style.width = '' + targetImage.setAttribute('data-action', 'zoom') + + targetImageClone.parentNode.replaceChild(targetImage, targetImageClone) + targetImageWrap.parentNode.removeChild(targetImageWrap) + overlay.parentNode.removeChild(overlay) + + document.body.classList.remove('zoom-overlay-transitioning') + } + + return function (target) { + targetImage = target + return { zoomImage: zoomImage, close: close, dispose: dispose } + } + }()) + + zoomListener().listen() +}() \ No newline at end of file diff --git a/.vitepress/theme/model/trippin/QTrippin.d.ts b/.vitepress/theme/model/trippin/QTrippin.d.ts new file mode 100644 index 0000000000..c32bc960c7 --- /dev/null +++ b/.vitepress/theme/model/trippin/QTrippin.d.ts @@ -0,0 +1,160 @@ +import { QStringPath, QEnumPath, QNumberPath, QCollectionPath, QStringCollection, QEntityCollectionPath, QEntityPath, QEnumCollection, QId, QStringParam, QFunction, QAction, QNumberParam, QGuidPath, QDateTimeOffsetPath, QueryObject } from "@odata2ts/odata-query-objects"; +import { PersonId, Person_GetFriendsTripsParams, Person_UpdateLastNameParams, Person_ShareTripParams, AirlineId, AirportId, TripId, PlanItemId, GetNearestAirportParams } from "./TrippinModel"; +export declare class QPerson extends QueryObject { + readonly userName: QStringPath; + readonly firstName: QStringPath; + readonly lastName: QStringPath; + readonly middleName: QStringPath; + readonly gender: QEnumPath; + readonly age: QNumberPath; + readonly emails: QCollectionPath; + readonly addressInfo: QEntityCollectionPath; + readonly homeAddress: QEntityPath; + readonly favoriteFeature: QEnumPath; + readonly features: QCollectionPath; + readonly friends: QEntityCollectionPath; + readonly bestFriend: QEntityPath; + readonly trips: QEntityCollectionPath; +} +export declare const qPerson: QPerson; +export declare class QPersonId extends QId { + private readonly params; + getParams(): QStringParam[]; +} +export declare class Person_QGetFavoriteAirline extends QFunction { + private readonly params; + constructor(); + getParams(): []; + buildUrl(): string; +} +export declare class Person_QGetFriendsTrips extends QFunction { + private readonly params; + constructor(); + getParams(): QStringParam[]; +} +export declare class Person_QUpdateLastName extends QAction { + private readonly params; + constructor(); + getParams(): QStringParam[]; +} +export declare class Person_QShareTrip extends QAction { + private readonly params; + constructor(); + getParams(): (QStringParam | QNumberParam)[]; +} +export declare class QAirline extends QueryObject { + readonly airlineCode: QStringPath; + readonly name: QStringPath; +} +export declare const qAirline: QAirline; +export declare class QAirlineId extends QId { + private readonly params; + getParams(): QStringParam[]; +} +export declare class QAirport extends QueryObject { + readonly name: QStringPath; + readonly icaoCode: QStringPath; + readonly iataCode: QStringPath; + readonly location: QEntityPath; +} +export declare const qAirport: QAirport; +export declare class QAirportId extends QId { + private readonly params; + getParams(): QStringParam[]; +} +export declare class QTrip extends QueryObject { + readonly tripId: QNumberPath; + readonly shareId: QGuidPath; + readonly name: QStringPath; + readonly budget: QNumberPath; + readonly description: QStringPath; + readonly tags: QCollectionPath; + readonly startsAt: QDateTimeOffsetPath; + readonly endsAt: QDateTimeOffsetPath; + readonly planItems: QEntityCollectionPath; +} +export declare const qTrip: QTrip; +export declare class QTripId extends QId { + private readonly params; + getParams(): QNumberParam[]; +} +export declare class Trip_QGetInvolvedPeople extends QFunction { + private readonly params; + constructor(); + getParams(): []; + buildUrl(): string; +} +export declare class QPlanItem extends QueryObject { + readonly planItemId: QNumberPath; + readonly confirmationCode: QStringPath; + readonly startsAt: QDateTimeOffsetPath; + readonly endsAt: QDateTimeOffsetPath; + readonly duration: QStringPath; +} +export declare const qPlanItem: QPlanItem; +export declare class QPlanItemId extends QId { + private readonly params; + getParams(): QNumberParam[]; +} +export declare class QEvent extends QPlanItem { + readonly occursAt: QEntityPath; + readonly description: QStringPath; +} +export declare const qEvent: QEvent; +export declare class QPublicTransportation extends QPlanItem { + readonly seatNumber: QStringPath; +} +export declare const qPublicTransportation: QPublicTransportation; +export declare class QFlight extends QPublicTransportation { + readonly flightNumber: QStringPath; + readonly airline: QEntityPath; + readonly from: QEntityPath; + readonly to: QEntityPath; +} +export declare const qFlight: QFlight; +export declare class QEmployee extends QPerson { + readonly cost: QNumberPath; + readonly peers: QEntityCollectionPath; +} +export declare const qEmployee: QEmployee; +export declare class QManager extends QPerson { + readonly budget: QNumberPath; + readonly bossOffice: QEntityPath; + readonly directReports: QEntityCollectionPath; +} +export declare const qManager: QManager; +export declare class QLocation extends QueryObject { + readonly address: QStringPath; + readonly city: QEntityPath; +} +export declare const qLocation: QLocation; +export declare class QCity extends QueryObject { + readonly name: QStringPath; + readonly countryRegion: QStringPath; + readonly region: QStringPath; +} +export declare const qCity: QCity; +export declare class QAirportLocation extends QLocation { + readonly loc: QStringPath; +} +export declare const qAirportLocation: QAirportLocation; +export declare class QEventLocation extends QLocation { + readonly buildingInfo: QStringPath; +} +export declare const qEventLocation: QEventLocation; +export declare class QGetPersonWithMostFriends extends QFunction { + private readonly params; + constructor(); + getParams(): []; + buildUrl(): string; +} +export declare class QGetNearestAirport extends QFunction { + private readonly params; + constructor(); + getParams(): QNumberParam[]; +} +export declare class QResetDataSource extends QAction { + private readonly params; + constructor(); + getParams(): []; +} diff --git a/.vitepress/theme/model/trippin/QTrippin.js b/.vitepress/theme/model/trippin/QTrippin.js new file mode 100644 index 0000000000..934ac615d4 --- /dev/null +++ b/.vitepress/theme/model/trippin/QTrippin.js @@ -0,0 +1,207 @@ +import { QStringPath, QEnumPath, QNumberPath, QCollectionPath, QStringCollection, QEntityCollectionPath, QEntityPath, QEnumCollection, QId, QStringParam, QFunction, OperationReturnType, ReturnTypes, QComplexParam, QAction, QNumberParam, QGuidPath, QDateTimeOffsetPath, QueryObject } from "@odata2ts/odata-query-objects"; +export class QPerson extends QueryObject { + userName = new QStringPath(this.withPrefix("UserName")); + firstName = new QStringPath(this.withPrefix("FirstName")); + lastName = new QStringPath(this.withPrefix("LastName")); + middleName = new QStringPath(this.withPrefix("MiddleName")); + gender = new QEnumPath(this.withPrefix("Gender")); + age = new QNumberPath(this.withPrefix("Age")); + emails = new QCollectionPath(this.withPrefix("Emails"), () => QStringCollection); + addressInfo = new QEntityCollectionPath(this.withPrefix("AddressInfo"), () => QLocation); + homeAddress = new QEntityPath(this.withPrefix("HomeAddress"), () => QLocation); + favoriteFeature = new QEnumPath(this.withPrefix("FavoriteFeature")); + features = new QCollectionPath(this.withPrefix("Features"), () => QEnumCollection); + friends = new QEntityCollectionPath(this.withPrefix("Friends"), () => QPerson); + bestFriend = new QEntityPath(this.withPrefix("BestFriend"), () => QPerson); + trips = new QEntityCollectionPath(this.withPrefix("Trips"), () => QTrip); +} +export const qPerson = new QPerson(); +export class QPersonId extends QId { + params = [new QStringParam("UserName", "userName")]; + getParams() { + return this.params; + } +} +export class Person_QGetFavoriteAirline extends QFunction { + params = []; + constructor() { + super("Trippin.GetFavoriteAirline", new OperationReturnType(ReturnTypes.COMPLEX, new QComplexParam("NONE", new QAirline))); + } + getParams() { + return this.params; + } + buildUrl() { + return super.buildUrl(undefined); + } +} +export class Person_QGetFriendsTrips extends QFunction { + params = [new QStringParam("userName")]; + constructor() { + super("Trippin.GetFriendsTrips", new OperationReturnType(ReturnTypes.COMPLEX_COLLECTION, new QComplexParam("NONE", new QTrip))); + } + getParams() { + return this.params; + } +} +export class Person_QUpdateLastName extends QAction { + params = [new QStringParam("lastName")]; + constructor() { + super("Trippin.UpdateLastName"); + } + getParams() { + return this.params; + } +} +export class Person_QShareTrip extends QAction { + params = [new QStringParam("userName"), new QNumberParam("tripId")]; + constructor() { + super("Trippin.ShareTrip"); + } + getParams() { + return this.params; + } +} +export class QAirline extends QueryObject { + airlineCode = new QStringPath(this.withPrefix("AirlineCode")); + name = new QStringPath(this.withPrefix("Name")); +} +export const qAirline = new QAirline(); +export class QAirlineId extends QId { + params = [new QStringParam("AirlineCode", "airlineCode")]; + getParams() { + return this.params; + } +} +export class QAirport extends QueryObject { + name = new QStringPath(this.withPrefix("Name")); + icaoCode = new QStringPath(this.withPrefix("IcaoCode")); + iataCode = new QStringPath(this.withPrefix("IataCode")); + location = new QEntityPath(this.withPrefix("Location"), () => QAirportLocation); +} +export const qAirport = new QAirport(); +export class QAirportId extends QId { + params = [new QStringParam("IcaoCode", "icaoCode")]; + getParams() { + return this.params; + } +} +export class QTrip extends QueryObject { + tripId = new QNumberPath(this.withPrefix("TripId")); + shareId = new QGuidPath(this.withPrefix("ShareId")); + name = new QStringPath(this.withPrefix("Name")); + budget = new QNumberPath(this.withPrefix("Budget")); + description = new QStringPath(this.withPrefix("Description")); + tags = new QCollectionPath(this.withPrefix("Tags"), () => QStringCollection); + startsAt = new QDateTimeOffsetPath(this.withPrefix("StartsAt")); + endsAt = new QDateTimeOffsetPath(this.withPrefix("EndsAt")); + planItems = new QEntityCollectionPath(this.withPrefix("PlanItems"), () => QPlanItem); +} +export const qTrip = new QTrip(); +export class QTripId extends QId { + params = [new QNumberParam("TripId", "tripId")]; + getParams() { + return this.params; + } +} +export class Trip_QGetInvolvedPeople extends QFunction { + params = []; + constructor() { + super("Trippin.GetInvolvedPeople", new OperationReturnType(ReturnTypes.COMPLEX_COLLECTION, new QComplexParam("NONE", new QPerson))); + } + getParams() { + return this.params; + } + buildUrl() { + return super.buildUrl(undefined); + } +} +export class QPlanItem extends QueryObject { + planItemId = new QNumberPath(this.withPrefix("PlanItemId")); + confirmationCode = new QStringPath(this.withPrefix("ConfirmationCode")); + startsAt = new QDateTimeOffsetPath(this.withPrefix("StartsAt")); + endsAt = new QDateTimeOffsetPath(this.withPrefix("EndsAt")); + duration = new QStringPath(this.withPrefix("Duration")); +} +export const qPlanItem = new QPlanItem(); +export class QPlanItemId extends QId { + params = [new QNumberParam("PlanItemId", "planItemId")]; + getParams() { + return this.params; + } +} +export class QEvent extends QPlanItem { + occursAt = new QEntityPath(this.withPrefix("OccursAt"), () => QEventLocation); + description = new QStringPath(this.withPrefix("Description")); +} +export const qEvent = new QEvent(); +export class QPublicTransportation extends QPlanItem { + seatNumber = new QStringPath(this.withPrefix("SeatNumber")); +} +export const qPublicTransportation = new QPublicTransportation(); +export class QFlight extends QPublicTransportation { + flightNumber = new QStringPath(this.withPrefix("FlightNumber")); + airline = new QEntityPath(this.withPrefix("Airline"), () => QAirline); + from = new QEntityPath(this.withPrefix("From"), () => QAirport); + to = new QEntityPath(this.withPrefix("To"), () => QAirport); +} +export const qFlight = new QFlight(); +export class QEmployee extends QPerson { + cost = new QNumberPath(this.withPrefix("Cost")); + peers = new QEntityCollectionPath(this.withPrefix("Peers"), () => QPerson); +} +export const qEmployee = new QEmployee(); +export class QManager extends QPerson { + budget = new QNumberPath(this.withPrefix("Budget")); + bossOffice = new QEntityPath(this.withPrefix("BossOffice"), () => QLocation); + directReports = new QEntityCollectionPath(this.withPrefix("DirectReports"), () => QPerson); +} +export const qManager = new QManager(); +export class QLocation extends QueryObject { + address = new QStringPath(this.withPrefix("Address")); + city = new QEntityPath(this.withPrefix("City"), () => QCity); +} +export const qLocation = new QLocation(); +export class QCity extends QueryObject { + name = new QStringPath(this.withPrefix("Name")); + countryRegion = new QStringPath(this.withPrefix("CountryRegion")); + region = new QStringPath(this.withPrefix("Region")); +} +export const qCity = new QCity(); +export class QAirportLocation extends QLocation { + loc = new QStringPath(this.withPrefix("Loc")); +} +export const qAirportLocation = new QAirportLocation(); +export class QEventLocation extends QLocation { + buildingInfo = new QStringPath(this.withPrefix("BuildingInfo")); +} +export const qEventLocation = new QEventLocation(); +export class QGetPersonWithMostFriends extends QFunction { + params = []; + constructor() { + super("GetPersonWithMostFriends", new OperationReturnType(ReturnTypes.COMPLEX, new QComplexParam("NONE", new QPerson))); + } + getParams() { + return this.params; + } + buildUrl() { + return super.buildUrl(undefined); + } +} +export class QGetNearestAirport extends QFunction { + params = [new QNumberParam("lat"), new QNumberParam("lon")]; + constructor() { + super("GetNearestAirport", new OperationReturnType(ReturnTypes.COMPLEX, new QComplexParam("NONE", new QAirport))); + } + getParams() { + return this.params; + } +} +export class QResetDataSource extends QAction { + params = []; + constructor() { + super("ResetDataSource"); + } + getParams() { + return this.params; + } +} diff --git a/.vitepress/theme/model/trippin/TrippinModel.d.ts b/.vitepress/theme/model/trippin/TrippinModel.d.ts new file mode 100644 index 0000000000..a9de8fb2e0 --- /dev/null +++ b/.vitepress/theme/model/trippin/TrippinModel.d.ts @@ -0,0 +1,608 @@ +export declare enum PersonGender { + Male = "Male", + Female = "Female", + Unknown = "Unknown" +} +export declare enum Feature { + Feature1 = "Feature1", + Feature2 = "Feature2", + Feature3 = "Feature3", + Feature4 = "Feature4" +} +export interface Person { + /** + * **Key Property**: This is a key property used to identify the entity.
**Managed**: This property is managed on the server side and cannot be edited. + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `UserName` | + * | Type | `Edm.String` | + * | Nullable | `false` | + */ + userName: string; + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `FirstName` | + * | Type | `Edm.String` | + * | Nullable | `false` | + */ + firstName: string; + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `LastName` | + * | Type | `Edm.String` | + */ + lastName: string | null; + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `MiddleName` | + * | Type | `Edm.String` | + */ + middleName: string | null; + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `Gender` | + * | Type | `Trippin.PersonGender` | + * | Nullable | `false` | + */ + gender: PersonGender; + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `Age` | + * | Type | `Edm.Int64` | + */ + age: number | null; + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `Emails` | + * | Type | `Collection(Edm.String)` | + */ + emails: Array; + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `AddressInfo` | + * | Type | `Collection(Trippin.Location)` | + */ + addressInfo: Array; + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `HomeAddress` | + * | Type | `Trippin.Location` | + */ + homeAddress: Location | null; + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `FavoriteFeature` | + * | Type | `Trippin.Feature` | + * | Nullable | `false` | + */ + favoriteFeature: Feature; + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `Features` | + * | Type | `Collection(Trippin.Feature)` | + * | Nullable | `false` | + */ + features: Array; + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `Friends` | + * | Type | `Collection(Trippin.Person)` | + */ + friends?: Array; + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `BestFriend` | + * | Type | `Trippin.Person` | + */ + bestFriend?: Person | null; + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `Trips` | + * | Type | `Collection(Trippin.Trip)` | + */ + trips?: Array; +} +export type PersonId = string | { + userName: string; +}; +export interface EditablePerson extends Pick, Partial> { + addressInfo?: Array; + homeAddress?: EditableLocation | null; +} +export interface Person_GetFriendsTripsParams { + userName: string; +} +export interface Person_UpdateLastNameParams { + lastName: string; +} +export interface Person_ShareTripParams { + userName: string; + tripId: number; +} +export interface Airline { + /** + * **Key Property**: This is a key property used to identify the entity.
**Managed**: This property is managed on the server side and cannot be edited. + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `AirlineCode` | + * | Type | `Edm.String` | + * | Nullable | `false` | + */ + airlineCode: string; + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `Name` | + * | Type | `Edm.String` | + */ + name: string | null; +} +export type AirlineId = string | { + airlineCode: string; +}; +export interface EditableAirline extends Partial> { +} +export interface Airport { + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `Name` | + * | Type | `Edm.String` | + */ + name: string | null; + /** + * **Key Property**: This is a key property used to identify the entity.
**Managed**: This property is managed on the server side and cannot be edited. + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `IcaoCode` | + * | Type | `Edm.String` | + * | Nullable | `false` | + */ + icaoCode: string; + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `IataCode` | + * | Type | `Edm.String` | + */ + iataCode: string | null; + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `Location` | + * | Type | `Trippin.AirportLocation` | + */ + location: AirportLocation | null; +} +export type AirportId = string | { + icaoCode: string; +}; +export interface EditableAirport extends Partial> { + location?: EditableAirportLocation | null; +} +export interface Trip { + /** + * **Key Property**: This is a key property used to identify the entity.
**Managed**: This property is managed on the server side and cannot be edited. + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `TripId` | + * | Type | `Edm.Int32` | + * | Nullable | `false` | + */ + tripId: number; + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `ShareId` | + * | Type | `Edm.Guid` | + * | Nullable | `false` | + */ + shareId: string; + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `Name` | + * | Type | `Edm.String` | + */ + name: string | null; + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `Budget` | + * | Type | `Edm.Single` | + * | Nullable | `false` | + */ + budget: number; + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `Description` | + * | Type | `Edm.String` | + */ + description: string | null; + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `Tags` | + * | Type | `Collection(Edm.String)` | + */ + tags: Array; + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `StartsAt` | + * | Type | `Edm.DateTimeOffset` | + * | Nullable | `false` | + */ + startsAt: string; + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `EndsAt` | + * | Type | `Edm.DateTimeOffset` | + * | Nullable | `false` | + */ + endsAt: string; + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `PlanItems` | + * | Type | `Collection(Trippin.PlanItem)` | + */ + planItems?: Array; +} +export type TripId = number | { + tripId: number; +}; +export interface EditableTrip extends Pick, Partial> { +} +export interface PlanItem { + /** + * **Key Property**: This is a key property used to identify the entity.
**Managed**: This property is managed on the server side and cannot be edited. + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `PlanItemId` | + * | Type | `Edm.Int32` | + * | Nullable | `false` | + */ + planItemId: number; + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `ConfirmationCode` | + * | Type | `Edm.String` | + */ + confirmationCode: string | null; + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `StartsAt` | + * | Type | `Edm.DateTimeOffset` | + * | Nullable | `false` | + */ + startsAt: string; + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `EndsAt` | + * | Type | `Edm.DateTimeOffset` | + * | Nullable | `false` | + */ + endsAt: string; + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `Duration` | + * | Type | `Edm.Duration` | + * | Nullable | `false` | + */ + duration: string; +} +export type PlanItemId = number | { + planItemId: number; +}; +export interface EditablePlanItem extends Pick, Partial> { +} +export interface Event extends PlanItem { + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `OccursAt` | + * | Type | `Trippin.EventLocation` | + */ + occursAt: EventLocation | null; + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `Description` | + * | Type | `Edm.String` | + */ + description: string | null; +} +export interface EditableEvent extends Pick, Partial> { + occursAt?: EditableEventLocation | null; +} +export interface PublicTransportation extends PlanItem { + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `SeatNumber` | + * | Type | `Edm.String` | + */ + seatNumber: string | null; +} +export interface EditablePublicTransportation extends Pick, Partial> { +} +export interface Flight extends PublicTransportation { + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `FlightNumber` | + * | Type | `Edm.String` | + */ + flightNumber: string | null; + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `Airline` | + * | Type | `Trippin.Airline` | + */ + airline?: Airline | null; + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `From` | + * | Type | `Trippin.Airport` | + */ + from?: Airport | null; + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `To` | + * | Type | `Trippin.Airport` | + */ + to?: Airport | null; +} +export interface EditableFlight extends Pick, Partial> { +} +export interface Employee extends Person { + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `Cost` | + * | Type | `Edm.Int64` | + * | Nullable | `false` | + */ + cost: number; + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `Peers` | + * | Type | `Collection(Trippin.Person)` | + */ + peers?: Array; +} +export interface EditableEmployee extends Pick, Partial> { + addressInfo?: Array; + homeAddress?: EditableLocation | null; +} +export interface Manager extends Person { + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `Budget` | + * | Type | `Edm.Int64` | + * | Nullable | `false` | + */ + budget: number; + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `BossOffice` | + * | Type | `Trippin.Location` | + */ + bossOffice: Location | null; + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `DirectReports` | + * | Type | `Collection(Trippin.Person)` | + */ + directReports?: Array; +} +export interface EditableManager extends Pick, Partial> { + addressInfo?: Array; + homeAddress?: EditableLocation | null; + bossOffice?: EditableLocation | null; +} +export interface Location { + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `Address` | + * | Type | `Edm.String` | + */ + address: string | null; + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `City` | + * | Type | `Trippin.City` | + */ + city: City | null; +} +export interface EditableLocation extends Partial> { + city?: EditableCity | null; +} +export interface City { + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `Name` | + * | Type | `Edm.String` | + */ + name: string | null; + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `CountryRegion` | + * | Type | `Edm.String` | + */ + countryRegion: string | null; + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `Region` | + * | Type | `Edm.String` | + */ + region: string | null; +} +export interface EditableCity extends Partial> { +} +export interface AirportLocation extends Location { + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `Loc` | + * | Type | `Edm.GeographyPoint` | + */ + loc: string | null; +} +export interface EditableAirportLocation extends Partial> { + city?: EditableCity | null; +} +export interface EventLocation extends Location { + /** + * + * OData Attributes: + * |Attribute Name | Attribute Value | + * | --- | ---| + * | Name | `BuildingInfo` | + * | Type | `Edm.String` | + */ + buildingInfo: string | null; +} +export interface EditableEventLocation extends Partial> { + city?: EditableCity | null; +} +export interface GetNearestAirportParams { + lat: number; + lon: number; +} diff --git a/.vitepress/theme/model/trippin/TrippinModel.js b/.vitepress/theme/model/trippin/TrippinModel.js new file mode 100644 index 0000000000..0613b7d973 --- /dev/null +++ b/.vitepress/theme/model/trippin/TrippinModel.js @@ -0,0 +1,13 @@ +export var PersonGender; +(function (PersonGender) { + PersonGender["Male"] = "Male"; + PersonGender["Female"] = "Female"; + PersonGender["Unknown"] = "Unknown"; +})(PersonGender || (PersonGender = {})); +export var Feature; +(function (Feature) { + Feature["Feature1"] = "Feature1"; + Feature["Feature2"] = "Feature2"; + Feature["Feature3"] = "Feature3"; + Feature["Feature4"] = "Feature4"; +})(Feature || (Feature = {})); diff --git a/.vitepress/theme/model/trippin/TrippinService.d.ts b/.vitepress/theme/model/trippin/TrippinService.d.ts new file mode 100644 index 0000000000..8b58aa3a39 --- /dev/null +++ b/.vitepress/theme/model/trippin/TrippinService.d.ts @@ -0,0 +1,172 @@ +import { ODataModelResponseV4, ODataCollectionResponseV4, ODataValueResponseV4 } from "@odata2ts/odata-core"; +import { QStringCollection, StringCollection, QEnumCollection, EnumCollection } from "@odata2ts/odata-query-objects"; +import { ODataHttpClient, ODataHttpClientConfig, ODataResponse } from "@odata2ts/http-client-api"; +import { ODataService, EntityTypeServiceV4, CollectionServiceV4, EntitySetServiceV4 } from "@odata2ts/odata-service"; +import { PersonId, AirlineId, AirportId, Person, Airport, GetNearestAirportParams, EditablePerson, Location, EditableLocation, Feature, TripId, Airline, Trip, Person_GetFriendsTripsParams, Person_UpdateLastNameParams, Person_ShareTripParams, EditableAirline, EditableAirport, EditableTrip, PlanItemId, PlanItem, EditablePlanItem, Event, EditableEvent, PublicTransportation, EditablePublicTransportation, Flight, EditableFlight, Employee, EditableEmployee, Manager, EditableManager, City, EditableCity, AirportLocation, EditableAirportLocation, EventLocation, EditableEventLocation } from "./TrippinModel"; +import { QPerson, QLocation, QAirline, QAirport, QTrip, QPlanItem, QEvent, QPublicTransportation, QFlight, QEmployee, QManager, QCity, QAirportLocation, QEventLocation } from "./QTrippin"; +export declare class TrippinService extends ODataService { + private _me?; + private _qGetPersonWithMostFriends?; + private _qGetNearestAirport?; + private _qResetDataSource?; + people(): PersonCollectionService; + people(id: PersonId): PersonService; + airlines(): AirlineCollectionService; + airlines(id: AirlineId): AirlineService; + airports(): AirportCollectionService; + airports(id: AirportId): AirportService; + me(): PersonService; + getPersonWithMostFriends(requestConfig?: ODataHttpClientConfig): ODataResponse>; + getNearestAirport(params: GetNearestAirportParams, requestConfig?: ODataHttpClientConfig): ODataResponse>; + resetDataSource(requestConfig?: ODataHttpClientConfig): ODataResponse>; +} +export declare class PersonService extends EntityTypeServiceV4 { + private _emails?; + private _addressInfo?; + private _homeAddress?; + private _features?; + private _bestFriend?; + private _personQGetFavoriteAirline?; + private _personQGetFriendsTrips?; + private _personQUpdateLastName?; + private _personQShareTrip?; + constructor(client: ClientType, basePath: string, name: string); + emails(): CollectionServiceV4; + addressInfo(): CollectionServiceV4; + homeAddress(): LocationService; + features(): CollectionServiceV4, QEnumCollection, Feature>; + friends(): PersonCollectionService; + friends(id: PersonId): PersonService; + bestFriend(): PersonService; + trips(): TripCollectionService; + trips(id: TripId): TripService; + getFavoriteAirline(requestConfig?: ODataHttpClientConfig): ODataResponse>; + getFriendsTrips(params: Person_GetFriendsTripsParams, requestConfig?: ODataHttpClientConfig): ODataResponse>; + updateLastName(params: Person_UpdateLastNameParams, requestConfig?: ODataHttpClientConfig): ODataResponse>; + shareTrip(params: Person_ShareTripParams, requestConfig?: ODataHttpClientConfig): ODataResponse>; +} +export declare class PersonCollectionService extends EntitySetServiceV4 { + constructor(client: ClientType, basePath: string, name: string); +} +export declare class AirlineService extends EntityTypeServiceV4 { + constructor(client: ClientType, basePath: string, name: string); +} +export declare class AirlineCollectionService extends EntitySetServiceV4 { + constructor(client: ClientType, basePath: string, name: string); +} +export declare class AirportService extends EntityTypeServiceV4 { + private _location?; + constructor(client: ClientType, basePath: string, name: string); + location(): AirportLocationService; +} +export declare class AirportCollectionService extends EntitySetServiceV4 { + constructor(client: ClientType, basePath: string, name: string); +} +export declare class TripService extends EntityTypeServiceV4 { + private _tags?; + private _tripQGetInvolvedPeople?; + constructor(client: ClientType, basePath: string, name: string); + tags(): CollectionServiceV4; + planItems(): PlanItemCollectionService; + planItems(id: PlanItemId): PlanItemService; + getInvolvedPeople(requestConfig?: ODataHttpClientConfig): ODataResponse>; +} +export declare class TripCollectionService extends EntitySetServiceV4 { + constructor(client: ClientType, basePath: string, name: string); +} +export declare class PlanItemService extends EntityTypeServiceV4 { + constructor(client: ClientType, basePath: string, name: string); +} +export declare class PlanItemCollectionService extends EntitySetServiceV4 { + constructor(client: ClientType, basePath: string, name: string); +} +export declare class EventService extends EntityTypeServiceV4 { + private _occursAt?; + constructor(client: ClientType, basePath: string, name: string); + occursAt(): EventLocationService; +} +export declare class EventCollectionService extends EntitySetServiceV4 { + constructor(client: ClientType, basePath: string, name: string); +} +export declare class PublicTransportationService extends EntityTypeServiceV4 { + constructor(client: ClientType, basePath: string, name: string); +} +export declare class PublicTransportationCollectionService extends EntitySetServiceV4 { + constructor(client: ClientType, basePath: string, name: string); +} +export declare class FlightService extends EntityTypeServiceV4 { + private _airline?; + private _from?; + private _to?; + constructor(client: ClientType, basePath: string, name: string); + airline(): AirlineService; + from(): AirportService; + to(): AirportService; +} +export declare class FlightCollectionService extends EntitySetServiceV4 { + constructor(client: ClientType, basePath: string, name: string); +} +export declare class EmployeeService extends EntityTypeServiceV4 { + private _emails?; + private _addressInfo?; + private _homeAddress?; + private _features?; + private _bestFriend?; + constructor(client: ClientType, basePath: string, name: string); + emails(): CollectionServiceV4; + addressInfo(): CollectionServiceV4; + homeAddress(): LocationService; + features(): CollectionServiceV4, QEnumCollection, Feature>; + friends(): PersonCollectionService; + friends(id: PersonId): PersonService; + bestFriend(): PersonService; + trips(): TripCollectionService; + trips(id: TripId): TripService; + peers(): PersonCollectionService; + peers(id: PersonId): PersonService; +} +export declare class EmployeeCollectionService extends EntitySetServiceV4 { + constructor(client: ClientType, basePath: string, name: string); +} +export declare class ManagerService extends EntityTypeServiceV4 { + private _emails?; + private _addressInfo?; + private _homeAddress?; + private _features?; + private _bestFriend?; + private _bossOffice?; + constructor(client: ClientType, basePath: string, name: string); + emails(): CollectionServiceV4; + addressInfo(): CollectionServiceV4; + homeAddress(): LocationService; + features(): CollectionServiceV4, QEnumCollection, Feature>; + friends(): PersonCollectionService; + friends(id: PersonId): PersonService; + bestFriend(): PersonService; + trips(): TripCollectionService; + trips(id: TripId): TripService; + bossOffice(): LocationService; + directReports(): PersonCollectionService; + directReports(id: PersonId): PersonService; +} +export declare class ManagerCollectionService extends EntitySetServiceV4 { + constructor(client: ClientType, basePath: string, name: string); +} +export declare class LocationService extends EntityTypeServiceV4 { + private _city?; + constructor(client: ClientType, basePath: string, name: string); + city(): CityService; +} +export declare class CityService extends EntityTypeServiceV4 { + constructor(client: ClientType, basePath: string, name: string); +} +export declare class AirportLocationService extends EntityTypeServiceV4 { + private _city?; + constructor(client: ClientType, basePath: string, name: string); + city(): CityService; +} +export declare class EventLocationService extends EntityTypeServiceV4 { + private _city?; + constructor(client: ClientType, basePath: string, name: string); + city(): CityService; +} diff --git a/.vitepress/theme/model/trippin/TrippinService.js b/.vitepress/theme/model/trippin/TrippinService.js new file mode 100644 index 0000000000..0683512ed1 --- /dev/null +++ b/.vitepress/theme/model/trippin/TrippinService.js @@ -0,0 +1,495 @@ +import { qStringCollection, qEnumCollection } from "@odata2ts/odata-query-objects"; +import { ODataService, EntityTypeServiceV4, CollectionServiceV4, EntitySetServiceV4 } from "@odata2ts/odata-service"; +import { QPersonId, QAirlineId, QAirportId, QGetPersonWithMostFriends, QGetNearestAirport, QResetDataSource, qPerson, qLocation, QTripId, Person_QGetFavoriteAirline, Person_QGetFriendsTrips, Person_QUpdateLastName, Person_QShareTrip, qAirline, qAirport, qTrip, QPlanItemId, Trip_QGetInvolvedPeople, qPlanItem, qEvent, qPublicTransportation, qFlight, qEmployee, qManager, qCity, qAirportLocation, qEventLocation } from "./QTrippin"; +export class TrippinService extends ODataService { + _me; + _qGetPersonWithMostFriends; + _qGetNearestAirport; + _qResetDataSource; + people(id) { + const fieldName = "People"; + const { client, path } = this.__base; + return typeof id === "undefined" || id === null + ? new PersonCollectionService(client, path, fieldName) + : new PersonService(client, path, new QPersonId(fieldName).buildUrl(id)); + } + airlines(id) { + const fieldName = "Airlines"; + const { client, path } = this.__base; + return typeof id === "undefined" || id === null + ? new AirlineCollectionService(client, path, fieldName) + : new AirlineService(client, path, new QAirlineId(fieldName).buildUrl(id)); + } + airports(id) { + const fieldName = "Airports"; + const { client, path } = this.__base; + return typeof id === "undefined" || id === null + ? new AirportCollectionService(client, path, fieldName) + : new AirportService(client, path, new QAirportId(fieldName).buildUrl(id)); + } + me() { + if (!this._me) { + const { client, path } = this.__base; + this._me = new PersonService(client, path, "Me"); + } + return this._me; + } + async getPersonWithMostFriends(requestConfig) { + if (!this._qGetPersonWithMostFriends) { + this._qGetPersonWithMostFriends = new QGetPersonWithMostFriends(); + } + const { addFullPath, client, getDefaultHeaders } = this.__base; + const url = addFullPath(this._qGetPersonWithMostFriends.buildUrl()); + const response = await client.get(url, requestConfig, getDefaultHeaders()); + return this._qGetPersonWithMostFriends.convertResponse(response); + } + async getNearestAirport(params, requestConfig) { + if (!this._qGetNearestAirport) { + this._qGetNearestAirport = new QGetNearestAirport(); + } + const { addFullPath, client, getDefaultHeaders } = this.__base; + const url = addFullPath(this._qGetNearestAirport.buildUrl(params)); + const response = await client.get(url, requestConfig, getDefaultHeaders()); + return this._qGetNearestAirport.convertResponse(response); + } + async resetDataSource(requestConfig) { + if (!this._qResetDataSource) { + this._qResetDataSource = new QResetDataSource(); + } + const { addFullPath, client, getDefaultHeaders } = this.__base; + const url = addFullPath(this._qResetDataSource.buildUrl()); + return client.post(url, {}, requestConfig, getDefaultHeaders()); + } +} +export class PersonService extends EntityTypeServiceV4 { + _emails; + _addressInfo; + _homeAddress; + _features; + _bestFriend; + _personQGetFavoriteAirline; + _personQGetFriendsTrips; + _personQUpdateLastName; + _personQShareTrip; + constructor(client, basePath, name) { + super(client, basePath, name, qPerson); + } + emails() { + if (!this._emails) { + const { client, path } = this.__base; + this._emails = new CollectionServiceV4(client, path, "Emails", qStringCollection); + } + return this._emails; + } + addressInfo() { + if (!this._addressInfo) { + const { client, path } = this.__base; + this._addressInfo = new CollectionServiceV4(client, path, "AddressInfo", qLocation); + } + return this._addressInfo; + } + homeAddress() { + if (!this._homeAddress) { + const { client, path } = this.__base; + this._homeAddress = new LocationService(client, path, "HomeAddress"); + } + return this._homeAddress; + } + features() { + if (!this._features) { + const { client, path } = this.__base; + this._features = new CollectionServiceV4(client, path, "Features", qEnumCollection); + } + return this._features; + } + friends(id) { + const fieldName = "Friends"; + const { client, path } = this.__base; + return typeof id === "undefined" || id === null + ? new PersonCollectionService(client, path, fieldName) + : new PersonService(client, path, new QPersonId(fieldName).buildUrl(id)); + } + bestFriend() { + if (!this._bestFriend) { + const { client, path } = this.__base; + this._bestFriend = new PersonService(client, path, "BestFriend"); + } + return this._bestFriend; + } + trips(id) { + const fieldName = "Trips"; + const { client, path } = this.__base; + return typeof id === "undefined" || id === null + ? new TripCollectionService(client, path, fieldName) + : new TripService(client, path, new QTripId(fieldName).buildUrl(id)); + } + async getFavoriteAirline(requestConfig) { + if (!this._personQGetFavoriteAirline) { + this._personQGetFavoriteAirline = new Person_QGetFavoriteAirline(); + } + const { addFullPath, client, getDefaultHeaders } = this.__base; + const url = addFullPath(this._personQGetFavoriteAirline.buildUrl()); + const response = await client.get(url, requestConfig, getDefaultHeaders()); + return this._personQGetFavoriteAirline.convertResponse(response); + } + async getFriendsTrips(params, requestConfig) { + if (!this._personQGetFriendsTrips) { + this._personQGetFriendsTrips = new Person_QGetFriendsTrips(); + } + const { addFullPath, client, getDefaultHeaders } = this.__base; + const url = addFullPath(this._personQGetFriendsTrips.buildUrl(params)); + const response = await client.get(url, requestConfig, getDefaultHeaders()); + return this._personQGetFriendsTrips.convertResponse(response); + } + async updateLastName(params, requestConfig) { + if (!this._personQUpdateLastName) { + this._personQUpdateLastName = new Person_QUpdateLastName(); + } + const { addFullPath, client, getDefaultHeaders } = this.__base; + const url = addFullPath(this._personQUpdateLastName.buildUrl()); + const response = await client.post(url, this._personQUpdateLastName.convertUserParams(params), requestConfig, getDefaultHeaders()); + return this._personQUpdateLastName.convertResponse(response); + } + async shareTrip(params, requestConfig) { + if (!this._personQShareTrip) { + this._personQShareTrip = new Person_QShareTrip(); + } + const { addFullPath, client, getDefaultHeaders } = this.__base; + const url = addFullPath(this._personQShareTrip.buildUrl()); + return client.post(url, this._personQShareTrip.convertUserParams(params), requestConfig, getDefaultHeaders()); + } +} +export class PersonCollectionService extends EntitySetServiceV4 { + constructor(client, basePath, name) { + super(client, basePath, name, qPerson, new QPersonId(name)); + } +} +export class AirlineService extends EntityTypeServiceV4 { + constructor(client, basePath, name) { + super(client, basePath, name, qAirline); + } +} +export class AirlineCollectionService extends EntitySetServiceV4 { + constructor(client, basePath, name) { + super(client, basePath, name, qAirline, new QAirlineId(name)); + } +} +export class AirportService extends EntityTypeServiceV4 { + _location; + constructor(client, basePath, name) { + super(client, basePath, name, qAirport); + } + location() { + if (!this._location) { + const { client, path } = this.__base; + this._location = new AirportLocationService(client, path, "Location"); + } + return this._location; + } +} +export class AirportCollectionService extends EntitySetServiceV4 { + constructor(client, basePath, name) { + super(client, basePath, name, qAirport, new QAirportId(name)); + } +} +export class TripService extends EntityTypeServiceV4 { + _tags; + _tripQGetInvolvedPeople; + constructor(client, basePath, name) { + super(client, basePath, name, qTrip); + } + tags() { + if (!this._tags) { + const { client, path } = this.__base; + this._tags = new CollectionServiceV4(client, path, "Tags", qStringCollection); + } + return this._tags; + } + planItems(id) { + const fieldName = "PlanItems"; + const { client, path } = this.__base; + return typeof id === "undefined" || id === null + ? new PlanItemCollectionService(client, path, fieldName) + : new PlanItemService(client, path, new QPlanItemId(fieldName).buildUrl(id)); + } + async getInvolvedPeople(requestConfig) { + if (!this._tripQGetInvolvedPeople) { + this._tripQGetInvolvedPeople = new Trip_QGetInvolvedPeople(); + } + const { addFullPath, client, getDefaultHeaders } = this.__base; + const url = addFullPath(this._tripQGetInvolvedPeople.buildUrl()); + const response = await client.get(url, requestConfig, getDefaultHeaders()); + return this._tripQGetInvolvedPeople.convertResponse(response); + } +} +export class TripCollectionService extends EntitySetServiceV4 { + constructor(client, basePath, name) { + super(client, basePath, name, qTrip, new QTripId(name)); + } +} +export class PlanItemService extends EntityTypeServiceV4 { + constructor(client, basePath, name) { + super(client, basePath, name, qPlanItem); + } +} +export class PlanItemCollectionService extends EntitySetServiceV4 { + constructor(client, basePath, name) { + super(client, basePath, name, qPlanItem, new QPlanItemId(name)); + } +} +export class EventService extends EntityTypeServiceV4 { + _occursAt; + constructor(client, basePath, name) { + super(client, basePath, name, qEvent); + } + occursAt() { + if (!this._occursAt) { + const { client, path } = this.__base; + this._occursAt = new EventLocationService(client, path, "OccursAt"); + } + return this._occursAt; + } +} +export class EventCollectionService extends EntitySetServiceV4 { + constructor(client, basePath, name) { + super(client, basePath, name, qEvent, new QPlanItemId(name)); + } +} +export class PublicTransportationService extends EntityTypeServiceV4 { + constructor(client, basePath, name) { + super(client, basePath, name, qPublicTransportation); + } +} +export class PublicTransportationCollectionService extends EntitySetServiceV4 { + constructor(client, basePath, name) { + super(client, basePath, name, qPublicTransportation, new QPlanItemId(name)); + } +} +export class FlightService extends EntityTypeServiceV4 { + _airline; + _from; + _to; + constructor(client, basePath, name) { + super(client, basePath, name, qFlight); + } + airline() { + if (!this._airline) { + const { client, path } = this.__base; + this._airline = new AirlineService(client, path, "Airline"); + } + return this._airline; + } + from() { + if (!this._from) { + const { client, path } = this.__base; + this._from = new AirportService(client, path, "From"); + } + return this._from; + } + to() { + if (!this._to) { + const { client, path } = this.__base; + this._to = new AirportService(client, path, "To"); + } + return this._to; + } +} +export class FlightCollectionService extends EntitySetServiceV4 { + constructor(client, basePath, name) { + super(client, basePath, name, qFlight, new QPlanItemId(name)); + } +} +export class EmployeeService extends EntityTypeServiceV4 { + _emails; + _addressInfo; + _homeAddress; + _features; + _bestFriend; + constructor(client, basePath, name) { + super(client, basePath, name, qEmployee); + } + emails() { + if (!this._emails) { + const { client, path } = this.__base; + this._emails = new CollectionServiceV4(client, path, "Emails", qStringCollection); + } + return this._emails; + } + addressInfo() { + if (!this._addressInfo) { + const { client, path } = this.__base; + this._addressInfo = new CollectionServiceV4(client, path, "AddressInfo", qLocation); + } + return this._addressInfo; + } + homeAddress() { + if (!this._homeAddress) { + const { client, path } = this.__base; + this._homeAddress = new LocationService(client, path, "HomeAddress"); + } + return this._homeAddress; + } + features() { + if (!this._features) { + const { client, path } = this.__base; + this._features = new CollectionServiceV4(client, path, "Features", qEnumCollection); + } + return this._features; + } + friends(id) { + const fieldName = "Friends"; + const { client, path } = this.__base; + return typeof id === "undefined" || id === null + ? new PersonCollectionService(client, path, fieldName) + : new PersonService(client, path, new QPersonId(fieldName).buildUrl(id)); + } + bestFriend() { + if (!this._bestFriend) { + const { client, path } = this.__base; + this._bestFriend = new PersonService(client, path, "BestFriend"); + } + return this._bestFriend; + } + trips(id) { + const fieldName = "Trips"; + const { client, path } = this.__base; + return typeof id === "undefined" || id === null + ? new TripCollectionService(client, path, fieldName) + : new TripService(client, path, new QTripId(fieldName).buildUrl(id)); + } + peers(id) { + const fieldName = "Peers"; + const { client, path } = this.__base; + return typeof id === "undefined" || id === null + ? new PersonCollectionService(client, path, fieldName) + : new PersonService(client, path, new QPersonId(fieldName).buildUrl(id)); + } +} +export class EmployeeCollectionService extends EntitySetServiceV4 { + constructor(client, basePath, name) { + super(client, basePath, name, qEmployee, new QPersonId(name)); + } +} +export class ManagerService extends EntityTypeServiceV4 { + _emails; + _addressInfo; + _homeAddress; + _features; + _bestFriend; + _bossOffice; + constructor(client, basePath, name) { + super(client, basePath, name, qManager); + } + emails() { + if (!this._emails) { + const { client, path } = this.__base; + this._emails = new CollectionServiceV4(client, path, "Emails", qStringCollection); + } + return this._emails; + } + addressInfo() { + if (!this._addressInfo) { + const { client, path } = this.__base; + this._addressInfo = new CollectionServiceV4(client, path, "AddressInfo", qLocation); + } + return this._addressInfo; + } + homeAddress() { + if (!this._homeAddress) { + const { client, path } = this.__base; + this._homeAddress = new LocationService(client, path, "HomeAddress"); + } + return this._homeAddress; + } + features() { + if (!this._features) { + const { client, path } = this.__base; + this._features = new CollectionServiceV4(client, path, "Features", qEnumCollection); + } + return this._features; + } + friends(id) { + const fieldName = "Friends"; + const { client, path } = this.__base; + return typeof id === "undefined" || id === null + ? new PersonCollectionService(client, path, fieldName) + : new PersonService(client, path, new QPersonId(fieldName).buildUrl(id)); + } + bestFriend() { + if (!this._bestFriend) { + const { client, path } = this.__base; + this._bestFriend = new PersonService(client, path, "BestFriend"); + } + return this._bestFriend; + } + trips(id) { + const fieldName = "Trips"; + const { client, path } = this.__base; + return typeof id === "undefined" || id === null + ? new TripCollectionService(client, path, fieldName) + : new TripService(client, path, new QTripId(fieldName).buildUrl(id)); + } + bossOffice() { + if (!this._bossOffice) { + const { client, path } = this.__base; + this._bossOffice = new LocationService(client, path, "BossOffice"); + } + return this._bossOffice; + } + directReports(id) { + const fieldName = "DirectReports"; + const { client, path } = this.__base; + return typeof id === "undefined" || id === null + ? new PersonCollectionService(client, path, fieldName) + : new PersonService(client, path, new QPersonId(fieldName).buildUrl(id)); + } +} +export class ManagerCollectionService extends EntitySetServiceV4 { + constructor(client, basePath, name) { + super(client, basePath, name, qManager, new QPersonId(name)); + } +} +export class LocationService extends EntityTypeServiceV4 { + _city; + constructor(client, basePath, name) { + super(client, basePath, name, qLocation); + } + city() { + if (!this._city) { + const { client, path } = this.__base; + this._city = new CityService(client, path, "City"); + } + return this._city; + } +} +export class CityService extends EntityTypeServiceV4 { + constructor(client, basePath, name) { + super(client, basePath, name, qCity); + } +} +export class AirportLocationService extends EntityTypeServiceV4 { + _city; + constructor(client, basePath, name) { + super(client, basePath, name, qAirportLocation); + } + city() { + if (!this._city) { + const { client, path } = this.__base; + this._city = new CityService(client, path, "City"); + } + return this._city; + } +} +export class EventLocationService extends EntityTypeServiceV4 { + _city; + constructor(client, basePath, name) { + super(client, basePath, name, qEventLocation); + } + city() { + if (!this._city) { + const { client, path } = this.__base; + this._city = new CityService(client, path, "City"); + } + return this._city; + } +} diff --git a/docs/pages/Benchmarking.md b/docs/Benchmarking.md similarity index 99% rename from docs/pages/Benchmarking.md rename to docs/Benchmarking.md index 321ff98497..882bc9b468 100644 --- a/docs/pages/Benchmarking.md +++ b/docs/Benchmarking.md @@ -67,6 +67,7 @@ The following is a walk-through on how to evaluate the performance impact of an UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs --version ``` On Windows: + ```sh set UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs --version ``` @@ -88,6 +89,7 @@ The following is a walk-through on how to evaluate the performance impact of an --export-markdown ./baseline.md ``` On Windows: + ```sh hyperfine --warmup 1 \ 'set UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs build' \ @@ -118,6 +120,7 @@ The following is a walk-through on how to evaluate the performance impact of an --export-markdown ./my_change.md ``` On Windows: + ```sh hyperfine --warmup 1 \ 'set UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs build' \ diff --git a/docs/pages/Builder.md b/docs/Builder.md similarity index 82% rename from docs/pages/Builder.md rename to docs/Builder.md index b007bdac38..fed6f4e4f1 100644 --- a/docs/pages/Builder.md +++ b/docs/Builder.md @@ -25,33 +25,33 @@ All available standard tasks are documented [in the API reference](https://ui5.g | replaceCopyright | *enabled* | *enabled* | *enabled* | | replaceVersion | *enabled* | *enabled* | *enabled* | | replaceBuildtime | | *enabled* | | -| generateJsdoc | | *disabled* ^1^ | | -| executeJsdocSdkTransformation | | *disabled* ^1^ | | +| generateJsdoc | | *disabled¹* | | +| executeJsdocSdkTransformation | | *disabled¹* | | | minify | *enabled* | *enabled* | | | generateFlexChangesBundle | *enabled* | *enabled* | | | generateLibraryManifest | | *enabled* | | | enhanceManifest | *enabled* | *enabled* | | -| generateComponentPreload | *enabled* | *disabled* ^2^ | | +| generateComponentPreload | *enabled* | *disabled²* | | | generateLibraryPreload | | *enabled* | | -| generateStandaloneAppBundle | *disabled* ^3^ | | | -| transformBootstrapHtml | *disabled* ^3^ | | | -| generateBundle | *disabled* ^4^ | *disabled* ^4^ | | +| generateStandaloneAppBundle | *disabled³* | | | +| transformBootstrapHtml | *disabled³* | | | +| generateBundle | *disabled⁴* | *disabled⁴* | | | buildThemes | | *enabled* | *enabled* | -| generateThemeDesignerResources | | *disabled* ^5^ | *disabled* ^5^ | -| generateVersionInfo | *disabled* ^1^ | | | +| generateThemeDesignerResources | | *disabled⁵* | *disabled⁵* | +| generateVersionInfo | *disabled¹* | | | | generateCachebusterInfo | *disabled* | | | -| generateApiIndex | *disabled* ^1^ | | | +| generateApiIndex | *disabled¹ * | | | | generateResourcesJson | *disabled* | *disabled* | *disabled* | *Disabled tasks can be activated by certain build modes, the project configuration, or by using the `--include-task` [CLI parameter](./CLI.md#ui5-build). See footnotes where given* --- -^1^ Enabled in `jsdoc` build, which disables most of the other tasks -^2^ Enabled for projects defining a [component preload configuration](./Configuration.md#component-preload-generation) -^3^ Enabled in `self-contained` build, which disables `generateComponentPreload` and `generateLibraryPreload` -^4^ Enabled for projects defining a [bundle configuration](./Configuration.md#custom-bundling) -^5^ Can be enabled for framework projects via the `includeTask` option. For other projects, this task is skipped +¹ Enabled in `jsdoc` build, which disables most of the other tasks +² Enabled for projects defining a [component preload configuration](./Configuration.md#component-preload-generation) +³ Enabled in `self-contained` build, which disables `generateComponentPreload` and `generateLibraryPreload` +⁴ Enabled for projects defining a [bundle configuration](./Configuration.md#custom-bundling) +⁵ Can be enabled for framework projects via the `includeTask` option. For other projects, this task is skipped ### minify @@ -65,20 +65,21 @@ Related to this, the bundling tasks will also incorporate the generated source m #### Input Source Maps -!!! info - Support for input source maps has been added in UI5 CLI [`v3.7.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.7.0). +::: tip +Support for input source maps has been added in UI5 CLI [`v3.7.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.7.0). +::: For projects facilitating transpilation (such as TypeScript-based projects), it is commonly desired to debug in the browser using the original sources, e.g. TypeScript files. To make this work, the transpilation process first needs to create source maps and reference them in the generated JavaScript code. UI5 CLI's `minify` task will then find this reference and incorporate the source map into the minification process. In the end, the minified JavaScript resources will reference an updated source map, which reflects the transpilation as well as the minification. The browser can use this to map every statement back to the original TypeScript file, making debugging a breeze. -!!! warning - If a resource has been modified by another build task before `minify` is executed, any referenced source map will be ignored. This is to ensure the integrity of the source maps in the build result. +::: warning +If a resource has been modified by another build task before `minify` is executed, any referenced source map will be ignored. This is to ensure the integrity of the source maps in the build result. - It is possible that the modification of the resource content is not reflected in the associated source map, rendering it corrupted. A corrupt source map can make it impossible to properly analyze and debug a resource in the browser development tools. - - Standard tasks which may modify resources without updating the associated source maps currently include `replaceVersion`, `replaceCopyright` and `replaceBuildtime`. +It is possible that the modification of the resource content is not reflected in the associated source map, rendering it corrupted. A corrupt source map can make it impossible to properly analyze and debug a resource in the browser development tools. +Standard tasks which may modify resources without updating the associated source maps currently include `replaceVersion`, `replaceCopyright` and `replaceBuildtime`. +::: Expand the block below to view a diagram illustrating the minification process and source map handling. ??? info "Minification Activity Diagram" @@ -166,17 +167,17 @@ If you see this error message, please adjust your code by applying one of the fo **Option 2**: Wrap the respective files manually in `sap.ui.define` modules as shown below: -!!! example - **Before**: - ```js - const myFancyModule = {}; - ``` - - **After**: - ```js - sap.ui.define([], () => { - "use strict"; - const myFancyModule = {}; - return myFancyModule; - }); - ``` +> [!IMPORTANT] Example +>**Before**: +>```js +>const myFancyModule = {}; +>``` +> +>**After**: +>```js +>sap.ui.define([], () => { +> "use strict"; +> const myFancyModule = {}; +> return myFancyModule; +>}); +>``` diff --git a/docs/pages/CodeAnalysis.md b/docs/CodeAnalysis.md similarity index 95% rename from docs/pages/CodeAnalysis.md rename to docs/CodeAnalysis.md index 9f7518a6c2..ccae6df0d5 100644 --- a/docs/pages/CodeAnalysis.md +++ b/docs/CodeAnalysis.md @@ -88,27 +88,26 @@ The **XMLComposite** control is deprecated since version UI5 1.88. Nevertheless, The [XML Composite Analyzer](https://github.com/SAP/ui5-builder/blob/main/lib/lbt/analyzer/XMLCompositeAnalyzer.js) searches for the name of the configured fragment containing the **XMLComposite** control. -=== "Name of the XMLComposite is equal to fragment name" - - ```javascript hl_lines="4" - sap.ui.define([ - "sap/ui/core/XMLComposite" - ], function(XMLComposite) { - return XMLComposite.extend("composites.MyComposite", {} - }); - ``` - -=== "Dedicated fragment name" - - ```javascript hl_lines="5" - sap.ui.define([ - "sap/ui/core/XMLComposite" - ], function(XMLComposite) { - return XMLComposite.extend("composites.MyComposite", { - fragment: "composites.custom.MyComposite" - } - }); - ``` +::: code-group +```javascript [Name of the XMLComposite is equal to fragment name] {4} +sap.ui.define([ + "sap/ui/core/XMLComposite" +], function(XMLComposite) { + return XMLComposite.extend("composites.MyComposite", {} +}); +``` + + +```javascript [Dedicated fragment name] {5} +sap.ui.define([ + "sap/ui/core/XMLComposite" +], function(XMLComposite) { + return XMLComposite.extend("composites.MyComposite", { + fragment: "composites.custom.MyComposite" + } +}); +``` +::: ## Library Initialization diff --git a/docs/pages/Configuration.md b/docs/Configuration.md similarity index 65% rename from docs/pages/Configuration.md rename to docs/Configuration.md index 451c0446c8..d4899607cd 100644 --- a/docs/pages/Configuration.md +++ b/docs/Configuration.md @@ -10,75 +10,62 @@ A projects UI5 CLI configuration is typically located in a [YAML](https://yaml.o Starting with [Specification Version 2.0](#specification-version-20) the configuration is validated according to a JSON schema. The current version of the schema can be found here: https://ui5.github.io/cli/schema/ui5.yaml.json -The schema is also part of the [JSON Schema Store Catalog](http://schemastore.org/json/) which is used by the [YAML Language Server](https://github.com/redhat-developer/yaml-language-server). -See the list of [clients](https://github.com/redhat-developer/yaml-language-server/blob/main/README.md#clients) to find extensions for various IDEs and editors. +The schema is also part of the [JSON Schema Store Catalog](http://schemastore.org/json/) which is used by the [YAML Language Server](https://github.com/redhat-developer/yaml-language-server). See the list of [clients](https://github.com/redhat-developer/yaml-language-server/blob/main/README.md#clients) to find extensions for various IDEs and editors. ## Example - ```yaml specVersion: "4.0" type: application|library|theme-library|module metadata: name: some.project.name ``` - ## General Configuration ### Specification Version and -Type -A project must define a specification version (`specVersion`), to which its configuration is compatible to. Also see [Specification Versions](#specification-versions). +A project must define a specification version (`specVersion`), to which its configuration is compatible to. Also see [Specification Versions](/docs/Configuration#specification-versions). In addition, a project must define a `type`. This can be either `application`, `library`, `theme-library` (since Specification Version 1.1), or `module`. The type defines the default path mappings and build tasks. See [UI5 Builder: Types](./Builder.md#types) for details. - -!!! example - - === "application" - - ```yaml - specVersion: "4.0" - type: application - ``` - - === "library" - - ```yaml - specVersion: "4.0" - type: library - ``` - - === "theme-library" - - ```yaml - specVersion: "4.0" - type: theme-library - ``` - - === "module" - - ```yaml - specVersion: "4.0" - type: module - ``` +> [!IMPORTANT] Example +>::: code-group +> +> +>```yaml [application] +>specVersion: "4.0" +>type: application +>``` +>```yaml [library] +>specVersion: "4.0" +>type: library +>``` +>```yaml [theme-library] +>specVersion: "4.0" +>type: theme-library +>``` +>```yaml [module] +>specVersion: "4.0" +>type: module +>``` +>::: ### Kind The configuration may also contain a `kind` property. This is used to differentiate between projects and extensions. -This configuration defaults to `kind: project`, which means you typically only need to specify it for extensions like [Custom Tasks](./extensibility//CustomTasks.md#custom-task-extension). +This configuration defaults to `kind: project`, which means you typically only need to specify it for extensions like [Custom Tasks](./extensibility/CustomTasks.md#custom-task-extension). ### Metadata -!!! example - ```yaml - metadata: - name: my.company.project - copyright: |- - My Project - * (c) Copyright 2009-${currentYear} My Company - * Licensed under the XYZ License, Version n - see LICENSE.txt. - ``` - +> [!IMPORTANT] Example +>```yaml +>metadata: +> name: my.company.project +> copyright: |- +> My Project +> * (c) Copyright 2009-${currentYear} My Company +> * Licensed under the XYZ License, Version n - see LICENSE.txt. +>``` #### name A project must have a `name`. @@ -117,81 +104,78 @@ Note that all configured paths must be written in POSIX (i.e. using only forward #### Available Path Mappings -=== "Applications" - - `webapp`: Mapped to runtime path `/` (root) - - ```yaml title="Default Configuration" - resources: - configuration: - paths: - webapp: webapp - ``` - -=== "Libraries" - - `src`: Mapped to runtime path `/resources` - - `test`: Mapped to runtime path `/test-resources` - - ```yaml title="Default Configuration" - resources: - configuration: - paths: - src: src - test: test - ``` - -=== "Modules" - Modules can map any virtual paths to any physical path within the project. - - However, it is recommended that modules include their namespace in the virtual path and use the `/resources` prefix (e.g. `/resources/my/library/module-xy/`) to avoid name clashes with other projects. - - ```yaml title="Example Configuration" - resources: - configuration: - paths: - /resources/my/library/module-xy/: lib - /resources/my/library/module-xy-min/: dist - ``` - -!!! example - For an application project with the following directory structure, you need the path mapping configuration given below: - - ``` hl_lines="3 4 5" title="Directory Structure" - my-app/ - \_ ui5.yaml - \_ lib/ - \_ js/ - \_ app/ - ``` - - ```yaml hl_lines="4" title="Path Mapping Configuration" - resources: - configuration: - paths: - webapp: lib/js/app - ``` +::: info Applications +- webapp: Mapped to runtime path `/` (root) +```yaml [Applications] -### Encoding of `*.properties` files +resources: + configuration: + paths: + webapp: webapp +``` +::: + + + + +:::info Libraries + - src: Mapped to runtime path `/resources` +- test: Mapped to runtime path `/test-resources` +```yaml [Libraries] +resources: + configuration: + paths: + src: src + test: test +``` +::: + +::: info Modules +Modules can map any virtual paths to any physical path within the project. +However, it is recommended that modules include their namespace in thevirtual +path and use the `/resources` prefix (e.g. `/resources/my/librarymodule-xy/`) +to avoid name clashes with other projects. + +```yaml [Modules] +resources: + configuration: + paths: + /resources/my/library/module-xy/: lib + /resources/my/library/module-xy-min/: dist +``` -!!! info - This configuration is available since UI5 CLI [`v1.7.0`](https://github.com/SAP/ui5-cli/releases/tag/v1.7.0) -!!! example - === "UTF-8" +::: - ```yaml - resources: - configuration: - propertiesFileSourceEncoding: UTF-8 - ``` - === "ISO-8859-1" - ```yaml - resources: - configuration: - propertiesFileSourceEncoding: ISO-8859-1 - ``` + +> [!IMPORTANT] Example +>For an application project with the following directory structure, youneed the path mapping configuration given below: +>Directory Structure: +>```yaml [Directory Structure] +>my-app/ +>\_ ui5.yaml +>\_ lib/ // [!code focus] +> \_ js/ // [!code focus] +> \_ app/ // [!code focus] +> +>``` +> Path Mapping Configuration: +>```yaml [Path Mapping Configuration] +>resources: +> configuration: +> paths: +> webapp: lib/js/app // [!code focus] +>``` +> +### Encoding of `*.properties` files + +> [!Tip] Info +>This configuration is available since UI5 CLI [`v1.7.0`](https://github.com/SAP/ui5-cli/releases/tag/v1.7.0) +> + By default UI5 CLI expects different encodings for `*.properties` i18n files, depending on the project's specification version: @@ -206,19 +190,11 @@ UI5 CLI will read the corresponding files of the project in the given encoding. ## Custom Configuration -!!! info - This configuration is available since UI5 CLI [`v2.2.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.2.0) - and applies only to projects defining [Specification Version](#specification-versions) - 2.1 or higher. - -!!! example - ```yaml - customConfiguration: - myTool: - key: value - myOtherTool: - otherKey: otherValue - ``` +::: tip Info +This configuration is available since UI5 CLI [`v2.2.0`](https://githubcom/SAP/ui5-cli/releases/tag/v2.2.0) +and applies only to projects defining [Specification Version](/CODE_OF_CONDUCT.mddocs/Configuration/#specification-versions) +2.1 or higher. +::: Custom configuration that is ignored by UI5 CLI. This can be used to store UI5 specific configuration for third-party tools. @@ -228,30 +204,30 @@ For third-party tools it is recommended to follow a namespace-like structure. ## Framework Configuration -!!! info - This configuration is available since UI5 CLI [`v2.0.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.0.0) - and applies only to projects defining [Specification Version](#specification-versions) - 2.0 or higher. - +::: tip Info +This configuration is available since UI5 CLI [`v2.0.0`](https://githubcom/SAP/ui5-cli/releases/tag/v2.0.0) +and applies only to projects defining [Specification Version(#specification-versions) +2.0 or higher. +::: Define your project's framework dependencies. ### Framework and Version In your project's framework configuration you must define whether you want to use the OpenUI5 or the SAPUI5 framework and which version: -=== "OpenUI5" - ```yaml - framework: - name: OpenUI5 - version: 1.82.0 - ``` +::: code-group -=== "SAPUI5" - ```yaml - framework: - name: SAPUI5 - version: 1.82.0 - ``` +```yaml [OpenUI5] +framework: + name: OpenUI5 + version: 1.82.0 +``` +```yaml [SAPUI5] +framework: + name: SAPUI5 + version: 1.82.0 +``` +::: If you are not sure which framework is right for you, see our [documentation on the differences between OpenUI5 and SAPUI5](./FAQ.md##whats-the-difference-between-openui5-and-sapui5). @@ -262,81 +238,83 @@ You can find an overview of the available versions for each framework here: - [**SAPUI5** Version Overview](http://ui5.sap.com/versionoverview.html) - *The lowest version supported by UI5 CLI is __1.76.0__* -!!! info - Projects that use the OpenUI5 framework cannot depend on projects that use the SAPUI5 framework. +::: tip Info +Projects that use the OpenUI5 framework cannot depend on projects thatuse the SAPUI5 framework. +::: ### Dependencies - -!!! example - === "application" - ```yaml - specVersion: "4.0" - type: application - metadata: - name: my.company.app - framework: - name: OpenUI5 - version: 1.82.0 - libraries: - - name: sap.ui.core - - name: sap.m - - name: sap.ui.table - - name: themelib_sap_fiori_3 - ``` - - === "library" - ```yaml - specVersion: "4.0" - type: library - metadata: - name: my.company.library - framework: - name: SAPUI5 - version: 1.82.0 - libraries: - - name: sap.ui.core - - name: sap.m - - name: themelib_sap_belize - optional: true - - name: themelib_sap_bluecrystal - optional: true - - name: themelib_sap_fiori_3 - optional: true - ``` - - When building an application depending on this library as well as one of the theme libraries, only that theme is built for this library. +> [!IMPORTANT] Example +> +>::: code-group +> +> ```yaml [application] +> specVersion: "4.0" +> type: application +> metadata: +> name: my.company.app +> framework: +> name: OpenUI5 +> version: 1.82.0 +> libraries: +> - name: sap.ui.core +> - name: sap.m +> - name: sap.ui.table +> - name: themelib_sap_fiori_3 +> ``` +> +> ```yaml [library] +> specVersion: "4.0" +> type: library +> metadata: +> name: my.company.library +> framework: +> name: SAPUI5 +> version: 1.82.0 +> libraries: +> - name: sap.ui.core +> - name: sap.m +> - name: themelib_sap_belize +> optional: true +> - name: themelib_sap_bluecrystal +> optional: true +> - name: themelib_sap_fiori_3 +> optional: true +> ``` +> ::: + +When building an application depending on this library as well as one of the theme libraries, only that theme is built for this library. #### Runtime Dependencies All libraries required by your project must be listed in the `libraries` section of the framework configuration: +::: code-group + +```yaml [OpenUI5] {4-7} +framework: + name: OpenUI5 + version: 1.82.0 + libraries: + - name: sap.ui.core + - name: sap.m + - name: sap.ui.table +``` -=== "OpenUI5" - ```yaml hl_lines="4-7" - framework: - name: OpenUI5 - version: 1.82.0 - libraries: - - name: sap.ui.core - - name: sap.m - - name: sap.ui.table - ``` - -=== "SAPUI5" - ```yaml hl_lines="4-7" - framework: - name: SAPUI5 - version: 1.82.0 - libraries: - - name: sap.ui.core - - name: sap.m - - name: sap.ui.comp - ``` +```yaml [SAPUI5] {4-7} +framework: + name: SAPUI5 + version: 1.82.0 + libraries: + - name: sap.ui.core + - name: sap.m + - name: sap.ui.comp +``` +::: #### Development Dependencies Development dependencies are only installed if the project defining them is the current root project. They are typically only required during the development of the project. -```yaml hl_lines="3" +```yaml {3} libraries: - name: sap.ushell development: true @@ -348,7 +326,7 @@ Note that a development dependency cannot be optional and vice versa. Optional dependencies are installed either if the project defining them is the current root project or if the dependency is already part of the current dependency tree. A typical use case is libraries defining optional dependencies to all theme libraries they support. You can choose which theme library to use by the application that is consuming the library by declaring it as a non-optional dependency. -```yaml hl_lines="3" +```yaml {3} libraries: - name: themelib_sap_fiori_3 optional: true @@ -356,64 +334,67 @@ You can choose which theme library to use by the application that is consuming t ## Build Configuration ### Exclude Resources - -!!! example - === "application" - ```yaml - builder: - resources: - excludes: - # You can specify paths relative to the configured "webapp" directory - - "index.html" - # When defining absolute paths, make sure to specify the namespace plus the "/resources/" prefix - - "/resources/my/project/namespace/test/**" - ``` - - === "library or theme-library" - ```yaml - builder: - resources: - excludes: - # For libraries, all paths must be absolute, except for wildcards - - "/resources/some/project/name/test_results/**" - - "/test-resources/**" - - "!/test-resources/some/project/name/demo-app/**" - - "**/*.svg" - ``` - - === "module" - !!! info - For projects of type `module`, this configuration is available since UI5 CLI [`v3.5.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.5.0) - and applies only to projects defining [Specification Version](#specification-versions) 3.1 or higher. - ```yaml - builder: - resources: - excludes: - # For modules, all paths must be absolute, except for wildcards - - "/resources/my/library/module-xy/min/**" - - "!/resources/my/library/module-xy/min/module-xy-bundle.js" - - "**/*.svg" - ``` +> [!IMPORTANT] Example +>For projects of type `module`, this configuration is available since UI5CLI [`v3.5.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.5.0) +>and applies only to projects defining [Specification Version](#specification-versions) +> 3.1 or higher. +>:::code-group +> +>```yaml [application] +>builder: +> resources: +> excludes: +> # You can specify paths relative to the configured "webapp" directory +> - "index.html" +> # When defining absolute paths, make sure to specify the namespace plus the "/resources/" prefix +> - "/resources/my/project/namespace/test/**" +>``` +> +>```yaml [library or theme-library] +>builder: +> resources: +> excludes: +> # For libraries, all paths must be absolute, except for wildcards +> - "/resources/some/project/name/test_results/**" +> - "/test-resources/**" +> - "!/test-resources/some/project/name/demo-app/**" +> - "**/*.svg" +>``` +> +> +> +>```yaml [module] +>builder: +> resources: +> excludes: +> # For modules, all paths must be absolute, except for wildcards +> - "/resources/my/library/module-xy/min/**" +> - "!/resources/my/library/module-xy/min/module-xy-bundle.js" +> - "**/*.svg" +>``` +> You can exclude a projects resources from the build process using a list of glob patterns. Matching resources will be ignored by the builder and all build tasks. Patterns are applied to the **virtual resource paths** (i.e. the UI5 runtime paths). Exclude patterns are always applied after any includes. ### Cachebuster - -!!! example - === "time (default)" - ```yaml - builder: - cachebuster: - signatureType: time - ``` - === "hash" - ```yaml - builder: - cachebuster: - signatureType: hash - ``` +> [!IMPORTANT] Example +> +>::: code-group +> +>```yaml [time (default)] +>builder: +> cachebuster: +> signatureType: time +>``` +> +>```yaml [hash] +>builder: +> cachebuster: +> signatureType: hash +>``` +> By default, the generated cachebuster info file signatures are based on timestamps (`time`). In setups like CI environments, a mechanism based on file hashes (`hash`) might be more reliable. Also see [PR #241](https://github.com/SAP/ui5-builder/pull/241) for more details. @@ -429,61 +410,61 @@ There are two ways to define the set of components for which preload bundles sho #### paths -!!! example - ```yaml - builder: - componentPreload: - paths: - - "my/awesome/app/**/Component.js" - ``` +> [!IMPORTANT] Example +>```yaml +>builder: +> componentPreload: +> paths: +> - "my/awesome/app/**/Component.js" +>``` +> The `paths` option takes one or multiple patterns. For every matched file a separate `Component-preload.js` will be generated. Patterns are always applied relative to the project's virtual source directory `/resources/`. #### namespaces -!!! example - ```yaml - builder: - componentPreload: - namespaces: - - "my/awesome/app" - - "my/awesome/app/componentOne" - - "my/awesome/app/componentTwo" - ``` - +> [!IMPORTANT] Example +> +>```yaml +>builder: +> componentPreload: +> namespaces: +> - "my/awesome/app" +> - "my/awesome/app/componentOne" +> - "my/awesome/app/componentTwo" +> +>``` The `namespaces` option takes one or multiple component namespaces, which correspond to the directory structures. #### excludes -!!! info - This configuration is available since UI5 CLI [`v2.10.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.10.0) - and applies only to projects defining [Specification Version](#specification-versions) - 2.3 or higher. - -!!! example - === "Single Component" - - ```yaml - builder: - componentPreload: - excludes: - - "my/awesome/app/localService/**" - ``` - - === "Multiple Components" - - ```yaml - builder: - componentPreload: - namespaces: - - "my/awesome/app" - - "my/awesome/app/componentOne" - - "my/awesome/app/componentTwo" - excludes: - - "my/awesome/app/**/thirdparty/" - - "!my/awesome/app/componentTwo/thirdparty/NotExcluded.js" - ``` - +::: tip Info +This configuration is available since UI5 CLI [`v2.10.0`](https://githubcom/SAP/ui5-cli/releases/tag/v2.10.0) +and applies only to projects defining [Specification Version(#specification-versions) +2.3 or higher. +::: +> [!IMPORTANT] Example +>::: code-group +> +>```yaml [Single Component] +>builder: +> componentPreload: +> excludes: +> - "my/awesome/app/localService/**" +>``` +>```yaml [Multiple Components] +>builder: +> componentPreload: +> namespaces: +> - "my/awesome/app" +> - "my/awesome/app/componentOne" +> - "my/awesome/app/componentTwo" +> excludes: +> - "my/awesome/app/**/thirdparty/" +> - "!my/awesome/app/componentTwo/thirdparty/NotExcluded.js" +>``` +>::: +> List of modules declared as glob patterns (resource name patterns) that are excluded from the component preload bundles. Similarly to the use of a single `*` or double `**` asterisk, a pattern ending with a slash `/` denotes an arbitrary number of characters or folder names. Re-includes have to be marked with a leading exclamation mark `!`. The order of filters is relevant; a later inclusion overrides an earlier exclusion, and vice versa. Note that patterns are always applied relative to the project's virtual source directory `/resources/`. Re-includes must start with the namespace of the component they apply to. @@ -494,38 +475,41 @@ For projects of type `library` a `library-preload.js` bundle is generated by def #### excludes -!!! info - This configuration is available since UI5 CLI [`v2.10.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.10.0) - and applies only to projects defining [Specification Version](#specification-versions) - 2.3 or higher. - -!!! example - ```yaml - builder: - libraryPreload: - excludes: - - "my/lib/thirdparty/" - - "!my/lib/thirdparty/NotExcluded.js" - ``` +::: tip Info +This configuration is available since UI5 CLI [`v2.10.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.10.0) +and applies only to projects defining [Specification Version](#specification-versions) +2.3 or higher. +::: + +> [!IMPORTANT] Example +>```yaml +>builder: +> libraryPreload: +> excludes: +> - "my/lib/thirdparty/" +> - "!my/lib/thirdparty/NotExcluded.js" +>``` + List of modules declared as glob patterns (resource name patterns) that are excluded from `library-preload.js` bundle. Similarly to the use of a single `*` or double `**` asterisk, a pattern ending with a slash `/` denotes an arbitrary number of characters or folder names. Re-includes have to be marked with a leading exclamation mark `!`. The order of filters is relevant; a later inclusion overrides an earlier exclusion, and vice versa. Note that patterns are always applied relative to the project's virtual source directory `/resources/`. Re-includes must start with the library's namespace. ### Custom Tasks -!!! example - ```yaml - builder: - customTasks: - - name: custom-task-1 - beforeTask: replaceCopyright - configuration: - some-key: some value - - name: custom-task-2 - afterTask: custom-task-1 - configuration: - color: blue - ``` +> [!IMPORTANT] Example +> +>```yaml +>builder: +> customTasks: +> - name: custom-task-1 +> beforeTask: replaceCopyright +> configuration: +> some-key: some value +> - name: custom-task-2 +> afterTask: custom-task-1 +> configuration: +> color: blue +>``` You can define custom build tasks that will be executed for the project. Please refer to the [Custom Tasks Documentation](./extensibility/CustomTasks.md) for a detailed explanation and examples of the build extensibility. @@ -537,13 +521,14 @@ Optionally, arbitrary `configuration` can be passed to the custom task. ### JSDoc -!!! example - ```yaml - builder: - jsdoc: - excludes: - - "some/project/name/thirdparty/**" - ``` +> [!IMPORTANT] Example +> +>```yaml +>builder: +> jsdoc: +> excludes: +> - "some/project/name/thirdparty/**" +>``` You can exclude the resources of a project from the JSDoc build process using a list of glob patterns. Matching resources will be ignored by the JSDoc build task. @@ -553,22 +538,23 @@ These excludes are applied *before* any general builder excludes that have been ### Include Dependencies -!!! info - This configuration is available since UI5 CLI [`v2.12.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.12.0) - and applies only to projects defining [Specification Version](#specification-versions) - 2.5 or higher. - -!!! example - ```yaml - builder: - settings: - includeDependency: - - shimmed.thirdparty.library - includeDependencyRegExp: - - ^com\.namespace - includeDependencyTree: - - sap.m - ``` +::: tip Info +This configuration is available since UI5 CLI [`v2.12.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.12.0) +and applies only to projects defining [Specification Version](#specification-versions) +2.5 or higher. +::: + +> [!IMPORTANT] Example +>```yaml +>builder: +> settings: +> includeDependency: +> - shimmed.thirdparty.library +> includeDependencyRegExp: +> - ^com\.namespace +> includeDependencyTree: +> - sap.m +>``` You can include certain dependencies into the build process using the `includeDependency` builder setting. By using `includeDependencyRegExp`, a regular expression can be used, for example to specify a namespace to dynamically select a group of dependencies that have to be included into the build result. By using `includeDependencyTree`, a selected dependency including all of its sub-dependencies is used. @@ -582,29 +568,30 @@ The project's `ui5.yaml` file can contain a list of modules declared as glob pat Note that patterns are always applied relative to the project's virtual source directory `/resources/`. -!!! info - This configuration is available since UI5 CLI [`v2.14.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.14.0) - and applies only to projects defining [Specification Version](#specification-versions) - 2.6 or higher. - -!!! example - ```yaml - builder: - minification: - excludes: - - "my/lib/thirdparty/" - - "!my/lib/thirdparty/NotExcluded.js" - ``` +::: tip Info +This configuration is available since UI5 CLI [`v2.14.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.14.0) +and applies only to projects defining [Specification Version](#specification-versions) +2.6 or higher. +::: + +> [!IMPORTANT] Example +>```yaml +>builder: +> minification: +> excludes: +> - "my/lib/thirdparty/" +> - "!my/lib/thirdparty/NotExcluded.js" +>``` ## Server Configuration -!!! example - ```yaml - server: - settings: - httpPort: 1337 - httpsPort: 1443 - ``` +> [!IMPORTANT] Example +>```yaml +>server: +> settings: +> httpPort: 1337 +> httpsPort: 1443 +>``` By default, UI5 CLI will serve applications using Port `8080`. When running in HTTP/2 or HTTPS mode, Port `8443` will be used. @@ -616,30 +603,30 @@ The default and configured server ports can always be overwritten with the CLI p ## Extension Configuration -!!! example - ```yaml - specVersion: "4.0" - type: application - metadata: - name: my.application - --- - specVersion: "4.0" - kind: extension - type: project-shim - metadata: - name: my.application.thirdparty - shims: - configurations: - lodash: - specVersion: "4.0" - type: module - metadata: - name: lodash - resources: - configuration: - paths: - /resources/my/application/thirdparty/: "" - ``` +> [!IMPORTANT] Example +>```yaml +>specVersion: "4.0" +>type: application +>metadata: +> name: my.application +>--- +>specVersion: "4.0" +>kind: extension +>type: project-shim +>metadata: +> name: my.application.thirdparty +>shims: +> configurations: +> lodash: +> specVersion: "4.0" +> type: module +> metadata: +> name: lodash +> resources: +> configuration: +> paths: +> /resources/my/application/thirdparty/: "" +>``` Extensions configuration can be added to any projects `ui5.yaml`. For better readability, it should to be located *after* the projects configuration, separated by [three dashes](https://yaml.org/spec/1.2/spec.html#id2760395) "`---`". @@ -648,41 +635,42 @@ In cases where an extension shall be reused across multiple projects you can mak Extensions can be identified by the `kind: extension` configuration. Note that if no `kind` configuration is given, [`project`](#project-configuration) is assumed. ### Available Extensions -- [Custom Tasks](./extensibility/CustomTasks.md) -- [Custom Server Middleware](./extensibility/CustomServerMiddleware.md) + +- [Custom Tasks](./extensibility/CustomTasks.md) + +- [Custom Server Middleware](./extensibility/CustomServerMiddleware.md) - [Project Shims](./extensibility/ProjectShims.md) ## Custom Bundling - -!!! example - ```yaml - builder: - bundles: - - bundleDefinition: - name: "sap-ui-custom.js" - sections: - - mode: raw - filters: - - ui5loader-autoconfig.js - resolve: true - sort: true - bundleOptions: - optimize: true - - bundleDefinition: - name: "app.js" - sections: - - mode: preload - filters: - - some/app/Component.js - resolve: true - sort: true - - mode: provided - filters: - - ui5loader-autoconfig.js - resolve: true - bundleOptions: - optimize: true - ``` +> [!IMPORTANT] Example +>```yaml +>builder: +> bundles: +> - bundleDefinition: +> name: "sap-ui-custom.js" +> sections: +> - mode: raw +> filters: +> - ui5loader-autoconfig.js +> resolve: true +> sort: true +> bundleOptions: +> optimize: true +> - bundleDefinition: +> name: "app.js" +> sections: +> - mode: preload +> filters: +> - some/app/Component.js +> resolve: true +> sort: true +> - mode: provided +> filters: +> - ui5loader-autoconfig.js +> resolve: true +> bundleOptions: +> optimize: true +>``` Custom bundles can be defined in the `ui5.yaml`. Within the `builder/bundles` configuration a list of `bundleDefinitions` can be described. @@ -693,9 +681,11 @@ Custom bundles can be defined in the `ui5.yaml`. Within the `builder/bundles` co A list of bundle definitions. A `bundleDefinition` contains of the following options: - `name`: The module bundle name + - `defaultFileTypes`: List of default file types which should be included in the bundle. Defaults to: `.js`, `.control.xml`, `.fragment.html`, `.fragment.json`, `.fragment.xml`, `.view.html`, `.view.json` and `.view.xml` - `sections`: A list of module bundle definition sections. Each section specifies an embedding technology (see [API-Reference](https://ui5.github.io/cli/v4/api/module-@ui5_builder_processors_bundlers_moduleBundler.html#~ModuleBundleDefinition)) and lists the resources that should be in- or excluded from the section. - `mode`: The embedding technology (e.g. provided, raw, preload, bundleInfo, depCache, require) + - `filters`: List of modules declared as glob patterns (resource name patterns) that are in- or excluded. Similarly to the use of a single `*` or double `**` asterisk, a pattern ending with a slash `/` denotes an arbitrary number of characters or folder names. Excludes have to be marked with a leading exclamation mark `!`. The order of filters is relevant; a later inclusion overrides an earlier exclusion, and vice versa. - `resolve`: Setting resolve to `true` will also include all (transitive) dependencies of the files - `resolveConditional`: Whether conditional dependencies of modules should be resolved and added to the module set for this section. By default set to `false` @@ -703,14 +693,15 @@ A list of bundle definitions. A `bundleDefinition` contains of the following opt - `renderer`: Whether renderers for controls should be added to the module set. By default set to `false` - `sort`: By default, modules are sorted by their dependencies. The sorting can be suppressed by setting the option to `false` - `async` (only available if `mode` equals `require`): Specifies whether the `require` section of the module should use an asynchronous API. When set to `true`, the modules are loaded using `sap.ui.require`. When set to `false`, modules are loaded using `sap.ui.requireSync`, which is not available in UI5 2.x. - - Projects defining [Specification Version](#specification-versions) 4.0 and higher: Defaults to `true` - - Projects defining [Specification Version](#specification-versions) lower than 4.0: Behaves like `false` but can't be configured + - Projects defining [Specification Version](#/docs/Configuration#specification-versions) 4.0 and higher: Defaults to `true` + - Projects defining [Specification Version](#/docs/Configuration#specification-versions) lower than 4.0: Behaves like `false` but can't be configured **bundleOptions** - `optimize`: If set to `true`, the module bundle gets minified - - Projects defining [Specification Version](#specification-versions) 3.0 and higher: Defaults to `true` - - Projects defining [Specification Version](#specification-versions) lower than 3.0: Defaults to `false` + + - Projects defining [Specification Version](/docs/Configuration##specification-versions) 3.0 and higher: Defaults to `true` + - Projects defining [Specification Version](#/docs/Configuration#specification-versions) lower than 3.0: Defaults to `false` - `decorateBootstrapModule`: By default set to `false`. If set to `true`, the module will be decorated with an optimization marker - `addTryCatchRestartWrapper`: By default set to `false`. If set to `true`, bootable module bundles gets wrapped with a try/catch to filter "Restart" errors - `numberOfParts`: By default set to `1`. The number of parts into which a module bundle should be splitted @@ -758,8 +749,9 @@ Version | UI5 CLI Release **Breaking changes:** -- Removed bundle option [`usePredefineCalls`](#properties). UI5 CLI v4.0.0 and above will always use predefine calls in bundles, making this option obsolete. -- Adds new a new option `async` for `bundleDefinition`-section configuration, see [Configuration: `bundleDefinition.sections`](../pages/Configuration.md#properties) for details. +- Removed bundle option [`usePredefineCalls`](/docs/Configuration##properties). UI5 CLI v4.0.0 and above will always use predefine calls in bundles, making this option obsolete. + +- Adds new a new option `async` for `bundleDefinition`-section configuration, see [Configuration: `bundleDefinition.sections`](/docs/Configuration##properties) for details. Specification Version 4.0 projects are supported by [UI5 CLI](https://github.com/SAP/ui5-cli) v4.0.0 and above. @@ -786,6 +778,7 @@ Specification Version 3.1 projects are supported by [UI5 CLI](https://github.com **Breaking changes:** - The `metadata.name` property is now restricted to contain only certain characters and no uppercase letters. See [`name`](#name) for details + - [bundleOptions](#custom-bundling) has been modified: * `debugMode` has been removed * `optimize` now always defaults to `true` [#685](https://github.com/SAP/ui5-builder/pull/685) diff --git a/docs/ESSupport.md b/docs/ESSupport.md new file mode 100644 index 0000000000..cdf6c85677 --- /dev/null +++ b/docs/ESSupport.md @@ -0,0 +1,551 @@ + +# ECMAScript Support + +UI5 Tooling offers general support for `ES2023` ECMAScript features. While a `ui5 build` is executed, UI5 Tooling analyses a project's code. Depending on the project type, you have to consider some restrictions regarding the usage of certain ECMAScript syntax. + +| UI5 Tooling Version | Supported ECMAScript Version | Note | +|-------------------- |----------------------------- | ---- | +| v3.11+ | ECMAScript 2023 | | +| v3.0+ | ECMAScript 2022 | | +| v2.0+ | ECMAScript 2009/ES5 | Note that code up to ECMAScript 2020 can be parsed, however required code analysis might not work correctly for specific language features | + +The following section describes all restrictions grouped by the kind of ECMAScript language feature. To get more insights into the code analysing executed by UI5 Tooling check out [Code Analysis](./CodeAnalysis.md). + +## Language Features with Restrictions + +The following sections describe the restrictions grouped by the ECMAScript language feature. + +### JavaScript modules + +In general, UI5 Tooling only analyzes **JavaScript** files of type `script`. [JavaScript Modules](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules) are not analyzed. + +UI5 Tooling and the UI5 Runtime does not support the usage of `export` and `import` of JavaScript Modules. Therefore, `sap.ui.define` has to be used. + + +::: code-group +```javascript [Supported] +sap.ui.define([ + "ModuleA", + "ModuleB" +], function(ModuleA, ModuleB) { + return ModuleA.extend("ModuleC", {}); +}); +``` + +```javascript [Not Supported] {1,2,3} +import ModuleA from "ModuleA"; +import ModuleB from "ModuleB"; +export default class ModuleC extends ModuleA {}; +``` +::: +### Template Literal + +[Template Literals](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals) without an expressions can be used in all places where string literals can be used. However, since UI5 Tooling will attempt a static code analysis for certain calls to UI5 API, Template Literals with one or more expressions (e.g. `Hello ${planets[2]}`) can't be used in the scenarios described below. + +#### Template Literal in `sap.ui.define` or `sap.ui.require` + +Template Literals with one or more expressions inside a `sap.ui.define` or `sap.ui.require` call are not supported. + +::: code-group + +```javascript [Supported] +sap.ui.define([ + `ModuleA`, + `ModuleB` +], function(ModuleA, ModuleB) { +}); +``` +```javascript [Not Supported] {4} +const i = `B`; +sap.ui.define([ + `ModuleA`, + `Module${i}` +], function(ModuleA, ModuleB) { +}); +``` +::: +The same rule applies also for the usage of deprecated or no longer recommended APIs `jQuery.sap.declare`, `jQuery.sap.declare`, `define`, `require`, `require.predefine`, `sap.ui.predefine`, `sap.ui.requireSync` and `sap.ui.require.preload`. + +#### Template Literal in Smart Template Declaration + +When declaring a **Smart Template** using a **Template Literal** with one or more expressions in the name of the **Smart Template** is not supported. + +::: code-group +```javascript [Supported] +sap.ui.define([ + `sap/suite/ui/generic/template/lib/TemplateAssembler` +], function(TemplateAssembler) { + return TemplateAssembler.getTemplateComponent(getMethods, + `sap.suite.ui.generic.templates.Page.Component`, { + metadata: { + properties: { + templateName: { + type: `string`, + defaultValue: `sap.suite.ui.generic.templates.Page.view.Page` + } + }, + manifest: `json` + } + } + ); +}); +``` +```javascript [Not Supported] {6} +sap.ui.define([ + `sap/suite/ui/generic/template/lib/TemplateAssembler` +], function(TemplateAssembler) { + const name = `Component`; + return TemplateAssembler.getTemplateComponent(getMethods, + `sap.suite.ui.generic.templates.Page.${name}`, { + metadata: { + properties: { + templateName: { + type: `string`, + defaultValue: `sap.suite.ui.generic.templates.Page.view.Page` + } + }, + manifest: `json` + } + } + ); +}); +``` +::: +#### Template Literal in XMLComposite Declaration + +The **XMLComposite** control is deprecated since version UI5 1.88. Nevertheless UI5 Tooling will attempt to analyze the declaration of any such controls in a project. + +Declaring an **XMLComposite** control using a **Template Literal** with one or more expressions in the name, is not supported. + + +::: code-group + +```javascript [Supported] +sap.ui.define([ + `sap/ui/core/XMLComposite` +], function(XMLComposite) { + return XMLComposite.extend(`composites.MyComposite`, {} +}); +``` +```javascript [Not Supported] {5} +sap.ui.define([ + `sap/ui/core/XMLComposite` +], function(XMLComposite) { + const name = `MyComposite`; + return XMLComposite.extend(`composites.${name}`, {}); +}); +``` +::: +#### Template Literal in sap/ui/core/Core#initLibrary Call + +A library is typically initialized via an accompanying `library.js`. Within that file, the object which is supplied to the `sap/ui/core/Core#initLibrary` method, must not use a **Template Literal** with one or more expressions for the library name. + +::: code-group +```javascript [Supported] +sap.ui.getCore().initLibrary({ + name: `my.lib` +}); +``` +```javascript [Not Supported] {3} +const libraryName = `lib`; +sap.ui.getCore().initLibrary({ + name: `my.${libraryName}` +}); +``` +::: +#### Reserved Variable Names in a Template Literal + +While UI5 Tooling performs a build placeholders are replaced with a values offered by the build. For example `${version}` is replaced with the actual version defined in the package.json of the project. Therefore it is required to not use any **Template Literal** where any expression contains variable with following names: + +- `version` +- `project.version` +- `buildtime` +- `copyright` + +::: code-group + +```javascript [Supported] +const myVersion = `1.2`; +const transformedVersion `v${myVersion}` +``` +```javascript [Not Supported] {3} +const version = `1.2`; +const transformedVersion `v${version}` +``` +::: +UI5 Tooling searches for the exact match of `${version}`, so with adding whitespaces before and after the variable name `${ version }` UI5 Tooling won't replace this occurence. This can be enforced by the dedicated ESLint config [template-curly-spacing](https://eslint.org/docs/latest/rules/template-curly-spacing) with option `always`. + +### Spread Element + +A [Spread Element](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax) can be used in all places, except the following. + +#### Spread Element in `sap.ui.define` or `sap.ui.require` + +A **Spread Element** as a parameter in a `sap.ui.define` or `sap.ui.require` call is not supported. + +::: code-group + +```javascript [Supported] +sap.ui.define([ + "ModuleA", + "ModuleB" +], function(ModuleA, ModuleB) { +}); +``` + + +```javascript [Not Supported] {3} +const dependencies = ["ModuleA", "ModuleB"]; +sap.ui.define([ + ...dependencies +], function(ModuleA, ModuleB) { +}); +``` +::: +The same rule applies also for the usage of deprecated or no longer recommended APIs `jQuery.sap.declare`, `jQuery.sap.declare`, `define`, `require`, `require.predefine`, `sap.ui.predefine`, `sap.ui.requireSync` and `sap.ui.require.preload`. + +#### Spread Element in Smart Template Declaration + +When declaring a **Smart Template**, the usage of a **Spread Element** in the configuration is not supported. + +::: code-group + +```javascript [Supported] +sap.ui.define([ + "sap/suite/ui/generic/template/lib/TemplateAssembler" +], function(TemplateAssembler) { + return TemplateAssembler.getTemplateComponent(getMethods, + "sap.suite.ui.generic.templates.Page.Component", { + metadata: { + properties: { + templateName: { + type: "string", + defaultValue: "sap.suite.ui.generic.templates.Page.view.Page" + } + }, + manifest: "json" + } + } + ); +}); +``` + + +```javascript [Not Supported] {6} +sap.ui.define([ + "sap/suite/ui/generic/template/lib/TemplateAssembler" +], function(TemplateAssembler) { + const myTemplate = { + templateName: { + type: "string", + defaultValue: "sap.suite.ui.generic.templates.Page.view.Page" + } + }; + return TemplateAssembler.getTemplateComponent(getMethods, + "sap.suite.ui.generic.templates.Page.Component", { + metadata: { + properties: { + ...myTemplate + } + manifest: "json" + } + } + ); +}); +``` +::: + +#### Spread Element in XMLComposite Declaration + +The **XMLComposite** control is deprecated since version UI5 1.88. Nevertheless UI5 Tooling will attempt to analyze the declaration of any such controls in a project. + +When declaring an **XMLComposite**, the usage of a **Spread Element** in the configuration is not supported. + +::: code-group + +```javascript [Supported] +sap.ui.define([ + "sap/ui/core/XMLComposite" +], function(XMLComposite) { + return XMLComposite.extend("composites.MyComposite", { + fragment: "composites.custom.MyComposite" + } +}); +``` + + +```javascript [Not Supported] {5} +sap.ui.define([ + "sap/ui/core/XMLComposite" +], function(XMLComposite) { + const myXMLComposite = { + fragment: "composites.custom.MyComposite" + }; + return XMLComposite.extend(`composites.MyComposite`, { + ...myXMLComposite + }); +}); +``` +::: +#### Spread Element in sap/ui/core/Core#initLibrary Call + +A library is typically initialized via an accompanying `library.js`. Within that file, the object which is supplied to the `sap/ui/core/Core#initLibrary` method, must not use a **Spread Element**. + +::: code-group + +```javascript [Supported] +sap.ui.getCore().initLibrary({ + name: "my.lib" +}); +``` + + +```javascript [Not Supported] {5} +const mylib = { + name: "my.lib" +}; +sap.ui.getCore().initLibrary({ + ...mylib +}); +``` +::: + +### Object Expression + +An **Object Expression** can be used in all places except in following places. + +#### Object Expression in `sap.ui.define` or `sap.ui.require` + +An **Object Expression** as a parameter in a `sap.ui.define` or `sap.ui.require` call is not supported. + +::: code-group + +```javascript [Supported] +sap.ui.define([ + "Bar" +], function(Bar){ +}); +``` + + +```javascript [Not Supported] {3} +const dependency = "Bar"; +sap.ui.define([ + dependency +], function(Bar){ +}); +``` +::: + +The same rule applies also for the usage of deprecated or no longer recommended APIs `jQuery.sap.declare`, `jQuery.sap.declare`, `define`, `require`, `require.predefine`, `sap.ui.predefine`, `sap.ui.requireSync` and `sap.ui.require.preload`. + +#### Object Expression in Smart Template Declaration + +When declaring a **Smart Template**, the usage of an **Object Expression** in the configuration is not supported. + +::: code-group + +```javascript [Supported] +sap.ui.define([ + "sap/suite/ui/generic/template/lib/TemplateAssembler" +], function(TemplateAssembler) { + return TemplateAssembler.getTemplateComponent(getMethods, + "sap.suite.ui.generic.templates.Page.Component", { + metadata: { + properties: { + templateName: { + type: "string", + defaultValue: "sap.suite.ui.generic.templates.Page.view.Page" + } + }, + manifest: "json" + } + } + ); +}); +``` + + +```javascript [Not Supported] {9} +sap.ui.define([ + "sap/suite/ui/generic/template/lib/TemplateAssembler" +], function(TemplateAssembler) { + const key = "templateName" + return TemplateAssembler.getTemplateComponent(getMethods, + `sap.suite.ui.generic.templates.Page.${name}`, { + metadata: { + properties: { + [key]: { + type: "string", + defaultValue: "sap.suite.ui.generic.templates.Page.view.Page" + } + } + manifest: "json" + } + } + ); +}); +``` +::: +#### Object Expression in XMLComposite Declaration + +The **XMLComposite** control is deprecated since version UI5 1.88. Nevertheless UI5 Tooling will attempt to analyze the declaration of any such controls in a project. + +When declaring an **XMLComposite**, the usage of an **Object Expression** in the configuration is not supported. + +::: code-group + +```javascript [Supported] +sap.ui.define([ + "sap/ui/core/XMLComposite" +], function(XMLComposite) { + return XMLComposite.extend("composites.MyComposite", { + fragment: "composites.custom.MyComposite" + } +}); +``` + + +```javascript [Not Supported] {6} +sap.ui.define([ + "sap/ui/core/XMLComposite" +], function(XMLComposite) { + const key = "fragment"; + return XMLComposite.extend("composites.MyComposite", { + [key]: "composites.custom.MyComposite" + }); +}); +``` +::: +#### Object Expression in sap/ui/core/Core#initLibrary Call + +A library is typically initialized via an accompanying `library.js`. Within that file, the object which is supplied to the `sap/ui/core/Core#initLibrary` method, must not use an **Object Expression**. + +::: code-group + +```javascript [Supported] +sap.ui.getCore().initLibrary({ + name: "my.lib" +}); +``` + + + +```javascript [Not Supported] {3} +const key = "name"; +sap.ui.getCore().initLibrary({ + [key]: "my.lib" +}); +``` +::: +### Computed Property + +A **Computed Property** can be used in all places except in following places. + +#### Computed Property when using `extend` + +One or more **Computed Property** as a parameter in an UI5 Module `extend` call is not supported. + +::: code-group + +```javascript [Supported] +sap.ui.define([ + "Bar" +], function(Bar){ + return Bar.extend("my.Bar" {}); +}); +``` + +```javascript [Not Supported] +const name = "my"; +sap.ui.define([ + "Bar" +], function(Bar){ + return Bar.extend(name + ".Bar", {}); +}); +``` +::: + +#### Computed Properties in sap/ui/core/Core#initLibrary Call + +A library is typically initialized via an accompanying `library.js`. Within that file, the object which is supplied to the `sap/ui/core/Core#initLibrary` method, must not use an **Computed Property**. + +::: code-group + +```javascript [Supported] +sap.ui.getCore().initLibrary({ + name: "my.lib" +}); +``` + + +```javascript [Not Supported] {3} +const name = "my"; +sap.ui.getCore().initLibrary({ + name: name + ".lib" +}); +``` +::: + +### Class Declaration + +If you want to generate a JSDoc build of your project and using a **Class Declaration** the class declaration should not be returned directly. Declare the class and return the class in a separate statement. If not JSDoc treats the the class declaration as a return statement and does not recognize any JSDoc if such is provided right above the class declaration. + +::: code-group + +```javascript [Supported] +sap.ui.define([ + "Bar" +], function(Bar){ + /** + * JSDoc block here + */ + class Foo extends Bar { + make () {} + } + return Foo; +}); +``` + + +```javascript [Not Supported] {7} +sap.ui.define([ + "Bar" +], function(Bar){ + /** + * JSDoc block here + */ + return class Foo extends Bar { + make () {} + } +}); +``` +::: + +### Arrow Function Expression + +If you want to generate a JSDoc build of your project and use an **Arrow Function Expression** the JSDoc has to be written above the arrow function and not above the `sap.ui.define/sap.ui.require` command. + +::: code-group + +```javascript [Supported] +sap.ui.define([ + "Bar" +], +/** + * JSDoc block here + */ +(Bar) => Bar.extends("Foo", { +})); +``` + + +```javascript [Not Supported] {1,2,3} +/** + * JSDoc block here + */ +sap.ui.define([ + "Bar" +], (Bar) => Bar.extends("Foo", { +})); +``` diff --git a/docs/pages/FAQ.md b/docs/FAQ.md similarity index 100% rename from docs/pages/FAQ.md rename to docs/FAQ.md diff --git a/docs/pages/FileSystem.md b/docs/FileSystem.md similarity index 99% rename from docs/pages/FileSystem.md rename to docs/FileSystem.md index 6ddb8ec8f1..d2a3494b8a 100644 --- a/docs/pages/FileSystem.md +++ b/docs/FileSystem.md @@ -27,6 +27,7 @@ The [File System Adapter](https://ui5.github.io/cli/v4/api/@ui5_fs_adapters_File Both adapters provide APIs to retrieve and persist [Resources](#resource), namely - to retrieve a single resource by its virtual path use `byPath()`, + - to retrieve many resources based on patterns use `byGlob()`, - to persist a single resource use `write()`. diff --git a/docs/pages/GettingStarted.md b/docs/GettingStarted.md similarity index 82% rename from docs/pages/GettingStarted.md rename to docs/GettingStarted.md index c7187ef4c3..37f0122c7e 100644 --- a/docs/pages/GettingStarted.md +++ b/docs/GettingStarted.md @@ -50,21 +50,23 @@ If your project is not set up for use with the UI5 CLI yet, follow these steps: 1. Define the framework you want to use - === "OpenUI5" - ```sh - ui5 use openui5@latest - ``` - === "SAPUI5" +::: code-group + + ``` sh [OpenUI5] + ui5 use openui5@latest + ``` - ```sh - ui5 use sapui5@latest - ``` + ```sh [SAPUI5] + ui5 use sapui5@latest + ``` + +::: - You can choose between the OpenUI5 and the SAPUI5 framework. + You can choose between the OpenUI5 and the SAPUI5 framework. - Don't know which one to choose? Check out our [documentation on the differences between OpenUI5 and SAPUI5](./FAQ.md##whats-the-difference-between-openui5-and-sapui5). + Don't know which one to choose? Check out our [documentation on the differences between OpenUI5 and SAPUI5](/docs/FAQ.html#what-s-the-difference-between-openui5-and-sapui5). 1. Add required libraries ```sh @@ -81,15 +83,15 @@ If your project is not set up for use with the UI5 CLI yet, follow these steps: ui5 serve ``` - !!! tip - Use `ui5 serve` to start a local development server and `ui5 build --all` to produce an optimized, static version of your project, which you can then deploy to your production environment. - - Find more information here: +::: tip Tip +Use `ui5 serve` to start a local development server and `ui5 build --all` to produce an optimized, static version of your project, which you can then deploy to your production environment. - - [Server](./Server.md) - - [Builder](./Builder.md) - - [CLI](./CLI.md) +Find more information here: + - [Server](./Server.md) + - [Builder](./Builder.md) + - [CLI](./CLI.md) +::: 1. If you are using Git or similar version control, commit `package.json` and `ui5.yaml` to your repository. ```sh git add package.json ui5.yaml diff --git a/docs/Guidelines.md b/docs/Guidelines.md deleted file mode 100644 index 9739695c09..0000000000 --- a/docs/Guidelines.md +++ /dev/null @@ -1,60 +0,0 @@ -# Development Conventions and Guidelines -## JavaScript Coding Guidelines -We enforce code style rules using [ESLint](https://eslint.org). Execute `npm run lint` to check your code for style issues. -You may also find an ESLint integration for your favorite IDE [here](https://eslint.org/docs/user-guide/integrations). - -## Testing -Unit testing is based on the [ava](https://github.com/avajs/ava) test-framework. You can run all tests using `npm test` (this is what our CI will do for all pull requests). - -During development, you might want to use `npm run unit` or `npm run unit-watch` (re-runs tests automatically after file changes) to quickly execute all unit tests and see whether your change just broke one of them. 😉 - -## Git Guidelines -### No Merge Commits -Please use [rebase instead of merge](https://www.atlassian.com/git/tutorials/merging-vs-rebasing) to update a branch to the latest main. This helps keeping a clean commit history in the project. - -### Commit Message Style -#### Commit Summary -The commit summary is the first line of the commit message. - -- It should be **50-70 characters** long. -- It must be **prefixed** by `[FIX]`, `[FEATURE]` or `[INTERNAL]` accordingly, followed by the name of the component or module which was the main subject of the change. - + Use `[FIX]` for bugfixes. - + Use `[FEATURE]` for new features / enhancements. - + Use `[BREAKING]` for breaking / incompatible changes. - _**Note:** The commit body of a breaking change should also include a paragraph starting with `BREAKING CHANGE:`. - This paragraph will be highlighted in the changelog._ - + Use `[DEPENDENCY]` for dependency updates that should be mentioned in the changelog. - + Use `[INTERNAL]` for all other changes (e.g. refactorings, documentation, etc.). These changes will not be listed in the changelog. - + Exceptions are changes created by automated processes like releases or dependency updates -- It must not contain `[` or `]` anywhere but in the prefix. -- It shall be written in **imperative present tense** (as recommended by [Git](https://git-scm.com/book/en/v2/Distributed-Git-Contributing-to-a-Project)) - + Examples: Instead of *"Adding tests for"* or *"I added tests for"* use *"Add tests for"* or *"Add feature xy"*. - -#### Commit Body -After the commit summary there should be an empty line followed by the commit body. - -- Describe the intention and reasoning of the change -- If a change fixes an issue reported on GitHub, add the following line to the commit message: - + `Fixes: #` (e.g. `Fixes: #42`) -- Breaking changes should include a paragraph starting with `BREAKING CHANGE:`. This paragraph will be highlighted in the changelog. - -#### Example -``` -[FIX] npm translator: Correct handling of devDependencies - -- devDevependencies should only be included in certain cases -- Was caused by a refactoring - -Fixes: #42 -Fixes: #45 -``` - -## Work on Release Branches -Major releases are typically prepared on dedicated branches like `next`. - -There are some things to be aware of when working on these branches. - -### Implementing Changes in Multiple Code Lines -While working on a new major release (e.g. `5.0.0`), any fixes or new features implemented on the **current** (main) code line (e.g. 4.x) should be cherry-picked as `[INTERNAL]` to the dedicated (pre-)release branch (typically `next`). This is to prevent changes declared as `[FEATURE]` or `[FIX]` from appearing in the changelog twice, which can be confusing since the new major version has not yet been released and should naturally contain any fixes or features released in any of the preceding releases. Listing them twice might confuse users. Note that our changelog is generated based on all tags of the repository, independent of the currently checked out branch (also see [git-chglog/issues/123](https://github.com/git-chglog/git-chglog/issues/123)). - -However, once a new major release becomes **current** (i.e. "main", not a pre-release), any changes applied to multiple code lines should be cherry picked with the original prefix, so that they appear for multiple versions in the changelog. diff --git a/docs/HomePage.md b/docs/HomePage.md new file mode 100644 index 0000000000..f42dc972fd --- /dev/null +++ b/docs/HomePage.md @@ -0,0 +1,131 @@ + +# UI5 Tooling + +An open and modular toolchain to develop state-of-the-art applications based on the [UI5](https://ui5.sap.com) framework. + +::: tip 🚀 New Release +**UI5 Tooling V4 is here 🎉** + +Read the announcement blog post: **[SAP Community: UI5 Tooling 4.0](https://community.sap.com/t5/technology-blogs-by-sap/ui5-tooling-4-0/ba-p/13769578)** + +And checkout the **[Migrate to v4](./updates/migrate-v4.md)** documentation. +::: +[**Get Started**](./GettingStarted.md) + +## Main Features + +### 💻 UI5 CLI + +*Also see the [UI5 CLI Documentation](./CLI.md)* + +```sh +# Global +npm install --global @ui5/cli + +# In your project +npm install --save-dev @ui5/cli +``` + +#### ⚙️ Project Setup + +Configure your project for use with UI5 Tooling. +*Also see the [Configuration Documentation](./Configuration.md)* + +``` +❯ ui5 init +Wrote ui5.yaml: + +specVersion: "4.0" +metadata: + name: my-app +type: application +``` + +#### 🚚 Dependency Management + +UI5 framework dependencies are managed by the tooling. All other dependencies are managed by your favorite node package manager. + +``` +❯ ui5 use SAPUI5@1.117.0 +Updated configuration written to ui5.yaml +This project is now using SAPUI5 version 1.117.0 + +❯ ui5 add sap.ui.core sap.m themelib_sap_fiori_3 +Updated configuration written to ui5.yaml +Added framework libraries sap.ui.core sap.m themelib_sap_fiori_3 as dependencies +``` + +#### 🏄 Development Server + +Start a local development server to work on your project. +*Also see the [Server Documentation](./Server.md)* + +``` +❯ ui5 serve +Server started +URL: http://localhost:8080 +``` + +#### 🛠 Build for Production + +Build an optimized version of your project. +*Also see the [Builder Documentation](./Builder.md)* + +``` bash +❯ ui5 build +info graph:helpers:ui5Framework Using OpenUI5 version: 1.117.0 +info ProjectBuilder Preparing build for project my-app +info ProjectBuilder Target directory: ./dist +info ProjectBuilder Cleaning target directory... +info Project 1 of 1: ❯ Building application project my-app... +info my-app › Running task escapeNonAsciiCharacters... +info my-app › Running task replaceCopyright... +info my-app › Running task replaceVersion... +info my-app › Running task minify... +info my-app › Running task generateFlexChangesBundle... +info my-app › Running task generateComponentPreload... +info ProjectBuilder Build succeeded in 296 ms +info ProjectBuilder Executing cleanup tasks... +``` + +### 🧪 Node.js API + +Most UI5 Tooling modules provide JavaScript APIs for direct consumption in other Node.js projects. +This allows you to rely on UI5 Tooling for UI5-specific build functionality and project handling, while creating your own tools to perfectly match the needs of your project. + +All available APIs are documented in the [UI5 Tooling API Reference](https://sap.github.io/ui5-tooling/v4/api/index.html). + +::: code-group + + +```js [ESM] +import {graphFromPackageDependencies} from "@ui5/project/graph"; + +async function buildApp(projectPath, destinationPath) { + const graph = await graphFromPackageDependencies({ + cwd: projectPath + }); + await graph.build({ + destPath: destinationPath, + selfContained: true, + excludedTasks: ["transformBootstrapHtml"], + includedDependencies: ["*"] + }); +} +``` +```js [CommonJS] +async function buildApp(projectPath, destinationPath) { + const {graphFromPackageDependencies} = + await import("@ui5/project/graph"); + const graph = await graphFromPackageDependencies({ + cwd: projectPath + }); + await graph.build({ + destPath: destinationPath, + selfContained: true, + excludedTasks: ["transformBootstrapHtml"], + includedDependencies: ["*"] + }); +} +``` +::: \ No newline at end of file diff --git a/docs/pages/OpenUI5.md b/docs/OpenUI5.md similarity index 93% rename from docs/pages/OpenUI5.md rename to docs/OpenUI5.md index d471e4560d..47ad70bd64 100644 --- a/docs/pages/OpenUI5.md +++ b/docs/OpenUI5.md @@ -14,12 +14,12 @@ Your project's `ui5.yaml` provides a configuration section dedicated to framewor This configuration can be maintained by editing the file, or by using the UI5 CLI: -!!! example - Using the [UI5 CLI](./CLI.md): - ```sh - ui5 use openui5@latest - ui5 add sap.ui.core sap.m sap.ui.table themelib_sap_fiori_3 - ``` +> [!IMPORTANT] Example +>Using the [UI5 CLI](./CLI.md): +>```sh +>ui5 use openui5@latest +>ui5 add sap.ui.core sap.m sap.ui.table themelib_sap_fiori_3 +>``` **Example ui5.yaml of an application** ```yaml diff --git a/docs/pages/Overview.md b/docs/Overview.md similarity index 97% rename from docs/pages/Overview.md rename to docs/Overview.md index 78adbe1dfb..d4fa35349d 100644 --- a/docs/pages/Overview.md +++ b/docs/Overview.md @@ -9,8 +9,9 @@ UI5 CLI differentiates between "framework dependencies" and "project dependencie **Framework dependencies** are generally libraries and themes provided by the SAP frameworks "OpenUI5" and "SAPUI5". UI5 CLI will take care of downloading them and handling their versions for you. Please see the corresponding documentation on both options: -* [Working with **OpenUI5** Framework Dependencies](./OpenUI5.md) -* [Working with **SAPUI5** Framework Dependencies](./SAPUI5.md) +- [Working with **OpenUI5** Framework Dependencies](./OpenUI5.md) + +- [Working with **SAPUI5** Framework Dependencies](./SAPUI5.md) **Project dependencies** are all other libraries, custom themes, UI5 CLI extensions or JavaScript modules your project depends on. In general these dependencies are maintained in the package.json of your project. See also: [FAQ: Why package.json? / Why npm?](./FAQ.md#why-packagejson-why-npm). @@ -41,7 +42,7 @@ In its `package.json`, `my-app` should already define a dependency to `my-reuse- In the `my-app` directory, create a new file named `ui5-workspace.yaml` with the following content: -```yaml title="ui5-workspace.yaml" +```yaml " specVersion: workspace/1.0 metadata: name: default diff --git a/docs/pages/Privacy.md b/docs/Privacy.md similarity index 100% rename from docs/pages/Privacy.md rename to docs/Privacy.md diff --git a/docs/pages/Project.md b/docs/Project.md similarity index 86% rename from docs/pages/Project.md rename to docs/Project.md index 1d2d7260ce..a3ffe73571 100644 --- a/docs/pages/Project.md +++ b/docs/Project.md @@ -43,25 +43,28 @@ In the table below you can find the available combinations of project type & out | Project Type / Requested Output Style | Resulting Style | |---|---| | **application** | | -| `Default` | Root project is written `Flat`-style. ^1^ | +| `Default` | Root project is written `Flat`-style. ¹ | | `Flat` | Same as `Default`. | -| `Namespace` | Root project is written `Namespace`-style (resources are prefixed with the project's namespace). ^1^ | +| `Namespace` | Root project is written `Namespace`-style (resources are prefixed with the project's namespace). ¹ | +||| | **library** | | -| `Default` | Root project is written `Namespace`-style. ^1^ | -| `Flat` | Root project is written `Flat`-style (without its namespace, logging warnings for resources outside of it). ^1^ | +| `Default` | Root project is written `Namespace`-style. ¹ | +| `Flat` | Root project is written `Flat`-style (without its namespace, logging warnings for resources outside of it). ¹ | | `Namespace` | Same as `Default`. | +||| | **theme-library** | | -| `Default` | Root project is written in the style of the sources (multiple namespaces). ^1^ | -| `Flat` | **Unsupported** ^2^ | -| `Namespace` | **Unsupported** ^2^ | +| `Default` | Root project is written in the style of the sources (multiple namespaces). ¹ | +| `Flat` | **Unsupported** ² | +| `Namespace` | **Unsupported** ² | +||| | **module** | | | `Default` | Root project is written with the [configured paths](https://ui5.github.io/cli/stable/pages/Configuration/#available-path-mappings). ^1^ | | `Flat` | **Unsupported** ^3^ | | `Namespace` | **Unsupported** ^3^ | -^1^ The Output Style is only applied to the root project's output folder structure. Any dependencies included in the build would retain their `Default` output style. -^2^ Theme libraries in most cases have more than one namespace. -^3^ Modules have explicit path mappings configured and no namespace concept. +¹ The Output Style is only applied to the root project's output folder structure. Any dependencies included in the build would retain their `Default` output style. +² Theme libraries in most cases have more than one namespace. +³ Modules have explicit path mappings configured and no namespace concept. [**API Reference**](https://ui5.github.io/cli/v4/api/@ui5_project_build_ProjectBuilder.html){: .md-button .sap-icon-initiative } diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000000..7bd38eaf9c --- /dev/null +++ b/docs/README.md @@ -0,0 +1,50 @@ +![UI5 logo](images/UI5_logo_wide.png) + +# UI5 Tooling + +> An open and modular toolchain to develop state-of-the-art applications based on the [UI5](https://ui5.sap.com) framework. + +[![REUSE status](https://api.reuse.software/badge/github.com/SAP/ui5-tooling)](https://api.reuse.software/info/github.com/SAP/ui5-tooling) +[![OpenUI5 Community Slack (#tooling channel)](https://img.shields.io/badge/slack-join-44cc11.svg)](https://ui5-slack-invite.cfapps.eu10.hana.ondemand.com) +[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-v2.0%20adopted-ff69b4.svg)](CODE_OF_CONDUCT.md) + +> [UI5 Tooling v4](https://sap.github.io/ui5-tooling/v4) is the latest and stable version 🎉 +> +> [UI5 Tooling v3](https://sap.github.io/ui5-tooling/v3) is a stable version and in maintenance mode 🚢 +> +> [UI5 Tooling v2](https://sap.github.io/ui5-tooling/v2) has been deprecated 🚫 +> +> Please migrate your projects to [UI5 Tooling v3](https://sap.github.io/ui5-tooling/v3/updates/migrate-v3/)! + +## Resources + +- [Documentation](https://sap.github.io/ui5-tooling/v3/) +- [API Reference](https://sap.github.io/ui5-tooling/v3/api/) +- [CLI Documentation](https://sap.github.io/ui5-tooling/v3/pages/CLI/) +- [Project Configuration](https://sap.github.io/ui5-tooling/v3/pages/Configuration/) +- 🎬 [UI5con@SAP 2020 Talk](https://www.youtube.com/watch?v=8IHoVJLKN34) +- 🎬 [UI5con@SAP 2018 Talk](https://www.youtube.com/watch?v=iQ07oe26y_k) +- [Contribution Guidelines](https://github.com/SAP/ui5-tooling/blob/main/CONTRIBUTING.md) +- [Roadmap](https://github.com/SAP/ui5-tooling/issues/701) + +## Modules + +UI5 Tooling consists of multiple modules. Each one is managed in a separate repository: + +- [ui5-cli](https://github.com/SAP/ui5-cli): UI5 Command Line Interface, utilizing all of the following modules +- [ui5-project](https://github.com/SAP/ui5-project): Modules for building a UI5 project's dependency tree, including configuration +- [ui5-server](https://github.com/SAP/ui5-server): Modules for running a UI5 development server +- [ui5-builder](https://github.com/SAP/ui5-builder): Modules for building UI5 projects +- [ui5-fs](https://github.com/SAP/ui5-fs): UI5 specific file system abstraction +- [ui5-logger](https://github.com/SAP/ui5-logger): Internal logging module + +**Usage Overview** *(arrows indicate dependencies)* +![Module Overview](images/Module_overview.png) + +## Contributing + +Please check our [Contribution Guidelines](https://github.com/SAP/ui5-tooling/blob/main/CONTRIBUTING.md). + +## Support + +Please follow our [Contribution Guidelines](https://github.com/SAP/ui5-tooling/blob/main/CONTRIBUTING.md#report-an-issue) on how to report an issue. Or chat with us in the [`#tooling`](https://openui5.slack.com/archives/C0A7QFN6B) channel of the [OpenUI5 Community Slack](https://ui5-slack-invite.cfapps.eu10.hana.ondemand.com). For public Q&A, use the [`ui5-tooling` tag on Stack Overflow](https://stackoverflow.com/questions/tagged/ui5-tooling). diff --git a/docs/pages/SAPUI5.md b/docs/SAPUI5.md similarity index 90% rename from docs/pages/SAPUI5.md rename to docs/SAPUI5.md index a2b89a062a..d2e2b460f3 100644 --- a/docs/pages/SAPUI5.md +++ b/docs/SAPUI5.md @@ -1,7 +1,5 @@ # Consuming SAPUI5 Libraries -!!! info - Make sure you have installed the UI5 CLI in Version 2.0 or later: `npm install --global @ui5/cli` The minimum version of SAPUI5 that can be consumed by UI5 CLI as described below is **1.76.0.** For lower versions, consider using the [CDN bootstrap](https://ui5.sap.com/#/topic/2d3eb2f322ea4a82983c1c62a33ec4ae) or a custom middleware like [ui5-middleware-simpleproxy](https://www.npmjs.com/package/ui5-middleware-simpleproxy). @@ -24,13 +22,13 @@ Your project's `ui5.yaml` provides a configuration section dedicated to framewor This configuration can be maintained by editing the file, or by using the UI5 CLI: -!!! example - Using the [UI5 CLI](./CLI.md): - ```sh - ui5 use sapui5@latest - ui5 add sap.ui.core sap.m sap.ui.comp themelib_sap_fiori_3 - ui5 add -D sap.ushell - ``` +> [!IMPORTANT] +>**Using the [UI5 CLI](./CLI.md):** +>```sh +>ui5 use sapui5@latest +>ui5 add sap.ui.core sap.m sap.ui.comp themelib_sap_fiori_3 +>ui5 add -D sap.ushell +>``` **Example ui5.yaml of an application** ```yaml diff --git a/docs/pages/Server.md b/docs/Server.md similarity index 94% rename from docs/pages/Server.md rename to docs/Server.md index 7d8f6a06df..75fbadb264 100644 --- a/docs/pages/Server.md +++ b/docs/Server.md @@ -73,5 +73,6 @@ When starting the UI5 Server in HTTPS- or HTTP/2 mode, for example by using UI5 Follow the given instructions and enter your password to install the generated certificate as trusted. You can find the generated certificate and corresponding private key under `.ui5/server` in your user's home directory. -!!! tip - If Chrome unintentionally redirects an HTTP-URL to HTTPS, you need to delete the HSTS mapping in [chrome://net-internals/#hsts](chrome://net-internals/#hsts) by entering the domain name (e.g. localhost) and pressing "delete". +::: tip +If Chrome unintentionally redirects an HTTP-URL to HTTPS, you need to delete the HSTS mapping in [chrome://net-internals/#hsts](chrome://net-internals/#hsts) by entering the domain name (e.g. localhost) and pressing "delete". +::: diff --git a/docs/pages/Troubleshooting.md b/docs/Troubleshooting.md similarity index 95% rename from docs/pages/Troubleshooting.md rename to docs/Troubleshooting.md index 681e778c18..38d4d9e27b 100644 --- a/docs/pages/Troubleshooting.md +++ b/docs/Troubleshooting.md @@ -60,9 +60,9 @@ In some cases and environments this is not a convenient location and the user ne The path to it can either be provided via environment variable or permanently set in the configuration. -!!! info - Paths are resolved relative to the current root project path (i.e. where the package.json is located). - +::: tip Info +Paths are resolved relative to the current root project path (i.e. where the package.json is located). +::: #### Environment variable `UI5_DATA_DIR` Unix: diff --git a/docs/pages/Workspace.md b/docs/Workspace.md similarity index 83% rename from docs/pages/Workspace.md rename to docs/Workspace.md index effc25e1dd..3f008c0a05 100644 --- a/docs/pages/Workspace.md +++ b/docs/Workspace.md @@ -1,42 +1,45 @@ # UI5 Workspaces -!!! info - **UI5 Workspaces is a new feature available since UI5 CLI [`v3.0.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.0.0)** - -!!! example - ```yaml title="ui5-workspace.yaml" - specVersion: workspace/1.0 - metadata: - name: default - dependencyManagement: - resolutions: - - path: ../heavy.library - ``` +> [!TIP] Info +> **UI5 Workspaces is a new feature available since UI5 CLI [`v3.0.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.0.0)** + + +> [!IMPORTANT] Example +**ui5-workspace.yaml** +>```yaml +>yaml title="ui5-workspace.yaml" +>specVersion: workspace/1.0 +>metadata: +> name: default +>dependencyManagement: +> resolutions: +> - path: ../heavy.library +>``` ## General Concept UI5 Workspaces can be used to create a personalized local development environment for a UI5 project. They allow to use UI5 dependencies from local directories without the need to use the link features of package managers like npm. "UI5 dependencies" generally refers to projects that have a `ui5.yaml`. Workspaces are typically configured in a `ui5-workspace.yaml` file, located next to the project's `ui5.yaml`. The file can contain one or many workspace configurations, each separated by [three dashes](https://yaml.org/spec/1.2.2/#22-structures). For example: - -!!! example - ```yaml title="ui5-workspace.yaml" - specVersion: workspace/1.0 - metadata: - name: default - dependencyManagement: - resolutions: - - path: ../heavy.library - --- - specVersion: workspace/1.0 - metadata: - name: extended - dependencyManagement: - resolutions: - - path: ../heavy.library - - path: ../light.library - - path: ../test.library - ``` +> [!IMPORTANT] Example +> **ui5-workspace.yaml** +> ```yaml +>specVersion: workspace/1.0 +>metadata: +> name: default +>dependencyManagement: +> resolutions: +> - path: ../heavy.library +>--- +>specVersion: workspace/1.0 +>metadata: +> name: extended +>dependencyManagement: +> resolutions: +> - path: ../heavy.library +> - path: ../light.library +> - path: ../test.library +>``` If a workspace configuration named `default` exists, it will be used automatically; otherwise the workspace must be specified using the UI5 CLI parameter `--workspace`. @@ -53,12 +56,12 @@ specVersion: "workspace/1.0" ### Metadata -!!! example - ```yaml - specVersion: workspace/1.0 - metadata: - name: dolphin - ``` +> [!IMPORTANT] Example +>```yaml +>specVersion: workspace/1.0 +>metadata: +> name: dolphin +>``` #### name @@ -82,18 +85,18 @@ The `name` property must satisfy the following conditions. They are identical to ## Dependency Management UI5 Workspace configurations allow to influence the dependency resolution when working with a UI5 project. - -!!! example - ```yaml - specVersion: workspace/1.0 - metadata: - name: dolphin - dependencyManagement: - resolutions: - - path: ../light.library - - path: ../heavy.library - - path: ../test.library - ``` +> [!IMPORTANT] Example +> +>```yaml +>specVersion: workspace/1.0 +>metadata: +> name: dolphin +>dependencyManagement: +> resolutions: +> - path: ../light.library +> - path: ../heavy.library +> - path: ../test.library +>``` ### Resolutions diff --git a/docs/extensibility/CustomServerMiddleware.md b/docs/extensibility/CustomServerMiddleware.md new file mode 100644 index 0000000000..8c75238c55 --- /dev/null +++ b/docs/extensibility/CustomServerMiddleware.md @@ -0,0 +1,255 @@ +# Custom UI5 Server Middleware + +The UI5 Server Extensibility enables you to enhance the functionality of the UI5 Server. You may want to handle requests differently. For example add various headers to a response or parse data of a POST request in a specific way. For this you can plug custom middleware implementations into the internal [express](https://expressjs.com/) server of the UI5 Server module. + +The UI5 community already created many custom middleware packages which you can integrate into your project. They are often prefixed by `ui5-middleware-` to make them easily searchable in the [npm registry](https://www.npmjs.com/search?q=ui5-middleware-). + +Please note that custom middleware packages from third parties can not only modify how your project is served but also execute arbitrary code on your system. In fact, this is the case for all npm packages you install. Always act with the according care and follow best practices. + +## Configuration + +In a projects `ui5.yaml` file, you can define additional server middleware modules that will be executed when the request is received by the server. This configuration exclusively affects the server started in this project. Custom middleware configurations defined in any dependencies are ignored. + +A middleware may be executed before or after any other middleware. This can either be a [standard middleware](../Server.md#standard-middleware) or another custom middleware. + +### Example: Basic configuration + + +```yaml +# In this example configuration, two custom tasks are defined: 'babel' and 'render-markdown-files'. +specVersion: "4.0" +type: application +metadata: + name: my.application +server: + customMiddleware: + - name: myCustomMiddleware + mountPath: /myapp + afterMiddleware: compression + configuration: + debug: true +``` + +In the above example the middleware `compression` is already included as a standard middleware by the UI5 Server. When serving the application `my.application`, the server will call the custom middleware `myCustomMiddleware` after `compression`. + +There can be optional configuration parameters which are passed directly to the custom middleware implementation (see below). + +An optional mountPath for which the middleware function is invoked can be provided. It will be passed to the `app.use` call (see [express API reference](https://expressjs.com/en/4x/api.html#app.use)). + +### Execution order + +Note that middleware configurations are applied in the order they are defined. When referencing another custom middleware, it has to be defined *before* that reference. + +## Custom Middleware Extension + +A custom middleware extension consists of a `ui5.yaml` and a [custom middleware implementation](#custom-middleware-implementation). It can be a standalone module or part of an existing UI5 project. + +### Example: ui5.yaml + +```yaml +specVersion: "4.0" +kind: extension +type: server-middleware +metadata: + name: markdownHandler +middleware: + path: lib/middleware/markdownHandler.js +``` + +Custom middleware extensions can be **standalone modules** which are handled as dependencies. + +Alternatively you can implement a custom middleware extension as **part of your UI5 project**. +In that case, the configuration of the extension is part of your project configuration inside the `ui5.yaml` as shown below. + +The UI5 Server will detect the custom middleware configuration of the project and use the middleware on startup. + +### Example: Custom Middleware Extension defined in UI5 project + +```yaml +# Project configuration for the above example +specVersion: "4.0" +kind: project +type: application +metadata: + name: my.application +server: + customMiddleware: + - name: markdownHandler + beforeMiddleware: serveResources +--- +# Custom middleware extension as part of your project +specVersion: "4.0" +kind: extension +type: server-middleware +metadata: + name: markdownHandler +middleware: + path: lib/middleware/markdownHandler.js +``` + +## Custom Middleware Implementation + +A custom middleware implementation needs to return a function with the following signature: + +::: code-group + +```js [ESM] +/** + * Custom UI5 Server middleware API + * + * @param {object} parameters Parameters + * @param {@ui5/logger/Logger} parameters.log + * Logger instance for use in the custom middleware. + * This parameter is only provided to custom middleware + * extensions defining Specification Version 3.0 and later. + * @param {@ui5/server.middleware.MiddlewareUtil} parameters.middlewareUtil + * Specification version-dependent interface to a + * MiddlewareUtil instance. See the corresponding API reference for details: + * https://sap.github.io/ui5-tooling/v4/api/@ui5_server_middleware_MiddlewareUtil.html + * @param {object} parameters.options Options + * @param {string} parameters.options.configuration + * Custom middleware configuration, as defined in the project's ui5.yaml + * @param {string} parameters.options.middlewareName + * Name of the custom middleware. + * This parameter is only provided to custom middleware extensions + * defining Specification Version 3.0 and later + * @param {object} parameters.resources Readers for accessing resources + * @param {module:@ui5/fs.AbstractReader} parameters.resources.all + * Reader to access resources of the root project and its dependencies + * @param {module:@ui5/fs.AbstractReader} parameters.resources.rootProject + * Reader to access resources of the root project + * @param {module:@ui5/fs.AbstractReader} parameters.resources.dependencies + * Reader to access resources of the project's dependencies. + * @returns {function} Middleware function to use + */ +export default function({log, middlewareUtil, options, resources}) { + return async function (req, res, next) { + // [...] + } +}; +``` +```js [CommonJS] +/** + * Custom UI5 Server middleware API + * + * @param {object} parameters Parameters + * @param {@ui5/logger/Logger} parameters.log + * Logger instance for use in the custom middleware. + * This parameter is only provided to custom middleware + * extensions defining Specification Version 3.0 and later. + * @param {@ui5/server.middleware.MiddlewareUtil} parameters.middlewareUtil + * Specification version-dependent interface to a + * MiddlewareUtil instance. See the corresponding API reference for details: + * https://sap.github.io/ui5-tooling/v4/api/@ui5_server_middleware_MiddlewareUtil.html + * @param {object} parameters.options Options + * @param {string} parameters.options.configuration + * Custom middleware configuration, as defined in the project's ui5.yaml + * @param {string} parameters.options.middlewareName + * Name of the custom middleware. + * This parameter is only provided to custom middleware extensions + * defining Specification Version 3.0 and later + * @param {object} parameters.resources Readers for accessing resources + * @param {module:@ui5/fs.AbstractReader} parameters.resources.all + * Reader to access resources of the root project and its dependencies + * @param {module:@ui5/fs.AbstractReader} parameters.resources.rootProject + * Reader to access resources of the root project + * @param {module:@ui5/fs.AbstractReader} parameters.resources.dependencies + * Reader to access resources of the project's dependencies. + * @returns {function} Middleware function to use + */ +module.exports = function({log, middlewareUtil, options, resources}) { + return async function (req, res, next) { + // [...] + } +}; +``` +::: +### Example: lib/middleware/markdownHandler.(m)js + +::: code-group + +```js [ESM] + + +import MarkdownIt from "markdown-it";export default async function({log, middlewareUtil, options, resources}) { + const md = new MarkdownIt(); + return function (req, res, next) { + if (!req.path || !req.path.endsWith(".html")) { + // Do not handle non-HTML requests + next(); + return; + } + // Try to read a corresponding markdown file + resources.rootProject.byPath(req.path.replace(".html", ".md")).then(async (resource) => { + if (!resource) { + // No file found, hand over to next middleware + next(); + return; + } + log.info(`Rendering markdown for ${resource.getPath()}`); + const markdown = await resource.getBuffer(); + // Generate HTML from markdown string + const html = md.render(markdown.toString()); + res.type('.html'); + res.end(html); + }).catch((err) => { + next(err); + }); + } + }; +``` + + + + +```js [CommonJS] +module.exports = async function({log, middlewareUtil, options, resources}) { + const MarkdownIt = require("markdown-it"); + const md = new MarkdownIt(); + return function (req, res, next) { + if (!req.path || !req.path.endsWith(".html")) { + // Do not handle non-HTML requests + next(); + return; + } + // Try to read a corresponding markdown file + resources.rootProject.byPath(req.path.replace(".html", ".md")).then(async (resource) => { + if (!resource) { + // No file found, hand over to next middleware + next(); + return; + } + log.info(`Rendering markdown for ${resource.getPath()}`); + const markdown = await resource.getBuffer(); + // Generate HTML from markdown string + const html = md.render(markdown.toString()); + res.type('.html'); + res.end(html); + }).catch((err) => { + next(err); + }); + } +}; +``` +- [CommonJS example ](https://github.com/SAP/openui5-sample-app/tree/demo-server-middleware-extensibility-v3) +- [ESM example](https://github.com/SAP/openui5-sample-app/tree/demo-server-middleware-extensibility-v3-esm) +## Helper Class `MiddlewareUtil` + +Custom middleware defining [Specification Version](../Configuration.md#specification-versions) 2.0 or higher have access to an interface of a [MiddlewareUtil](https://sap.github.io/ui5-tooling/v4/api/@ui5_server_middleware_MiddlewareUtil.html) instance. + +In this case, a `middlewareUtil` object is provided as a part of the custom middleware's [parameters](#custom-middleware-implementation). Depending on the specification version of the custom middleware, a set of helper functions is available to the implementation. The lowest required specification version for every function is listed in the [MiddlewareUtil API reference](https://sap.github.io/ui5-tooling/v4/api/@ui5_server_middleware_MiddlewareUtil.html). + +## Integration with `karma-ui5` + +::: warning +The Karma project has been [deprecated](https://github.com/karma-runner/karma#karma-is-deprecated-and-is-not-accepting-new-features-or-general-bug-fixes) as of 2023 +::: +[`karma-ui5`](https://github.com/SAP/karma-ui5) is a plugin for the popular [Karma test runner](https://karma-runner.github.io/). Based on your [configuration](https://github.com/SAP/karma-ui5#url), it can fetch resources from a dedicated server or start an internal server using parts of UI5 Tooling. + +In the latter case, any custom middleware configured in the default `ui5.yaml` of the project will be used automatically. + +However, since Karma uses the [`connect`](https://github.com/senchalabs/connect) framework, as opposed to UI5 Tooling's [`express`](https://github.com/expressjs/express), custom middleware might not always work as expected. Compared to `connect`, the `express` framework provides a more versatile API to middleware. + +Therefore, if you plan to use custom middleware in an integrated scenario with `karma-ui5`, you must **restrict the middleware to using the [`connect`](https://github.com/senchalabs/connect) API only** to ensure compatibility. + +Alternatively, you can start a server with the usual `ui5 serve` command and [configure the corresponding URL](https://github.com/SAP/karma-ui5#url) for use by `karma-ui5`. diff --git a/docs/extensibility/CustomTasks.md b/docs/extensibility/CustomTasks.md new file mode 100644 index 0000000000..31c6c33fbc --- /dev/null +++ b/docs/extensibility/CustomTasks.md @@ -0,0 +1,454 @@ +# Custom UI5 Builder Tasks + +The UI5 Build Extensibility enables you to enhance the build process of any UI5 project. In addition to the [standard tasks](../Builder.md#standard-tasks), custom tasks can be created. + +The UI5 community already created many custom tasks which you can integrate into your project. They are often prefixed by `ui5-task-` to make them easily searchable in the [npm registry](https://www.npmjs.com/search?q=ui5-task-). + +Please note that custom tasks from third parties can not only modify your project but also execute arbitrary code on your system. In fact, this is the case for all npm packages you install. Always act with the according care and follow best practices. + +## Configuration + +You can configure your build process with additional build task. These custom tasks are defined in the project [configuration](../Configuration.md). + +To hook your custom tasks into the different build phases of a project, they need to reference other tasks to be executed before or after. This can be a [standard task](../Builder.md#standard-tasks) or another custom task. +Standard tasks that are disabled, even though they are not executed, can still be referenced by custom tasks, which will be performed in their designated position. + +In the below example, when building the library `my.library` the custom `babel` task will be executed before the standard task `generateComponentPreload`. +Another custom task called `render-markdown-files` is then executed immediately after the standard task `minify`. + +### Example: Basic configuration + +```yaml +# In this example configuration, two custom tasks are defined: 'babel' and 'render-markdown-files'. +specVersion: "4.0" +type: library +metadata: + name: my.library +builder: + customTasks: + - name: babel + beforeTask: generateComponentPreload + - name: render-markdown-files + afterTask: minify + configuration: + markdownStyle: + firstH1IsTitle: true +``` + +### Example: Connect multiple custom tasks + +You can also connect multiple custom tasks with each other. The order in the configuration is important in this case. You have to make sure that a task is defined *before* you reference it via `beforeTask` or `afterTask`. + +```yaml +# In this example, 'my-custom-task-2' gets executed after 'my-custom-task-1'. +specVersion: "4.0" +type: library +metadata: + name: my.library +builder: + customTasks: + - name: my-custom-task-1 + beforeTask: generateComponentPreload + - name: my-custom-task-2 + afterTask: my-custom-task-1 +``` + +## Custom Task Extension + +A custom task extension consists of a `ui5.yaml` and a [task implementation](#task-implementation). It can be a standalone module or part of an existing UI5 project. + +### Example: ui5.yaml + +```yaml +specVersion: "4.0" +kind: extension +type: task +metadata: + name: render-markdown-files +task: + path: lib/tasks/renderMarkdownFiles.js +``` + +Task extensions can be **standalone modules** which are handled as dependencies. + +Alternatively you can implement a task extension as **part of your UI5 project**. +In that case, the configuration of the extension is part of your project configuration inside the `ui5.yaml` as shown below. + +The task extension will then be automatically collected and processed during the processing of the project. + +### Example: Custom Task Extension defined in UI5 project + +```yaml +# Project configuration for the above example +specVersion: "4.0" +kind: project +type: library +metadata: + name: my.library +builder: + customTasks: + - name: render-markdown-files + afterTask: minify + configuration: + markdownStyle: + firstH1IsTitle: true +--- +# Task extension as part of your project +specVersion: "4.0" +kind: extension +type: task +metadata: + name: render-markdown-files +task: + path: lib/tasks/renderMarkdownFiles.js +``` + +## Task Implementation + +A custom task implementation needs to return a function with the following signature: + + +::: code-group +```js [ESM] +/** + * Custom task API + * + * @param {object} parameters + * + * @param {module:@ui5/fs.AbstractReader} parameters.dependencies + * Reader to access resources of the project's dependencies + * @param {@ui5/logger/Logger} parameters.log + * Logger instance for use in the custom task. + * This parameter is only available to custom task extensions + * defining Specification Version 3.0 and later. + * @param {object} parameters.options Options + * @param {string} parameters.options.projectName + * Name of the project currently being built + * @param {string} parameters.options.projectNamespace + * Namespace of the project currently being built + * @param {string} parameters.options.configuration + * Custom task configuration, as defined in the project's ui5.yaml + * @param {string} parameters.options.taskName + * Name of the custom task. + * This parameter is only provided to custom task extensions + * defining Specification Version 3.0 and later. + * @param {@ui5/builder.tasks.TaskUtil} parameters.taskUtil + * Specification Version-dependent interface to a TaskUtil instance. + * See the corresponding API reference for details: + * https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html + * @param {module:@ui5/fs.DuplexCollection} parameters.workspace + * Reader/Writer to access and modify resources of the + * project currently being built + * @returns {Promise} + * Promise resolving once the task has finished + */ +export default async function({dependencies, log, options, taskUtil,workspace}) { + // [...] +}; +``` + + + +```js [CommonJS] +/** + * Custom task API + * + * @param {object} parameters + * + * @param {module:@ui5/fs.AbstractReader} parameters.dependencies + * Reader to access resources of the project's dependencies + * @param {@ui5/logger/Logger} parameters.log + * Logger instance for use in the custom task. + * This parameter is only available to custom task extensions + * defining Specification Version 3.0 and later. + * @param {object} parameters.options Options + * @param {string} parameters.options.projectName + * Name of the project currently being built + * @param {string} parameters.options.projectNamespace + * Namespace of the project currently being built + * @param {string} parameters.options.configuration + * Custom task configuration, as defined in the project's ui5.yaml + * @param {string} parameters.options.taskName + * Name of the custom task. + * This parameter is only provided to custom task extensions + * defining Specification Version 3.0 and later. + * @param {@ui5/builder.tasks.TaskUtil} parameters.taskUtil + * Specification Version-dependent interface to a TaskUtil instance. + * See the corresponding API reference for details: + * https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html + * @param {module:@ui5/fs.DuplexCollection} parameters.workspace + * Reader/Writer to access and modify resources of the + * project currently being built + * @returns {Promise} + * Promise resolving once the task has finished + */ +module.exports = async function({dependencies, log, options, taskUtil,workspace}) { + // [...] +}; +``` +::: +### Required Dependencies + +::: tip Info +This functionality has been added with UI5 CLI [`v3.0.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.0.0) +::: +Custom tasks can export an optional callback function `determineRequiredDependencies` to control which dependency-resources are made available through the `dependencies`-reader that is provided to the task. By reducing the amount of required dependencies or by not requiring any, UI5 Tooling might be able to build a project faster. + +Before executing a task, UI5 Tooling will ensure that all required dependencies have been built. + +If this callback is not provided, UI5 Tooling will make an assumption as to whether the custom task requires access to any resources of dependencies based on the defined Specification Version of the custom task extension: + +* **Specification Version 3.0 and later:** If no callback is provided, UI5 Tooling assumes that no dependencies are required. In this case, the `dependencies` parameter will be omitted. +* **Specification Versions before 3.0:** If no callback is provided, UI5 Tooling assumes that all dependencies are required. + + +*For more details, see also [RFC 0012 UI5 Tooling Extension API v3](https://github.com/SAP/ui5-tooling/blob/rfc-ui5-tooling-extension-api-v3/rfcs/0012-UI5-Tooling-Extension-API-3.md#3-tasks-requiring-dependencies)* + + +::: code-group +```js [ESM] +/** + * Callback function to define the list of required dependencies + * + * @param {object} parameters + * @param {Set} parameters.availableDependencies + * Set containing the names of all direct dependencies of + * the project currently being built. + * @param {function} parameters.getDependencies + * Identical to TaskUtil#getDependencies + * (see https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html). + * Creates a list of names of all direct dependencies + * of a given project. + * @param {function} parameters.getProject + * Identical to TaskUtil#getProject + * (see https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html). + * Retrieves a Project-instance for a given project name. + * @param {object} parameters.options + * Identical to the options given to the standard task function. + * @returns {Promise} + * Promise resolving with a Set containing all dependencies + * that should be made available to the task. + * UI5 Tooling will ensure that those dependencies have been + * built before executing the task. + */ +export async function determineRequiredDependencie({availableDependencies, getDependencies, getProject, options}) { + // "availableDependencies" could look like this: Set(3) { "sap.ui.core", "sap.m", "my.lib" } + // Reduce list of required dependencies: Do not require any UI5 framework projects + availableDependencies.forEach((depName) => { + if (getProject(depName).isFrameworkProject()) { + availableDependencies.delete(depName) + } + }); + // => Only resources of project "my.lib" will be available to the task + return availableDependencies; +} +``` + +```js [CommonJS] +/** + * Callback function to define the list of required dependencies + * + * @param {object} parameters + * @param {Set} parameters.availableDependencies + * Set containing the names of all direct dependencies of + * the project currently being built. + * @param {function} parameters.getDependencies + * Identical to TaskUtil#getDependencies + * (see https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html). + * Creates a list of names of all direct dependencies + * of a given project. + * @param {function} parameters.getProject + * Identical to TaskUtil#getProject + * (see https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html). + * Retrieves a Project-instance for a given project name. + * @param {object} parameters.options + * Identical to the options given to the standard task function. + * @returns {Promise} + * Promise resolving with a Set containing all dependencies + * that should be made available to the task. + * UI5 Tooling will ensure that those dependencies have been + * built before executing the task. + */ +module.exports.determineRequiredDependencies = async functio({availableDependencies, getDependencies, getProject, options}) { + // "availableDependencies" could look like this: Set(3) { "sap.ui.core", "sap.m", "my.lib" } + // Reduce list of required dependencies: Do not require any UI5 framework projects + availableDependencies.forEach((depName) => { + if (getProject(depName).isFrameworkProject()) { + availableDependencies.delete(depName) + } + }); + // => Only resources of project "my.lib" will be available to the task + return availableDependencies; +} +``` +::: + +### Examples + +The following code snippets show examples for custom task implementations. + +### Example: lib/tasks/renderMarkdownFiles.js + +This example is making use of the `resourceFactory` [TaskUtil](https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html) +API to create new resources based on the output of a third-party module for rendering Markdown files. The created resources are added to the build +result by writing them into the provided `workspace`. + +::: code-group +```js [ESM] +import path from "node:path"; +import renderMarkdown from "./renderMarkdown.js"; +/* +* Render all .md (Markdown) files in the project to HTML +*/ +export default async function({dependencies, log, options, taskUtil,workspace}) { + const {createResource} = taskUtil.resourceFactory; + const textResources = await workspace.byGlob("**/*.md"); + await Promise.all(textResources.map(async (resource) => { + const markdownResourcePath = resource.getPath(); + log.info(`Rendering markdown file ${markdownResourcePath}...`); + const htmlString = await renderMarkdown(await resource.getString(), options.configuration); + // Note: @ui5/fs virtual paths are always (on *all* platforms) POSIX. Therefore using path.posix here + const newResourceName = path.posix.basename(markdownResourcePath, ".md") + ".html"; + const newResourcePath = path.posix.join(path.posix.dirname(markdownResourcePath), newResourceName); + const markdownResource = createResource({ + path: newResourcePath, + string: htmlString + }); + await workspace.write(markdownResource); + })); +}; +``` + +```js [CommonJS] +const path = require("node:path"); +const renderMarkdown = require("./renderMarkdown.js"); +/* +* Render all .md (Markdown) files in the project to HTML +*/ +module.exports = async function({dependencies, log, options, taskUtil,workspace}) { + const {createResource} = taskUtil.resourceFactory; + const textResources = await workspace.byGlob("**/*.md"); + await Promise.all(textResources.map(async (resource) => { + const markdownResourcePath = resource.getPath(); + log.info(`Rendering markdown file ${markdownResourcePath}...`); + const htmlString = await renderMarkdown(await resource.getString(), options.configuration); + // Note: @ui5/fs virtual paths are always (on *all* platforms) POSIX. Therefore using path.posix here + const newResourceName = path.posix.basename(markdownResourcePath, ".md") + ".html"; + const newResourcePath = path.posix.join(path.posix.dirname(markdownResourcePath), newResourceName); + const markdownResource = createResource({ + path: newResourcePath, + string: htmlString + }); + await workspace.write(markdownResource); + })); +}; +``` +::: + +::: warning +Depending on your project setup, UI5 Tooling tends to open many files simultaneously during a build. To prevent errors like `EMFILE: too many open files`, we urge custom task implementations to use the [graceful-fs](https://github.com/isaacs/node-graceful-fs#readme) module as a drop-in replacement for the native `fs` module in case it is used. + +Tasks should ideally use the reader/writer APIs provided by UI5 Tooling for working with project resources. +::: +### Example: lib/tasks/compileLicenseSummary.js + +This example is making use of multiple [TaskUtil](https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html) +APIs to retrieve additional information about the project currently being built (`taskUtil.getProject()`) and its direct dependencies +(`taskUtil.getDependencies()`). Project configuration files like `package.json` can be accessed directly using `project.getRootReader()`. + + +::: code-group +```js [ESM]" +import path from "node:path"; +/* +* Compile a list of all licenses of the project's dependencies +* and write it to "dependency-license-summary.json" +*/ +export default async function({dependencies, log, options, taskUtil,workspace}) { + const {createResource} = taskUtil.resourceFactory; + const licenses = new Map(); + const projectsVisited = new Set(); + async function processProject(project) { + return Promise.all(taskUtil.getDependencies().map(async (projectName) => { + if (projectsVisited.has(projectName)) { + return; + } + projectsVisited.add(projectName); + const project = taskUtil.getProject(projectName); + const pkgResource = await project.getRootReader().byPath("/package.json"); + if (pkgResource) { + const pkg = JSON.parse(await pkgResource.getString()) + // Add project to list of licenses + if (licenses.has(pkg.license)) { + licenses.get(pkg.license).push(project.getName()); + } else { + // License not yet in map. Define it + licenses.set(pkg.license, [project.getName()]); + } + } else { + log.info(`Could not find package.json file in project ${project.getName()}`); + } + return processProject(project); + })); + } + // Start processing dependencies of the root project + await processProject(taskUtil.getProject()); + const summaryResource = createResource({ + path: "/dependency-license-summary.json", + string: JSON.stringify(Object.fromEntries(licenses), null, "\t") + }); + await workspace.write(summaryResource); +}; +``` + + + +```js [CommonJS] +const path = require("node:path"); +/* +* Compile a list of all licenses of the project's dependencies +* and write it to "dependency-license-summary.json" +*/ +module.exports = async function({dependencies, log, options, taskUtil,workspace}) { + const {createResource} = taskUtil.resourceFactory; + const licenses = new Map(); + const projectsVisited = new Set(); + async function processProject(project) { + return Promise.all(taskUtil.getDependencies().map(async (projectName) => { + if (projectsVisited.has(projectName)) { + return; + } + projectsVisited.add(projectName); + const project = taskUtil.getProject(projectName); + const pkgResource = await project.getRootReader().byPath("/package.json"); + if (pkgResource) { + const pkg = JSON.parse(await pkgResource.getString()) + // Add project to list of licenses + if (licenses.has(pkg.license)) { + licenses.get(pkg.license).push(project.getName()); + } else { + // License not yet in map. Define it + licenses.set(pkg.license, [project.getName()]); + } + } else { + log.info(`Could not find package.json file in project ${project.getName()}`); + } + return processProject(project); + })); + } + // Start processing dependencies of the root project + await processProject(taskUtil.getProject()); + const summaryResource = createResource({ + path: "/dependency-license-summary.json", + string: JSON.stringify(Object.fromEntries(licenses), null, "\t") + }); + await workspace.write(summaryResource); +}; +``` + +::: +## Helper Class `TaskUtil` + +Custom tasks defining [Specification Version](../Configuration.md#specification-versions) 2.2 or higher have access to an interface of a [TaskUtil](https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html) instance. + +In this case, a `taskUtil` object is provided as a part of the custom task's [parameters](#task-implementation). Depending on the specification version of the custom task, a set of helper functions is available to the implementation. The lowest required specification version for every function is listed in the [TaskUtil API reference](https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html). diff --git a/docs/pages/extensibility/ProjectShims.md b/docs/extensibility/ProjectShims.md similarity index 100% rename from docs/pages/extensibility/ProjectShims.md rename to docs/extensibility/ProjectShims.md diff --git a/docs/index.md b/docs/index.md index b5d4500e27..bba1befee0 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,8 +1,8 @@ -![UI5 logo](images/UI5_logo_wide.png) +--- +layout: home # UI5 CLI -An open and modular toolchain to develop state-of-the-art applications based on the [UI5](https://ui5.sap.com) framework. !!! abstract "Project Rename" **UI5 Tooling has been renamed to UI5 CLI 🚨** diff --git a/docs/pages/ESSupport.md b/docs/pages/ESSupport.md deleted file mode 100644 index b7ac05687a..0000000000 --- a/docs/pages/ESSupport.md +++ /dev/null @@ -1,580 +0,0 @@ - -# ECMAScript Support - -UI5 CLI offers general support for `ES2023` ECMAScript features. While a `ui5 build` is executed, UI5 CLI analyses a project's code. Depending on the project type, you have to consider some restrictions regarding the usage of certain ECMAScript syntax. - -| UI5 CLI Version | Supported ECMAScript Version | Note | -|-------------------- |----------------------------- | ---- | -| v3.11+ | ECMAScript 2023 | | -| v3.0+ | ECMAScript 2022 | | -| v2.0+ | ECMAScript 2009/ES5 | Note that code up to ECMAScript 2020 can be parsed, however required code analysis might not work correctly for specific language features | - -The following section describes all restrictions grouped by the kind of ECMAScript language feature. To get more insights into the code analysing executed by UI5 CLI check out [Code Analysis](./CodeAnalysis.md). - -## Language Features with Restrictions - -The following sections describe the restrictions grouped by the ECMAScript language feature. - -### JavaScript modules - -In general, UI5 CLI only analyzes **JavaScript** files of type `script`. [JavaScript Modules](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules) are not analyzed. - -UI5 CLI and the UI5 Runtime does not support the usage of `export` and `import` of JavaScript Modules. Therefore, `sap.ui.define` has to be used. - -=== "Supported" - - ```javascript - sap.ui.define([ - "ModuleA", - "ModuleB" - ], function(ModuleA, ModuleB) { - return ModuleA.extend("ModuleC", {}); - }); - ``` - -=== "Not Supported" - - ```javascript hl_lines="1 2 3" - import ModuleA from "ModuleA"; - import ModuleB from "ModuleB"; - export default class ModuleC extends ModuleA {}; - ``` - -### Template Literal - -[Template Literals](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals) without an expressions can be used in all places where string literals can be used. However, since UI5 CLI will attempt a static code analysis for certain calls to UI5 API, Template Literals with one or more expressions (e.g. `Hello ${planets[2]}`) can't be used in the scenarios described below. - -#### Template Literal in `sap.ui.define` or `sap.ui.require` - -Template Literals with one or more expressions inside a `sap.ui.define` or `sap.ui.require` call are not supported. - -=== "Supported" - - ```javascript - sap.ui.define([ - `ModuleA`, - `ModuleB` - ], function(ModuleA, ModuleB) { - }); - ``` - -=== "Not Supported" - - ```javascript hl_lines="4" - const i = `B`; - sap.ui.define([ - `ModuleA`, - `Module${i}` - ], function(ModuleA, ModuleB) { - }); - ``` - -The same rule applies also for the usage of deprecated or no longer recommended APIs `jQuery.sap.declare`, `jQuery.sap.declare`, `define`, `require`, `require.predefine`, `sap.ui.predefine`, `sap.ui.requireSync` and `sap.ui.require.preload`. - -#### Template Literal in Smart Template Declaration - -When declaring a **Smart Template** using a **Template Literal** with one or more expressions in the name of the **Smart Template** is not supported. - -=== "Supported" - - ```javascript - sap.ui.define([ - `sap/suite/ui/generic/template/lib/TemplateAssembler` - ], function(TemplateAssembler) { - return TemplateAssembler.getTemplateComponent(getMethods, - `sap.suite.ui.generic.templates.Page.Component`, { - metadata: { - properties: { - templateName: { - type: `string`, - defaultValue: `sap.suite.ui.generic.templates.Page.view.Page` - } - }, - manifest: `json` - } - } - ); - }); - ``` - -=== "Not Supported" - - ```javascript hl_lines="6" - sap.ui.define([ - `sap/suite/ui/generic/template/lib/TemplateAssembler` - ], function(TemplateAssembler) { - const name = `Component`; - return TemplateAssembler.getTemplateComponent(getMethods, - `sap.suite.ui.generic.templates.Page.${name}`, { - metadata: { - properties: { - templateName: { - type: `string`, - defaultValue: `sap.suite.ui.generic.templates.Page.view.Page` - } - }, - manifest: `json` - } - } - ); - }); - ``` - -#### Template Literal in XMLComposite Declaration - -The **XMLComposite** control is deprecated since version UI5 1.88. Nevertheless UI5 CLI will attempt to analyze the declaration of any such controls in a project. - -Declaring an **XMLComposite** control using a **Template Literal** with one or more expressions in the name, is not supported. - -=== "Supported" - - ```javascript - sap.ui.define([ - `sap/ui/core/XMLComposite` - ], function(XMLComposite) { - return XMLComposite.extend(`composites.MyComposite`, {} - }); - ``` - -=== "Not Supported" - - ```javascript hl_lines="5" - sap.ui.define([ - `sap/ui/core/XMLComposite` - ], function(XMLComposite) { - const name = `MyComposite`; - return XMLComposite.extend(`composites.${name}`, {}); - }); - ``` - -#### Template Literal in sap/ui/core/Core#initLibrary Call - -A library is typically initialized via an accompanying `library.js`. Within that file, the object which is supplied to the `sap/ui/core/Core#initLibrary` method, must not use a **Template Literal** with one or more expressions for the library name. - -=== "Supported" - - ```javascript - sap.ui.getCore().initLibrary({ - name: `my.lib` - }); - ``` - -=== "Not Supported" - - ```javascript hl_lines="3" - const libraryName = `lib`; - sap.ui.getCore().initLibrary({ - name: `my.${libraryName}` - }); - ``` - -#### Reserved Variable Names in a Template Literal - -While UI5 CLI performs a build placeholders are replaced with a values offered by the build. For example `${version}` is replaced with the actual version defined in the package.json of the project. Therefore it is required to not use any **Template Literal** where any expression contains variable with following names: - -- `version` -- `project.version` -- `buildtime` -- `copyright` - -=== "Supported" - - ```javascript - const myVersion = `1.2`; - const transformedVersion `v${myVersion}` - ``` - -=== "Not Supported" - - ```javascript hl_lines="3" - const version = `1.2`; - const transformedVersion `v${version}` - ``` - -UI5 CLI searches for the exact match of `${version}`, so with adding whitespaces before and after the variable name `${ version }` UI5 CLI won't replace this occurence. This can be enforced by the dedicated ESLint config [template-curly-spacing](https://eslint.org/docs/latest/rules/template-curly-spacing) with option `always`. - -### Spread Element - -A [Spread Element](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax) can be used in all places, except the following. - -#### Spread Element in `sap.ui.define` or `sap.ui.require` - -A **Spread Element** as a parameter in a `sap.ui.define` or `sap.ui.require` call is not supported. - -=== "Supported" - - ```javascript - sap.ui.define([ - "ModuleA", - "ModuleB" - ], function(ModuleA, ModuleB) { - }); - ``` - -=== "Not Supported" - - ```javascript hl_lines="3" - const dependencies = ["ModuleA", "ModuleB"]; - sap.ui.define([ - ...dependencies - ], function(ModuleA, ModuleB) { - }); - ``` - -The same rule applies also for the usage of deprecated or no longer recommended APIs `jQuery.sap.declare`, `jQuery.sap.declare`, `define`, `require`, `require.predefine`, `sap.ui.predefine`, `sap.ui.requireSync` and `sap.ui.require.preload`. - -#### Spread Element in Smart Template Declaration - -When declaring a **Smart Template**, the usage of a **Spread Element** in the configuration is not supported. - -=== "Supported" - - ```javascript - sap.ui.define([ - "sap/suite/ui/generic/template/lib/TemplateAssembler" - ], function(TemplateAssembler) { - return TemplateAssembler.getTemplateComponent(getMethods, - "sap.suite.ui.generic.templates.Page.Component", { - metadata: { - properties: { - templateName: { - type: "string", - defaultValue: "sap.suite.ui.generic.templates.Page.view.Page" - } - }, - manifest: "json" - } - } - ); - }); - ``` - -=== "Not Supported" - - ```javascript hl_lines="6" - sap.ui.define([ - "sap/suite/ui/generic/template/lib/TemplateAssembler" - ], function(TemplateAssembler) { - const myTemplate = { - templateName: { - type: "string", - defaultValue: "sap.suite.ui.generic.templates.Page.view.Page" - } - }; - return TemplateAssembler.getTemplateComponent(getMethods, - "sap.suite.ui.generic.templates.Page.Component", { - metadata: { - properties: { - ...myTemplate - } - manifest: "json" - } - } - ); - }); - ``` - -#### Spread Element in XMLComposite Declaration - -The **XMLComposite** control is deprecated since version UI5 1.88. Nevertheless UI5 CLI will attempt to analyze the declaration of any such controls in a project. - -When declaring an **XMLComposite**, the usage of a **Spread Element** in the configuration is not supported. - -=== "Supported" - - ```javascript - sap.ui.define([ - "sap/ui/core/XMLComposite" - ], function(XMLComposite) { - return XMLComposite.extend("composites.MyComposite", { - fragment: "composites.custom.MyComposite" - } - }); - ``` - -=== "Not Supported" - - ```javascript hl_lines="5" - sap.ui.define([ - "sap/ui/core/XMLComposite" - ], function(XMLComposite) { - const myXMLComposite = { - fragment: "composites.custom.MyComposite" - }; - return XMLComposite.extend(`composites.MyComposite`, { - ...myXMLComposite - }); - }); - ``` - -#### Spread Element in sap/ui/core/Core#initLibrary Call - -A library is typically initialized via an accompanying `library.js`. Within that file, the object which is supplied to the `sap/ui/core/Core#initLibrary` method, must not use a **Spread Element**. - -=== "Supported" - - ```javascript - sap.ui.getCore().initLibrary({ - name: "my.lib" - }); - ``` - -=== "Not Supported" - - ```javascript hl_lines="5" - const mylib = { - name: "my.lib" - }; - sap.ui.getCore().initLibrary({ - ...mylib - }); - ``` - -### Object Expression - -An **Object Expression** can be used in all places except in following places. - -#### Object Expression in `sap.ui.define` or `sap.ui.require` - -An **Object Expression** as a parameter in a `sap.ui.define` or `sap.ui.require` call is not supported. - -=== "Supported" - - ```javascript - sap.ui.define([ - "Bar" - ], function(Bar){ - }); - - ``` - -=== "Not Supported" - - ```javascript hl_lines="3" - const dependency = "Bar"; - sap.ui.define([ - dependency - ], function(Bar){ - }); - ``` - -The same rule applies also for the usage of deprecated or no longer recommended APIs `jQuery.sap.declare`, `jQuery.sap.declare`, `define`, `require`, `require.predefine`, `sap.ui.predefine`, `sap.ui.requireSync` and `sap.ui.require.preload`. - -#### Object Expression in Smart Template Declaration - -When declaring a **Smart Template**, the usage of an **Object Expression** in the configuration is not supported. - -=== "Supported" - - ```javascript - sap.ui.define([ - "sap/suite/ui/generic/template/lib/TemplateAssembler" - ], function(TemplateAssembler) { - return TemplateAssembler.getTemplateComponent(getMethods, - "sap.suite.ui.generic.templates.Page.Component", { - metadata: { - properties: { - templateName: { - type: "string", - defaultValue: "sap.suite.ui.generic.templates.Page.view.Page" - } - }, - manifest: "json" - } - } - ); - }); - ``` - -=== "Not Supported" - - ```javascript hl_lines="9" - sap.ui.define([ - "sap/suite/ui/generic/template/lib/TemplateAssembler" - ], function(TemplateAssembler) { - const key = "templateName" - return TemplateAssembler.getTemplateComponent(getMethods, - `sap.suite.ui.generic.templates.Page.${name}`, { - metadata: { - properties: { - [key]: { - type: "string", - defaultValue: "sap.suite.ui.generic.templates.Page.view.Page" - } - } - manifest: "json" - } - } - ); - }); - ``` - -#### Object Expression in XMLComposite Declaration - -The **XMLComposite** control is deprecated since version UI5 1.88. Nevertheless UI5 CLI will attempt to analyze the declaration of any such controls in a project. - -When declaring an **XMLComposite**, the usage of an **Object Expression** in the configuration is not supported. - -=== "Supported" - - ```javascript - sap.ui.define([ - "sap/ui/core/XMLComposite" - ], function(XMLComposite) { - return XMLComposite.extend("composites.MyComposite", { - fragment: "composites.custom.MyComposite" - } - }); - ``` - -=== "Not Supported" - - ```javascript hl_lines="6" - sap.ui.define([ - "sap/ui/core/XMLComposite" - ], function(XMLComposite) { - const key = "fragment"; - return XMLComposite.extend("composites.MyComposite", { - [key]: "composites.custom.MyComposite" - }); - }); - ``` - -#### Object Expression in sap/ui/core/Core#initLibrary Call - -A library is typically initialized via an accompanying `library.js`. Within that file, the object which is supplied to the `sap/ui/core/Core#initLibrary` method, must not use an **Object Expression**. - -=== "Supported" - - ```javascript - sap.ui.getCore().initLibrary({ - name: "my.lib" - }); - ``` - -=== "Not Supported" - - ```javascript hl_lines="3" - const key = "name"; - sap.ui.getCore().initLibrary({ - [key]: "my.lib" - }); - ``` - -### Computed Property - -A **Computed Property** can be used in all places except in following places. - -#### Computed Property when using `extend` - -One or more **Computed Property** as a parameter in an UI5 Module `extend` call is not supported. - -=== "Supported" - - ```javascript - sap.ui.define([ - "Bar" - ], function(Bar){ - return Bar.extend("my.Bar" {}); - }); - - ``` - -=== "Not Supported" - - ```javascript hl_lines="3" - const name = "my"; - sap.ui.define([ - "Bar" - ], function(Bar){ - return Bar.extend(name + ".Bar", {}); - }); - ``` - -#### Computed Properties in sap/ui/core/Core#initLibrary Call - -A library is typically initialized via an accompanying `library.js`. Within that file, the object which is supplied to the `sap/ui/core/Core#initLibrary` method, must not use an **Computed Property**. - -=== "Supported" - - ```javascript - sap.ui.getCore().initLibrary({ - name: "my.lib" - }); - ``` - -=== "Not Supported" - - ```javascript hl_lines="3" - const name = "my"; - sap.ui.getCore().initLibrary({ - name: name + ".lib" - }); - ``` - -### Class Declaration - -If you want to generate a JSDoc build of your project and using a **Class Declaration** the class declaration should not be returned directly. Declare the class and return the class in a separate statement. If not JSDoc treats the the class declaration as a return statement and does not recognize any JSDoc if such is provided right above the class declaration. - -=== "Supported" - - ```javascript - sap.ui.define([ - "Bar" - ], function(Bar){ - /** - * JSDoc block here - */ - class Foo extends Bar { - make () {} - } - - return Foo; - }); - ``` - -=== "Not Supported" - - ```javascript hl_lines="7" - sap.ui.define([ - "Bar" - ], function(Bar){ - /** - * JSDoc block here - */ - return class Foo extends Bar { - make () {} - } - }); - ``` - -### Arrow Function Expression - -If you want to generate a JSDoc build of your project and use an **Arrow Function Expression** the JSDoc has to be written above the arrow function and not above the `sap.ui.define/sap.ui.require` command. - -=== "Supported" - - ```javascript - sap.ui.define([ - "Bar" - ], - /** - * JSDoc block here - */ - (Bar) => Bar.extends("Foo", { - - })); - ``` - -=== "Not Supported" - - ```javascript hl_lines="1 2 3" - /** - * JSDoc block here - */ - sap.ui.define([ - "Bar" - ], (Bar) => Bar.extends("Foo", { - - })); - ``` diff --git a/docs/pages/extensibility/CustomServerMiddleware.md b/docs/pages/extensibility/CustomServerMiddleware.md deleted file mode 100644 index 7a164ca4d8..0000000000 --- a/docs/pages/extensibility/CustomServerMiddleware.md +++ /dev/null @@ -1,256 +0,0 @@ -# Custom UI5 Server Middleware - -The UI5 Server Extensibility enables you to enhance the functionality of the UI5 Server. You may want to handle requests differently. For example add various headers to a response or parse data of a POST request in a specific way. For this you can plug custom middleware implementations into the internal [express](https://expressjs.com/) server of the UI5 Server module. - -The UI5 community already created many custom middleware packages which you can integrate into your project. They are often prefixed by `ui5-middleware-` to make them easily searchable in the [npm registry](https://www.npmjs.com/search?q=ui5-middleware-). - -Please note that custom middleware packages from third parties can not only modify how your project is served but also execute arbitrary code on your system. In fact, this is the case for all npm packages you install. Always act with the according care and follow best practices. - -## Configuration - -In a projects `ui5.yaml` file, you can define additional server middleware modules that will be executed when the request is received by the server. This configuration exclusively affects the server started in this project. Custom middleware configurations defined in any dependencies are ignored. - -A middleware may be executed before or after any other middleware. This can either be a [standard middleware](../Server.md#standard-middleware) or another custom middleware. - -### Example: Basic configuration - -```yaml -specVersion: "4.0" -type: application -metadata: - name: my.application -server: - customMiddleware: - - name: myCustomMiddleware - mountPath: /myapp - afterMiddleware: compression - configuration: - debug: true -``` - -In the above example the middleware `compression` is already included as a standard middleware by the UI5 Server. When serving the application `my.application`, the server will call the custom middleware `myCustomMiddleware` after `compression`. - -There can be optional configuration parameters which are passed directly to the custom middleware implementation (see below). - -An optional mountPath for which the middleware function is invoked can be provided. It will be passed to the `app.use` call (see [express API reference](https://expressjs.com/en/4x/api.html#app.use)). - -### Execution order - -Note that middleware configurations are applied in the order they are defined. When referencing another custom middleware, it has to be defined *before* that reference. - -## Custom Middleware Extension - -A custom middleware extension consists of a `ui5.yaml` and a [custom middleware implementation](#custom-middleware-implementation). It can be a standalone module or part of an existing UI5 project. - -### Example: ui5.yaml - -```yaml -specVersion: "4.0" -kind: extension -type: server-middleware -metadata: - name: markdownHandler -middleware: - path: lib/middleware/markdownHandler.js -``` - -Custom middleware extensions can be **standalone modules** which are handled as dependencies. - -Alternatively you can implement a custom middleware extension as **part of your UI5 project**. -In that case, the configuration of the extension is part of your project configuration inside the `ui5.yaml` as shown below. - -The UI5 Server will detect the custom middleware configuration of the project and use the middleware on startup. - -### Example: Custom Middleware Extension defined in UI5 project - -```yaml -# Project configuration for the above example -specVersion: "4.0" -kind: project -type: application -metadata: - name: my.application -server: - customMiddleware: - - name: markdownHandler - beforeMiddleware: serveResources ---- -# Custom middleware extension as part of your project -specVersion: "4.0" -kind: extension -type: server-middleware -metadata: - name: markdownHandler -middleware: - path: lib/middleware/markdownHandler.js -``` - -## Custom Middleware Implementation - -A custom middleware implementation needs to return a function with the following signature: - -=== "ESM" - - ```js linenums="1" - /** - * Custom UI5 Server middleware API - * - * @param {object} parameters Parameters - * @param {@ui5/logger/Logger} parameters.log - * Logger instance for use in the custom middleware. - * This parameter is only provided to custom middleware - * extensions defining Specification Version 3.0 and later. - * @param {@ui5/server.middleware.MiddlewareUtil} parameters.middlewareUtil - * Specification version-dependent interface to a - * MiddlewareUtil instance. See the corresponding API reference for details: - * https://ui5.github.io/cli/v4/api/@ui5_server_middleware_MiddlewareUtil.html - * @param {object} parameters.options Options - * @param {string} parameters.options.configuration - * Custom middleware configuration, as defined in the project's ui5.yaml - * @param {string} parameters.options.middlewareName - * Name of the custom middleware. - * This parameter is only provided to custom middleware extensions - * defining Specification Version 3.0 and later - * @param {object} parameters.resources Readers for accessing resources - * @param {module:@ui5/fs.AbstractReader} parameters.resources.all - * Reader to access resources of the root project and its dependencies - * @param {module:@ui5/fs.AbstractReader} parameters.resources.rootProject - * Reader to access resources of the root project - * @param {module:@ui5/fs.AbstractReader} parameters.resources.dependencies - * Reader to access resources of the project's dependencies. - * @returns {function} Middleware function to use - */ - export default function({log, middlewareUtil, options, resources}) { - return async function (req, res, next) { - // [...] - } - }; - ``` - -=== "CommonJS" - - ```js linenums="1" - /** - * Custom UI5 Server middleware API - * - * @param {object} parameters Parameters - * @param {@ui5/logger/Logger} parameters.log - * Logger instance for use in the custom middleware. - * This parameter is only provided to custom middleware - * extensions defining Specification Version 3.0 and later. - * @param {@ui5/server.middleware.MiddlewareUtil} parameters.middlewareUtil - * Specification version-dependent interface to a - * MiddlewareUtil instance. See the corresponding API reference for details: - * https://ui5.github.io/cli/v4/api/@ui5_server_middleware_MiddlewareUtil.html - * @param {object} parameters.options Options - * @param {string} parameters.options.configuration - * Custom middleware configuration, as defined in the project's ui5.yaml - * @param {string} parameters.options.middlewareName - * Name of the custom middleware. - * This parameter is only provided to custom middleware extensions - * defining Specification Version 3.0 and later - * @param {object} parameters.resources Readers for accessing resources - * @param {module:@ui5/fs.AbstractReader} parameters.resources.all - * Reader to access resources of the root project and its dependencies - * @param {module:@ui5/fs.AbstractReader} parameters.resources.rootProject - * Reader to access resources of the root project - * @param {module:@ui5/fs.AbstractReader} parameters.resources.dependencies - * Reader to access resources of the project's dependencies. - * @returns {function} Middleware function to use - */ - module.exports = function({log, middlewareUtil, options, resources}) { - return async function (req, res, next) { - // [...] - } - }; - ``` - -### Example: lib/middleware/markdownHandler.(m)js - -=== "ESM" - - ```js linenums="1" - import MarkdownIt from "markdown-it"; - - export default async function({log, middlewareUtil, options, resources}) { - const md = new MarkdownIt(); - return function (req, res, next) { - if (!req.path || !req.path.endsWith(".html")) { - // Do not handle non-HTML requests - next(); - return; - } - // Try to read a corresponding markdown file - resources.rootProject.byPath(req.path.replace(".html", ".md")).then(async (resource) => { - if (!resource) { - // No file found, hand over to next middleware - next(); - return; - } - log.info(`Rendering markdown for ${resource.getPath()}`); - const markdown = await resource.getBuffer(); - // Generate HTML from markdown string - const html = md.render(markdown.toString()); - res.type('.html'); - res.end(html); - }).catch((err) => { - next(err); - }); - } - }; - ``` - Live demo of the above example: [openui5-sample-app with custom middleware](https://github.com/SAP/openui5-sample-app/tree/demo-server-middleware-extensibility-v3-esm) - -=== "CommonJS" - - ```js linenums="1" - module.exports = async function({log, middlewareUtil, options, resources}) { - const MarkdownIt = require("markdown-it"); - const md = new MarkdownIt(); - return function (req, res, next) { - if (!req.path || !req.path.endsWith(".html")) { - // Do not handle non-HTML requests - next(); - return; - } - // Try to read a corresponding markdown file - resources.rootProject.byPath(req.path.replace(".html", ".md")).then(async (resource) => { - if (!resource) { - // No file found, hand over to next middleware - next(); - return; - } - log.info(`Rendering markdown for ${resource.getPath()}`); - const markdown = await resource.getBuffer(); - // Generate HTML from markdown string - const html = md.render(markdown.toString()); - res.type('.html'); - res.end(html); - }).catch((err) => { - next(err); - }); - } - }; - ``` - Live demo of the above example: [openui5-sample-app with custom middleware](https://github.com/SAP/openui5-sample-app/tree/demo-server-middleware-extensibility-v3) - -## Helper Class `MiddlewareUtil` - -Custom middleware defining [Specification Version](../Configuration.md#specification-versions) 2.0 or higher have access to an interface of a [MiddlewareUtil](https://ui5.github.io/cli/v4/api/@ui5_server_middleware_MiddlewareUtil.html) instance. - -In this case, a `middlewareUtil` object is provided as a part of the custom middleware's [parameters](#custom-middleware-implementation). Depending on the specification version of the custom middleware, a set of helper functions is available to the implementation. The lowest required specification version for every function is listed in the [MiddlewareUtil API reference](https://ui5.github.io/cli/v4/api/@ui5_server_middleware_MiddlewareUtil.html). - -## Integration with `karma-ui5` - -!!! Warning - The Karma project has been [deprecated](https://github.com/karma-runner/karma#karma-is-deprecated-and-is-not-accepting-new-features-or-general-bug-fixes) as of 2023 - -[`karma-ui5`](https://github.com/SAP/karma-ui5) is a plugin for the popular [Karma test runner](https://karma-runner.github.io/). Based on your [configuration](https://github.com/SAP/karma-ui5#url), it can fetch resources from a dedicated server or start an internal server using parts of UI5 CLI. - -In the latter case, any custom middleware configured in the default `ui5.yaml` of the project will be used automatically. - -However, since Karma uses the [`connect`](https://github.com/senchalabs/connect) framework, as opposed to UI5 CLI's [`express`](https://github.com/expressjs/express), custom middleware might not always work as expected. Compared to `connect`, the `express` framework provides a more versatile API to middleware. - -Therefore, if you plan to use custom middleware in an integrated scenario with `karma-ui5`, you must **restrict the middleware to using the [`connect`](https://github.com/senchalabs/connect) API only** to ensure compatibility. - -Alternatively, you can start a server with the usual `ui5 serve` command and [configure the corresponding URL](https://github.com/SAP/karma-ui5#url) for use by `karma-ui5`. diff --git a/docs/pages/extensibility/CustomTasks.md b/docs/pages/extensibility/CustomTasks.md deleted file mode 100644 index f033760476..0000000000 --- a/docs/pages/extensibility/CustomTasks.md +++ /dev/null @@ -1,476 +0,0 @@ -# Custom UI5 Builder Tasks - -The UI5 Build Extensibility enables you to enhance the build process of any UI5 project. In addition to the [standard tasks](../Builder.md#standard-tasks), custom tasks can be created. - -The UI5 community already created many custom tasks which you can integrate into your project. They are often prefixed by `ui5-task-` to make them easily searchable in the [npm registry](https://www.npmjs.com/search?q=ui5-task-). - -Please note that custom tasks from third parties can not only modify your project but also execute arbitrary code on your system. In fact, this is the case for all npm packages you install. Always act with the according care and follow best practices. - -## Configuration - -You can configure your build process with additional build task. These custom tasks are defined in the project [configuration](../Configuration.md). - -To hook your custom tasks into the different build phases of a project, they need to reference other tasks to be executed before or after. This can be a [standard task](../Builder.md#standard-tasks) or another custom task. -Standard tasks that are disabled, even though they are not executed, can still be referenced by custom tasks, which will be performed in their designated position. - -In the below example, when building the library `my.library` the custom `babel` task will be executed before the standard task `generateComponentPreload`. -Another custom task called `render-markdown-files` is then executed immediately after the standard task `minify`. - -### Example: Basic configuration - -```yaml -# In this example configuration, two custom tasks are defined: 'babel' and 'render-markdown-files'. -specVersion: "4.0" -type: library -metadata: - name: my.library -builder: - customTasks: - - name: babel - beforeTask: generateComponentPreload - - name: render-markdown-files - afterTask: minify - configuration: - markdownStyle: - firstH1IsTitle: true -``` - -### Example: Connect multiple custom tasks - -You can also connect multiple custom tasks with each other. The order in the configuration is important in this case. You have to make sure that a task is defined *before* you reference it via `beforeTask` or `afterTask`. - -```yaml -# In this example, 'my-custom-task-2' gets executed after 'my-custom-task-1'. -specVersion: "4.0" -type: library -metadata: - name: my.library -builder: - customTasks: - - name: my-custom-task-1 - beforeTask: generateComponentPreload - - name: my-custom-task-2 - afterTask: my-custom-task-1 -``` - -## Custom Task Extension - -A custom task extension consists of a `ui5.yaml` and a [task implementation](#task-implementation). It can be a standalone module or part of an existing UI5 project. - -### Example: ui5.yaml - -```yaml -specVersion: "4.0" -kind: extension -type: task -metadata: - name: render-markdown-files -task: - path: lib/tasks/renderMarkdownFiles.js -``` - -Task extensions can be **standalone modules** which are handled as dependencies. - -Alternatively you can implement a task extension as **part of your UI5 project**. -In that case, the configuration of the extension is part of your project configuration inside the `ui5.yaml` as shown below. - -The task extension will then be automatically collected and processed during the processing of the project. - -### Example: Custom Task Extension defined in UI5 project - -```yaml -# Project configuration for the above example -specVersion: "4.0" -kind: project -type: library -metadata: - name: my.library -builder: - customTasks: - - name: render-markdown-files - afterTask: minify - configuration: - markdownStyle: - firstH1IsTitle: true ---- -# Task extension as part of your project -specVersion: "4.0" -kind: extension -type: task -metadata: - name: render-markdown-files -task: - path: lib/tasks/renderMarkdownFiles.js -``` - -## Task Implementation - -A custom task implementation needs to return a function with the following signature: - -=== "ESM" - - ```js linenums="1" - /** - * Custom task API - * - * @param {object} parameters - * - * @param {module:@ui5/fs.AbstractReader} parameters.dependencies - * Reader to access resources of the project's dependencies - * @param {@ui5/logger/Logger} parameters.log - * Logger instance for use in the custom task. - * This parameter is only available to custom task extensions - * defining Specification Version 3.0 and later. - * @param {object} parameters.options Options - * @param {string} parameters.options.projectName - * Name of the project currently being built - * @param {string} parameters.options.projectNamespace - * Namespace of the project currently being built - * @param {string} parameters.options.configuration - * Custom task configuration, as defined in the project's ui5.yaml - * @param {string} parameters.options.taskName - * Name of the custom task. - * This parameter is only provided to custom task extensions - * defining Specification Version 3.0 and later. - * @param {@ui5/builder.tasks.TaskUtil} parameters.taskUtil - * Specification Version-dependent interface to a TaskUtil instance. - * See the corresponding API reference for details: - * https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html - * @param {module:@ui5/fs.DuplexCollection} parameters.workspace - * Reader/Writer to access and modify resources of the - * project currently being built - * @returns {Promise} - * Promise resolving once the task has finished - */ - export default async function({dependencies, log, options, taskUtil, workspace}) { - // [...] - }; - ``` - -=== "CommonJS" - - ```js linenums="1" - /** - * Custom task API - * - * @param {object} parameters - * - * @param {module:@ui5/fs.AbstractReader} parameters.dependencies - * Reader to access resources of the project's dependencies - * @param {@ui5/logger/Logger} parameters.log - * Logger instance for use in the custom task. - * This parameter is only available to custom task extensions - * defining Specification Version 3.0 and later. - * @param {object} parameters.options Options - * @param {string} parameters.options.projectName - * Name of the project currently being built - * @param {string} parameters.options.projectNamespace - * Namespace of the project currently being built - * @param {string} parameters.options.configuration - * Custom task configuration, as defined in the project's ui5.yaml - * @param {string} parameters.options.taskName - * Name of the custom task. - * This parameter is only provided to custom task extensions - * defining Specification Version 3.0 and later. - * @param {@ui5/builder.tasks.TaskUtil} parameters.taskUtil - * Specification Version-dependent interface to a TaskUtil instance. - * See the corresponding API reference for details: - * https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html - * @param {module:@ui5/fs.DuplexCollection} parameters.workspace - * Reader/Writer to access and modify resources of the - * project currently being built - * @returns {Promise} - * Promise resolving once the task has finished - */ - module.exports = async function({dependencies, log, options, taskUtil, workspace}) { - // [...] - }; - ``` - -### Required Dependencies - -!!! info - This functionality has been added with UI5 CLI [`v3.0.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.0.0) - -Custom tasks can export an optional callback function `determineRequiredDependencies` to control which dependency-resources are made available through the `dependencies`-reader that is provided to the task. By reducing the amount of required dependencies or by not requiring any, UI5 CLI might be able to build a project faster. - -Before executing a task, UI5 CLI will ensure that all required dependencies have been built. - -If this callback is not provided, UI5 CLI will make an assumption as to whether the custom task requires access to any resources of dependencies based on the defined Specification Version of the custom task extension: - -* **Specification Version 3.0 and later:** If no callback is provided, UI5 CLI assumes that no dependencies are required. In this case, the `dependencies` parameter will be omitted. -* **Specification Versions before 3.0:** If no callback is provided, UI5 CLI assumes that all dependencies are required. - - -*For more details, see also [RFC 0012 UI5 CLI Extension API v3](https://github.com/UI5/cli/blob/rfc-ui5-tooling-extension-api-v3/rfcs/0012-UI5-Tooling-Extension-API-3.md#3-tasks-requiring-dependencies)* - -=== "ESM" - - ```js linenums="1" - /** - * Callback function to define the list of required dependencies - * - * @param {object} parameters - * @param {Set} parameters.availableDependencies - * Set containing the names of all direct dependencies of - * the project currently being built. - * @param {function} parameters.getDependencies - * Identical to TaskUtil#getDependencies - * (see https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html). - * Creates a list of names of all direct dependencies - * of a given project. - * @param {function} parameters.getProject - * Identical to TaskUtil#getProject - * (see https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html). - * Retrieves a Project-instance for a given project name. - * @param {object} parameters.options - * Identical to the options given to the standard task function. - * @returns {Promise} - * Promise resolving with a Set containing all dependencies - * that should be made available to the task. - * UI5 CLI will ensure that those dependencies have been - * built before executing the task. - */ - export async function determineRequiredDependencies({availableDependencies, getDependencies, getProject, options}) { - // "availableDependencies" could look like this: Set(3) { "sap.ui.core", "sap.m", "my.lib" } - - // Reduce list of required dependencies: Do not require any UI5 framework projects - availableDependencies.forEach((depName) => { - if (getProject(depName).isFrameworkProject()) { - availableDependencies.delete(depName) - } - }); - // => Only resources of project "my.lib" will be available to the task - return availableDependencies; - } - ``` - -=== "CommonJS" - - ```js linenums="1" - /** - * Callback function to define the list of required dependencies - * - * @param {object} parameters - * @param {Set} parameters.availableDependencies - * Set containing the names of all direct dependencies of - * the project currently being built. - * @param {function} parameters.getDependencies - * Identical to TaskUtil#getDependencies - * (see https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html). - * Creates a list of names of all direct dependencies - * of a given project. - * @param {function} parameters.getProject - * Identical to TaskUtil#getProject - * (see https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html). - * Retrieves a Project-instance for a given project name. - * @param {object} parameters.options - * Identical to the options given to the standard task function. - * @returns {Promise} - * Promise resolving with a Set containing all dependencies - * that should be made available to the task. - * UI5 CLI will ensure that those dependencies have been - * built before executing the task. - */ - module.exports.determineRequiredDependencies = async function({availableDependencies, getDependencies, getProject, options}) { - // "availableDependencies" could look like this: Set(3) { "sap.ui.core", "sap.m", "my.lib" } - - // Reduce list of required dependencies: Do not require any UI5 framework projects - availableDependencies.forEach((depName) => { - if (getProject(depName).isFrameworkProject()) { - availableDependencies.delete(depName) - } - }); - // => Only resources of project "my.lib" will be available to the task - return availableDependencies; - } - ``` - -### Examples - -The following code snippets show examples for custom task implementations. - -### Example: lib/tasks/renderMarkdownFiles.js - -This example is making use of the `resourceFactory` [TaskUtil](https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html) -API to create new resources based on the output of a third-party module for rendering Markdown files. The created resources are added to the build -result by writing them into the provided `workspace`. - -=== "ESM" - - ```js linenums="1" - import path from "node:path"; - import renderMarkdown from "./renderMarkdown.js"; - - /* - * Render all .md (Markdown) files in the project to HTML - */ - export default async function({dependencies, log, options, taskUtil, workspace}) { - const {createResource} = taskUtil.resourceFactory; - const textResources = await workspace.byGlob("**/*.md"); - await Promise.all(textResources.map(async (resource) => { - const markdownResourcePath = resource.getPath(); - - log.info(`Rendering markdown file ${markdownResourcePath}...`); - const htmlString = await renderMarkdown(await resource.getString(), options.configuration); - - // Note: @ui5/fs virtual paths are always (on *all* platforms) POSIX. Therefore using path.posix here - const newResourceName = path.posix.basename(markdownResourcePath, ".md") + ".html"; - const newResourcePath = path.posix.join(path.posix.dirname(markdownResourcePath), newResourceName); - - const markdownResource = createResource({ - path: newResourcePath, - string: htmlString - }); - await workspace.write(markdownResource); - })); - }; - ``` - -=== "CommonJS" - - ```js linenums="1" - const path = require("node:path"); - const renderMarkdown = require("./renderMarkdown.js"); - - /* - * Render all .md (Markdown) files in the project to HTML - */ - module.exports = async function({dependencies, log, options, taskUtil, workspace}) { - const {createResource} = taskUtil.resourceFactory; - const textResources = await workspace.byGlob("**/*.md"); - await Promise.all(textResources.map(async (resource) => { - const markdownResourcePath = resource.getPath(); - - log.info(`Rendering markdown file ${markdownResourcePath}...`); - const htmlString = await renderMarkdown(await resource.getString(), options.configuration); - - // Note: @ui5/fs virtual paths are always (on *all* platforms) POSIX. Therefore using path.posix here - const newResourceName = path.posix.basename(markdownResourcePath, ".md") + ".html"; - const newResourcePath = path.posix.join(path.posix.dirname(markdownResourcePath), newResourceName); - - const markdownResource = createResource({ - path: newResourcePath, - string: htmlString - }); - await workspace.write(markdownResource); - })); - }; - ``` - -!!! warning - Depending on your project setup, UI5 CLI tends to open many files simultaneously during a build. To prevent errors like `EMFILE: too many open files`, we urge custom task implementations to use the [graceful-fs](https://github.com/isaacs/node-graceful-fs#readme) module as a drop-in replacement for the native `fs` module in case it is used. - - Tasks should ideally use the reader/writer APIs provided by UI5 CLI for working with project resources. - -### Example: lib/tasks/compileLicenseSummary.js - -This example is making use of multiple [TaskUtil](https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html) -APIs to retrieve additional information about the project currently being built (`taskUtil.getProject()`) and its direct dependencies -(`taskUtil.getDependencies()`). Project configuration files like `package.json` can be accessed directly using `project.getRootReader()`. - -=== "ESM" - - ```js linenums="1" - import path from "node:path"; - - /* - * Compile a list of all licenses of the project's dependencies - * and write it to "dependency-license-summary.json" - */ - export default async function({dependencies, log, options, taskUtil, workspace}) { - const {createResource} = taskUtil.resourceFactory; - const licenses = new Map(); - const projectsVisited = new Set(); - - async function processProject(project) { - return Promise.all(taskUtil.getDependencies().map(async (projectName) => { - if (projectsVisited.has(projectName)) { - return; - } - projectsVisited.add(projectName); - const project = taskUtil.getProject(projectName); - const pkgResource = await project.getRootReader().byPath("/package.json"); - if (pkgResource) { - const pkg = JSON.parse(await pkgResource.getString()) - - // Add project to list of licenses - if (licenses.has(pkg.license)) { - licenses.get(pkg.license).push(project.getName()); - } else { - // License not yet in map. Define it - licenses.set(pkg.license, [project.getName()]); - } - - } else { - log.info(`Could not find package.json file in project ${project.getName()}`); - } - return processProject(project); - })); - } - // Start processing dependencies of the root project - await processProject(taskUtil.getProject()); - - const summaryResource = createResource({ - path: "/dependency-license-summary.json", - string: JSON.stringify(Object.fromEntries(licenses), null, "\t") - }); - await workspace.write(summaryResource); - }; - ``` - -=== "CommonJS" - - ```js linenums="1" - const path = require("node:path"); - - /* - * Compile a list of all licenses of the project's dependencies - * and write it to "dependency-license-summary.json" - */ - module.exports = async function({dependencies, log, options, taskUtil, workspace}) { - const {createResource} = taskUtil.resourceFactory; - const licenses = new Map(); - const projectsVisited = new Set(); - - async function processProject(project) { - return Promise.all(taskUtil.getDependencies().map(async (projectName) => { - if (projectsVisited.has(projectName)) { - return; - } - projectsVisited.add(projectName); - const project = taskUtil.getProject(projectName); - const pkgResource = await project.getRootReader().byPath("/package.json"); - if (pkgResource) { - const pkg = JSON.parse(await pkgResource.getString()) - - // Add project to list of licenses - if (licenses.has(pkg.license)) { - licenses.get(pkg.license).push(project.getName()); - } else { - // License not yet in map. Define it - licenses.set(pkg.license, [project.getName()]); - } - - } else { - log.info(`Could not find package.json file in project ${project.getName()}`); - } - return processProject(project); - })); - } - // Start processing dependencies of the root project - await processProject(taskUtil.getProject()); - - const summaryResource = createResource({ - path: "/dependency-license-summary.json", - string: JSON.stringify(Object.fromEntries(licenses), null, "\t") - }); - await workspace.write(summaryResource); - }; - ``` - -## Helper Class `TaskUtil` - -Custom tasks defining [Specification Version](../Configuration.md#specification-versions) 2.2 or higher have access to an interface of a [TaskUtil](https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html) instance. - -In this case, a `taskUtil` object is provided as a part of the custom task's [parameters](#task-implementation). Depending on the specification version of the custom task, a set of helper functions is available to the implementation. The lowest required specification version for every function is listed in the [TaskUtil API reference](https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html). diff --git a/docs/public/TripPinClassDiagram.jpg b/docs/public/TripPinClassDiagram.jpg new file mode 100644 index 0000000000000000000000000000000000000000..44dfb5669c203a175f19df3cd026a1d6dca001a7 GIT binary patch literal 45518 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

S>HQY|?q#lil2pSyF7z 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è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ˬO>6_PT8h${?nqeT;@I7;Ip!VP@b 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 \ No newline at end of file diff --git a/docs/public/icons/logo/PlantUML.svg b/docs/public/icons/logo/PlantUML.svg new file mode 100644 index 0000000000..96535d4553 --- /dev/null +++ b/docs/public/icons/logo/PlantUML.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/public/icons/logo/PostCSS.svg b/docs/public/icons/logo/PostCSS.svg new file mode 100644 index 0000000000..baf9b1e760 --- /dev/null +++ b/docs/public/icons/logo/PostCSS.svg @@ -0,0 +1 @@ +postcss-logo-symbol diff --git a/docs/public/icons/logo/Rollup.svg b/docs/public/icons/logo/Rollup.svg new file mode 100644 index 0000000000..20bb5dfe63 --- /dev/null +++ b/docs/public/icons/logo/Rollup.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/docs/public/icons/logo/TailwindCSS.svg b/docs/public/icons/logo/TailwindCSS.svg new file mode 100644 index 0000000000..e0e971530c --- /dev/null +++ b/docs/public/icons/logo/TailwindCSS.svg @@ -0,0 +1,4 @@ + + + + diff --git a/docs/public/icons/logo/TypeScript-wm.svg b/docs/public/icons/logo/TypeScript-wm.svg new file mode 100644 index 0000000000..3c9fa5d366 --- /dev/null +++ b/docs/public/icons/logo/TypeScript-wm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/public/icons/logo/TypeScript.svg b/docs/public/icons/logo/TypeScript.svg new file mode 100644 index 0000000000..a46d53d49f --- /dev/null +++ b/docs/public/icons/logo/TypeScript.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/public/icons/logo/UI5.svg b/docs/public/icons/logo/UI5.svg new file mode 100644 index 0000000000..c54ff84762 --- /dev/null +++ b/docs/public/icons/logo/UI5.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/public/icons/logo/VitePress.svg b/docs/public/icons/logo/VitePress.svg new file mode 100644 index 0000000000..ed6438ade1 --- /dev/null +++ b/docs/public/icons/logo/VitePress.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/public/icons/logo/Vitejs.svg b/docs/public/icons/logo/Vitejs.svg new file mode 100644 index 0000000000..de4aeddc12 --- /dev/null +++ b/docs/public/icons/logo/Vitejs.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/public/icons/logo/Vuejs.svg b/docs/public/icons/logo/Vuejs.svg new file mode 100644 index 0000000000..a6c05382d6 --- /dev/null +++ b/docs/public/icons/logo/Vuejs.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/public/icons/logo/Web-Components.svg b/docs/public/icons/logo/Web-Components.svg new file mode 100644 index 0000000000..a1e3ce54c3 --- /dev/null +++ b/docs/public/icons/logo/Web-Components.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/public/icons/logo/cssnano-wm-vertical.svg b/docs/public/icons/logo/cssnano-wm-vertical.svg new file mode 100644 index 0000000000..8faebaf4da --- /dev/null +++ b/docs/public/icons/logo/cssnano-wm-vertical.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/public/icons/logo/cssnano-wm.svg b/docs/public/icons/logo/cssnano-wm.svg new file mode 100644 index 0000000000..e0a266aa49 --- /dev/null +++ b/docs/public/icons/logo/cssnano-wm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/public/icons/logo/cssnano.svg b/docs/public/icons/logo/cssnano.svg new file mode 100644 index 0000000000..58bfe27f2d --- /dev/null +++ b/docs/public/icons/logo/cssnano.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/docs/public/icons/logo/markdown.svg b/docs/public/icons/logo/markdown.svg new file mode 100644 index 0000000000..efaefee739 --- /dev/null +++ b/docs/public/icons/logo/markdown.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/public/icons/logo/powering-sap-btp.svg b/docs/public/icons/logo/powering-sap-btp.svg new file mode 100644 index 0000000000..260b75880f --- /dev/null +++ b/docs/public/icons/logo/powering-sap-btp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/public/icons/ui5/B.svg b/docs/public/icons/ui5/B.svg new file mode 100644 index 0000000000..b5c1033309 --- /dev/null +++ b/docs/public/icons/ui5/B.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/public/icons/ui5/B_OpenUI5_H.svg b/docs/public/icons/ui5/B_OpenUI5_H.svg new file mode 100644 index 0000000000..0b66b01e83 --- /dev/null +++ b/docs/public/icons/ui5/B_OpenUI5_H.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/public/icons/ui5/B_OpenUI5_V.svg b/docs/public/icons/ui5/B_OpenUI5_V.svg new file mode 100644 index 0000000000..00be266e41 --- /dev/null +++ b/docs/public/icons/ui5/B_OpenUI5_V.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/public/icons/ui5/B_UI5_H.svg b/docs/public/icons/ui5/B_UI5_H.svg new file mode 100644 index 0000000000..690ee70443 --- /dev/null +++ b/docs/public/icons/ui5/B_UI5_H.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/public/icons/ui5/B_UI5_V.svg b/docs/public/icons/ui5/B_UI5_V.svg new file mode 100644 index 0000000000..fd78b9bc78 --- /dev/null +++ b/docs/public/icons/ui5/B_UI5_V.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/public/icons/ui5/O.svg b/docs/public/icons/ui5/O.svg new file mode 100644 index 0000000000..122eacd4ab --- /dev/null +++ b/docs/public/icons/ui5/O.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/public/icons/ui5/O_OpenUI5_H.svg b/docs/public/icons/ui5/O_OpenUI5_H.svg new file mode 100644 index 0000000000..633e548432 --- /dev/null +++ b/docs/public/icons/ui5/O_OpenUI5_H.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/public/icons/ui5/O_OpenUI5_V.svg b/docs/public/icons/ui5/O_OpenUI5_V.svg new file mode 100644 index 0000000000..d272c1a348 --- /dev/null +++ b/docs/public/icons/ui5/O_OpenUI5_V.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/public/icons/ui5/O_UI5_H.svg b/docs/public/icons/ui5/O_UI5_H.svg new file mode 100644 index 0000000000..b0659ccbbb --- /dev/null +++ b/docs/public/icons/ui5/O_UI5_H.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/public/icons/ui5/O_UI5_V.svg b/docs/public/icons/ui5/O_UI5_V.svg new file mode 100644 index 0000000000..79304ca259 --- /dev/null +++ b/docs/public/icons/ui5/O_UI5_V.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/public/icons/ui5/UI5.svg b/docs/public/icons/ui5/UI5.svg new file mode 100644 index 0000000000..c54ff84762 --- /dev/null +++ b/docs/public/icons/ui5/UI5.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/public/learn-more.svg b/docs/public/learn-more.svg new file mode 100644 index 0000000000..22a412cd6e --- /dev/null +++ b/docs/public/learn-more.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/public/tailwind-css-vsc-color-completion.png b/docs/public/tailwind-css-vsc-color-completion.png new file mode 100644 index 0000000000000000000000000000000000000000..889123407f2c11558d9eb9c58b047ff7bb48ffc1 GIT binary patch literal 13680 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 z zRkWFlUf*eZq<#NWLEg_ zd`K?DAX`bQS4RTka94MCZ~dMD5J;xCkIHZ&Ehm-8#wUi{i$0#gR5oq6KE)&P!ZBzQ zDdokddSc!#^Qx!HzZB%$-`_vvp_if*@#(g>mteB19=h%aUrC*}_Q`k{n?!{_D}9^iY5bNqLX zgTbhFS+4D*!YyTHX6w#;bx?^uXDdFn?m9y$71aSRBA_Z{kZ&HCm;V%U+BrL_T0B`2 zi%gtDU7NzmA#mVB?vQX=)`O{QmRO*)(s*=4wbGPleEii6`g&A%c01LmvLA!rvO5f= zWkn6hz!`;4VlIVG>O!%E_OlK_E!M8QRo8MIAsIXlH@bLRn*P0V9TD2TE1x$}g!dwQ zB}23oB6nwVz-ae4_7&Zc;J~dd^J^xrn%Qr4_UV{bkt11blT|l7UsKc^_NEvlh0$%z zrb{(tP^YTeH4nsH^bJ~*RKjh8iRo^8>);0c<{BJYaiv`SurSmtNhVZlG`N8nI@uL3 zP{3L;S;shEMM0@dYChw$kA{dH@O-~p$4AI};zE_GfqQW|`eXDU)!Qf}L>mqh6SEFS zT10i$D4_kh*QroCYG>iV6|i8F-}~!!_VxFBbruI{BNw2~_Y_*yOMIovTfqDg;F^7u zVWAZ?JzuWlCcGDQUBm_6OC%#&^}P(BS<09owadDYl%E(Jymr?c$>fg$vabqv_Fq5;x=dd21sV%m1lK5SW(W%xg@2`^eO_Tju6M*A3Qn# zP~XRM=u=vwa%YTlstqcpp_eKu4EPH>i>-l#l?Om8b1&c4qF7L95cMd~9j(4Z`Qu0# z55UNgRb8bP{&#q#fZp{=d0wW*Rx>nZxb1Lx9kZZ%?m0h_RgTLH@mJ6g>FowLojek<)e zy&&XA0v0j9ihtHTG*BMvYjn#VQ}k%*NXj+Ia?@a zEBh^#wqWq}XhH5;xxW^d-AtXvDc);Q2Hf*P?q!zXdXs#2nqOBZa}elS!He4;+xa>D z4UACN!cZ#PEW5}B?9oJF?W({Qafy+>2Bwr_A5D7NZWNLH9~xYVpse2C)a-ogJ>;Rb z!D-#Co~MCVS6s`M>v`d%6E^3qLm-LzJVygn-?*)NyCi~OYBZW!{hp-m^`6K3OTUNX z)9i14@%Yr7mhwG+QF!0|D%E7F@xCT>5~Z$QU2U)HBaawt10C`_Jc^yNG`}Ap=P~U; zxPGpiNfC(pAZO+ zUK9Odpl8VHqPu=l=4^+bpzsGu1_qrRtWq?{?dhl0e%6&27Y+z3NP$?j%COztA27_% zMgyL)4reN6pA=P{%2#DE+$KCRlyr1-9@^Y?NA{bjE|;87irX47GyMi>Quo}p+6`Jg zVk%Xo(jKkGr#~4LR!ug!nE6HbILZ4!*MCHq5{*#g6vg83kjtRyP|jw-)Wbm)kEcR(R6F;!W=7j8I(-+JGG*9jt4hCmw5WEK4#LbAa6PwZJYtG9 z{4i_=pk?`Mf!`SK)oL8*efL`VpEIyG#lU3xvUuE=A16Y1QZBK_9RS;2 z#GIt{d^2Yz%i&%f14`c|Hk(j-9d;`lnxX zJ+(hhKB@}uitzWXWq65FLerWAt6%>jpdqj_uKnA+udfb)SQ5k5 zp^WVO?w|C<8qH~()6baPWRUTO1c+Ak8fo~zCiS=l<8uhp(z zGjqy#bUCbOJcwY^ij0h`cHLHZT29&R0!n9UwU){TmJJ^-;8BUeNpz~YE}MNK7PK2h zoQviTin#)?KI!!=f$<_!l_X`Sqd*#-kmQEVqFZ-1V|Qwn>)X|4=yCJm9U+$-VqbR) zYu8Grv2%?sCdN_JbWu^!0sJTcokTMmwOz5E1@+?TMhP{X7yNvy;b&Awr{ozg!xS$!#-%zdMrE9SEZ% zr=&CnO85J!d;mnJsE!=hm+c3@a2*$Q-u`B}YLVg&bj4MiLckL;tbsk?Dy{IXZmQ_< zbtSDd8x}{=dS2?rnUAg3+0@Sdp{#=398ccUnx1=Y#_-k^N|lRH_Nc21brNnzF?F(5 zfV4485;8N({ry;Pbahi$K5i(Dzt&8rSHdpE%lVl;RZc)Ap1m%g1KZk?1X#d@1GX^> zEz@QWc1wH)oneyI5HUFrmFUYmt%?Wr(xD>@S42~QqS=TQ z3_DDt^@@p$ySyj$yIuA$2)Eyu;H*&Jj;SkjTyAN}nn-~sZ8Fm9EL=&kUR;U&zRALs>Yp~~zMI~z<$rknjWi&Wm3mcV#EThvpAp~HtCuDd) z^R_WusEpj%y#oG0F|;oLiece>BGS=$4tNs*m0&M$oo9;Z&FPD@o}uMPrp^Z8 zdJkSQJmv4#vZlj1dlkzuMv@3c!A5))T~7MFvksYOIc zfmDsh^|z${%f(Wi?!0o)G{bR~W?4}K^`LNkb)$8C z7bOpIQ4N6#gguZG!Tc0d`APmX1p-tl7U?@|CzLLWUz`pq&n<;xyYdjlb{S{1t9i96+BbLK*PQ(`6axL0)dCR8_*oaN)bcoAsAp@%?`m9Dq(=2-bL)+HRxj>>2oRGs z!(UCY*8jW#WXbn8N9rwvE1<>}%-wtJu{kbFh62$n@(jCdgaWuhPA3-@I9vC%?w~=7 mU!eS2clhtugy7d+V6Z*ouZmXUo?rj>NnTn-s#3x@=>Gt%Z-Dv$ literal 0 HcmV?d00001 diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css deleted file mode 100644 index cbc02d2937..0000000000 --- a/docs/stylesheets/extra.css +++ /dev/null @@ -1,199 +0,0 @@ -@font-face { - font-family: "SAP-icons"; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/SAP-icons.woff2") format("woff2"), local("SAP-icons"); - font-weight: normal; - font-style: normal; -} -@font-face { - font-family: "72"; - font-style: normal; - font-weight: 400; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Regular.woff2") format("woff2"), local("72"); -} -@font-face { - font-family: "72full"; - font-style: normal; - font-weight: 400; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Regular-full.woff2") format("woff2"); -} -@font-face { - font-family: "72"; - font-style: normal; - font-weight: 700; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Bold.woff2") format("woff2"), local("72-Bold"); -} -@font-face { - font-family: "72full"; - font-style: normal; - font-weight: 700; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Bold-full.woff2") format("woff2"); -} -@font-face { - font-family: "72"; - font-style: normal; - font-weight: 300; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Light.woff2") format("woff2"), local("72-Light"); -} -@font-face { - font-family: "72full"; - font-style: normal; - font-weight: 300; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Light-full.woff2") format("woff2"); -} -@font-face { - font-family: "72-Bold"; - font-style: normal; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Bold.woff2") format("woff2"), local("72-Bold"); -} -@font-face { - font-family: "72-Boldfull"; - font-style: normal; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Bold-full.woff2") format("woff2"); -} -@font-face { - font-family: "72-Light"; - font-style: normal; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Light.woff2") format("woff2"), local("72-Light"); -} -@font-face { - font-family: "72-Lightfull"; - font-style: normal; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Light-full.woff2") format("woff2"); -} -@font-face { - font-family: "72Mono"; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72Mono-Regular.woff2") format("woff2"), local("72Mono"); -} -@font-face { - font-family: "72Monofull"; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72Mono-Regular-full.woff2") format("woff2"); -} -@font-face { - font-family: "72Mono-Bold"; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72Mono-Bold.woff2") format("woff2"), local("72Mono-Bold"); -} -@font-face { - font-family: "72Mono-Boldfull"; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72Mono-Bold-full.woff2") format("woff2"); -} -@font-face { - font-family: "72Black"; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Black.woff2") format("woff2"); -} -@font-face { - font-family: "72Blackfull"; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Black-full.woff2") format("woff2"); -} -@font-face { - font-family: "72-SemiboldDuplex"; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-SemiboldDuplex.woff2") format("woff2"); -} -@font-face { - font-family: "72-SemiboldDuplexfull"; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-SemiboldDuplex-full.woff2") format("woff2"); -} -@font-face { - font-family: "72"; - font-style: normal; - font-weight: 400; - unicode-range: U+0102-0103, U+010F, U+013D, U+013E, U+0165, U+01A0-01A1, - U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, - U+1EE4-1EF1, U+1EF4-1EF7; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Regular-full.woff2") format("woff2"); -} -@font-face { - font-family: "72"; - font-style: normal; - font-weight: 700; - unicode-range: U+0102-0103, U+010F, U+013D, U+013E, U+0165, U+01A0-01A1, - U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, - U+1EE4-1EF1, U+1EF4-1EF7; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Bold-full.woff2") format("woff2"); -} -@font-face { - font-family: "72"; - font-style: normal; - font-weight: 300; - unicode-range: U+0102-0103, U+010F, U+013D, U+013E, U+0165, U+01A0-01A1, - U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, - U+1EE4-1EF1, U+1EF4-1EF7; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Light-full.woff2") format("woff2"); -} -@font-face { - font-family: "72-Bold"; - font-style: normal; - unicode-range: U+0102-0103, U+010F, U+013D, U+013E, U+0165, U+01A0-01A1, - U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, - U+1EE4-1EF1, U+1EF4-1EF7; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Bold-full.woff2") format("woff2"); -} -@font-face { - font-family: "72-Light"; - font-style: normal; - unicode-range: U+0102-0103, U+010F, U+013D, U+013E, U+0165, U+01A0-01A1, - U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, - U+1EE4-1EF1, U+1EF4-1EF7; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Light-full.woff2") format("woff2"); -} -@font-face { - font-family: "72Mono"; - unicode-range: U+0102-0103, U+010F, U+013D, U+013E, U+0165, U+01A0-01A1, - U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, - U+1EE4-1EF1, U+1EF4-1EF7; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72Mono-Regular-full.woff2") format("woff2"); -} -@font-face { - font-family: "72Mono-Bold"; - unicode-range: U+0102-0103, U+010F, U+013D, U+013E, U+0165, U+01A0-01A1, - U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, - U+1EE4-1EF1, U+1EF4-1EF7; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72Mono-Bold-full.woff2") format("woff2"); -} -@font-face { - font-family: "72Black"; - unicode-range: U+0102-0103, U+010F, U+013D, U+013E, U+0165, U+01A0-01A1, - U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, - U+1EE4-1EF1, U+1EF4-1EF7; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Black-full.woff2") format("woff2"); -} -@font-face { - font-family: "72-SemiboldDuplex"; - unicode-range: U+0102-0103, U+010F, U+013D, U+013E, U+0165, U+01A0-01A1, - U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, - U+1EE4-1EF1, U+1EF4-1EF7; - src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-SemiboldDuplex-full.woff2") format("woff2"); -} - -html, body, h1, h2, h3, h4, h5, h6, p { - font-family: "72-Regular", "72", "72full", Arial, Helvetica, sans-serif; -} - -.sap-icon-initiative::before { - font-family: SAP-icons; - content: "\e161"; - margin-right: 0.5em; -} - -.sap-icon-accept::before { - font-family: SAP-icons; - content: "\e05b"; -} - -.sap-icon-ui5-after::after { - font-family: SAP-icons; - content: "\e21b"; - margin-left: 0.5em; - color: var(--md-primary-fg-color); -} - -.ui5-footer-item { - flex-grow: 0; - color: var(--md-footer-fg-color--lighter); - font-size: .64rem; - margin: auto 0.6rem; - padding: 0.4rem 0; -} - -.md-copyright { - flex-grow: 1; -} diff --git a/docs/updates/migrate-v3.md b/docs/updates/migrate-v3.md index ff4295b56e..f897e7f9af 100644 --- a/docs/updates/migrate-v3.md +++ b/docs/updates/migrate-v3.md @@ -5,6 +5,8 @@ Find the announcement blog post for version 3.0 here: **[SAP Community: UI5 CLI 3.0](https://blogs.sap.com/2023/02/10/ui5-tooling-3.0/)** +Find the announcement blog post for version 3.0 here: **[SAP Community: UI5 Tooling 3.0](https://blogs.sap.com/2023/02/10/ui5-tooling-3.0/)** +::: ## Node.js and npm Version Support **This release requires Node.js versions v16.18.0, v18.12.0 or higher as well as npm v8 or higher.** @@ -22,6 +24,7 @@ This means your old projects might still work. Unless they have non-standard con !!! info ✅ Projects defining **Specification Version 2.x** are expected to be **fully compatible with UI5 CLI v3** +::: For projects defining the latest **Specification Versions 3.0 and higher**, some changes apply: * **Breaking Change:** The `metadata.name` property is now restricted to contain only certain characters and no uppercase letters. See [Configuration: `name`](../pages/Configuration.md#name) for details @@ -47,25 +50,17 @@ For extensions defining the latest **Specification Versions 3.0 and higher**, so !!! info ✅ The **`ui5.dependencies` package.json configuration** becomes obsolete and is ignored in UI5 CLI v3. - Configuration like the following is not needed anymore: - ```diff title="package.json" - { - [...] - - "ui5": { - - "dependencies": [ - - "my-package" - - ] - - } - [...] - } - ``` +Configuration like the following is not needed anymore: `dependencies`, `devDependencies` and `optionalDependencies` are now [automatically analyzed](https://github.com/SAP/ui5-project/blob/ff04ae4aeeb7f7d889dffd0c0e3e8774dd708c79/lib/graph/providers/NodePackageDependencies.js#L104). If a dependency can be configured as a UI5 project or UI5 CLI extension, it is added to the graph and its `dependencies` are analyzed. - Note that `devDependencies` and `optionalDependencies` are ignored for all but the current root project. For projects that are intended to be consumed in other projects (for example libraries), this means that any required custom tasks must be added to `dependencies`. +`dependencies`, `devDependencies` and `optionalDependencies` are now [automatically analyzed](https://github.com/SAP/ui5-project/blob/ff04ae4aeeb7f7d889dffd0c0e3e8774dd708c79/lib/graph/providers/NodePackageDependencies.js#L104). +If a dependency can be configured as a UI5 project or UI5 Tooling extension, it is added to the graph and its `dependencies` are analyzed. +Note that `devDependencies` and `optionalDependencies` are ignored for all but the current root project. For projects that are intended to be consumed in other projects (for example libraries), this means that any required custom tasks must be added to `dependencies`. +::: ## Changes to Module API The `normalizer` and `projectTree` modules have been removed. The `builder` API has been moved from @ui5/builder to @ui5/project. @@ -96,11 +91,24 @@ await builder.build({ ``` **New: @ui5/project v3** +::: code-group -=== "ESM" +```js [ESM] +import {graphFromPackageDependencies} from "@ui5/project/graph"; - ```js - import {graphFromPackageDependencies} from "@ui5/project/graph"; +let graph = await graphFromPackageDependencies({cwd: "."}); + +await graph.build({ + destPath: "./dist", + includedDependencies: ["*"], // Parameter "buildDependencies" has been removed +}); +``` + + +```js [CommonJS] +// Since CommonJS does not suport top-level await, the code must be wrapped in an asynchronous function +async function buildProject() { + const {graphFromPackageDependencies} = await import("@ui5/project/graph"); let graph = await graphFromPackageDependencies({cwd: "."}); @@ -108,23 +116,9 @@ await builder.build({ destPath: "./dist", includedDependencies: ["*"], // Parameter "buildDependencies" has been removed }); - ``` - -=== "CommonJS" - - ```js - // Since CommonJS does not suport top-level await, the code must be wrapped in an asynchronous function - async function buildProject() { - const {graphFromPackageDependencies} = await import("@ui5/project/graph"); - - let graph = await graphFromPackageDependencies({cwd: "."}); - - await graph.build({ - destPath: "./dist", - includedDependencies: ["*"], // Parameter "buildDependencies" has been removed - }); - } - ``` +} +``` +::: ## Changes to @ui5/cli @@ -145,10 +139,11 @@ Especially for projects of type `library`, where standard tasks like [`buildThem In the future, a caching mechanism should help and improve build times with this new behavior. -!!! info - The CLI flags `-a` and `--all` are still present and now an alias for `--include-all-dependencies`. This flag (along with `--include-dependency*` and `--exclude-dependency*`) mainly controls the **build output**. Use it to define whether dependency resources should be part of the build result. +::: tip Info +The CLI flags `-a` and `--all` are still present and now an alias for `--include-all-dependencies`. This flag (along with `--include-dependency*` and `--exclude-dependency*`) mainly controls the **build output**. Use it to define whether dependency resources should be part of the build result. - Please also refer to the [`ui5 build` documentation](../pages/CLI.md#ui5-build). +Please also refer to the [`ui5 build` documentation](../pages/CLI.md#ui5-build). +::: ## Removal of Standard Tasks and Processors @@ -169,7 +164,7 @@ The following processors have been removed: | UI5 CLI v2 | UI5 CLI v3 | Note | | --------------------------- | --------------------------- | ------------------------- | -| createDebugFiles
uglify | minify | The minify task is executed earlier, before the bundling process takes place. Any existing `beforeTask` or `afterTask` configuration of custom tasks might need to be adapted to cater for this change.
To adapt, you can use the `generateResourcesJson` task for subscription before or after the last standard task. By default, `generateResourcesJson` is disabled, but you can still subscribe to it, thereby ensuring that your custom tasks execute in the correct order. | +| createDebugFiles uglify | minify | The minify task is executed earlier, before the bundling process takes place. Any existing `beforeTask` or `afterTask` configuration of custom tasks might need to be adapted to cater for this change.
To adapt, you can use the `generateResourcesJson` task for subscription before or after the last standard task. By default, `generateResourcesJson` is disabled, but you can still subscribe to it, thereby ensuring that your custom tasks execute in the correct order. | | generateVersionInfo | generateVersionInfo | The task is no longer executed by default for application projects. It can be re-enabled by using the `--include-task` parameter. | | generateManifestBundle | *None* | This task was only needed for the HTML5 repository in Cloud Foundry. Meanwhile, the HTML5 repository implemented its own mechanism, so the task is no longer needed | @@ -181,39 +176,39 @@ The following processors have been removed: | replaceCopyright | *enabled* | *enabled* | *enabled* | | replaceVersion | *enabled* | *enabled* | *enabled* | | replaceBuildtime | | *enabled* | | -| generateJsdoc | | *disabled* ^1^ | | -| executeJsdocSdkTransformation | | *disabled* ^1^ | | +| generateJsdoc | | *disabled¹* | | +| executeJsdocSdkTransformation | | *disabled¹* | | | **ADDED:** minify | *enabled* | *enabled* | | | generateFlexChangesBundle | *enabled* | *enabled* | | | **REMOVED:** ~~generateManifestBundle~~ | *~~disabled~~* | *~~disabled~~* | | | generateLibraryManifest | | *enabled* | | -| generateComponentPreload | *enabled* | *disabled* ^2^ | | +| generateComponentPreload | *enabled* | *disabled²* | | | generateLibraryPreload | | *enabled* | | -| generateStandaloneAppBundle | *disabled* ^3^ | | | -| transformBootstrapHtml | *disabled* ^3^ | | | -| generateBundle | *disabled* ^4^ | *disabled* ^4^ | | +| generateStandaloneAppBundle | *disabled³* | | | +| transformBootstrapHtml | *disabled³* | | | +| generateBundle | *disabled⁴* | *disabled⁴* | | | buildThemes | | *enabled* | *enabled* | -| generateThemeDesignerResources | | *disabled* ^5^ | *disabled* ^5^ | +| generateThemeDesignerResources | | *disabled⁵* | *disabled⁵* | | **REMOVED:** ~~createDebugFiles~~ | *~~enabled~~* | *~~enabled~~* | | | **REMOVED:** ~~uglify~~ | *~~enabled~~* | *~~enabled~~* | | | generateVersionInfo | **disabled** | | | | generateCachebusterInfo | *disabled* | | | -| generateApiIndex | *disabled* ^1^ | | | +| generateApiIndex | *disabled¹* | | | | generateResourcesJson | *disabled* | *disabled* | *disabled* | *Disabled tasks can be activated by certain build modes, the project configuration, or by using the `--include-task` [CLI parameter](../pages/CLI.md#ui5-build). See footnotes where given* --- -^1^ Enabled in `jsdoc` build, which disables most of the other tasks -^2^ Enabled for projects defining a [component preload configuration](../pages/Configuration.md#component-preload-generation) -^3^ Enabled in `self-contained` build, which disables `generateComponentPreload` and `generateLibraryPreload` -^4^ Enabled for projects defining a [bundle configuration](../pages/Configuration.md#custom-bundling) -^5^ Can be enabled for framework projects via the `includeTask` option. For other projects, this task is skipped +¹ Enabled in `jsdoc` build, which disables most of the other tasks +² Enabled for projects defining a [component preload configuration](../pages/Configuration.md#component-preload-generation) +³ Enabled in `self-contained` build, which disables `generateComponentPreload` and `generateLibraryPreload` +⁴ Enabled for projects defining a [bundle configuration](../pages/Configuration.md#custom-bundling) +⁵ Can be enabled for framework projects via the `includeTask` option. For other projects, this task is skipped ## Removal of Standard Middleware -The following middleware has been removed from the [standard middlewares list](../../pages/Server/#standard-middleware): +The following middleware has been removed from the [standard middlewares list](.../../pages/Server/#standard-middleware): * connectUi5Proxy diff --git a/docs/updates/migrate-v4.md b/docs/updates/migrate-v4.md index e074569a76..2d7580acae 100644 --- a/docs/updates/migrate-v4.md +++ b/docs/updates/migrate-v4.md @@ -3,11 +3,12 @@ !!! tip "New Release" **UI5 CLI 4.0 has been released on July 24, 2024 🎉** - Install the latest version in your projects via: `npm i --save-dev @ui5/cli@latest` - And update your global install via `npm i --global @ui5/cli@latest` +**UI5 Tooling 4.0 has been released on July 24, 2024 🎉** And find the announcement blog post here: **[SAP Community: UI5 CLI 4.0](https://community.sap.com/t5/technology-blogs-by-sap/ui5-tooling-4-0/ba-p/13769578)** +And find the announcement blog post here: **[SAP Community: UI5 Tooling 4.0](https://community.sap.com/t5/technology-blogs-by-sap/ui5-tooling-4-0/ba-p/13769578)** +::: ## UI5 2.x Compatibility *Also see the blog post [SAP Community: Introducing OpenUI5 2.x](https://community.sap.com/t5/open-source-blogs/introducing-openui5-2-x/ba-p/13580633)* @@ -33,7 +34,12 @@ Old projects might therefore still work, unless they have a non-standard configu !!! success "No changes for Specification Versions 2.x and 3.x" Projects defining **Specification Version 2.x or 3.x** are expected to be **fully compatible with UI5 CLI v4** - The following does not apply to them. +::: tip No changes for Specification Versions 2.x and 3.x + +Projects defining **Specification Version 2.x or 3.x** are expected to be **fully compatible with UI5 Tooling v4** + +The following does not apply to them. +::: For projects defining the latest **Specification Version 4.0 or higher**, the following changes apply: @@ -78,45 +84,43 @@ Non-public `DuplexCollection#byGlobSource` API has been removed. - **New Option**: Added a new `async` option for `builder.bundles.bundleDefinition.section`. -!!! example - ```yaml - builder: - bundles: - - bundleDefinition: - name: "app.js" - sections: - - mode: require - filters: - - some/app/Component.js - resolve: true - sort: true - async: true - ``` +> [!IMPORTANT] Example +>```yaml +>builder: +> bundles: +> - bundleDefinition: +> name: "app.js" +> sections: +> - mode: require +> filters: +> - some/app/Component.js +> resolve: true +> sort: true +> async: true +>``` ### Changes to @ui5/project -- **Default Workspace Name**: The default `workspaceName` is now `"default"` for API usage. +**Default Workspace Name**: The default `workspaceName` is now `"default"` for API usage. + +```js +import {graphFromPackageDependencies} from "@ui5/project/graph"; -!!! example - ```js - import {graphFromPackageDependencies} from "@ui5/project/graph"; - - graphFromPackageDependencies({ - /* workspaceName: "default" */ - }); - ``` +graphFromPackageDependencies({ + /* workspaceName: "default" */ +}); +``` -- **Directory Naming**: The `ui5HomeDir` has been renamed to `ui5DataDir` in APIs. +**Directory Naming**: The `ui5HomeDir` has been renamed to `ui5DataDir` in APIs. -!!! example - ```js - import Resolver from "@ui5/project/ui5Framework/Openui5Resolver"; +```js +import Resolver from "@ui5/project/ui5Framework/Openui5Resolver"; - await Resolver.resolveVersion("1.120.15", { - ui5DataDir: "~/.ui5", - cwd: process.cwd() - }); - ``` +await Resolver.resolveVersion("1.120.15", { + ui5DataDir: "~/.ui5", + cwd: process.cwd() +}); +``` - **Dependencies**: The `@ui5/builder` is now an optional dependency to the `@ui5/project` diff --git a/mkdocs.yml b/mkdocs.yml deleted file mode 100644 index 515ba010b7..0000000000 --- a/mkdocs.yml +++ /dev/null @@ -1,92 +0,0 @@ -site_name: UI5 CLI -site_url: 'https://ui5.github.io/cli/' # required for working 404 page -repo_name: 'UI5/cli' -repo_url: 'https://github.com/UI5/cli' -edit_uri: ./edit/main/docs # default points to "master" branch -docs_dir: 'docs' # default -site_dir: 'site' # default -copyright: '© Copyright 2025, SAP SE and UI5 CLI Contributors' -nav: - - Home: index.md - - Getting Started: pages/GettingStarted.md - - UI5 CLI: pages/CLI.md - - Configuration: pages/Configuration.md - - Development: - - Overview: pages/Overview.md - - OpenUI5: pages/OpenUI5.md - - SAPUI5: pages/SAPUI5.md - - Workspace: pages/Workspace.md - - Extensibility: - - Custom Tasks: pages/extensibility/CustomTasks.md - - Custom Server Middleware: pages/extensibility/CustomServerMiddleware.md - - Project Shims: pages/extensibility/ProjectShims.md - - Modules: - - Server: pages/Server.md - - Builder: pages/Builder.md - - Project: pages/Project.md - - File System: pages/FileSystem.md - - Upgrade Guides: - - Migrate to v4: updates/migrate-v4.md - - Migrate to v3: updates/migrate-v3.md - - Migrate to v2: updates/migrate-v2.md - - Migrate to v1: updates/migrate-v1.md - - FAQ: pages/FAQ.md - - Miscellaneous: - - Troubleshooting: pages/Troubleshooting.md - - Benchmarking: pages/Benchmarking.md - - ECMAScript Support: pages/ESSupport.md - - Code Analysis: pages/CodeAnalysis.md - - API Reference: 'api/index.html' # only available in final build, not serve - -theme: - name: 'material' - custom_dir: 'overrides' - palette: - primary: 'blue' - accent: 'blue' - logo: 'images/logo.svg' - favicon: 'images/favicon.png' - font: false - features: - - navigation.expand - -extra_css: - - 'stylesheets/extra.css' - -extra: - version: - provider: mike - -plugins: - - search - - minify: - minify_html: true - - mike: - canonical_version: null - version_selector: true - css_dir: stylesheets - javascript_dir: js - -markdown_extensions: - - admonition - - attr_list - - codehilite: - guess_lang: false - - toc: - permalink: true - # PyMdown Extensions Documentation: https://facelessuser.github.io/pymdown-extensions/extensions/betterem/ - - pymdownx.betterem: - smart_enable: all - - pymdownx.details - - pymdownx.inlinehilite - - pymdownx.magiclink - - pymdownx.mark - - pymdownx.keys - - pymdownx.smartsymbols - - pymdownx.tabbed: - alternate_style: true - - pymdownx.superfences - - pymdownx.tasklist: - custom_checkbox: true - - pymdownx.tilde - - pymdownx.caret diff --git a/overrides/partials/footer.html b/overrides/partials/footer.html deleted file mode 100644 index 0be1a43854..0000000000 --- a/overrides/partials/footer.html +++ /dev/null @@ -1,58 +0,0 @@ -{#- - This file was initialy copied from https://github.com/squidfunk/mkdocs-material/blob/-/material/partials/footer.html - and adjusted to offer a customized footer according to the SAP Web Presence Policy. - See also the corresponding stylesheet content in /docs/stylesheets/extra.css. --#} -

diff --git a/package-lock.json b/package-lock.json index 81a23270e6..5c8a26e769 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,6 +19,13 @@ "devDependencies": { "@apidevtools/json-schema-ref-parser": "^14.2.1", "@eslint/js": "^9.8.0", + "@odata2ts/http-client-fetch": "^0.6.2", + "@odata2ts/odata2ts": "^0.35.0", + "@types/markdown-it-plantuml": "^1.4.5", + "@types/node": "^20.14.9", + "@ui5/webcomponents": "^1.24.5", + "autoprefixer": "^10.4.19", + "cssnano": "^7.0.3", "depcheck": "^1.4.7", "docdash": "^2.0.2", "eslint": "^9.35.0", @@ -29,6 +36,9 @@ "handlebars": "^4.7.8", "jsdoc": "^4.0.4", "local-web-server": "^5.4.0", + "markdown-it-implicit-figures": "^0.12.0", + "markdown-it-link-attributes": "^4.0.1", + "markdown-it-plantuml": "^1.4.1", "open-cli": "^8.0.0", "traverse": "^0.6.11" }, @@ -55,6 +65,343 @@ "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.4.tgz", "integrity": "sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==" }, + "node_modules/@algolia/autocomplete-core": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz", + "integrity": "sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-plugin-algolia-insights": "1.9.3", + "@algolia/autocomplete-shared": "1.9.3" + } + }, + "node_modules/@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz", + "integrity": "sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-shared": "1.9.3" + }, + "peerDependencies": { + "search-insights": ">= 1 < 3" + } + }, + "node_modules/@algolia/autocomplete-preset-algolia": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz", + "integrity": "sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-shared": "1.9.3" + }, + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/autocomplete-shared": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz", + "integrity": "sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/cache-browser-local-storage": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.24.0.tgz", + "integrity": "sha512-t63W9BnoXVrGy9iYHBgObNXqYXM3tYXCjDSHeNwnsc324r4o5UiVKUiAB4THQ5z9U5hTj6qUvwg/Ez43ZD85ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/cache-common": "4.24.0" + } + }, + "node_modules/@algolia/cache-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.24.0.tgz", + "integrity": "sha512-emi+v+DmVLpMGhp0V9q9h5CdkURsNmFC+cOS6uK9ndeJm9J4TiqSvPYVu+THUP8P/S08rxf5x2P+p3CfID0Y4g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@algolia/cache-in-memory": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.24.0.tgz", + "integrity": "sha512-gDrt2so19jW26jY3/MkFg5mEypFIPbPoXsQGQWAi6TrCPsNOSEYepBMPlucqWigsmEy/prp5ug2jy/N3PVG/8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/cache-common": "4.24.0" + } + }, + "node_modules/@algolia/client-account": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.24.0.tgz", + "integrity": "sha512-adcvyJ3KjPZFDybxlqnf+5KgxJtBjwTPTeyG2aOyoJvx0Y8dUQAEOEVOJ/GBxX0WWNbmaSrhDURMhc+QeevDsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "4.24.0", + "@algolia/client-search": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/client-account/node_modules/@algolia/client-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", + "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/client-account/node_modules/@algolia/client-search": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz", + "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.24.0.tgz", + "integrity": "sha512-y8jOZt1OjwWU4N2qr8G4AxXAzaa8DBvyHTWlHzX/7Me1LX8OayfgHexqrsL4vSBcoMmVw2XnVW9MhL+Y2ZDJXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "4.24.0", + "@algolia/client-search": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/client-analytics/node_modules/@algolia/client-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", + "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/client-analytics/node_modules/@algolia/client-search": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz", + "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/client-common": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.1.1.tgz", + "integrity": "sha512-jkQNQbGY+XQB3Eln7wqqdUZKBzG8lETcsaUk5gcMc6iIwyN/qW0v0fhpKPH+Kli+BImLxo0CWk12CvVvx2exWA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.24.0.tgz", + "integrity": "sha512-l5FRFm/yngztweU0HdUzz1rC4yoWCFo3IF+dVIVTfEPg906eZg5BOd1k0K6rZx5JzyyoP4LdmOikfkfGsKVE9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/client-personalization/node_modules/@algolia/client-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", + "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/client-search": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.1.1.tgz", + "integrity": "sha512-SFpb3FI/VouGou/vpuS7qeCA5Y/KpV42P6CEA/1MZQtl/xJkl6PVjikb+Q9YadeHi2jtDV/aQ6PyiVDnX4PQcw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@algolia/client-common": "5.1.1", + "@algolia/requester-browser-xhr": "5.1.1", + "@algolia/requester-node-http": "5.1.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/logger-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.24.0.tgz", + "integrity": "sha512-LLUNjkahj9KtKYrQhFKCzMx0BY3RnNP4FEtO+sBybCjJ73E8jNdaKJ/Dd8A/VA4imVHP5tADZ8pn5B8Ga/wTMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@algolia/logger-console": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.24.0.tgz", + "integrity": "sha512-X4C8IoHgHfiUROfoRCV+lzSy+LHMgkoEEU1BbKcsfnV0i0S20zyy0NLww9dwVHUWNfPPxdMU+/wKmLGYf96yTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/logger-common": "4.24.0" + } + }, + "node_modules/@algolia/recommend": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-4.24.0.tgz", + "integrity": "sha512-P9kcgerfVBpfYHDfVZDvvdJv0lEoCvzNlOy2nykyt5bK8TyieYyiD0lguIJdRZZYGre03WIAFf14pgE+V+IBlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/cache-browser-local-storage": "4.24.0", + "@algolia/cache-common": "4.24.0", + "@algolia/cache-in-memory": "4.24.0", + "@algolia/client-common": "4.24.0", + "@algolia/client-search": "4.24.0", + "@algolia/logger-common": "4.24.0", + "@algolia/logger-console": "4.24.0", + "@algolia/requester-browser-xhr": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/requester-node-http": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/recommend/node_modules/@algolia/client-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", + "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/recommend/node_modules/@algolia/client-search": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz", + "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/@algolia/recommend/node_modules/@algolia/requester-browser-xhr": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.24.0.tgz", + "integrity": "sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/requester-common": "4.24.0" + } + }, + "node_modules/@algolia/recommend/node_modules/@algolia/requester-node-http": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.24.0.tgz", + "integrity": "sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/requester-common": "4.24.0" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.1.1.tgz", + "integrity": "sha512-NXmN1ujJCj5GlJQaMK6DbdiXdcf6nhRef/X40lu9TYi71q9xTo/5RPMI0K2iOp6g07S26BrXFOz6RSV3Ny4LLw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@algolia/client-common": "5.1.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.24.0.tgz", + "integrity": "sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@algolia/requester-node-http": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.1.1.tgz", + "integrity": "sha512-xwrgnNTIzgxDEx6zuCKSKTPzQLA8fL/WZiVB6fRpIu5agLMjoAi0cWA5YSDbo+2FFxqVgLqKY/Jz6mKmWtY15Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@algolia/client-common": "5.1.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/transporter": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.24.0.tgz", + "integrity": "sha512-86nI7w6NzWxd1Zp9q3413dRshDqAzSbsQjhcDhPIatEFiZrL1/TjnHL8S7jVKFePlIMzDsZWXAXwXzcok9c5oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/cache-common": "4.24.0", + "@algolia/logger-common": "4.24.0", + "@algolia/requester-common": "4.24.0" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@apidevtools/json-schema-ref-parser": { "version": "14.2.1", "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-14.2.1.tgz", @@ -208,479 +555,547 @@ "node": ">=6.9.0" } }, - "node_modules/@es-joy/jsdoccomment": { - "version": "0.62.0", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.62.0.tgz", - "integrity": "sha512-yWi6sm7INEwnfS7IJvE0dU+RTrwzLPFcY7e7eGpu/l5Q9lWfQ2ROwZ0qVnc242jw2TUPsfHX3XMIISkGBv57RQ==", + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "^1.0.8", - "@typescript-eslint/types": "^8.44.1", - "comment-parser": "1.4.1", - "esquery": "^1.6.0", - "jsdoc-type-pratt-parser": "~5.9.0" + "@jridgewell/trace-mapping": "0.3.9" }, "engines": { - "node": ">=20.11.0" + "node": ">=12" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", - "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, + "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "node_modules/@docsearch/css": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.6.1.tgz", + "integrity": "sha512-VtVb5DS+0hRIprU2CO6ZQjK2Zg4QU5HrDM1+ix6rT0umsYvFvatMAnf97NHZlVWDaaLlx7GRfR/7FikANiM2Fg==", "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } + "license": "MIT" }, - "node_modules/@eslint/config-array": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", - "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "node_modules/@docsearch/js": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.6.1.tgz", + "integrity": "sha512-erI3RRZurDr1xES5hvYJ3Imp7jtrXj6f1xYIzDzxiS7nNBufYWPbJwrmMqWC5g9y165PmxEmN9pklGCdLi0Iqg==", "dev": true, + "license": "MIT", "dependencies": { - "@eslint/object-schema": "^2.1.6", - "debug": "^4.3.1", - "minimatch": "^3.1.2" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "@docsearch/react": "3.6.1", + "preact": "^10.0.0" } }, - "node_modules/@eslint/config-array/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "node_modules/@docsearch/react": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.6.1.tgz", + "integrity": "sha512-qXZkEPvybVhSXj0K7U3bXc233tk5e8PfhoZ6MhPOiik/qUQxYC+Dn9DnoS7CxHQQhHfCvTiN0eY9M12oRghEXw==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "@algolia/autocomplete-core": "1.9.3", + "@algolia/autocomplete-preset-algolia": "1.9.3", + "@docsearch/css": "3.6.1", + "algoliasearch": "^4.19.1" }, - "engines": { - "node": ">=6.0" + "peerDependencies": { + "@types/react": ">= 16.8.0 < 19.0.0", + "react": ">= 16.8.0 < 19.0.0", + "react-dom": ">= 16.8.0 < 19.0.0", + "search-insights": ">= 1 < 3" }, "peerDependenciesMeta": { - "supports-color": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "search-insights": { "optional": true } } }, - "node_modules/@eslint/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/@es-joy/jsdoccomment": { + "version": "0.62.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.62.0.tgz", + "integrity": "sha512-yWi6sm7INEwnfS7IJvE0dU+RTrwzLPFcY7e7eGpu/l5Q9lWfQ2ROwZ0qVnc242jw2TUPsfHX3XMIISkGBv57RQ==", "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "@types/estree": "^1.0.8", + "@typescript-eslint/types": "^8.44.1", + "comment-parser": "1.4.1", + "esquery": "^1.6.0", + "jsdoc-type-pratt-parser": "~5.9.0" }, "engines": { - "node": "*" + "node": ">=20.11.0" } }, - "node_modules/@eslint/config-array/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/@eslint/config-helpers": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz", - "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==", + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=12" } }, - "node_modules/@eslint/core": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", - "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.15" - }, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=12" } }, - "node_modules/@eslint/eslintrc": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", - "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=12" } }, - "node_modules/@eslint/eslintrc/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "ms": "^2.1.3" - }, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">=12" } }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": "*" + "node": ">=12" } }, - "node_modules/@eslint/eslintrc/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/@eslint/js": { - "version": "9.35.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.35.0.tgz", - "integrity": "sha512-30iXE9whjlILfWobBkNerJo+TXYsgVM5ERQwMcMKCHckHflCmf7wXDAHlARoWnh0s1U72WqlbeyE7iAcCzuCPw==", + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" + "node": ">=12" } }, - "node_modules/@eslint/object-schema": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", - "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=12" } }, - "node_modules/@eslint/plugin-kit": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", - "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "@eslint/core": "^0.15.2", - "levn": "^0.4.1" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=12" } }, - "node_modules/@hapi/bourne": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-3.0.0.tgz", - "integrity": "sha512-Waj1cwPXJDucOib4a3bAISsKJVb15MKi9IvmTI/7ssVEm6sywXGjVJDhl6/umt1pK1ZS7PacXU3A1PmFKHEZ2w==", - "dev": true - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=18.18.0" + "node": ">=12" } }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], "dev": true, - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=18.18.0" + "node": ">=12" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "node": ">=12" } }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "node": ">=12" } }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "20 || >=22" + "node": ">=12" } }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", - "dependencies": { - "@isaacs/balanced-match": "^4.0.1" - }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "20 || >=22" + "node": ">=12" } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { "node": ">=12" } }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@isaacs/fs-minipass": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", - "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", - "dependencies": { - "minipass": "^7.0.4" - }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" + "node": ">=12" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">=6.0.0" + "node": ">=12" } }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", - "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@jsdoc/salty": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.9.tgz", - "integrity": "sha512-yYxMVH7Dqw6nO0d5NIV8OQWnitU8k6vXH8NtgqAfIa/IUqRMxRv/NUJJ08VEKbAakwxlgBl5PJdrU0dMPStsnw==", - "dependencies": { - "lodash": "^4.17.21" - }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=v12.0.0" + "node": ">=12" } }, - "node_modules/@koa/cors": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@koa/cors/-/cors-5.0.0.tgz", - "integrity": "sha512-x/iUDjcS90W69PryLDIMgFyV21YLTnG9zOpPXS7Bkt2b8AsY3zZsIpOLBkYr9fBcF3HbkKaER5hOBZLfpLgYNw==", + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "vary": "^1.1.2" - }, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">= 14.0.0" + "node": ">=12" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", + "dev": true, "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": ">= 8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, "engines": { - "node": ">= 8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, "engines": { - "node": ">= 8" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@npmcli/agent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-3.0.0.tgz", - "integrity": "sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==", + "node_modules/@eslint/config-array": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "dev": true, "dependencies": { - "agent-base": "^7.1.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.1", - "lru-cache": "^10.0.1", - "socks-proxy-agent": "^8.0.3" + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" }, "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/agent/node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", - "engines": { - "node": ">= 14" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@npmcli/agent/node_modules/debug": { + "node_modules/@eslint/config-array/node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, "dependencies": { "ms": "^2.1.3" }, @@ -693,654 +1108,353 @@ } } }, - "node_modules/@npmcli/agent/node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@npmcli/agent/node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">= 14" + "node": "*" } }, - "node_modules/@npmcli/agent/node_modules/ms": { + "node_modules/@eslint/config-array/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, - "node_modules/@npmcli/config": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/config/-/config-9.0.0.tgz", - "integrity": "sha512-P5Vi16Y+c8E0prGIzX112ug7XxqfaPFUVW/oXAV+2VsxplKZEnJozqZ0xnK8V8w/SEsBf+TXhUihrEIAU4CA5Q==", - "dependencies": { - "@npmcli/map-workspaces": "^4.0.1", - "@npmcli/package-json": "^6.0.1", - "ci-info": "^4.0.0", - "ini": "^5.0.0", - "nopt": "^8.0.0", - "proc-log": "^5.0.0", - "semver": "^7.3.5", - "walk-up-path": "^3.0.1" - }, + "node_modules/@eslint/config-helpers": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz", + "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==", + "dev": true, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@npmcli/fs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz", - "integrity": "sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==", + "node_modules/@eslint/core": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", + "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", + "dev": true, "dependencies": { - "semver": "^7.3.5" + "@types/json-schema": "^7.0.15" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@npmcli/git": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-6.0.3.tgz", - "integrity": "sha512-GUYESQlxZRAdhs3UhbB6pVRNUELQOHXwK9ruDkwmCv2aZ5y0SApQzUJCg02p3A7Ue2J5hxvlk1YI53c00NmRyQ==", + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, "dependencies": { - "@npmcli/promise-spawn": "^8.0.0", - "ini": "^5.0.0", - "lru-cache": "^10.0.1", - "npm-pick-manifest": "^10.0.0", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^5.0.0" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@npmcli/installed-package-contents": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-3.0.0.tgz", - "integrity": "sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q==", + "node_modules/@eslint/eslintrc/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, "dependencies": { - "npm-bundled": "^4.0.0", - "npm-normalize-package-bin": "^4.0.0" + "ms": "^2.1.3" }, - "bin": { - "installed-package-contents": "bin/index.js" + "engines": { + "node": ">=6.0" }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@npmcli/map-workspaces": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-4.0.2.tgz", - "integrity": "sha512-mnuMuibEbkaBTYj9HQ3dMe6L0ylYW+s/gfz7tBDMFY/la0w9Kf44P9aLn4/+/t3aTR3YUHKoT6XQL9rlicIe3Q==", + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { - "@npmcli/name-from-folder": "^3.0.0", - "@npmcli/package-json": "^6.0.0", - "glob": "^10.2.2", - "minimatch": "^9.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "*" } }, - "node_modules/@npmcli/map-workspaces/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dependencies": { - "balanced-match": "^1.0.0" - } + "node_modules/@eslint/eslintrc/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, - "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "node_modules/@eslint/js": { + "version": "9.35.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.35.0.tgz", + "integrity": "sha512-30iXE9whjlILfWobBkNerJo+TXYsgVM5ERQwMcMKCHckHflCmf7wXDAHlARoWnh0s1U72WqlbeyE7iAcCzuCPw==", + "dev": true, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/name-from-folder": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-3.0.0.tgz", - "integrity": "sha512-61cDL8LUc9y80fXn+lir+iVt8IS0xHqEKwPu/5jCjxQTVoSCmkXvw4vbMrzAMtmghz3/AkiBjhHkDKUH+kf7kA==", - "engines": { - "node": "^18.17.0 || >=20.5.0" + "url": "https://eslint.org/donate" } }, - "node_modules/@npmcli/node-gyp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-4.0.0.tgz", - "integrity": "sha512-+t5DZ6mO/QFh78PByMq1fGSAub/agLJZDRfJRMeOSNCt8s9YVlTjmGpIPwPhvXTGUIJk+WszlT0rQa1W33yzNA==", + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@npmcli/package-json": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-6.2.0.tgz", - "integrity": "sha512-rCNLSB/JzNvot0SEyXqWZ7tX2B5dD2a1br2Dp0vSYVo5jh8Z0EZ7lS9TsZ1UtziddB1UfNUaMCc538/HztnJGA==", + "node_modules/@eslint/plugin-kit": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", + "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", + "dev": true, "dependencies": { - "@npmcli/git": "^6.0.0", - "glob": "^10.2.2", - "hosted-git-info": "^8.0.0", - "json-parse-even-better-errors": "^4.0.0", - "proc-log": "^5.0.0", - "semver": "^7.5.3", - "validate-npm-package-license": "^3.0.4" + "@eslint/core": "^0.15.2", + "levn": "^0.4.1" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@npmcli/promise-spawn": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-8.0.3.tgz", - "integrity": "sha512-Yb00SWaL4F8w+K8YGhQ55+xE4RUNdMHV43WZGsiTM92gS+lC0mGsn7I4hLug7pbao035S6bj3Y3w0cUNGLfmkg==", - "dependencies": { - "which": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } + "node_modules/@hapi/bourne": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-3.0.0.tgz", + "integrity": "sha512-Waj1cwPXJDucOib4a3bAISsKJVb15MKi9IvmTI/7ssVEm6sywXGjVJDhl6/umt1pK1ZS7PacXU3A1PmFKHEZ2w==", + "dev": true }, - "node_modules/@npmcli/redact": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-3.2.2.tgz", - "integrity": "sha512-7VmYAmk4csGv08QzrDKScdzn11jHPFGyqJW39FyPgPuAp3zIaUmuCo1yxw9aGs+NEJuTGQ9Gwqpt93vtJubucg==", + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=18.18.0" } }, - "node_modules/@npmcli/run-script": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-9.1.0.tgz", - "integrity": "sha512-aoNSbxtkePXUlbZB+anS1LqsJdctG5n3UVhfU47+CDdwMi6uNTBMF9gPcQRnqghQd2FGzcwwIFBruFMxjhBewg==", + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, "dependencies": { - "@npmcli/node-gyp": "^4.0.0", - "@npmcli/package-json": "^6.0.0", - "@npmcli/promise-spawn": "^8.0.0", - "node-gyp": "^11.0.0", - "proc-log": "^5.0.0", - "which": "^5.0.0" + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=18.18.0" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "optional": true, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, "engines": { - "node": ">=14" + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@sigstore/bundle": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-3.1.0.tgz", - "integrity": "sha512-Mm1E3/CmDDCz3nDhFKTuYdB47EdRFRQMOE/EAbiG1MJW77/w1b3P7Qx7JSrVJs8PfwOLOVcKQCHErIwCTyPbag==", - "dependencies": { - "@sigstore/protobuf-specs": "^0.4.0" - }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@sigstore/core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-2.0.0.tgz", - "integrity": "sha512-nYxaSb/MtlSI+JWcwTHQxyNmWeWrUXJJ/G4liLrGG7+tS4vAz6LF3xRXqLH6wPIVUoZQel2Fs4ddLx4NCpiIYg==", + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "20 || >=22" } }, - "node_modules/@sigstore/protobuf-specs": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.4.3.tgz", - "integrity": "sha512-fk2zjD9117RL9BjqEwF7fwv7Q/P9yGsMV4MUJZ/DocaQJ6+3pKr+syBq1owU5Q5qGw5CUbXzm+4yJ2JVRDQeSA==", + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "20 || >=22" } }, - "node_modules/@sigstore/sign": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-3.1.0.tgz", - "integrity": "sha512-knzjmaOHOov1Ur7N/z4B1oPqZ0QX5geUfhrVaqVlu+hl0EAoL4o+l0MSULINcD5GCWe3Z0+YJO8ues6vFlW0Yw==", + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dependencies": { - "@sigstore/bundle": "^3.1.0", - "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.4.0", - "make-fetch-happen": "^14.0.2", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1" + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=12" } }, - "node_modules/@sigstore/tuf": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-3.1.1.tgz", - "integrity": "sha512-eFFvlcBIoGwVkkwmTi/vEQFSva3xs5Ot3WmBcjgjVdiaoelBLQaQ/ZBfhlG0MnG0cmTYScPpk7eDdGDWUcFUmg==", - "dependencies": { - "@sigstore/protobuf-specs": "^0.4.1", - "tuf-js": "^3.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, - "node_modules/@sigstore/verify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-2.1.1.tgz", - "integrity": "sha512-hVJD77oT67aowHxwT4+M6PGOp+E2LtLdTK3+FC0lBO9T7sYwItDMXZ7Z07IDCvR1M717a4axbIWckrW67KMP/w==", + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dependencies": { - "@sigstore/bundle": "^3.1.0", - "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.4.1" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@sindresorhus/merge-streams": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", - "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", - "engines": { - "node": ">=18" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@tokenizer/token": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", - "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", - "dev": true - }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tufjs/canonical-json": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", - "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@tufjs/models": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-3.0.1.tgz", - "integrity": "sha512-UUYHISyhCU3ZgN8yaear3cGATHb3SMuKHsQ/nVbHXcmnBf+LzQ/cQfhNG+rfaSHgqGKNEm2cOCLVLELStUQ1JA==", + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", "dependencies": { - "@tufjs/canonical-json": "2.0.0", - "minimatch": "^9.0.5" + "minipass": "^7.0.4" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=18.0.0" } }, - "node_modules/@tufjs/models/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dependencies": { - "balanced-match": "^1.0.0" + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@tufjs/models/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=6.0.0" } }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true - }, - "node_modules/@types/linkify-it": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", - "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==" - }, - "node_modules/@types/markdown-it": { - "version": "14.1.2", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", - "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", "dependencies": { - "@types/linkify-it": "^5", - "@types/mdurl": "^2" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, - "node_modules/@types/mdurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==" - }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==" - }, - "node_modules/@types/parse-json": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", - "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", - "dev": true + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==" }, - "node_modules/@typescript-eslint/types": { - "version": "8.44.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.44.1.tgz", - "integrity": "sha512-Lk7uj7y9uQUOEguiDIDLYLJOrYHQa7oBiURYVFqIpGxclAFQ78f6VUOM8lI2XEuNOKNB7XuvM2+2cMXAoq4ALQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@ui5/builder": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/@ui5/builder/-/builder-4.0.11.tgz", - "integrity": "sha512-6CsTCau0aP2NaXk9cZZ5dyINgKAoHL/n6l/O+d9ZTeHAKEyPM2+7WXXCLlMO/Z/SD+eEShztnsg1aCKyAzS5dQ==", + "node_modules/@jsdoc/salty": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.9.tgz", + "integrity": "sha512-yYxMVH7Dqw6nO0d5NIV8OQWnitU8k6vXH8NtgqAfIa/IUqRMxRv/NUJJ08VEKbAakwxlgBl5PJdrU0dMPStsnw==", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5", - "@ui5/fs": "^4.0.2", - "@ui5/logger": "^4.0.2", - "cheerio": "1.0.0", - "escape-unicode": "^0.2.0", - "escope": "^4.0.0", - "espree": "^10.4.0", - "graceful-fs": "^4.2.11", - "jsdoc": "^4.0.4", - "less-openui5": "^0.11.6", - "pretty-data": "^0.40.0", - "semver": "^7.7.2", - "terser": "^5.44.0", - "workerpool": "^9.3.4", - "xml2js": "^0.6.2" + "lodash": "^4.17.21" }, "engines": { - "node": "^20.11.0 || >=22.0.0", - "npm": ">= 8" + "node": ">=v12.0.0" } }, - "node_modules/@ui5/cli": { - "version": "4.0.26", - "resolved": "https://registry.npmjs.org/@ui5/cli/-/cli-4.0.26.tgz", - "integrity": "sha512-cy4BpixUwEQZGdUALWNAYUNhYCwuHG43B717v2uQrdCAEXnaJPXE3r6KGHe9n9YirRliKN9IpX/apb8jUDLZYw==", - "hasShrinkwrap": true, + "node_modules/@koa/cors": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@koa/cors/-/cors-5.0.0.tgz", + "integrity": "sha512-x/iUDjcS90W69PryLDIMgFyV21YLTnG9zOpPXS7Bkt2b8AsY3zZsIpOLBkYr9fBcF3HbkKaER5hOBZLfpLgYNw==", + "dev": true, "dependencies": { - "@ui5/builder": "^4.0.11", - "@ui5/fs": "^4.0.2", - "@ui5/logger": "^4.0.2", - "@ui5/project": "^4.0.6", - "@ui5/server": "^4.0.7", - "chalk": "^5.6.2", - "data-with-position": "^0.5.0", - "import-local": "^3.2.0", - "js-yaml": "^4.1.0", - "open": "^10.2.0", - "pretty-hrtime": "^1.0.3", - "semver": "^7.7.2", - "update-notifier": "^7.3.1", - "yargs": "^17.7.2" - }, - "bin": { - "ui5": "bin/ui5.cjs" + "vary": "^1.1.2" }, "engines": { - "node": "^20.11.0 || >=22.0.0", - "npm": ">= 8" + "node": ">= 14.0.0" } }, - "node_modules/@ui5/cli/node_modules/@adobe/css-tools": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.4.tgz", - "integrity": "sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==" + "node_modules/@lit-labs/ssr-dom-shim": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.2.1.tgz", + "integrity": "sha512-wx4aBmgeGvFmOKucFKY+8VFJSYZxs9poN3SDNQFF6lT6NrQUnHiPB2PWz2sc4ieEcAaYYzN+1uWahEeTq2aRIQ==", + "dev": true, + "license": "BSD-3-Clause" }, - "node_modules/@ui5/cli/node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": ">=6.9.0" + "node": ">= 8" } }, - "node_modules/@ui5/cli/node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@ui5/cli/node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@ui5/cli/node_modules/@babel/parser": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", - "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", - "dependencies": { - "@babel/types": "^7.28.4" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@ui5/cli/node_modules/@babel/types": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz", - "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@ui5/cli/node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@ui5/cli/node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", - "dependencies": { - "@isaacs/balanced-match": "^4.0.1" - }, - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@ui5/cli/node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@ui5/cli/node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/@ui5/cli/node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@ui5/cli/node_modules/@isaacs/fs-minipass": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", - "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", - "dependencies": { - "minipass": "^7.0.4" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@ui5/cli/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@ui5/cli/node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@ui5/cli/node_modules/@jridgewell/source-map": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", - "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@ui5/cli/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==" - }, - "node_modules/@ui5/cli/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@ui5/cli/node_modules/@jsdoc/salty": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.9.tgz", - "integrity": "sha512-yYxMVH7Dqw6nO0d5NIV8OQWnitU8k6vXH8NtgqAfIa/IUqRMxRv/NUJJ08VEKbAakwxlgBl5PJdrU0dMPStsnw==", - "dependencies": { - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=v12.0.0" - } - }, - "node_modules/@ui5/cli/node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@ui5/cli/node_modules/@nodelib/fs.stat": { + "node_modules/@nodelib/fs.stat": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", @@ -1348,7 +1462,7 @@ "node": ">= 8" } }, - "node_modules/@ui5/cli/node_modules/@nodelib/fs.walk": { + "node_modules/@nodelib/fs.walk": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", @@ -1360,7 +1474,7 @@ "node": ">= 8" } }, - "node_modules/@ui5/cli/node_modules/@npmcli/agent": { + "node_modules/@npmcli/agent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-3.0.0.tgz", "integrity": "sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==", @@ -1375,12 +1489,60 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/@npmcli/agent/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + "node_modules/@npmcli/agent/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "engines": { + "node": ">= 14" + } }, - "node_modules/@ui5/cli/node_modules/@npmcli/config": { + "node_modules/@npmcli/agent/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@npmcli/agent/node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@npmcli/agent/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@npmcli/agent/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/@npmcli/config": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/@npmcli/config/-/config-9.0.0.tgz", "integrity": "sha512-P5Vi16Y+c8E0prGIzX112ug7XxqfaPFUVW/oXAV+2VsxplKZEnJozqZ0xnK8V8w/SEsBf+TXhUihrEIAU4CA5Q==", @@ -1398,7 +1560,18 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/@npmcli/git": { + "node_modules/@npmcli/fs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz", + "integrity": "sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/git": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-6.0.3.tgz", "integrity": "sha512-GUYESQlxZRAdhs3UhbB6pVRNUELQOHXwK9ruDkwmCv2aZ5y0SApQzUJCg02p3A7Ue2J5hxvlk1YI53c00NmRyQ==", @@ -1416,17 +1589,27 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" - }, - "node_modules/@ui5/cli/node_modules/@npmcli/map-workspaces": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-4.0.2.tgz", - "integrity": "sha512-mnuMuibEbkaBTYj9HQ3dMe6L0ylYW+s/gfz7tBDMFY/la0w9Kf44P9aLn4/+/t3aTR3YUHKoT6XQL9rlicIe3Q==", - "dependencies": { - "@npmcli/name-from-folder": "^3.0.0", + "node_modules/@npmcli/installed-package-contents": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-3.0.0.tgz", + "integrity": "sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q==", + "dependencies": { + "npm-bundled": "^4.0.0", + "npm-normalize-package-bin": "^4.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/map-workspaces": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-4.0.2.tgz", + "integrity": "sha512-mnuMuibEbkaBTYj9HQ3dMe6L0ylYW+s/gfz7tBDMFY/la0w9Kf44P9aLn4/+/t3aTR3YUHKoT6XQL9rlicIe3Q==", + "dependencies": { + "@npmcli/name-from-folder": "^3.0.0", "@npmcli/package-json": "^6.0.0", "glob": "^10.2.2", "minimatch": "^9.0.0" @@ -1435,7 +1618,7 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/@npmcli/map-workspaces/node_modules/brace-expansion": { + "node_modules/@npmcli/map-workspaces/node_modules/brace-expansion": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", @@ -1443,7 +1626,7 @@ "balanced-match": "^1.0.0" } }, - "node_modules/@ui5/cli/node_modules/@npmcli/map-workspaces/node_modules/minimatch": { + "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", @@ -1457,7 +1640,7 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@ui5/cli/node_modules/@npmcli/name-from-folder": { + "node_modules/@npmcli/name-from-folder": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-3.0.0.tgz", "integrity": "sha512-61cDL8LUc9y80fXn+lir+iVt8IS0xHqEKwPu/5jCjxQTVoSCmkXvw4vbMrzAMtmghz3/AkiBjhHkDKUH+kf7kA==", @@ -1465,7 +1648,15 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/@npmcli/package-json": { + "node_modules/@npmcli/node-gyp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-4.0.0.tgz", + "integrity": "sha512-+t5DZ6mO/QFh78PByMq1fGSAub/agLJZDRfJRMeOSNCt8s9YVlTjmGpIPwPhvXTGUIJk+WszlT0rQa1W33yzNA==", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/package-json": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-6.2.0.tgz", "integrity": "sha512-rCNLSB/JzNvot0SEyXqWZ7tX2B5dD2a1br2Dp0vSYVo5jh8Z0EZ7lS9TsZ1UtziddB1UfNUaMCc538/HztnJGA==", @@ -1482,7 +1673,7 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/@npmcli/promise-spawn": { + "node_modules/@npmcli/promise-spawn": { "version": "8.0.3", "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-8.0.3.tgz", "integrity": "sha512-Yb00SWaL4F8w+K8YGhQ55+xE4RUNdMHV43WZGsiTM92gS+lC0mGsn7I4hLug7pbao035S6bj3Y3w0cUNGLfmkg==", @@ -1493,53 +1684,264 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "optional": true, + "node_modules/@npmcli/redact": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-3.2.2.tgz", + "integrity": "sha512-7VmYAmk4csGv08QzrDKScdzn11jHPFGyqJW39FyPgPuAp3zIaUmuCo1yxw9aGs+NEJuTGQ9Gwqpt93vtJubucg==", "engines": { - "node": ">=14" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/@pnpm/config.env-replace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", + "node_modules/@npmcli/run-script": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-9.1.0.tgz", + "integrity": "sha512-aoNSbxtkePXUlbZB+anS1LqsJdctG5n3UVhfU47+CDdwMi6uNTBMF9gPcQRnqghQd2FGzcwwIFBruFMxjhBewg==", + "dependencies": { + "@npmcli/node-gyp": "^4.0.0", + "@npmcli/package-json": "^6.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "node-gyp": "^11.0.0", + "proc-log": "^5.0.0", + "which": "^5.0.0" + }, "engines": { - "node": ">=12.22.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/@pnpm/network.ca-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "node_modules/@odata2ts/converter-api": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@odata2ts/converter-api/-/converter-api-0.1.2.tgz", + "integrity": "sha512-3KaXbzKiu6rOh8/kP7hv26e4PN2JQ/YZuobzkOvl4swfkxZjKOLcM221tNH/TVGm40SZFkLRV7pf1HenvvET2Q==", + "dev": true, + "license": "MIT", "dependencies": { - "graceful-fs": "4.2.10" + "@odata2ts/odata-core": "^0.1.0" + } + }, + "node_modules/@odata2ts/converter-api/node_modules/@odata2ts/odata-core": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@odata2ts/odata-core/-/odata-core-0.1.0.tgz", + "integrity": "sha512-kiLHbZu6ewBjfxpATL0NQXhFG+5XZlCBmmiEQMAF5elSMMrQIrf09wd7vurx0/4MnrLYkcPh/v6/CR5XaQE9Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@odata2ts/converter-runtime": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@odata2ts/converter-runtime/-/converter-runtime-0.2.2.tgz", + "integrity": "sha512-u0EeG4pfjrUhOKD6SWro3jfv0dAOqHFkEKYDr2qkkwYreOhf1ND9oAh2zTuuyNyCPY0ONpHVttyBbtAQd4eiWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@odata2ts/converter-api": "^0.1.2" + } + }, + "node_modules/@odata2ts/http-client-api": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@odata2ts/http-client-api/-/http-client-api-0.5.1.tgz", + "integrity": "sha512-k5rzpeOuWbPvYj40Qy1ZmP2G3EFD6kqk7np5VpSmXL9ZTZtS3Vzi6+aJM1uO2W8/4RDpzlBzyrLc2hjLgSPw4g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@odata2ts/http-client-base": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@odata2ts/http-client-base/-/http-client-base-0.4.2.tgz", + "integrity": "sha512-LqW9p6aa5PnAgNBYGG1VEf/sFTy+JC3fioI2/BP/1dW5ZpV1PBPOa35RyALcBtb+TgdfFfbuzJVUmI/FJsj8mQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@odata2ts/http-client-api": "^0.5.1" + } + }, + "node_modules/@odata2ts/http-client-fetch": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@odata2ts/http-client-fetch/-/http-client-fetch-0.6.2.tgz", + "integrity": "sha512-8tzVfAHpJp7yVFrmRrYcUoCcoqZSwzbVyagasaZken7Axsxx7P6Qbe/pCv93zgAcLtu0pSsNQevXBOOuBVGuNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@odata2ts/http-client-base": "^0.4.2" + } + }, + "node_modules/@odata2ts/odata-core": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@odata2ts/odata-core/-/odata-core-0.5.0.tgz", + "integrity": "sha512-oAtKUsa9lUt/G8qHvf9fb9bMHc+TCc2tgKfXtDjLd4v3HGY3dEhP85ODT70tI1iugRNnSvm83hlbndwr3BlnFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@odata2ts/odata-query-builder": { + "version": "0.16.10", + "resolved": "https://registry.npmjs.org/@odata2ts/odata-query-builder/-/odata-query-builder-0.16.10.tgz", + "integrity": "sha512-yxGFyOHU5xU0vtTy3fXZEkM1lCTnaMTOeQpGRNxcczguFQxoIY1ZrmO6G5jNYXO64D8tMWEZeKawWiXSOtkhPw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@odata2ts/odata-query-objects": "^0.23.1" + } + }, + "node_modules/@odata2ts/odata-query-builder/node_modules/@odata2ts/odata-query-objects": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@odata2ts/odata-query-objects/-/odata-query-objects-0.23.1.tgz", + "integrity": "sha512-uPs15IjpbjthneBXi01tE4W1BWBVvvOKXiKQPMTF4QEVeTZx5UB17QTsb7KZUZZgN2D4zA4yd0Zj3zRVyVAQfQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@odata2ts/converter-api": "^0.1.2", + "@odata2ts/http-client-api": "^0.5.1", + "@odata2ts/odata-core": "^0.5.0" + } + }, + "node_modules/@odata2ts/odata-query-objects": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@odata2ts/odata-query-objects/-/odata-query-objects-0.21.0.tgz", + "integrity": "sha512-Spcrf5n6QAC7A+RX5laRaCIqi57rCrXv2Qdx6Zt6WctapjOu5J/M+UOD/kvr5TdJ7FN+gSmdl9ZdnF+R8r/tzA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@odata2ts/converter-api": "^0.1.2", + "@odata2ts/http-client-api": "^0.1.0", + "@odata2ts/odata-core": "^0.5.0" + } + }, + "node_modules/@odata2ts/odata-query-objects/node_modules/@odata2ts/http-client-api": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@odata2ts/http-client-api/-/http-client-api-0.1.0.tgz", + "integrity": "sha512-mbIRS535/AldQ19fxj3rTXUGn3b8VltVKN4poIcwVBmqKUI/cY0aP9q/zDrGp8RBHNOEm/S+0qSQI8GEiAFS1A==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@odata2ts/odata-service": { + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@odata2ts/odata-service/-/odata-service-0.19.3.tgz", + "integrity": "sha512-hq9I68r5UPKqt9ZOnBjsVJrtsvbJt1l0YcZGOQx9IxJ3TssFru9iTZNfnIupCC4eSRWzKsf1/P8DBfEfxWhn+g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@odata2ts/http-client-api": "^0.5.1", + "@odata2ts/odata-query-builder": "^0.16.10", + "@odata2ts/odata-query-objects": "^0.23.1" + } + }, + "node_modules/@odata2ts/odata-service/node_modules/@odata2ts/odata-query-objects": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@odata2ts/odata-query-objects/-/odata-query-objects-0.23.1.tgz", + "integrity": "sha512-uPs15IjpbjthneBXi01tE4W1BWBVvvOKXiKQPMTF4QEVeTZx5UB17QTsb7KZUZZgN2D4zA4yd0Zj3zRVyVAQfQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@odata2ts/converter-api": "^0.1.2", + "@odata2ts/http-client-api": "^0.5.1", + "@odata2ts/odata-core": "^0.5.0" + } + }, + "node_modules/@odata2ts/odata2ts": { + "version": "0.35.0", + "resolved": "https://registry.npmjs.org/@odata2ts/odata2ts/-/odata2ts-0.35.0.tgz", + "integrity": "sha512-JZgWazoBVW1DyDwMiaTs7UFKVcZV7aaCkCCuzk0KgQBivBMwo/+15LOEDJTSuw40XJ74rwFWD7uECc5dTvKXWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@odata2ts/converter-api": "^0.1.2", + "@odata2ts/converter-runtime": "^0.2.2", + "@odata2ts/http-client-api": "^0.5.1", + "@odata2ts/odata-core": "^0.5.0", + "@prettier/plugin-xml": "^2.2.0", + "axios": "^1.4.0", + "camel-case": "^4.1.2", + "commander": "^10.0.1", + "constant-case": "^3.0.4", + "cosmiconfig": "^8.2.0", + "cosmiconfig-typescript-loader": "^5.0.0", + "deepmerge": "^4.3.1", + "fs-extra": "^11.1.1", + "pascal-case": "^3.1.2", + "prettier": "^2.8.8", + "snake-case": "^3.0.4", + "ts-morph": "^18.0.0", + "ts-node": "^10.9.1", + "tsconfig-loader": "^1.1.0", + "upper-case-first": "^2.0.2", + "xml2js": "^0.6.0" + }, + "bin": { + "odata2ts": "lib/run-cli.js" }, + "peerDependencies": { + "@odata2ts/odata-query-objects": "^0.21.0", + "@odata2ts/odata-service": "^0.19.0" + } + }, + "node_modules/@odata2ts/odata2ts/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=12.22.0" + "node": ">=14" } }, - "node_modules/@ui5/cli/node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + "node_modules/@odata2ts/odata2ts/node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } }, - "node_modules/@ui5/cli/node_modules/@pnpm/npm-conf": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", - "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", + "node_modules/@odata2ts/odata2ts/node_modules/cosmiconfig-typescript-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-5.0.0.tgz", + "integrity": "sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA==", + "dev": true, + "license": "MIT", "dependencies": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" + "jiti": "^1.19.1" }, "engines": { - "node": ">=12" + "node": ">=v16" + }, + "peerDependencies": { + "@types/node": "*", + "cosmiconfig": ">=8.2", + "typescript": ">=4" } }, - "node_modules/@ui5/cli/node_modules/@sigstore/bundle": { + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@sigstore/bundle": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-3.1.0.tgz", "integrity": "sha512-Mm1E3/CmDDCz3nDhFKTuYdB47EdRFRQMOE/EAbiG1MJW77/w1b3P7Qx7JSrVJs8PfwOLOVcKQCHErIwCTyPbag==", @@ -1550,7 +1952,7 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/@sigstore/core": { + "node_modules/@sigstore/core": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-2.0.0.tgz", "integrity": "sha512-nYxaSb/MtlSI+JWcwTHQxyNmWeWrUXJJ/G4liLrGG7+tS4vAz6LF3xRXqLH6wPIVUoZQel2Fs4ddLx4NCpiIYg==", @@ -1558,7 +1960,7 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/@sigstore/protobuf-specs": { + "node_modules/@sigstore/protobuf-specs": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.4.3.tgz", "integrity": "sha512-fk2zjD9117RL9BjqEwF7fwv7Q/P9yGsMV4MUJZ/DocaQJ6+3pKr+syBq1owU5Q5qGw5CUbXzm+4yJ2JVRDQeSA==", @@ -1566,7 +1968,7 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/@sigstore/sign": { + "node_modules/@sigstore/sign": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-3.1.0.tgz", "integrity": "sha512-knzjmaOHOov1Ur7N/z4B1oPqZ0QX5geUfhrVaqVlu+hl0EAoL4o+l0MSULINcD5GCWe3Z0+YJO8ues6vFlW0Yw==", @@ -1582,7 +1984,7 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/@sigstore/tuf": { + "node_modules/@sigstore/tuf": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-3.1.1.tgz", "integrity": "sha512-eFFvlcBIoGwVkkwmTi/vEQFSva3xs5Ot3WmBcjgjVdiaoelBLQaQ/ZBfhlG0MnG0cmTYScPpk7eDdGDWUcFUmg==", @@ -1594,7 +1996,7 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/@sigstore/verify": { + "node_modules/@sigstore/verify": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-2.1.1.tgz", "integrity": "sha512-hVJD77oT67aowHxwT4+M6PGOp+E2LtLdTK3+FC0lBO9T7sYwItDMXZ7Z07IDCvR1M717a4axbIWckrW67KMP/w==", @@ -1607,41 +2009,150 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/@tufjs/canonical-json": { + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", + "dev": true + }, + "node_modules/@tootallnate/once": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", - "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 10" } }, - "node_modules/@ui5/cli/node_modules/@tufjs/models": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-3.0.1.tgz", - "integrity": "sha512-UUYHISyhCU3ZgN8yaear3cGATHb3SMuKHsQ/nVbHXcmnBf+LzQ/cQfhNG+rfaSHgqGKNEm2cOCLVLELStUQ1JA==", - "dependencies": { - "@tufjs/canonical-json": "2.0.0", - "minimatch": "^9.0.5" - }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, + "license": "ISC", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=10.13.0" } }, - "node_modules/@ui5/cli/node_modules/@tufjs/models/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "node_modules/@ts-morph/common": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.19.0.tgz", + "integrity": "sha512-Unz/WHmd4pGax91rdIKWi51wnVUW11QttMEPpBiBgIewnc9UQIX7UDLxr5vRlqeByXCwhkF6VabSsI0raWcyAQ==", + "dev": true, + "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "fast-glob": "^3.2.12", + "minimatch": "^7.4.3", + "mkdirp": "^2.1.6", + "path-browserify": "^1.0.1" } }, - "node_modules/@ui5/cli/node_modules/@tufjs/models/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "node_modules/@ts-morph/common/node_modules/minimatch": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz", + "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@ts-morph/common/node_modules/mkdirp": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.6.tgz", + "integrity": "sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-3.0.1.tgz", + "integrity": "sha512-UUYHISyhCU3ZgN8yaear3cGATHb3SMuKHsQ/nVbHXcmnBf+LzQ/cQfhNG+rfaSHgqGKNEm2cOCLVLELStUQ1JA==", + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.5" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@tufjs/models/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { "node": ">=16 || 14 >=14.17" }, @@ -1649,12 +2160,24 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@ui5/cli/node_modules/@types/linkify-it": { + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/linkify-it": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==" }, - "node_modules/@ui5/cli/node_modules/@types/markdown-it": { + "node_modules/@types/markdown-it": { "version": "14.1.2", "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", @@ -1663,17 +2186,74 @@ "@types/mdurl": "^2" } }, - "node_modules/@ui5/cli/node_modules/@types/mdurl": { + "node_modules/@types/markdown-it-plantuml": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@types/markdown-it-plantuml/-/markdown-it-plantuml-1.4.5.tgz", + "integrity": "sha512-QTEJOz9UJSJhLNTYXbjg3p/MsEY3TIgzVH3r1zf/tfXOclf/E2lmP8ZXOkv7RdD4agnMROO4h/3IFWCElEvR8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/markdown-it": "*" + } + }, + "node_modules/@types/mdurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==" }, - "node_modules/@ui5/cli/node_modules/@types/normalize-package-data": { + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.16.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.1.tgz", + "integrity": "sha512-zJDo7wEadFtSyNz5QITDfRcrhqDvQI1xQNQ0VoizPjM/dVAODqqIUWbJPkvsxmTI0MYRGRikcdjMPhOssnPejQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@types/normalize-package-data": { "version": "2.4.4", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==" }, - "node_modules/@ui5/cli/node_modules/@ui5/builder": { + "node_modules/@types/openui5": { + "version": "1.127.0", + "resolved": "https://registry.npmjs.org/@types/openui5/-/openui5-1.127.0.tgz", + "integrity": "sha512-MIauyuHgaNnN7PDMZ71vS9XqpVlo0tXL6EaMhdmNjQTMblm6IJxlmOz0UX1BkdJwGKIA2rVE+2WGz6xn7ndJaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/jquery": "~3.5.13", + "@types/qunit": "^2.5.4" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "dev": true + }, + "node_modules/@typescript-eslint/types": { + "version": "8.44.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.44.1.tgz", + "integrity": "sha512-Lk7uj7y9uQUOEguiDIDLYLJOrYHQa7oBiURYVFqIpGxclAFQ78f6VUOM8lI2XEuNOKNB7XuvM2+2cMXAoq4ALQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ui5/builder": { "version": "4.0.11", "resolved": "https://registry.npmjs.org/@ui5/builder/-/builder-4.0.11.tgz", "integrity": "sha512-6CsTCau0aP2NaXk9cZZ5dyINgKAoHL/n6l/O+d9ZTeHAKEyPM2+7WXXCLlMO/Z/SD+eEShztnsg1aCKyAzS5dQ==", @@ -1699,861 +2279,887 @@ "npm": ">= 8" } }, - "node_modules/@ui5/cli/node_modules/@ui5/fs": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@ui5/fs/-/fs-4.0.2.tgz", - "integrity": "sha512-0R7eb9xEMswvkN2wIiyYJtQY83evQJ7LQhTnRf5Ms0o2R29twGLP4XewqH+IoGWyT3T4SuDNTWmUU2UaTRY4zg==", - "dependencies": { - "@ui5/logger": "^4.0.1", - "clone": "^2.1.2", - "escape-string-regexp": "^5.0.0", - "globby": "^14.1.0", - "graceful-fs": "^4.2.11", - "micromatch": "^4.0.8", - "minimatch": "^10.0.3", - "pretty-hrtime": "^1.0.3", - "random-int": "^3.0.0" - }, - "engines": { - "node": "^20.11.0 || >=22.0.0", - "npm": ">= 8" - } - }, - "node_modules/@ui5/cli/node_modules/@ui5/logger": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@ui5/logger/-/logger-4.0.2.tgz", - "integrity": "sha512-uscDCQyHFeenh4r2RbYuffTMn6IQdcNC1tXrQ4BF+apAFjmDGP11IHdAwVCKwxgyPrIC17HT2gub3ZugGM8kpQ==", - "dependencies": { - "chalk": "^5.6.0", - "cli-progress": "^3.12.0", - "figures": "^6.1.0" - }, - "engines": { - "node": "^20.11.0 || >=22.0.0", - "npm": ">= 8" - } - }, - "node_modules/@ui5/cli/node_modules/@ui5/project": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@ui5/project/-/project-4.0.6.tgz", - "integrity": "sha512-ryopHahdKxU9GXXfEf3RNQxodHOOdqUmzrQ1uymoa3Om83BMBcURs3FQERjOP4soDbM5RiI7wEdaXX9VRvgH4w==", + "node_modules/@ui5/cli": { + "version": "4.0.26", + "resolved": "https://registry.npmjs.org/@ui5/cli/-/cli-4.0.26.tgz", + "integrity": "sha512-cy4BpixUwEQZGdUALWNAYUNhYCwuHG43B717v2uQrdCAEXnaJPXE3r6KGHe9n9YirRliKN9IpX/apb8jUDLZYw==", + "hasShrinkwrap": true, "dependencies": { - "@npmcli/config": "^9.0.0", + "@ui5/builder": "^4.0.11", "@ui5/fs": "^4.0.2", "@ui5/logger": "^4.0.2", - "ajv": "^6.12.6", - "ajv-errors": "^1.0.1", + "@ui5/project": "^4.0.6", + "@ui5/server": "^4.0.7", "chalk": "^5.6.2", - "escape-string-regexp": "^5.0.0", - "globby": "^14.1.0", - "graceful-fs": "^4.2.11", + "data-with-position": "^0.5.0", + "import-local": "^3.2.0", "js-yaml": "^4.1.0", - "lockfile": "^1.0.4", - "make-fetch-happen": "^14.0.3", - "node-stream-zip": "^1.15.0", - "pacote": "^19.0.1", + "open": "^10.2.0", "pretty-hrtime": "^1.0.3", - "read-package-up": "^11.0.0", - "read-pkg": "^9.0.1", - "resolve": "^1.22.10", "semver": "^7.7.2", - "xml2js": "^0.6.2", - "yesno": "^0.4.0" + "update-notifier": "^7.3.1", + "yargs": "^17.7.2" + }, + "bin": { + "ui5": "bin/ui5.cjs" }, "engines": { "node": "^20.11.0 || >=22.0.0", "npm": ">= 8" - }, - "peerDependencies": { - "@ui5/builder": "^4.0.11" - }, - "peerDependenciesMeta": { - "@ui5/builder": { - "optional": true - } } }, - "node_modules/@ui5/cli/node_modules/@ui5/server": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@ui5/server/-/server-4.0.7.tgz", - "integrity": "sha512-bc6w/ispz8A1gnTFj3SqmA16geY6gMX8sP53enbq3YAf2HW7q5/E0/rdWj2BWlWQLW1zW/zVWCPAi6PX7lYJqQ==", + "node_modules/@ui5/cli/node_modules/@adobe/css-tools": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.4.tgz", + "integrity": "sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==" + }, + "node_modules/@ui5/cli/node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dependencies": { - "@ui5/builder": "^4.0.11", - "@ui5/fs": "^4.0.2", - "@ui5/logger": "^4.0.2", - "body-parser": "^1.20.2", - "compression": "^1.8.1", - "cors": "^2.8.5", - "devcert-sanscache": "^0.5.1", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "express": "^4.21.2", - "fresh": "^0.5.2", - "graceful-fs": "^4.2.11", - "mime-types": "^2.1.35", - "parseurl": "^1.3.3", - "portscanner": "^2.2.0", - "replacestream": "^4.0.3", - "router": "^2.2.0", - "spdy": "^4.0.2", - "yesno": "^0.4.0" + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { - "node": "^20.11.0 || >=22.0.0", - "npm": ">= 8" + "node": ">=6.9.0" } }, - "node_modules/@ui5/cli/node_modules/abbrev": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", - "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", + "node_modules/@ui5/cli/node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=6.9.0" } }, - "node_modules/@ui5/cli/node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, + "node_modules/@ui5/cli/node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "engines": { - "node": ">= 0.6" + "node": ">=6.9.0" } }, - "node_modules/@ui5/cli/node_modules/accepts/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "node_modules/@ui5/cli/node_modules/@babel/parser": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", + "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", + "dependencies": { + "@babel/types": "^7.28.4" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, "engines": { - "node": ">= 0.6" + "node": ">=6.0.0" } }, - "node_modules/@ui5/cli/node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "bin": { - "acorn": "bin/acorn" + "node_modules/@ui5/cli/node_modules/@babel/types": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz", + "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" }, "engines": { - "node": ">=0.4.0" + "node": ">=6.9.0" } }, - "node_modules/@ui5/cli/node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "node_modules/@ui5/cli/node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "engines": { + "node": "20 || >=22" } }, - "node_modules/@ui5/cli/node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "node_modules/@ui5/cli/node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, "engines": { - "node": ">= 14" + "node": "20 || >=22" } }, - "node_modules/@ui5/cli/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/@ui5/cli/node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": ">=12" } }, - "node_modules/@ui5/cli/node_modules/ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "peerDependencies": { - "ajv": ">=5.0.0" - } + "node_modules/@ui5/cli/node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, - "node_modules/@ui5/cli/node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "node_modules/@ui5/cli/node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/@ui5/cli/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "engines": { - "node": ">=12" + "node_modules/@ui5/cli/node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dependencies": { + "minipass": "^7.0.4" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@ui5/cli/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/@ui5/cli/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/@ui5/cli/node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "node_modules/@ui5/cli/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dependencies": { - "lodash": "^4.17.14" + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@ui5/cli/node_modules/atomically": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/atomically/-/atomically-2.0.3.tgz", - "integrity": "sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==", + "node_modules/@ui5/cli/node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@ui5/cli/node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", "dependencies": { - "stubborn-fs": "^1.2.5", - "when-exit": "^2.1.1" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, - "node_modules/@ui5/cli/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "node_modules/@ui5/cli/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==" }, - "node_modules/@ui5/cli/node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + "node_modules/@ui5/cli/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } }, - "node_modules/@ui5/cli/node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "node_modules/@ui5/cli/node_modules/@jsdoc/salty": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.9.tgz", + "integrity": "sha512-yYxMVH7Dqw6nO0d5NIV8OQWnitU8k6vXH8NtgqAfIa/IUqRMxRv/NUJJ08VEKbAakwxlgBl5PJdrU0dMPStsnw==", "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "lodash": "^4.17.21" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=v12.0.0" } }, - "node_modules/@ui5/cli/node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/@ui5/cli/node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dependencies": { - "ms": "2.0.0" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/@ui5/cli/node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/@ui5/cli/node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + "node_modules/@ui5/cli/node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } }, - "node_modules/@ui5/cli/node_modules/boxen": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz", - "integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==", + "node_modules/@ui5/cli/node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^8.0.0", - "chalk": "^5.3.0", - "cli-boxes": "^3.0.0", - "string-width": "^7.2.0", - "type-fest": "^4.21.0", - "widest-line": "^5.0.0", - "wrap-ansi": "^9.0.0" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 8" } }, - "node_modules/@ui5/cli/node_modules/boxen/node_modules/camelcase": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", - "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", - "engines": { - "node": ">=16" + "node_modules/@ui5/cli/node_modules/@npmcli/agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-3.0.0.tgz", + "integrity": "sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/boxen/node_modules/emoji-regex": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.5.0.tgz", - "integrity": "sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==" + "node_modules/@ui5/cli/node_modules/@npmcli/agent/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" }, - "node_modules/@ui5/cli/node_modules/boxen/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "node_modules/@ui5/cli/node_modules/@npmcli/config": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/config/-/config-9.0.0.tgz", + "integrity": "sha512-P5Vi16Y+c8E0prGIzX112ug7XxqfaPFUVW/oXAV+2VsxplKZEnJozqZ0xnK8V8w/SEsBf+TXhUihrEIAU4CA5Q==", "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" + "@npmcli/map-workspaces": "^4.0.1", + "@npmcli/package-json": "^6.0.1", + "ci-info": "^4.0.0", + "ini": "^5.0.0", + "nopt": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "walk-up-path": "^3.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@ui5/cli/node_modules/boxen/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/boxen/node_modules/wrap-ansi": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", - "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "node_modules/@ui5/cli/node_modules/@npmcli/git": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-6.0.3.tgz", + "integrity": "sha512-GUYESQlxZRAdhs3UhbB6pVRNUELQOHXwK9ruDkwmCv2aZ5y0SApQzUJCg02p3A7Ue2J5hxvlk1YI53c00NmRyQ==", "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" + "@npmcli/promise-spawn": "^8.0.0", + "ini": "^5.0.0", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^10.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^5.0.0" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "node_modules/@ui5/cli/node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "node_modules/@ui5/cli/node_modules/@npmcli/map-workspaces": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-4.0.2.tgz", + "integrity": "sha512-mnuMuibEbkaBTYj9HQ3dMe6L0ylYW+s/gfz7tBDMFY/la0w9Kf44P9aLn4/+/t3aTR3YUHKoT6XQL9rlicIe3Q==", "dependencies": { - "fill-range": "^7.1.1" + "@npmcli/name-from-folder": "^3.0.0", + "@npmcli/package-json": "^6.0.0", + "glob": "^10.2.2", + "minimatch": "^9.0.0" }, "engines": { - "node": ">=8" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "node_modules/@ui5/cli/node_modules/@npmcli/map-workspaces/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dependencies": { + "balanced-match": "^1.0.0" + } }, - "node_modules/@ui5/cli/node_modules/bundle-name": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", - "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "node_modules/@ui5/cli/node_modules/@npmcli/map-workspaces/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dependencies": { - "run-applescript": "^7.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=18" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@ui5/cli/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "node_modules/@ui5/cli/node_modules/@npmcli/name-from-folder": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-3.0.0.tgz", + "integrity": "sha512-61cDL8LUc9y80fXn+lir+iVt8IS0xHqEKwPu/5jCjxQTVoSCmkXvw4vbMrzAMtmghz3/AkiBjhHkDKUH+kf7kA==", "engines": { - "node": ">= 0.8" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "node_modules/@ui5/cli/node_modules/@npmcli/package-json": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-6.2.0.tgz", + "integrity": "sha512-rCNLSB/JzNvot0SEyXqWZ7tX2B5dD2a1br2Dp0vSYVo5jh8Z0EZ7lS9TsZ1UtziddB1UfNUaMCc538/HztnJGA==", "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" + "@npmcli/git": "^6.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^8.0.0", + "json-parse-even-better-errors": "^4.0.0", + "proc-log": "^5.0.0", + "semver": "^7.5.3", + "validate-npm-package-license": "^3.0.4" }, "engines": { - "node": ">= 0.4" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "node_modules/@ui5/cli/node_modules/@npmcli/promise-spawn": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-8.0.3.tgz", + "integrity": "sha512-Yb00SWaL4F8w+K8YGhQ55+xE4RUNdMHV43WZGsiTM92gS+lC0mGsn7I4hLug7pbao035S6bj3Y3w0cUNGLfmkg==", "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" + "which": "^5.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/catharsis": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", - "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", - "dependencies": { - "lodash": "^4.17.15" - }, + "node_modules/@ui5/cli/node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, "engines": { - "node": ">= 10" + "node": ">=14" } }, - "node_modules/@ui5/cli/node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "node_modules/@ui5/cli/node_modules/@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=12.22.0" } }, - "node_modules/@ui5/cli/node_modules/cheerio": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0.tgz", - "integrity": "sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==", + "node_modules/@ui5/cli/node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.1.0", - "encoding-sniffer": "^0.2.0", - "htmlparser2": "^9.1.0", - "parse5": "^7.1.2", - "parse5-htmlparser2-tree-adapter": "^7.0.0", - "parse5-parser-stream": "^7.1.2", - "undici": "^6.19.5", - "whatwg-mimetype": "^4.0.0" + "graceful-fs": "4.2.10" }, "engines": { - "node": ">=18.17" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + "node": ">=12.22.0" } }, - "node_modules/@ui5/cli/node_modules/cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "node_modules/@ui5/cli/node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "node_modules/@ui5/cli/node_modules/@pnpm/npm-conf": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", + "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", "dependencies": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "engines": { + "node": ">=12" } }, - "node_modules/@ui5/cli/node_modules/chownr": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "node_modules/@ui5/cli/node_modules/@sigstore/bundle": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-3.1.0.tgz", + "integrity": "sha512-Mm1E3/CmDDCz3nDhFKTuYdB47EdRFRQMOE/EAbiG1MJW77/w1b3P7Qx7JSrVJs8PfwOLOVcKQCHErIwCTyPbag==", + "dependencies": { + "@sigstore/protobuf-specs": "^0.4.0" + }, "engines": { - "node": ">=18" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/ci-info": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", - "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], + "node_modules/@ui5/cli/node_modules/@sigstore/core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-2.0.0.tgz", + "integrity": "sha512-nYxaSb/MtlSI+JWcwTHQxyNmWeWrUXJJ/G4liLrGG7+tS4vAz6LF3xRXqLH6wPIVUoZQel2Fs4ddLx4NCpiIYg==", "engines": { - "node": ">=8" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/cli-boxes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "node_modules/@ui5/cli/node_modules/@sigstore/protobuf-specs": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.4.3.tgz", + "integrity": "sha512-fk2zjD9117RL9BjqEwF7fwv7Q/P9yGsMV4MUJZ/DocaQJ6+3pKr+syBq1owU5Q5qGw5CUbXzm+4yJ2JVRDQeSA==", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/cli-progress": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz", - "integrity": "sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==", + "node_modules/@ui5/cli/node_modules/@sigstore/sign": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-3.1.0.tgz", + "integrity": "sha512-knzjmaOHOov1Ur7N/z4B1oPqZ0QX5geUfhrVaqVlu+hl0EAoL4o+l0MSULINcD5GCWe3Z0+YJO8ues6vFlW0Yw==", "dependencies": { - "string-width": "^4.2.3" + "@sigstore/bundle": "^3.1.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.4.0", + "make-fetch-happen": "^14.0.2", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1" }, "engines": { - "node": ">=4" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "node_modules/@ui5/cli/node_modules/@sigstore/tuf": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-3.1.1.tgz", + "integrity": "sha512-eFFvlcBIoGwVkkwmTi/vEQFSva3xs5Ot3WmBcjgjVdiaoelBLQaQ/ZBfhlG0MnG0cmTYScPpk7eDdGDWUcFUmg==", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "@sigstore/protobuf-specs": "^0.4.1", + "tuf-js": "^3.0.1" }, "engines": { - "node": ">=12" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/@ui5/cli/node_modules/@sigstore/verify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-2.1.1.tgz", + "integrity": "sha512-hVJD77oT67aowHxwT4+M6PGOp+E2LtLdTK3+FC0lBO9T7sYwItDMXZ7Z07IDCvR1M717a4axbIWckrW67KMP/w==", + "dependencies": { + "@sigstore/bundle": "^3.1.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.4.1" + }, "engines": { - "node": ">=8" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/cliui/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==", - "dependencies": { - "color-convert": "^2.0.1" - }, + "node_modules/@ui5/cli/node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@ui5/cli/node_modules/cliui/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==", + "node_modules/@ui5/cli/node_modules/@tufjs/models": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-3.0.1.tgz", + "integrity": "sha512-UUYHISyhCU3ZgN8yaear3cGATHb3SMuKHsQ/nVbHXcmnBf+LzQ/cQfhNG+rfaSHgqGKNEm2cOCLVLELStUQ1JA==", "dependencies": { - "color-name": "~1.1.4" + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.5" }, "engines": { - "node": ">=7.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/cliui/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==" - }, - "node_modules/@ui5/cli/node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/@ui5/cli/node_modules/@tufjs/models/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" + "balanced-match": "^1.0.0" } }, - "node_modules/@ui5/cli/node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/@ui5/cli/node_modules/@tufjs/models/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@ui5/cli/node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "engines": { - "node": ">=0.8" + "node_modules/@ui5/cli/node_modules/@types/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==" + }, + "node_modules/@ui5/cli/node_modules/@types/markdown-it": { + "version": "14.1.2", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", + "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", + "dependencies": { + "@types/linkify-it": "^5", + "@types/mdurl": "^2" } }, - "node_modules/@ui5/cli/node_modules/command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" + "node_modules/@ui5/cli/node_modules/@types/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==" }, - "node_modules/@ui5/cli/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "node_modules/@ui5/cli/node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==" }, - "node_modules/@ui5/cli/node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "node_modules/@ui5/cli/node_modules/@ui5/builder": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/@ui5/builder/-/builder-4.0.11.tgz", + "integrity": "sha512-6CsTCau0aP2NaXk9cZZ5dyINgKAoHL/n6l/O+d9ZTeHAKEyPM2+7WXXCLlMO/Z/SD+eEShztnsg1aCKyAzS5dQ==", "dependencies": { - "mime-db": ">= 1.43.0 < 2" + "@jridgewell/sourcemap-codec": "^1.5.5", + "@ui5/fs": "^4.0.2", + "@ui5/logger": "^4.0.2", + "cheerio": "1.0.0", + "escape-unicode": "^0.2.0", + "escope": "^4.0.0", + "espree": "^10.4.0", + "graceful-fs": "^4.2.11", + "jsdoc": "^4.0.4", + "less-openui5": "^0.11.6", + "pretty-data": "^0.40.0", + "semver": "^7.7.2", + "terser": "^5.44.0", + "workerpool": "^9.3.4", + "xml2js": "^0.6.2" }, "engines": { - "node": ">= 0.6" + "node": "^20.11.0 || >=22.0.0", + "npm": ">= 8" } }, - "node_modules/@ui5/cli/node_modules/compression": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", - "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", + "node_modules/@ui5/cli/node_modules/@ui5/fs": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@ui5/fs/-/fs-4.0.2.tgz", + "integrity": "sha512-0R7eb9xEMswvkN2wIiyYJtQY83evQJ7LQhTnRf5Ms0o2R29twGLP4XewqH+IoGWyT3T4SuDNTWmUU2UaTRY4zg==", "dependencies": { - "bytes": "3.1.2", - "compressible": "~2.0.18", - "debug": "2.6.9", - "negotiator": "~0.6.4", - "on-headers": "~1.1.0", - "safe-buffer": "5.2.1", - "vary": "~1.1.2" + "@ui5/logger": "^4.0.1", + "clone": "^2.1.2", + "escape-string-regexp": "^5.0.0", + "globby": "^14.1.0", + "graceful-fs": "^4.2.11", + "micromatch": "^4.0.8", + "minimatch": "^10.0.3", + "pretty-hrtime": "^1.0.3", + "random-int": "^3.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": "^20.11.0 || >=22.0.0", + "npm": ">= 8" } }, - "node_modules/@ui5/cli/node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/@ui5/cli/node_modules/@ui5/logger": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@ui5/logger/-/logger-4.0.2.tgz", + "integrity": "sha512-uscDCQyHFeenh4r2RbYuffTMn6IQdcNC1tXrQ4BF+apAFjmDGP11IHdAwVCKwxgyPrIC17HT2gub3ZugGM8kpQ==", "dependencies": { - "ms": "2.0.0" + "chalk": "^5.6.0", + "cli-progress": "^3.12.0", + "figures": "^6.1.0" + }, + "engines": { + "node": "^20.11.0 || >=22.0.0", + "npm": ">= 8" } }, - "node_modules/@ui5/cli/node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/@ui5/cli/node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "node_modules/@ui5/cli/node_modules/@ui5/project": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@ui5/project/-/project-4.0.6.tgz", + "integrity": "sha512-ryopHahdKxU9GXXfEf3RNQxodHOOdqUmzrQ1uymoa3Om83BMBcURs3FQERjOP4soDbM5RiI7wEdaXX9VRvgH4w==", "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" + "@npmcli/config": "^9.0.0", + "@ui5/fs": "^4.0.2", + "@ui5/logger": "^4.0.2", + "ajv": "^6.12.6", + "ajv-errors": "^1.0.1", + "chalk": "^5.6.2", + "escape-string-regexp": "^5.0.0", + "globby": "^14.1.0", + "graceful-fs": "^4.2.11", + "js-yaml": "^4.1.0", + "lockfile": "^1.0.4", + "make-fetch-happen": "^14.0.3", + "node-stream-zip": "^1.15.0", + "pacote": "^19.0.1", + "pretty-hrtime": "^1.0.3", + "read-package-up": "^11.0.0", + "read-pkg": "^9.0.1", + "resolve": "^1.22.10", + "semver": "^7.7.2", + "xml2js": "^0.6.2", + "yesno": "^0.4.0" + }, + "engines": { + "node": "^20.11.0 || >=22.0.0", + "npm": ">= 8" + }, + "peerDependencies": { + "@ui5/builder": "^4.0.11" + }, + "peerDependenciesMeta": { + "@ui5/builder": { + "optional": true + } } }, - "node_modules/@ui5/cli/node_modules/config-chain/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/@ui5/cli/node_modules/configstore": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-7.0.0.tgz", - "integrity": "sha512-yk7/5PN5im4qwz0WFZW3PXnzHgPu9mX29Y8uZ3aefe2lBPC1FYttWZRcaW9fKkT0pBCJyuQ2HfbmPVaODi9jcQ==", + "node_modules/@ui5/cli/node_modules/@ui5/server": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@ui5/server/-/server-4.0.7.tgz", + "integrity": "sha512-bc6w/ispz8A1gnTFj3SqmA16geY6gMX8sP53enbq3YAf2HW7q5/E0/rdWj2BWlWQLW1zW/zVWCPAi6PX7lYJqQ==", "dependencies": { - "atomically": "^2.0.3", - "dot-prop": "^9.0.0", + "@ui5/builder": "^4.0.11", + "@ui5/fs": "^4.0.2", + "@ui5/logger": "^4.0.2", + "body-parser": "^1.20.2", + "compression": "^1.8.1", + "cors": "^2.8.5", + "devcert-sanscache": "^0.5.1", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "express": "^4.21.2", + "fresh": "^0.5.2", "graceful-fs": "^4.2.11", - "xdg-basedir": "^5.1.0" + "mime-types": "^2.1.35", + "parseurl": "^1.3.3", + "portscanner": "^2.2.0", + "replacestream": "^4.0.3", + "router": "^2.2.0", + "spdy": "^4.0.2", + "yesno": "^0.4.0" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/yeoman/configstore?sponsor=1" + "node": "^20.11.0 || >=22.0.0", + "npm": ">= 8" } }, - "node_modules/@ui5/cli/node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "node_modules/@ui5/cli/node_modules/abbrev": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", + "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@ui5/cli/node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dependencies": { - "safe-buffer": "5.2.1" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, "engines": { "node": ">= 0.6" } }, - "node_modules/@ui5/cli/node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "node_modules/@ui5/cli/node_modules/accepts/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "engines": { "node": ">= 0.6" } }, - "node_modules/@ui5/cli/node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "node_modules/@ui5/cli/node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "bin": { + "acorn": "bin/acorn" + }, "engines": { - "node": ">= 0.6" + "node": ">=0.4.0" } }, - "node_modules/@ui5/cli/node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/@ui5/cli/node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + "node_modules/@ui5/cli/node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } }, - "node_modules/@ui5/cli/node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, + "node_modules/@ui5/cli/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "engines": { - "node": ">= 0.10" + "node": ">= 14" } }, - "node_modules/@ui5/cli/node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "node_modules/@ui5/cli/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, - "engines": { - "node": ">= 8" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@ui5/cli/node_modules/cross-spawn/node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "node_modules/@ui5/cli/node_modules/ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "peerDependencies": { + "ajv": ">=5.0.0" + } }, - "node_modules/@ui5/cli/node_modules/cross-spawn/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/@ui5/cli/node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" + "string-width": "^4.1.0" } }, - "node_modules/@ui5/cli/node_modules/css-select": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", - "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" + "node_modules/@ui5/cli/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "engines": { + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/fb55" + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/@ui5/cli/node_modules/css-what": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", - "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "node_modules/@ui5/cli/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "engines": { - "node": ">= 6" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/fb55" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@ui5/cli/node_modules/data-with-position": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/data-with-position/-/data-with-position-0.5.0.tgz", - "integrity": "sha512-GhsgEIPWk7WCAisjwBkOjvPqpAlVUOSl1CTmy9KyhVMG1wxl29Zj5+J71WhQ/KgoJS/Psxq6Cnioz3xdBjeIWQ==", + "node_modules/@ui5/cli/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/@ui5/cli/node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/@ui5/cli/node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dependencies": { - "yaml-ast-parser": "^0.0.43" + "lodash": "^4.17.14" } }, - "node_modules/@ui5/cli/node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "node_modules/@ui5/cli/node_modules/atomically": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/atomically/-/atomically-2.0.3.tgz", + "integrity": "sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==", "dependencies": { - "ms": "^2.1.3" + "stubborn-fs": "^1.2.5", + "when-exit": "^2.1.1" + } + }, + "node_modules/@ui5/cli/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/@ui5/cli/node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "node_modules/@ui5/cli/node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/@ui5/cli/node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "engines": { - "node": ">=4.0.0" + "node_modules/@ui5/cli/node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/@ui5/cli/node_modules/default-browser": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", - "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "node_modules/@ui5/cli/node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/@ui5/cli/node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, + "node_modules/@ui5/cli/node_modules/boxen": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz", + "integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==", "dependencies": { - "bundle-name": "^4.1.0", - "default-browser-id": "^5.0.0" + "ansi-align": "^3.0.1", + "camelcase": "^8.0.0", + "chalk": "^5.3.0", + "cli-boxes": "^3.0.0", + "string-width": "^7.2.0", + "type-fest": "^4.21.0", + "widest-line": "^5.0.0", + "wrap-ansi": "^9.0.0" }, "engines": { "node": ">=18" @@ -2562,453 +3168,361 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/default-browser-id": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", - "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "node_modules/@ui5/cli/node_modules/boxen/node_modules/camelcase": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", + "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", "engines": { - "node": ">=18" + "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "node_modules/@ui5/cli/node_modules/boxen/node_modules/emoji-regex": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.5.0.tgz", + "integrity": "sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==" + }, + "node_modules/@ui5/cli/node_modules/boxen/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/@ui5/cli/node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "node_modules/@ui5/cli/node_modules/boxen/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/@ui5/cli/node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" - }, - "node_modules/@ui5/cli/node_modules/devcert-sanscache": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/devcert-sanscache/-/devcert-sanscache-0.5.1.tgz", - "integrity": "sha512-9ePmMvWItstun0c35V5WXUlNU4MCHtpXWxKUJcDiZvyKkcA3FxkL6PFHKqTd446mXMmvLpOGBxVD6GjBXeMA5A==", - "dependencies": { - "command-exists": "^1.2.9", - "get-port": "^6.1.2", - "glob": "^10.4.5", - "rimraf": "^5.0.9" + "node": ">=16" }, - "engines": { - "node": "^14.13.1 || >=16.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/devcert-sanscache/node_modules/rimraf": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", - "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", + "node_modules/@ui5/cli/node_modules/boxen/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "dependencies": { - "glob": "^10.3.7" + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" }, - "bin": { - "rimraf": "dist/esm/bin.mjs" + "engines": { + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@ui5/cli/node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "node_modules/@ui5/cli/node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" + "fill-range": "^7.1.1" }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + "engines": { + "node": ">=8" } }, - "node_modules/@ui5/cli/node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] + "node_modules/@ui5/cli/node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, - "node_modules/@ui5/cli/node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "node_modules/@ui5/cli/node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", "dependencies": { - "domelementtype": "^2.3.0" + "run-applescript": "^7.0.0" }, "engines": { - "node": ">= 4" + "node": ">=18" }, "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/domutils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", - "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" + "node_modules/@ui5/cli/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" } }, - "node_modules/@ui5/cli/node_modules/dot-prop": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-9.0.0.tgz", - "integrity": "sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==", + "node_modules/@ui5/cli/node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "dependencies": { - "type-fest": "^4.18.2" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.4" } }, - "node_modules/@ui5/cli/node_modules/dot-prop/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "node_modules/@ui5/cli/node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, "engines": { - "node": ">=16" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@ui5/cli/node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "node_modules/@ui5/cli/node_modules/catharsis": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", + "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" + "lodash": "^4.17.15" }, "engines": { - "node": ">= 0.4" + "node": ">= 10" } }, - "node_modules/@ui5/cli/node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "node_modules/@ui5/cli/node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/@ui5/cli/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/@ui5/cli/node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "node_modules/@ui5/cli/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", "engines": { - "node": ">= 0.8" - } - }, - "node_modules/@ui5/cli/node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/@ui5/cli/node_modules/encoding-sniffer": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz", - "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==", - "dependencies": { - "iconv-lite": "^0.6.3", - "whatwg-encoding": "^3.1.1" + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, "funding": { - "url": "https://github.com/fb55/encoding-sniffer?sponsor=1" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@ui5/cli/node_modules/encoding-sniffer/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "node_modules/@ui5/cli/node_modules/cheerio": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0.tgz", + "integrity": "sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.1.0", + "encoding-sniffer": "^0.2.0", + "htmlparser2": "^9.1.0", + "parse5": "^7.1.2", + "parse5-htmlparser2-tree-adapter": "^7.0.0", + "parse5-parser-stream": "^7.1.2", + "undici": "^6.19.5", + "whatwg-mimetype": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=18.17" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" } }, - "node_modules/@ui5/cli/node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "optional": true, + "node_modules/@ui5/cli/node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/@ui5/cli/node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "node_modules/@ui5/cli/node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "node": ">=18" } }, - "node_modules/@ui5/cli/node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "node_modules/@ui5/cli/node_modules/ci-info": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", + "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/@ui5/cli/node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" - }, - "node_modules/@ui5/cli/node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "node_modules/@ui5/cli/node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", "engines": { - "node": ">= 0.4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "node_modules/@ui5/cli/node_modules/cli-progress": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz", + "integrity": "sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==", + "dependencies": { + "string-width": "^4.2.3" + }, "engines": { - "node": ">= 0.4" + "node": ">=4" } }, - "node_modules/@ui5/cli/node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "node_modules/@ui5/cli/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dependencies": { - "es-errors": "^1.3.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=12" } }, - "node_modules/@ui5/cli/node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "node_modules/@ui5/cli/node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/@ui5/cli/node_modules/escape-goat": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", - "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==", + "node_modules/@ui5/cli/node_modules/cliui/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=12" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@ui5/cli/node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/@ui5/cli/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "engines": { - "node": ">=12" + "node_modules/@ui5/cli/node_modules/cliui/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==", + "dependencies": { + "color-name": "~1.1.4" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@ui5/cli/node_modules/escape-unicode": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/escape-unicode/-/escape-unicode-0.2.0.tgz", - "integrity": "sha512-7jMQuKb8nm0h/9HYLfu4NCLFwoUsd5XO6OZ1z86PbKcMf8zDK1m7nFR0iA2CCShq4TSValaLIveE8T1UBxgALQ==", "engines": { - "node": ">=8" + "node": ">=7.0.0" } }, - "node_modules/@ui5/cli/node_modules/escope": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-4.0.0.tgz", - "integrity": "sha512-E36qlD/r6RJHVpPKArgMoMlNJzoRJFH8z/cAZlI9lbc45zB3+S7i9k6e/MNb+7bZQzNEa6r8WKN3BovpeIBwgA==", + "node_modules/@ui5/cli/node_modules/cliui/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==" + }, + "node_modules/@ui5/cli/node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=4.0" - } - }, - "node_modules/@ui5/cli/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=8" } }, - "node_modules/@ui5/cli/node_modules/espree": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "node_modules/@ui5/cli/node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dependencies": { - "acorn": "^8.15.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=10" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@ui5/cli/node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dependencies": { - "estraverse": "^5.2.0" - }, + "node_modules/@ui5/cli/node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", "engines": { - "node": ">=4.0" + "node": ">=0.8" } }, - "node_modules/@ui5/cli/node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } + "node_modules/@ui5/cli/node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" }, - "node_modules/@ui5/cli/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } + "node_modules/@ui5/cli/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, - "node_modules/@ui5/cli/node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "node_modules/@ui5/cli/node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, "engines": { "node": ">= 0.6" } }, - "node_modules/@ui5/cli/node_modules/exponential-backoff": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", - "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==" - }, - "node_modules/@ui5/cli/node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "node_modules/@ui5/cli/node_modules/compression": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", + "bytes": "3.1.2", + "compressible": "~2.0.18", "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", + "negotiator": "~0.6.4", + "on-headers": "~1.1.0", "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", "vary": "~1.1.2" }, "engines": { - "node": ">= 0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "node": ">= 0.8.0" } }, - "node_modules/@ui5/cli/node_modules/express/node_modules/debug": { + "node_modules/@ui5/cli/node_modules/compression/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", @@ -3016,200 +3530,189 @@ "ms": "2.0.0" } }, - "node_modules/@ui5/cli/node_modules/express/node_modules/ms": { + "node_modules/@ui5/cli/node_modules/compression/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/@ui5/cli/node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/@ui5/cli/node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/@ui5/cli/node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/@ui5/cli/node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "node_modules/@ui5/cli/node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", "dependencies": { - "reusify": "^1.0.4" + "ini": "^1.3.4", + "proto-list": "~1.2.1" } }, - "node_modules/@ui5/cli/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } + "node_modules/@ui5/cli/node_modules/config-chain/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, - "node_modules/@ui5/cli/node_modules/figures": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", - "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", + "node_modules/@ui5/cli/node_modules/configstore": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-7.0.0.tgz", + "integrity": "sha512-yk7/5PN5im4qwz0WFZW3PXnzHgPu9mX29Y8uZ3aefe2lBPC1FYttWZRcaW9fKkT0pBCJyuQ2HfbmPVaODi9jcQ==", "dependencies": { - "is-unicode-supported": "^2.0.0" + "atomically": "^2.0.3", + "dot-prop": "^9.0.0", + "graceful-fs": "^4.2.11", + "xdg-basedir": "^5.1.0" }, "engines": { "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/yeoman/configstore?sponsor=1" } }, - "node_modules/@ui5/cli/node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "node_modules/@ui5/cli/node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dependencies": { - "to-regex-range": "^5.0.1" + "safe-buffer": "5.2.1" }, "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/@ui5/cli/node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, + "node_modules/@ui5/cli/node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "engines": { - "node": ">= 0.8" + "node": ">= 0.6" } }, - "node_modules/@ui5/cli/node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" + "node_modules/@ui5/cli/node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "engines": { + "node": ">= 0.6" } }, - "node_modules/@ui5/cli/node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "node_modules/@ui5/cli/node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, - "node_modules/@ui5/cli/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/@ui5/cli/node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/@ui5/cli/node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "object-assign": "^4", + "vary": "^1" }, "engines": { - "node": ">=8" + "node": ">= 0.10" } }, - "node_modules/@ui5/cli/node_modules/find-up-simple": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz", - "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==", - "engines": { - "node": ">=18" + "node_modules/@ui5/cli/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 8" } }, - "node_modules/@ui5/cli/node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "node_modules/@ui5/cli/node_modules/cross-spawn/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/@ui5/cli/node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" }, "engines": { - "node": ">=14" + "node": ">= 8" + } + }, + "node_modules/@ui5/cli/node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/@ui5/cli/node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "node_modules/@ui5/cli/node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", "engines": { - "node": ">= 0.6" + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/@ui5/cli/node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" + "node_modules/@ui5/cli/node_modules/data-with-position": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/data-with-position/-/data-with-position-0.5.0.tgz", + "integrity": "sha512-GhsgEIPWk7WCAisjwBkOjvPqpAlVUOSl1CTmy9KyhVMG1wxl29Zj5+J71WhQ/KgoJS/Psxq6Cnioz3xdBjeIWQ==", + "dependencies": { + "yaml-ast-parser": "^0.0.43" } }, - "node_modules/@ui5/cli/node_modules/fs-minipass": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", - "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "node_modules/@ui5/cli/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dependencies": { - "minipass": "^7.0.3" + "ms": "^2.1.3" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@ui5/cli/node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/@ui5/cli/node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "node_modules/@ui5/cli/node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=4.0.0" } }, - "node_modules/@ui5/cli/node_modules/get-east-asian-width": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", - "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", + "node_modules/@ui5/cli/node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, "engines": { "node": ">=18" }, @@ -3217,545 +3720,520 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, + "node_modules/@ui5/cli/node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", "engines": { - "node": ">= 0.4" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/get-port": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-6.1.2.tgz", - "integrity": "sha512-BrGGraKm2uPqurfGVj/z97/zv8dPleC6x9JBNRTrDNtCkkRF4rPwrQXFgL7+I+q8QSdU4ntLQX2D7KIxSy8nGw==", + "node_modules/@ui5/cli/node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, + "node_modules/@ui5/cli/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "engines": { - "node": ">= 0.4" - } - }, - "node_modules/@ui5/cli/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 0.8" } }, - "node_modules/@ui5/cli/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, + "node_modules/@ui5/cli/node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "engines": { - "node": ">= 6" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/@ui5/cli/node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "node_modules/@ui5/cli/node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" + }, + "node_modules/@ui5/cli/node_modules/devcert-sanscache": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/devcert-sanscache/-/devcert-sanscache-0.5.1.tgz", + "integrity": "sha512-9ePmMvWItstun0c35V5WXUlNU4MCHtpXWxKUJcDiZvyKkcA3FxkL6PFHKqTd446mXMmvLpOGBxVD6GjBXeMA5A==", "dependencies": { - "balanced-match": "^1.0.0" + "command-exists": "^1.2.9", + "get-port": "^6.1.2", + "glob": "^10.4.5", + "rimraf": "^5.0.9" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" } }, - "node_modules/@ui5/cli/node_modules/glob/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/@ui5/cli/node_modules/devcert-sanscache/node_modules/rimraf": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", "dependencies": { - "brace-expansion": "^2.0.1" + "glob": "^10.3.7" }, - "engines": { - "node": ">=16 || 14 >=14.17" + "bin": { + "rimraf": "dist/esm/bin.mjs" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@ui5/cli/node_modules/global-directory": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", - "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", + "node_modules/@ui5/cli/node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dependencies": { - "ini": "4.1.1" - }, - "engines": { - "node": ">=18" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/@ui5/cli/node_modules/global-directory/node_modules/ini": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", - "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } + "node_modules/@ui5/cli/node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] }, - "node_modules/@ui5/cli/node_modules/globby": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", - "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", + "node_modules/@ui5/cli/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dependencies": { - "@sindresorhus/merge-streams": "^2.1.0", - "fast-glob": "^3.3.3", - "ignore": "^7.0.3", - "path-type": "^6.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.3.0" + "domelementtype": "^2.3.0" }, "engines": { - "node": ">=18" + "node": ">= 4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/@ui5/cli/node_modules/globby/node_modules/@sindresorhus/merge-streams": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", - "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", - "engines": { - "node": ">=18" + "node_modules/@ui5/cli/node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/@ui5/cli/node_modules/globby/node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "node_modules/@ui5/cli/node_modules/dot-prop": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-9.0.0.tgz", + "integrity": "sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==", + "dependencies": { + "type-fest": "^4.18.2" + }, "engines": { - "node": ">= 4" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/globby/node_modules/path-type": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", - "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", + "node_modules/@ui5/cli/node_modules/dot-prop/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", "engines": { - "node": ">=18" + "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "node_modules/@ui5/cli/node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@ui5/cli/node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + "node_modules/@ui5/cli/node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, - "node_modules/@ui5/cli/node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" + "node_modules/@ui5/cli/node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, - "node_modules/@ui5/cli/node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "node_modules/@ui5/cli/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/@ui5/cli/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "engines": { - "node": ">= 0.4" + "node": ">= 0.8" + } + }, + "node_modules/@ui5/cli/node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/@ui5/cli/node_modules/encoding-sniffer": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz", + "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==", + "dependencies": { + "iconv-lite": "^0.6.3", + "whatwg-encoding": "^3.1.1" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/fb55/encoding-sniffer?sponsor=1" } }, - "node_modules/@ui5/cli/node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "node_modules/@ui5/cli/node_modules/encoding-sniffer/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dependencies": { - "function-bind": "^1.1.2" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" } }, - "node_modules/@ui5/cli/node_modules/hosted-git-info": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", - "integrity": "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==", + "node_modules/@ui5/cli/node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "optional": true, "dependencies": { - "lru-cache": "^10.0.1" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=0.10.0" } }, - "node_modules/@ui5/cli/node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + "node_modules/@ui5/cli/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } }, - "node_modules/@ui5/cli/node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" + "node_modules/@ui5/cli/node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "engines": { + "node": ">=6" } }, - "node_modules/@ui5/cli/node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/@ui5/cli/node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "node_modules/@ui5/cli/node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" }, - "node_modules/@ui5/cli/node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" + "node_modules/@ui5/cli/node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "engines": { + "node": ">= 0.4" } }, - "node_modules/@ui5/cli/node_modules/htmlparser2": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz", - "integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.1.0", - "entities": "^4.5.0" + "node_modules/@ui5/cli/node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" } }, - "node_modules/@ui5/cli/node_modules/http-cache-semantics": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", - "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==" - }, - "node_modules/@ui5/cli/node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" - }, - "node_modules/@ui5/cli/node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "node_modules/@ui5/cli/node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "es-errors": "^1.3.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.4" } }, - "node_modules/@ui5/cli/node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, + "node_modules/@ui5/cli/node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "engines": { - "node": ">= 14" + "node": ">=6" } }, - "node_modules/@ui5/cli/node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, + "node_modules/@ui5/cli/node_modules/escape-goat": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", + "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==", "engines": { - "node": ">= 14" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, + "node_modules/@ui5/cli/node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/@ui5/cli/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "engines": { - "node": ">=0.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/ignore-walk": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-7.0.0.tgz", - "integrity": "sha512-T4gbf83A4NH95zvhVYZc+qWocBBGlpzUXLPGurJggw/WIOwicfXJChLDP/iBZnN5WqROSu5Bm3hhle4z8a8YGQ==", - "dependencies": { - "minimatch": "^9.0.0" - }, + "node_modules/@ui5/cli/node_modules/escape-unicode": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/escape-unicode/-/escape-unicode-0.2.0.tgz", + "integrity": "sha512-7jMQuKb8nm0h/9HYLfu4NCLFwoUsd5XO6OZ1z86PbKcMf8zDK1m7nFR0iA2CCShq4TSValaLIveE8T1UBxgALQ==", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=8" } }, - "node_modules/@ui5/cli/node_modules/ignore-walk/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "node_modules/@ui5/cli/node_modules/escope": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-4.0.0.tgz", + "integrity": "sha512-E36qlD/r6RJHVpPKArgMoMlNJzoRJFH8z/cAZlI9lbc45zB3+S7i9k6e/MNb+7bZQzNEa6r8WKN3BovpeIBwgA==", "dependencies": { - "balanced-match": "^1.0.0" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=4.0" } }, - "node_modules/@ui5/cli/node_modules/ignore-walk/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "node_modules/@ui5/cli/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "engines": { - "node": ">=16 || 14 >=14.17" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://opencollective.com/eslint" } }, - "node_modules/@ui5/cli/node_modules/import-local": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", - "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "node_modules/@ui5/cli/node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" }, "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint" } }, - "node_modules/@ui5/cli/node_modules/import-local/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "node_modules/@ui5/cli/node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dependencies": { - "find-up": "^4.0.0" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=8" + "node": ">=4.0" } }, - "node_modules/@ui5/cli/node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "node_modules/@ui5/cli/node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "engines": { - "node": ">=0.8.19" + "node": ">=4.0" } }, - "node_modules/@ui5/cli/node_modules/index-to-position": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.1.0.tgz", - "integrity": "sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==", + "node_modules/@ui5/cli/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4.0" } }, - "node_modules/@ui5/cli/node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/@ui5/cli/node_modules/ini": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-5.0.0.tgz", - "integrity": "sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==", + "node_modules/@ui5/cli/node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">= 0.6" } }, - "node_modules/@ui5/cli/node_modules/ip-address": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", - "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==", - "engines": { - "node": ">= 12" - } + "node_modules/@ui5/cli/node_modules/exponential-backoff": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", + "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==" }, - "node_modules/@ui5/cli/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/@ui5/cli/node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "node_modules/@ui5/cli/node_modules/express": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "dependencies": { - "hasown": "^2.0.2" + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, "engines": { - "node": ">= 0.4" + "node": ">= 0.10.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/@ui5/cli/node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/@ui5/cli/node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/@ui5/cli/node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } + "node_modules/@ui5/cli/node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/@ui5/cli/node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/@ui5/cli/node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/@ui5/cli/node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dependencies": { - "is-extglob": "^2.1.1" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.6.0" } }, - "node_modules/@ui5/cli/node_modules/is-in-ci": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-in-ci/-/is-in-ci-1.0.0.tgz", - "integrity": "sha512-eUuAjybVTHMYWm/U+vBO1sY/JOCgoPCXRxzdju0K+K0BiGW0SChEL1MLC0PoCIR1OlPo5YAp8HuQoUlsWEICwg==", - "bin": { - "is-in-ci": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/@ui5/cli/node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, - "node_modules/@ui5/cli/node_modules/is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "node_modules/@ui5/cli/node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" - }, + "reusify": "^1.0.4" + } + }, + "node_modules/@ui5/cli/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "engines": { - "node": ">=14.16" + "node": ">=12.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } } }, - "node_modules/@ui5/cli/node_modules/is-installed-globally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-1.0.0.tgz", - "integrity": "sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==", + "node_modules/@ui5/cli/node_modules/figures": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", + "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", "dependencies": { - "global-directory": "^4.0.1", - "is-path-inside": "^4.0.0" + "is-unicode-supported": "^2.0.0" }, "engines": { "node": ">=18" @@ -3764,53 +4242,63 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/is-npm": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.1.0.tgz", - "integrity": "sha512-O2z4/kNgyjhQwVR1Wpkbfc19JIhggF97NZNCpWTnjH7kVcZMUrnut9XSN7txI7VdyIYk5ZatOq3zvSuWpU8hoA==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node_modules/@ui5/cli/node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dependencies": { + "to-regex-range": "^5.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8" } }, - "node_modules/@ui5/cli/node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/@ui5/cli/node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, "engines": { - "node": ">=0.12.0" + "node": ">= 0.8" } }, - "node_modules/@ui5/cli/node_modules/is-number-like": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", - "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", + "node_modules/@ui5/cli/node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "lodash.isfinite": "^3.3.2" + "ms": "2.0.0" } }, - "node_modules/@ui5/cli/node_modules/is-path-inside": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", - "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", - "engines": { - "node": ">=12" + "node_modules/@ui5/cli/node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/@ui5/cli/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8" } }, - "node_modules/@ui5/cli/node_modules/is-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==" - }, - "node_modules/@ui5/cli/node_modules/is-unicode-supported": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", - "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "node_modules/@ui5/cli/node_modules/find-up-simple": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz", + "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==", "engines": { "node": ">=18" }, @@ -3818,153 +4306,179 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/is-wsl": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "node_modules/@ui5/cli/node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", "dependencies": { - "is-inside-container": "^1.0.0" + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" }, "engines": { - "node": ">=16" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@ui5/cli/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + "node_modules/@ui5/cli/node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } }, - "node_modules/@ui5/cli/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "node_modules/@ui5/cli/node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "engines": { - "node": ">=16" + "node": ">= 0.6" } }, - "node_modules/@ui5/cli/node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "node_modules/@ui5/cli/node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "minipass": "^7.0.3" }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@ui5/cli/node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "node_modules/@ui5/cli/node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/@ui5/cli/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "node_modules/@ui5/cli/node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/@ui5/cli/node_modules/js2xmlparser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", - "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", - "dependencies": { - "xmlcreate": "^2.0.4" + "node_modules/@ui5/cli/node_modules/get-east-asian-width": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", + "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/jsdoc": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.4.tgz", - "integrity": "sha512-zeFezwyXeG4syyYHbvh1A967IAqq/67yXtXvuL5wnqCkFZe8I0vKfm+EO+YEvLguo6w9CDUbrAXVtJSHh2E8rw==", + "node_modules/@ui5/cli/node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dependencies": { - "@babel/parser": "^7.20.15", - "@jsdoc/salty": "^0.2.1", - "@types/markdown-it": "^14.1.1", - "bluebird": "^3.7.2", - "catharsis": "^0.9.0", - "escape-string-regexp": "^2.0.0", - "js2xmlparser": "^4.0.2", - "klaw": "^3.0.0", - "markdown-it": "^14.1.0", - "markdown-it-anchor": "^8.6.7", - "marked": "^4.0.10", - "mkdirp": "^1.0.4", - "requizzle": "^0.2.3", - "strip-json-comments": "^3.1.0", - "underscore": "~1.13.2" - }, - "bin": { - "jsdoc": "jsdoc.js" + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { - "node": ">=12.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@ui5/cli/node_modules/jsdoc/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "node_modules/@ui5/cli/node_modules/get-port": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-6.1.2.tgz", + "integrity": "sha512-BrGGraKm2uPqurfGVj/z97/zv8dPleC6x9JBNRTrDNtCkkRF4rPwrQXFgL7+I+q8QSdU4ntLQX2D7KIxSy8nGw==", "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/json-parse-even-better-errors": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz", - "integrity": "sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==", + "node_modules/@ui5/cli/node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">= 0.4" } }, - "node_modules/@ui5/cli/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "node_modules/@ui5/cli/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "node_modules/@ui5/cli/node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "engines": [ - "node >= 0.2.0" - ] + "node_modules/@ui5/cli/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } }, - "node_modules/@ui5/cli/node_modules/klaw": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", - "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", + "node_modules/@ui5/cli/node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dependencies": { - "graceful-fs": "^4.1.9" + "balanced-match": "^1.0.0" } }, - "node_modules/@ui5/cli/node_modules/ky": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/ky/-/ky-1.10.0.tgz", - "integrity": "sha512-YRPCzHEWZffbfvmRrfwa+5nwBHwZuYiTrfDX0wuhGBPV0pA/zCqcOq93MDssON/baIkpYbvehIX5aLpMxrRhaA==", + "node_modules/@ui5/cli/node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": ">=18" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/sindresorhus/ky?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@ui5/cli/node_modules/latest-version": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-9.0.0.tgz", - "integrity": "sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==", + "node_modules/@ui5/cli/node_modules/global-directory": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", + "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", "dependencies": { - "package-json": "^10.0.0" + "ini": "4.1.1" }, "engines": { "node": ">=18" @@ -3973,666 +4487,642 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/less-openui5": { - "version": "0.11.6", - "resolved": "https://registry.npmjs.org/less-openui5/-/less-openui5-0.11.6.tgz", - "integrity": "sha512-sQmU+G2pJjFfzRI+XtXkk+T9G0s6UmWWUfOW0utPR46C9lfhNr4DH1lNJuImj64reXYi+vOwyNxPRkj0F3mofA==", - "dependencies": { - "@adobe/css-tools": "^4.0.2", - "clone": "^2.1.2", - "mime": "^1.6.0" - }, + "node_modules/@ui5/cli/node_modules/global-directory/node_modules/ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", "engines": { - "node": ">= 10", - "npm": ">= 5" - } - }, - "node_modules/@ui5/cli/node_modules/linkify-it": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", - "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", - "dependencies": { - "uc.micro": "^2.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@ui5/cli/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/@ui5/cli/node_modules/globby": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", + "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", "dependencies": { - "p-locate": "^4.1.0" + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.3", + "ignore": "^7.0.3", + "path-type": "^6.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.3.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/lockfile": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.4.tgz", - "integrity": "sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA==", - "dependencies": { - "signal-exit": "^3.0.2" + "node_modules/@ui5/cli/node_modules/globby/node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/lockfile/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/@ui5/cli/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "node_modules/@ui5/cli/node_modules/globby/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "engines": { + "node": ">= 4" + } }, - "node_modules/@ui5/cli/node_modules/lodash.isfinite": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", - "integrity": "sha512-7FGG40uhC8Mm633uKW1r58aElFlBlxCrg9JfSi3P6aYiWmfiWF0PgMd86ZUsxE5GwWPdHoS2+48bwTh2VPkIQA==" + "node_modules/@ui5/cli/node_modules/globby/node_modules/path-type": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", + "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/@ui5/cli/node_modules/make-fetch-happen": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-14.0.3.tgz", - "integrity": "sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==", - "dependencies": { - "@npmcli/agent": "^3.0.0", - "cacache": "^19.0.1", - "http-cache-semantics": "^4.1.1", - "minipass": "^7.0.2", - "minipass-fetch": "^4.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^1.0.0", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1", - "ssri": "^12.0.0" + "node_modules/@ui5/cli/node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "engines": { + "node": ">= 0.4" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@ui5/cli/node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/@ui5/cli/node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" + }, + "node_modules/@ui5/cli/node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@ui5/cli/node_modules/make-fetch-happen/node_modules/@npmcli/fs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz", - "integrity": "sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==", + "node_modules/@ui5/cli/node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dependencies": { - "semver": "^7.3.5" + "function-bind": "^1.1.2" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">= 0.4" } }, - "node_modules/@ui5/cli/node_modules/make-fetch-happen/node_modules/cacache": { - "version": "19.0.1", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-19.0.1.tgz", - "integrity": "sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==", + "node_modules/@ui5/cli/node_modules/hosted-git-info": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", + "integrity": "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==", "dependencies": { - "@npmcli/fs": "^4.0.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^10.0.1", - "minipass": "^7.0.3", - "minipass-collect": "^2.0.1", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^7.0.2", - "ssri": "^12.0.0", - "tar": "^7.4.3", - "unique-filename": "^4.0.0" + "lru-cache": "^10.0.1" }, "engines": { "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/make-fetch-happen/node_modules/lru-cache": { + "node_modules/@ui5/cli/node_modules/hosted-git-info/node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" }, - "node_modules/@ui5/cli/node_modules/make-fetch-happen/node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", - "engines": { - "node": ">= 0.6" + "node_modules/@ui5/cli/node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" } }, - "node_modules/@ui5/cli/node_modules/make-fetch-happen/node_modules/ssri": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-12.0.0.tgz", - "integrity": "sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==", + "node_modules/@ui5/cli/node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/@ui5/cli/node_modules/make-fetch-happen/node_modules/unique-filename": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-4.0.0.tgz", - "integrity": "sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==", + "node_modules/@ui5/cli/node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/@ui5/cli/node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dependencies": { - "unique-slug": "^5.0.0" + "safe-buffer": "~5.1.0" + } + }, + "node_modules/@ui5/cli/node_modules/htmlparser2": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz", + "integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.1.0", + "entities": "^4.5.0" + } + }, + "node_modules/@ui5/cli/node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==" + }, + "node_modules/@ui5/cli/node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" + }, + "node_modules/@ui5/cli/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">= 0.8" } }, - "node_modules/@ui5/cli/node_modules/make-fetch-happen/node_modules/unique-slug": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-5.0.0.tgz", - "integrity": "sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==", + "node_modules/@ui5/cli/node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dependencies": { - "imurmurhash": "^0.1.4" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">= 14" } }, - "node_modules/@ui5/cli/node_modules/markdown-it": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", - "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "node_modules/@ui5/cli/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dependencies": { - "argparse": "^2.0.1", - "entities": "^4.4.0", - "linkify-it": "^5.0.0", - "mdurl": "^2.0.0", - "punycode.js": "^2.3.1", - "uc.micro": "^2.1.0" + "agent-base": "^7.1.2", + "debug": "4" }, - "bin": { - "markdown-it": "bin/markdown-it.mjs" + "engines": { + "node": ">= 14" } }, - "node_modules/@ui5/cli/node_modules/markdown-it-anchor": { - "version": "8.6.7", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", - "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", - "peerDependencies": { - "@types/markdown-it": "*", - "markdown-it": "*" - } - }, - "node_modules/@ui5/cli/node_modules/marked": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", - "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", - "bin": { - "marked": "bin/marked.js" + "node_modules/@ui5/cli/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { - "node": ">= 12" + "node": ">=0.10.0" } }, - "node_modules/@ui5/cli/node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "node_modules/@ui5/cli/node_modules/ignore-walk": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-7.0.0.tgz", + "integrity": "sha512-T4gbf83A4NH95zvhVYZc+qWocBBGlpzUXLPGurJggw/WIOwicfXJChLDP/iBZnN5WqROSu5Bm3hhle4z8a8YGQ==", + "dependencies": { + "minimatch": "^9.0.0" + }, "engines": { - "node": ">= 0.4" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/mdurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==" - }, - "node_modules/@ui5/cli/node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" + "node_modules/@ui5/cli/node_modules/ignore-walk/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/@ui5/cli/node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "node_modules/@ui5/cli/node_modules/ignore-walk/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@ui5/cli/node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "node_modules/@ui5/cli/node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, "engines": { - "node": ">= 8" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "node_modules/@ui5/cli/node_modules/import-local/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dependencies": { + "find-up": "^4.0.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/@ui5/cli/node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, + "node_modules/@ui5/cli/node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "engines": { - "node": ">=8.6" + "node": ">=0.8.19" } }, - "node_modules/@ui5/cli/node_modules/micromatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "node_modules/@ui5/cli/node_modules/index-to-position": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.1.0.tgz", + "integrity": "sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==", "engines": { - "node": ">=8.6" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } + "node_modules/@ui5/cli/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/@ui5/cli/node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "node_modules/@ui5/cli/node_modules/ini": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-5.0.0.tgz", + "integrity": "sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==", "engines": { - "node": ">= 0.6" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, + "node_modules/@ui5/cli/node_modules/ip-address": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", + "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==", "engines": { - "node": ">= 0.6" + "node": ">= 12" } }, - "node_modules/@ui5/cli/node_modules/mime-types/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "node_modules/@ui5/cli/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "engines": { - "node": ">= 0.6" + "node": ">= 0.10" } }, - "node_modules/@ui5/cli/node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/@ui5/cli/node_modules/minimatch": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", - "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", + "node_modules/@ui5/cli/node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" + "hasown": "^2.0.2" }, "engines": { - "node": "20 || >=22" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@ui5/cli/node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "node_modules/@ui5/cli/node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "node_modules/@ui5/cli/node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=0.10.0" } }, - "node_modules/@ui5/cli/node_modules/minipass-collect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", - "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "node_modules/@ui5/cli/node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dependencies": { - "minipass": "^7.0.3" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=0.10.0" } }, - "node_modules/@ui5/cli/node_modules/minipass-fetch": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-4.0.1.tgz", - "integrity": "sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ==", - "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^1.0.3", - "minizlib": "^3.0.1" + "node_modules/@ui5/cli/node_modules/is-in-ci": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-in-ci/-/is-in-ci-1.0.0.tgz", + "integrity": "sha512-eUuAjybVTHMYWm/U+vBO1sY/JOCgoPCXRxzdju0K+K0BiGW0SChEL1MLC0PoCIR1OlPo5YAp8HuQoUlsWEICwg==", + "bin": { + "is-in-ci": "cli.js" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=18" }, - "optionalDependencies": { - "encoding": "^0.1.13" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dependencies": { - "minipass": "^3.0.0" + "node_modules/@ui5/cli/node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" }, "engines": { - "node": ">= 8" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/@ui5/cli/node_modules/is-installed-globally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-1.0.0.tgz", + "integrity": "sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==", "dependencies": { - "yallist": "^4.0.0" + "global-directory": "^4.0.1", + "is-path-inside": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/minipass-flush/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/@ui5/cli/node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dependencies": { - "minipass": "^3.0.0" - }, + "node_modules/@ui5/cli/node_modules/is-npm": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.1.0.tgz", + "integrity": "sha512-O2z4/kNgyjhQwVR1Wpkbfc19JIhggF97NZNCpWTnjH7kVcZMUrnut9XSN7txI7VdyIYk5ZatOq3zvSuWpU8hoA==", "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dependencies": { - "yallist": "^4.0.0" - }, + "node_modules/@ui5/cli/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "engines": { - "node": ">=8" + "node": ">=0.12.0" } }, - "node_modules/@ui5/cli/node_modules/minipass-pipeline/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/@ui5/cli/node_modules/minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "node_modules/@ui5/cli/node_modules/is-number-like": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", + "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" + "lodash.isfinite": "^3.3.2" } }, - "node_modules/@ui5/cli/node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dependencies": { - "yallist": "^4.0.0" - }, + "node_modules/@ui5/cli/node_modules/is-path-inside": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", + "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/minipass-sized/node_modules/yallist": { + "node_modules/@ui5/cli/node_modules/is-promise": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==" }, - "node_modules/@ui5/cli/node_modules/minizlib": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", - "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", - "dependencies": { - "minipass": "^7.1.2" - }, + "node_modules/@ui5/cli/node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", "engines": { - "node": ">= 18" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" + "node_modules/@ui5/cli/node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dependencies": { + "is-inside-container": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "node_modules/@ui5/cli/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, - "node_modules/@ui5/cli/node_modules/negotiator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "node_modules/@ui5/cli/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "engines": { - "node": ">= 0.6" + "node": ">=16" } }, - "node_modules/@ui5/cli/node_modules/node-stream-zip": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz", - "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==", - "engines": { - "node": ">=0.12.0" + "node_modules/@ui5/cli/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/antelle" + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/@ui5/cli/node_modules/nopt": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", - "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", + "node_modules/@ui5/cli/node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/@ui5/cli/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dependencies": { - "abbrev": "^3.0.0" + "argparse": "^2.0.1" }, "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@ui5/cli/node_modules/normalize-package-data": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", - "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", + "node_modules/@ui5/cli/node_modules/js2xmlparser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", + "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", "dependencies": { - "hosted-git-info": "^7.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" + "xmlcreate": "^2.0.4" } }, - "node_modules/@ui5/cli/node_modules/normalize-package-data/node_modules/hosted-git-info": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", - "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "node_modules/@ui5/cli/node_modules/jsdoc": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.4.tgz", + "integrity": "sha512-zeFezwyXeG4syyYHbvh1A967IAqq/67yXtXvuL5wnqCkFZe8I0vKfm+EO+YEvLguo6w9CDUbrAXVtJSHh2E8rw==", "dependencies": { - "lru-cache": "^10.0.1" + "@babel/parser": "^7.20.15", + "@jsdoc/salty": "^0.2.1", + "@types/markdown-it": "^14.1.1", + "bluebird": "^3.7.2", + "catharsis": "^0.9.0", + "escape-string-regexp": "^2.0.0", + "js2xmlparser": "^4.0.2", + "klaw": "^3.0.0", + "markdown-it": "^14.1.0", + "markdown-it-anchor": "^8.6.7", + "marked": "^4.0.10", + "mkdirp": "^1.0.4", + "requizzle": "^0.2.3", + "strip-json-comments": "^3.1.0", + "underscore": "~1.13.2" + }, + "bin": { + "jsdoc": "jsdoc.js" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=12.0.0" } }, - "node_modules/@ui5/cli/node_modules/normalize-package-data/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" - }, - "node_modules/@ui5/cli/node_modules/npm-packlist": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-9.0.0.tgz", - "integrity": "sha512-8qSayfmHJQTx3nJWYbbUmflpyarbLMBc6LCAjYsiGtXxDB68HaZpb8re6zeaLGxZzDuMdhsg70jryJe+RrItVQ==", - "dependencies": { - "ignore-walk": "^7.0.0" - }, + "node_modules/@ui5/cli/node_modules/jsdoc/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=8" } }, - "node_modules/@ui5/cli/node_modules/npm-pick-manifest": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-10.0.0.tgz", - "integrity": "sha512-r4fFa4FqYY8xaM7fHecQ9Z2nE9hgNfJR+EmoKv0+chvzWkBcORX3r0FpTByP+CbOVJDladMXnPQGVN8PBLGuTQ==", - "dependencies": { - "npm-install-checks": "^7.1.0", - "npm-normalize-package-bin": "^4.0.0", - "npm-package-arg": "^12.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@ui5/cli/node_modules/npm-pick-manifest/node_modules/npm-install-checks": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-7.1.2.tgz", - "integrity": "sha512-z9HJBCYw9Zr8BqXcllKIs5nI+QggAImbBdHphOzVYrz2CB4iQ6FzWyKmlqDZua+51nAu7FcemlbTc9VgQN5XDQ==", - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@ui5/cli/node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin": { + "node_modules/@ui5/cli/node_modules/json-parse-even-better-errors": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz", - "integrity": "sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz", + "integrity": "sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==", "engines": { "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/npm-pick-manifest/node_modules/npm-package-arg": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-12.0.2.tgz", - "integrity": "sha512-f1NpFjNI9O4VbKMOlA5QoBq/vSQPORHcTZ2feJpFkTHJ9eQkdlmZEKSjcAhxTGInC7RlEyScT9ui67NaOsjFWA==", - "dependencies": { - "hosted-git-info": "^8.0.0", - "proc-log": "^5.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^6.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } + "node_modules/@ui5/cli/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, - "node_modules/@ui5/cli/node_modules/npm-pick-manifest/node_modules/validate-npm-package-name": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-6.0.2.tgz", - "integrity": "sha512-IUoow1YUtvoBBC06dXs8bR8B9vuA3aJfmQNKMoaPG/OFsPmoQvw8xh+6Ye25Gx9DQhoEom3Pcu9MKHerm/NpUQ==", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } + "node_modules/@ui5/cli/node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "engines": [ + "node >= 0.2.0" + ] }, - "node_modules/@ui5/cli/node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "node_modules/@ui5/cli/node_modules/klaw": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", + "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/@ui5/cli/node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" + "graceful-fs": "^4.1.9" } }, - "node_modules/@ui5/cli/node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "node_modules/@ui5/cli/node_modules/ky": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/ky/-/ky-1.10.0.tgz", + "integrity": "sha512-YRPCzHEWZffbfvmRrfwa+5nwBHwZuYiTrfDX0wuhGBPV0pA/zCqcOq93MDssON/baIkpYbvehIX5aLpMxrRhaA==", "engines": { - "node": ">= 0.4" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/@ui5/cli/node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" - }, - "node_modules/@ui5/cli/node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/@ui5/cli/node_modules/on-headers": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", - "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", - "engines": { - "node": ">= 0.8" + "url": "https://github.com/sindresorhus/ky?sponsor=1" } }, - "node_modules/@ui5/cli/node_modules/open": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", - "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "node_modules/@ui5/cli/node_modules/latest-version": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-9.0.0.tgz", + "integrity": "sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==", "dependencies": { - "default-browser": "^5.2.1", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "wsl-utils": "^0.1.0" + "package-json": "^10.0.0" }, "engines": { "node": ">=18" @@ -4641,103 +5131,84 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/@ui5/cli/node_modules/less-openui5": { + "version": "0.11.6", + "resolved": "https://registry.npmjs.org/less-openui5/-/less-openui5-0.11.6.tgz", + "integrity": "sha512-sQmU+G2pJjFfzRI+XtXkk+T9G0s6UmWWUfOW0utPR46C9lfhNr4DH1lNJuImj64reXYi+vOwyNxPRkj0F3mofA==", "dependencies": { - "p-try": "^2.0.0" + "@adobe/css-tools": "^4.0.2", + "clone": "^2.1.2", + "mime": "^1.6.0" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 10", + "npm": ">= 5" } }, - "node_modules/@ui5/cli/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/@ui5/cli/node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" + "uc.micro": "^2.0.0" } }, - "node_modules/@ui5/cli/node_modules/p-map": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", - "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==", - "engines": { - "node": ">=18" + "node_modules/@ui5/cli/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@ui5/cli/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/@ui5/cli/node_modules/package-json": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-10.0.1.tgz", - "integrity": "sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==", + "node_modules/@ui5/cli/node_modules/lockfile": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.4.tgz", + "integrity": "sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA==", "dependencies": { - "ky": "^1.2.0", - "registry-auth-token": "^5.0.2", - "registry-url": "^6.0.1", - "semver": "^7.6.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "signal-exit": "^3.0.2" } }, - "node_modules/@ui5/cli/node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" + "node_modules/@ui5/cli/node_modules/lockfile/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, - "node_modules/@ui5/cli/node_modules/pacote": { - "version": "19.0.1", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-19.0.1.tgz", - "integrity": "sha512-zIpxWAsr/BvhrkSruspG8aqCQUUrWtpwx0GjiRZQhEM/pZXrigA32ElN3vTcCPUDOFmHr6SFxwYrvVUs5NTEUg==", + "node_modules/@ui5/cli/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/@ui5/cli/node_modules/lodash.isfinite": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", + "integrity": "sha512-7FGG40uhC8Mm633uKW1r58aElFlBlxCrg9JfSi3P6aYiWmfiWF0PgMd86ZUsxE5GwWPdHoS2+48bwTh2VPkIQA==" + }, + "node_modules/@ui5/cli/node_modules/make-fetch-happen": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-14.0.3.tgz", + "integrity": "sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==", "dependencies": { - "@npmcli/git": "^6.0.0", - "@npmcli/installed-package-contents": "^3.0.0", - "@npmcli/package-json": "^6.0.0", - "@npmcli/promise-spawn": "^8.0.0", - "@npmcli/run-script": "^9.0.0", - "cacache": "^19.0.0", - "fs-minipass": "^3.0.0", + "@npmcli/agent": "^3.0.0", + "cacache": "^19.0.1", + "http-cache-semantics": "^4.1.1", "minipass": "^7.0.2", - "npm-package-arg": "^12.0.0", - "npm-packlist": "^9.0.0", - "npm-pick-manifest": "^10.0.0", - "npm-registry-fetch": "^18.0.0", + "minipass-fetch": "^4.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^1.0.0", "proc-log": "^5.0.0", "promise-retry": "^2.0.1", - "sigstore": "^3.0.0", - "ssri": "^12.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "bin/index.js" + "ssri": "^12.0.0" }, "engines": { "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/pacote/node_modules/@npmcli/fs": { + "node_modules/@ui5/cli/node_modules/make-fetch-happen/node_modules/@npmcli/fs": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz", "integrity": "sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==", @@ -4748,54 +5219,7 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/pacote/node_modules/@npmcli/installed-package-contents": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-3.0.0.tgz", - "integrity": "sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q==", - "dependencies": { - "npm-bundled": "^4.0.0", - "npm-normalize-package-bin": "^4.0.0" - }, - "bin": { - "installed-package-contents": "bin/index.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@ui5/cli/node_modules/pacote/node_modules/@npmcli/node-gyp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-4.0.0.tgz", - "integrity": "sha512-+t5DZ6mO/QFh78PByMq1fGSAub/agLJZDRfJRMeOSNCt8s9YVlTjmGpIPwPhvXTGUIJk+WszlT0rQa1W33yzNA==", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@ui5/cli/node_modules/pacote/node_modules/@npmcli/redact": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-3.2.2.tgz", - "integrity": "sha512-7VmYAmk4csGv08QzrDKScdzn11jHPFGyqJW39FyPgPuAp3zIaUmuCo1yxw9aGs+NEJuTGQ9Gwqpt93vtJubucg==", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@ui5/cli/node_modules/pacote/node_modules/@npmcli/run-script": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-9.1.0.tgz", - "integrity": "sha512-aoNSbxtkePXUlbZB+anS1LqsJdctG5n3UVhfU47+CDdwMi6uNTBMF9gPcQRnqghQd2FGzcwwIFBruFMxjhBewg==", - "dependencies": { - "@npmcli/node-gyp": "^4.0.0", - "@npmcli/package-json": "^6.0.0", - "@npmcli/promise-spawn": "^8.0.0", - "node-gyp": "^11.0.0", - "proc-log": "^5.0.0", - "which": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@ui5/cli/node_modules/pacote/node_modules/cacache": { + "node_modules/@ui5/cli/node_modules/make-fetch-happen/node_modules/cacache": { "version": "19.0.1", "resolved": "https://registry.npmjs.org/cacache/-/cacache-19.0.1.tgz", "integrity": "sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==", @@ -4817,200 +5241,260 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/pacote/node_modules/cacache/node_modules/mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, + "node_modules/@ui5/cli/node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "node_modules/@ui5/cli/node_modules/make-fetch-happen/node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", "engines": { - "node": ">=10" + "node": ">= 0.6" + } + }, + "node_modules/@ui5/cli/node_modules/make-fetch-happen/node_modules/ssri": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-12.0.0.tgz", + "integrity": "sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==", + "dependencies": { + "minipass": "^7.0.3" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/pacote/node_modules/cacache/node_modules/tar": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", - "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "node_modules/@ui5/cli/node_modules/make-fetch-happen/node_modules/unique-filename": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-4.0.0.tgz", + "integrity": "sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==", "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", - "yallist": "^5.0.0" + "unique-slug": "^5.0.0" }, "engines": { - "node": ">=18" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/pacote/node_modules/cacache/node_modules/yallist": { + "node_modules/@ui5/cli/node_modules/make-fetch-happen/node_modules/unique-slug": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-5.0.0.tgz", + "integrity": "sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==", + "dependencies": { + "imurmurhash": "^0.1.4" + }, "engines": { - "node": ">=18" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/pacote/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" - }, - "node_modules/@ui5/cli/node_modules/pacote/node_modules/node-gyp": { - "version": "11.4.2", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.4.2.tgz", - "integrity": "sha512-3gD+6zsrLQH7DyYOUIutaauuXrcyxeTPyQuZQCQoNPZMHMMS5m4y0xclNpvYzoK3VNzuyxT6eF4mkIL4WSZ1eQ==", + "node_modules/@ui5/cli/node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^14.0.3", - "nopt": "^8.0.0", - "proc-log": "^5.0.0", - "semver": "^7.3.5", - "tar": "^7.4.3", - "tinyglobby": "^0.2.12", - "which": "^5.0.0" + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" }, "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" + "markdown-it": "bin/markdown-it.mjs" } }, - "node_modules/@ui5/cli/node_modules/pacote/node_modules/node-gyp/node_modules/mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "node_modules/@ui5/cli/node_modules/markdown-it-anchor": { + "version": "8.6.7", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", + "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", + "peerDependencies": { + "@types/markdown-it": "*", + "markdown-it": "*" + } + }, + "node_modules/@ui5/cli/node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", "bin": { - "mkdirp": "dist/cjs/src/bin.js" + "marked": "bin/marked.js" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 12" } }, - "node_modules/@ui5/cli/node_modules/pacote/node_modules/node-gyp/node_modules/tar": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", - "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", - "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", - "yallist": "^5.0.0" - }, + "node_modules/@ui5/cli/node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "engines": { - "node": ">=18" + "node": ">= 0.4" } }, - "node_modules/@ui5/cli/node_modules/pacote/node_modules/node-gyp/node_modules/yallist": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "node_modules/@ui5/cli/node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==" + }, + "node_modules/@ui5/cli/node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "engines": { - "node": ">=18" + "node": ">= 0.6" } }, - "node_modules/@ui5/cli/node_modules/pacote/node_modules/npm-bundled": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-4.0.0.tgz", - "integrity": "sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA==", - "dependencies": { - "npm-normalize-package-bin": "^4.0.0" - }, + "node_modules/@ui5/cli/node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ui5/cli/node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">= 8" } }, - "node_modules/@ui5/cli/node_modules/pacote/node_modules/npm-normalize-package-bin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz", - "integrity": "sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==", + "node_modules/@ui5/cli/node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">= 0.6" } }, - "node_modules/@ui5/cli/node_modules/pacote/node_modules/npm-package-arg": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-12.0.2.tgz", - "integrity": "sha512-f1NpFjNI9O4VbKMOlA5QoBq/vSQPORHcTZ2feJpFkTHJ9eQkdlmZEKSjcAhxTGInC7RlEyScT9ui67NaOsjFWA==", + "node_modules/@ui5/cli/node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dependencies": { - "hosted-git-info": "^8.0.0", - "proc-log": "^5.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^6.0.0" + "braces": "^3.0.3", + "picomatch": "^2.3.1" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=8.6" } }, - "node_modules/@ui5/cli/node_modules/pacote/node_modules/npm-registry-fetch": { - "version": "18.0.2", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-18.0.2.tgz", - "integrity": "sha512-LeVMZBBVy+oQb5R6FDV9OlJCcWDU+al10oKpe+nsvcHnG24Z3uM3SvJYKfGJlfGjVU8v9liejCrUR/M5HO5NEQ==", - "dependencies": { - "@npmcli/redact": "^3.0.0", - "jsonparse": "^1.3.1", - "make-fetch-happen": "^14.0.0", - "minipass": "^7.0.2", - "minipass-fetch": "^4.0.0", - "minizlib": "^3.0.1", - "npm-package-arg": "^12.0.0", - "proc-log": "^5.0.0" + "node_modules/@ui5/cli/node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@ui5/cli/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=4" } }, - "node_modules/@ui5/cli/node_modules/pacote/node_modules/ssri": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-12.0.0.tgz", - "integrity": "sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==", + "node_modules/@ui5/cli/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@ui5/cli/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dependencies": { - "minipass": "^7.0.3" + "mime-db": "1.52.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">= 0.6" } }, - "node_modules/@ui5/cli/node_modules/pacote/node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "node_modules/@ui5/cli/node_modules/mime-types/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@ui5/cli/node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/@ui5/cli/node_modules/minimatch": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", + "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "@isaacs/brace-expansion": "^5.0.0" }, "engines": { - "node": ">=10" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@ui5/cli/node_modules/pacote/node_modules/tar/node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "node_modules/@ui5/cli/node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@ui5/cli/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/@ui5/cli/node_modules/pacote/node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "node_modules/@ui5/cli/node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@ui5/cli/node_modules/minipass-fetch": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-4.0.1.tgz", + "integrity": "sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ==", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^3.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/@ui5/cli/node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "dependencies": { "minipass": "^3.0.0" }, @@ -5018,7 +5502,7 @@ "node": ">= 8" } }, - "node_modules/@ui5/cli/node_modules/pacote/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "node_modules/@ui5/cli/node_modules/minipass-flush/node_modules/minipass": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", @@ -5029,27 +5513,23 @@ "node": ">=8" } }, - "node_modules/@ui5/cli/node_modules/pacote/node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "engines": { - "node": ">=8" - } + "node_modules/@ui5/cli/node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, - "node_modules/@ui5/cli/node_modules/pacote/node_modules/tar/node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "node_modules/@ui5/cli/node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" + "minipass": "^3.0.0" }, "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/@ui5/cli/node_modules/pacote/node_modules/tar/node_modules/minizlib/node_modules/minipass": { + "node_modules/@ui5/cli/node_modules/minipass-pipeline/node_modules/minipass": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", @@ -5060,1120 +5540,3331 @@ "node": ">=8" } }, - "node_modules/@ui5/cli/node_modules/pacote/node_modules/unique-filename": { + "node_modules/@ui5/cli/node_modules/minipass-pipeline/node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-4.0.0.tgz", - "integrity": "sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/@ui5/cli/node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", "dependencies": { - "unique-slug": "^5.0.0" + "minipass": "^3.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=8" } }, - "node_modules/@ui5/cli/node_modules/pacote/node_modules/unique-slug": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-5.0.0.tgz", - "integrity": "sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==", + "node_modules/@ui5/cli/node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dependencies": { - "imurmurhash": "^0.1.4" + "yallist": "^4.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@ui5/cli/node_modules/pacote/node_modules/validate-npm-package-name": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-6.0.2.tgz", - "integrity": "sha512-IUoow1YUtvoBBC06dXs8bR8B9vuA3aJfmQNKMoaPG/OFsPmoQvw8xh+6Ye25Gx9DQhoEom3Pcu9MKHerm/NpUQ==", - "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=8" } }, - "node_modules/@ui5/cli/node_modules/pacote/node_modules/yallist": { + "node_modules/@ui5/cli/node_modules/minipass-sized/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, - "node_modules/@ui5/cli/node_modules/parse5": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", - "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "node_modules/@ui5/cli/node_modules/minizlib": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", + "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", "dependencies": { - "entities": "^6.0.0" + "minipass": "^7.1.2" }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "engines": { + "node": ">= 18" } }, - "node_modules/@ui5/cli/node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", - "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", - "dependencies": { - "domhandler": "^5.0.3", - "parse5": "^7.0.0" + "node_modules/@ui5/cli/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "engines": { + "node": ">=10" } }, - "node_modules/@ui5/cli/node_modules/parse5-parser-stream": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", - "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", - "dependencies": { - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "node_modules/@ui5/cli/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/@ui5/cli/node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "engines": { + "node": ">= 0.6" } }, - "node_modules/@ui5/cli/node_modules/parse5/node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "node_modules/@ui5/cli/node_modules/node-stream-zip": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz", + "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==", "engines": { - "node": ">=0.12" + "node": ">=0.12.0" }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/antelle" } }, - "node_modules/@ui5/cli/node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/@ui5/cli/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/@ui5/cli/node_modules/nopt": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", + "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", + "dependencies": { + "abbrev": "^3.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, "engines": { - "node": ">=8" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/@ui5/cli/node_modules/normalize-package-data": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", + "dependencies": { + "hosted-git-info": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, "engines": { - "node": ">=8" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@ui5/cli/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==" - }, - "node_modules/@ui5/cli/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "node_modules/@ui5/cli/node_modules/normalize-package-data/node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "lru-cache": "^10.0.1" }, "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@ui5/cli/node_modules/path-scurry/node_modules/lru-cache": { + "node_modules/@ui5/cli/node_modules/normalize-package-data/node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" }, - "node_modules/@ui5/cli/node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==" - }, - "node_modules/@ui5/cli/node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" - }, - "node_modules/@ui5/cli/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "engines": { - "node": ">=12" + "node_modules/@ui5/cli/node_modules/npm-packlist": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-9.0.0.tgz", + "integrity": "sha512-8qSayfmHJQTx3nJWYbbUmflpyarbLMBc6LCAjYsiGtXxDB68HaZpb8re6zeaLGxZzDuMdhsg70jryJe+RrItVQ==", + "dependencies": { + "ignore-walk": "^7.0.0" }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/portscanner": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz", - "integrity": "sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==", + "node_modules/@ui5/cli/node_modules/npm-pick-manifest": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-10.0.0.tgz", + "integrity": "sha512-r4fFa4FqYY8xaM7fHecQ9Z2nE9hgNfJR+EmoKv0+chvzWkBcORX3r0FpTByP+CbOVJDladMXnPQGVN8PBLGuTQ==", "dependencies": { - "async": "^2.6.0", - "is-number-like": "^1.0.3" + "npm-install-checks": "^7.1.0", + "npm-normalize-package-bin": "^4.0.0", + "npm-package-arg": "^12.0.0", + "semver": "^7.3.5" }, "engines": { - "node": ">=0.4", - "npm": ">=1.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/pretty-data": { - "version": "0.40.0", - "resolved": "https://registry.npmjs.org/pretty-data/-/pretty-data-0.40.0.tgz", - "integrity": "sha512-YFLnEdDEDnkt/GEhet5CYZHCvALw6+Elyb/tp8kQG03ZSIuzeaDWpZYndCXwgqu4NAjh1PI534dhDS1mHarRnQ==", + "node_modules/@ui5/cli/node_modules/npm-pick-manifest/node_modules/npm-install-checks": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-7.1.2.tgz", + "integrity": "sha512-z9HJBCYw9Zr8BqXcllKIs5nI+QggAImbBdHphOzVYrz2CB4iQ6FzWyKmlqDZua+51nAu7FcemlbTc9VgQN5XDQ==", + "dependencies": { + "semver": "^7.1.1" + }, "engines": { - "node": "*" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", + "node_modules/@ui5/cli/node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz", + "integrity": "sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==", "engines": { - "node": ">= 0.8" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/proc-log": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz", - "integrity": "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==", + "node_modules/@ui5/cli/node_modules/npm-pick-manifest/node_modules/npm-package-arg": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-12.0.2.tgz", + "integrity": "sha512-f1NpFjNI9O4VbKMOlA5QoBq/vSQPORHcTZ2feJpFkTHJ9eQkdlmZEKSjcAhxTGInC7RlEyScT9ui67NaOsjFWA==", + "dependencies": { + "hosted-git-info": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^6.0.0" + }, "engines": { "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "node_modules/@ui5/cli/node_modules/npm-pick-manifest/node_modules/validate-npm-package-name": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-6.0.2.tgz", + "integrity": "sha512-IUoow1YUtvoBBC06dXs8bR8B9vuA3aJfmQNKMoaPG/OFsPmoQvw8xh+6Ye25Gx9DQhoEom3Pcu9MKHerm/NpUQ==", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } }, - "node_modules/@ui5/cli/node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "node_modules/@ui5/cli/node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" + "boolbase": "^1.0.0" }, - "engines": { - "node": ">=10" + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/@ui5/cli/node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" + "node_modules/@ui5/cli/node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/@ui5/cli/node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, + "node_modules/@ui5/cli/node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "engines": { - "node": ">= 0.10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@ui5/cli/node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "node_modules/@ui5/cli/node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + }, + "node_modules/@ui5/cli/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, "engines": { - "node": ">=6" + "node": ">= 0.8" } }, - "node_modules/@ui5/cli/node_modules/punycode.js": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", - "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "node_modules/@ui5/cli/node_modules/on-headers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", "engines": { - "node": ">=6" + "node": ">= 0.8" } }, - "node_modules/@ui5/cli/node_modules/pupa": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz", - "integrity": "sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==", + "node_modules/@ui5/cli/node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", "dependencies": { - "escape-goat": "^4.0.0" + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" }, "engines": { - "node": ">=12.20" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "node_modules/@ui5/cli/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dependencies": { - "side-channel": "^1.0.6" + "p-try": "^2.0.0" }, "engines": { - "node": ">=0.6" + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "node_modules/@ui5/cli/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/@ui5/cli/node_modules/random-int": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/random-int/-/random-int-3.0.0.tgz", - "integrity": "sha512-QvewnOwigesW2WFyTHiQzR6XUUcSQO/BqmfgRz5N5GpGrKQnTf7ebMz8UtuwaET8IfO1n0wLx8/fHsI8E0Jpow==", + "node_modules/@ui5/cli/node_modules/p-map": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", + "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==", "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "node_modules/@ui5/cli/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "engines": { - "node": ">= 0.6" + "node": ">=6" } }, - "node_modules/@ui5/cli/node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "node_modules/@ui5/cli/node_modules/package-json": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-10.0.1.tgz", + "integrity": "sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "ky": "^1.2.0", + "registry-auth-token": "^5.0.2", + "registry-url": "^6.0.1", + "semver": "^7.6.0" }, "engines": { - "node": ">= 0.8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "node_modules/@ui5/cli/node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" + }, + "node_modules/@ui5/cli/node_modules/pacote": { + "version": "19.0.1", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-19.0.1.tgz", + "integrity": "sha512-zIpxWAsr/BvhrkSruspG8aqCQUUrWtpwx0GjiRZQhEM/pZXrigA32ElN3vTcCPUDOFmHr6SFxwYrvVUs5NTEUg==", "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "@npmcli/git": "^6.0.0", + "@npmcli/installed-package-contents": "^3.0.0", + "@npmcli/package-json": "^6.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "@npmcli/run-script": "^9.0.0", + "cacache": "^19.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^12.0.0", + "npm-packlist": "^9.0.0", + "npm-pick-manifest": "^10.0.0", + "npm-registry-fetch": "^18.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "sigstore": "^3.0.0", + "ssri": "^12.0.0", + "tar": "^6.1.11" }, "bin": { - "rc": "cli.js" + "pacote": "bin/index.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/rc/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/@ui5/cli/node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "node_modules/@ui5/cli/node_modules/pacote/node_modules/@npmcli/fs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz", + "integrity": "sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==", + "dependencies": { + "semver": "^7.3.5" + }, "engines": { - "node": ">=0.10.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/read-package-up": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-11.0.0.tgz", - "integrity": "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==", + "node_modules/@ui5/cli/node_modules/pacote/node_modules/@npmcli/installed-package-contents": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-3.0.0.tgz", + "integrity": "sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q==", "dependencies": { - "find-up-simple": "^1.0.0", - "read-pkg": "^9.0.0", - "type-fest": "^4.6.0" + "npm-bundled": "^4.0.0", + "npm-normalize-package-bin": "^4.0.0" }, - "engines": { - "node": ">=18" + "bin": { + "installed-package-contents": "bin/index.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/read-package-up/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "node_modules/@ui5/cli/node_modules/pacote/node_modules/@npmcli/node-gyp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-4.0.0.tgz", + "integrity": "sha512-+t5DZ6mO/QFh78PByMq1fGSAub/agLJZDRfJRMeOSNCt8s9YVlTjmGpIPwPhvXTGUIJk+WszlT0rQa1W33yzNA==", "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/read-pkg": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz", - "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==", - "dependencies": { - "@types/normalize-package-data": "^2.4.3", - "normalize-package-data": "^6.0.0", - "parse-json": "^8.0.0", - "type-fest": "^4.6.0", - "unicorn-magic": "^0.1.0" - }, + "node_modules/@ui5/cli/node_modules/pacote/node_modules/@npmcli/redact": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-3.2.2.tgz", + "integrity": "sha512-7VmYAmk4csGv08QzrDKScdzn11jHPFGyqJW39FyPgPuAp3zIaUmuCo1yxw9aGs+NEJuTGQ9Gwqpt93vtJubucg==", "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/read-pkg/node_modules/parse-json": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", - "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", + "node_modules/@ui5/cli/node_modules/pacote/node_modules/@npmcli/run-script": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-9.1.0.tgz", + "integrity": "sha512-aoNSbxtkePXUlbZB+anS1LqsJdctG5n3UVhfU47+CDdwMi6uNTBMF9gPcQRnqghQd2FGzcwwIFBruFMxjhBewg==", "dependencies": { - "@babel/code-frame": "^7.26.2", - "index-to-position": "^1.1.0", - "type-fest": "^4.39.1" + "@npmcli/node-gyp": "^4.0.0", + "@npmcli/package-json": "^6.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "node-gyp": "^11.0.0", + "proc-log": "^5.0.0", + "which": "^5.0.0" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/read-pkg/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", - "engines": { - "node": ">=16" + "node_modules/@ui5/cli/node_modules/pacote/node_modules/cacache": { + "version": "19.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-19.0.1.tgz", + "integrity": "sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==", + "dependencies": { + "@npmcli/fs": "^4.0.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^7.0.2", + "ssri": "^12.0.0", + "tar": "^7.4.3", + "unique-filename": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/read-pkg/node_modules/unicorn-magic": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", - "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "node_modules/@ui5/cli/node_modules/pacote/node_modules/cacache/node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, "engines": { - "node": ">=18" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@ui5/cli/node_modules/registry-auth-token": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.0.tgz", - "integrity": "sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==", + "node_modules/@ui5/cli/node_modules/pacote/node_modules/cacache/node_modules/tar": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", "dependencies": { - "@pnpm/npm-conf": "^2.1.0" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" }, "engines": { - "node": ">=14" + "node": ">=18" } }, - "node_modules/@ui5/cli/node_modules/registry-url": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", - "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", + "node_modules/@ui5/cli/node_modules/pacote/node_modules/cacache/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "engines": { + "node": ">=18" + } + }, + "node_modules/@ui5/cli/node_modules/pacote/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "node_modules/@ui5/cli/node_modules/pacote/node_modules/node-gyp": { + "version": "11.4.2", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.4.2.tgz", + "integrity": "sha512-3gD+6zsrLQH7DyYOUIutaauuXrcyxeTPyQuZQCQoNPZMHMMS5m4y0xclNpvYzoK3VNzuyxT6eF4mkIL4WSZ1eQ==", "dependencies": { - "rc": "1.2.8" + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^14.0.3", + "nopt": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "tar": "^7.4.3", + "tinyglobby": "^0.2.12", + "which": "^5.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": ">=12" + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@ui5/cli/node_modules/pacote/node_modules/node-gyp/node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@ui5/cli/node_modules/replacestream": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/replacestream/-/replacestream-4.0.3.tgz", - "integrity": "sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA==", + "node_modules/@ui5/cli/node_modules/pacote/node_modules/node-gyp/node_modules/tar": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", "dependencies": { - "escape-string-regexp": "^1.0.3", - "object-assign": "^4.0.1", - "readable-stream": "^2.0.2" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" } }, - "node_modules/@ui5/cli/node_modules/replacestream/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/@ui5/cli/node_modules/pacote/node_modules/node-gyp/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", "engines": { - "node": ">=0.8.0" + "node": ">=18" } }, - "node_modules/@ui5/cli/node_modules/replacestream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "node_modules/@ui5/cli/node_modules/pacote/node_modules/npm-bundled": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-4.0.0.tgz", + "integrity": "sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA==", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "npm-normalize-package-bin": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/replacestream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "node_modules/@ui5/cli/node_modules/pacote/node_modules/npm-normalize-package-bin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz", + "integrity": "sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } }, - "node_modules/@ui5/cli/node_modules/replacestream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/@ui5/cli/node_modules/pacote/node_modules/npm-package-arg": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-12.0.2.tgz", + "integrity": "sha512-f1NpFjNI9O4VbKMOlA5QoBq/vSQPORHcTZ2feJpFkTHJ9eQkdlmZEKSjcAhxTGInC7RlEyScT9ui67NaOsjFWA==", "dependencies": { - "safe-buffer": "~5.1.0" + "hosted-git-info": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^6.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "node_modules/@ui5/cli/node_modules/pacote/node_modules/npm-registry-fetch": { + "version": "18.0.2", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-18.0.2.tgz", + "integrity": "sha512-LeVMZBBVy+oQb5R6FDV9OlJCcWDU+al10oKpe+nsvcHnG24Z3uM3SvJYKfGJlfGjVU8v9liejCrUR/M5HO5NEQ==", + "dependencies": { + "@npmcli/redact": "^3.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^14.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", + "minizlib": "^3.0.1", + "npm-package-arg": "^12.0.0", + "proc-log": "^5.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/requizzle": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", - "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==", + "node_modules/@ui5/cli/node_modules/pacote/node_modules/ssri": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-12.0.0.tgz", + "integrity": "sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==", "dependencies": { - "lodash": "^4.17.21" + "minipass": "^7.0.3" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "node_modules/@ui5/cli/node_modules/pacote/node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" + } + }, + "node_modules/@ui5/cli/node_modules/pacote/node_modules/tar/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@ui5/cli/node_modules/pacote/node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 8" } }, - "node_modules/@ui5/cli/node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "node_modules/@ui5/cli/node_modules/pacote/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dependencies": { - "resolve-from": "^5.0.0" + "yallist": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/@ui5/cli/node_modules/resolve-from": { + "node_modules/@ui5/cli/node_modules/pacote/node_modules/tar/node_modules/minipass": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "engines": { "node": ">=8" } }, - "node_modules/@ui5/cli/node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "node_modules/@ui5/cli/node_modules/pacote/node_modules/tar/node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, "engines": { - "node": ">= 4" + "node": ">= 8" } }, - "node_modules/@ui5/cli/node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "node_modules/@ui5/cli/node_modules/pacote/node_modules/tar/node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/@ui5/cli/node_modules/router": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", - "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "node_modules/@ui5/cli/node_modules/pacote/node_modules/unique-filename": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-4.0.0.tgz", + "integrity": "sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==", "dependencies": { - "debug": "^4.4.0", - "depd": "^2.0.0", - "is-promise": "^4.0.0", - "parseurl": "^1.3.3", - "path-to-regexp": "^8.0.0" + "unique-slug": "^5.0.0" }, "engines": { - "node": ">= 18" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/router/node_modules/path-to-regexp": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", - "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "node_modules/@ui5/cli/node_modules/pacote/node_modules/unique-slug": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-5.0.0.tgz", + "integrity": "sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/run-applescript": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", - "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "node_modules/@ui5/cli/node_modules/pacote/node_modules/validate-npm-package-name": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-6.0.2.tgz", + "integrity": "sha512-IUoow1YUtvoBBC06dXs8bR8B9vuA3aJfmQNKMoaPG/OFsPmoQvw8xh+6Ye25Gx9DQhoEom3Pcu9MKHerm/NpUQ==", "engines": { - "node": ">=18" + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@ui5/cli/node_modules/pacote/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/@ui5/cli/node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dependencies": { + "entities": "^6.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/@ui5/cli/node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/@ui5/cli/node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", + "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", "dependencies": { - "queue-microtask": "^1.2.2" + "domhandler": "^5.0.3", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/@ui5/cli/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "node_modules/@ui5/cli/node_modules/parse5-parser-stream": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", + "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", + "dependencies": { + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } }, - "node_modules/@ui5/cli/node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "node_modules/@ui5/cli/node_modules/parse5/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } }, - "node_modules/@ui5/cli/node_modules/sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==" + "node_modules/@ui5/cli/node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } }, - "node_modules/@ui5/cli/node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" + "node_modules/@ui5/cli/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } }, - "node_modules/@ui5/cli/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "bin": { - "semver": "bin/semver.js" - }, + "node_modules/@ui5/cli/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/@ui5/cli/node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "node_modules/@ui5/cli/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==" + }, + "node_modules/@ui5/cli/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@ui5/cli/node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/@ui5/cli/node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "node_modules/@ui5/cli/node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==" + }, + "node_modules/@ui5/cli/node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + }, + "node_modules/@ui5/cli/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@ui5/cli/node_modules/portscanner": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz", + "integrity": "sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==", "dependencies": { - "ms": "2.0.0" + "async": "^2.6.0", + "is-number-like": "^1.0.3" + }, + "engines": { + "node": ">=0.4", + "npm": ">=1.0.0" } }, - "node_modules/@ui5/cli/node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "node_modules/@ui5/cli/node_modules/pretty-data": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/pretty-data/-/pretty-data-0.40.0.tgz", + "integrity": "sha512-YFLnEdDEDnkt/GEhet5CYZHCvALw6+Elyb/tp8kQG03ZSIuzeaDWpZYndCXwgqu4NAjh1PI534dhDS1mHarRnQ==", + "engines": { + "node": "*" + } }, - "node_modules/@ui5/cli/node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "node_modules/@ui5/cli/node_modules/pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", "engines": { "node": ">= 0.8" } }, - "node_modules/@ui5/cli/node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "node_modules/@ui5/cli/node_modules/proc-log": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz", + "integrity": "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@ui5/cli/node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/@ui5/cli/node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@ui5/cli/node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" + }, + "node_modules/@ui5/cli/node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/@ui5/cli/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@ui5/cli/node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@ui5/cli/node_modules/pupa": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz", + "integrity": "sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==", + "dependencies": { + "escape-goat": "^4.0.0" + }, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ui5/cli/node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@ui5/cli/node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/@ui5/cli/node_modules/random-int": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/random-int/-/random-int-3.0.0.tgz", + "integrity": "sha512-QvewnOwigesW2WFyTHiQzR6XUUcSQO/BqmfgRz5N5GpGrKQnTf7ebMz8UtuwaET8IfO1n0wLx8/fHsI8E0Jpow==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ui5/cli/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@ui5/cli/node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@ui5/cli/node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/@ui5/cli/node_modules/rc/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/@ui5/cli/node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ui5/cli/node_modules/read-package-up": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-11.0.0.tgz", + "integrity": "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==", + "dependencies": { + "find-up-simple": "^1.0.0", + "read-pkg": "^9.0.0", + "type-fest": "^4.6.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ui5/cli/node_modules/read-package-up/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ui5/cli/node_modules/read-pkg": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz", + "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==", + "dependencies": { + "@types/normalize-package-data": "^2.4.3", + "normalize-package-data": "^6.0.0", + "parse-json": "^8.0.0", + "type-fest": "^4.6.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ui5/cli/node_modules/read-pkg/node_modules/parse-json": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", + "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "index-to-position": "^1.1.0", + "type-fest": "^4.39.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ui5/cli/node_modules/read-pkg/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ui5/cli/node_modules/read-pkg/node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ui5/cli/node_modules/registry-auth-token": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.0.tgz", + "integrity": "sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==", + "dependencies": { + "@pnpm/npm-conf": "^2.1.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ui5/cli/node_modules/registry-url": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", + "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", + "dependencies": { + "rc": "1.2.8" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ui5/cli/node_modules/replacestream": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/replacestream/-/replacestream-4.0.3.tgz", + "integrity": "sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA==", + "dependencies": { + "escape-string-regexp": "^1.0.3", + "object-assign": "^4.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/@ui5/cli/node_modules/replacestream/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@ui5/cli/node_modules/replacestream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/@ui5/cli/node_modules/replacestream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/@ui5/cli/node_modules/replacestream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/@ui5/cli/node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ui5/cli/node_modules/requizzle": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", + "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==", + "dependencies": { + "lodash": "^4.17.21" + } + }, + "node_modules/@ui5/cli/node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@ui5/cli/node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@ui5/cli/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@ui5/cli/node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@ui5/cli/node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/@ui5/cli/node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@ui5/cli/node_modules/router/node_modules/path-to-regexp": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", + "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@ui5/cli/node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ui5/cli/node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/@ui5/cli/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/@ui5/cli/node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/@ui5/cli/node_modules/sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==" + }, + "node_modules/@ui5/cli/node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" + }, + "node_modules/@ui5/cli/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@ui5/cli/node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@ui5/cli/node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@ui5/cli/node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/@ui5/cli/node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@ui5/cli/node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@ui5/cli/node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/@ui5/cli/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@ui5/cli/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@ui5/cli/node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@ui5/cli/node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@ui5/cli/node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@ui5/cli/node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@ui5/cli/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@ui5/cli/node_modules/sigstore": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-3.1.0.tgz", + "integrity": "sha512-ZpzWAFHIFqyFE56dXqgX/DkDRZdz+rRcjoIk/RQU4IX0wiCv1l8S7ZrXDHcCc+uaf+6o7w3h2l3g6GYG5TKN9Q==", + "dependencies": { + "@sigstore/bundle": "^3.1.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.4.0", + "@sigstore/sign": "^3.1.0", + "@sigstore/tuf": "^3.1.0", + "@sigstore/verify": "^2.1.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@ui5/cli/node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ui5/cli/node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/@ui5/cli/node_modules/socks": { + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", + "dependencies": { + "ip-address": "^10.0.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/@ui5/cli/node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@ui5/cli/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ui5/cli/node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/@ui5/cli/node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/@ui5/cli/node_modules/spdx-correct/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/@ui5/cli/node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==" + }, + "node_modules/@ui5/cli/node_modules/spdx-license-ids": { + "version": "3.0.22", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", + "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==" + }, + "node_modules/@ui5/cli/node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@ui5/cli/node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/@ui5/cli/node_modules/spdy-transport/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@ui5/cli/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@ui5/cli/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/@ui5/cli/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@ui5/cli/node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@ui5/cli/node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@ui5/cli/node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@ui5/cli/node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@ui5/cli/node_modules/string-width/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@ui5/cli/node_modules/string-width/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@ui5/cli/node_modules/string-width/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@ui5/cli/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@ui5/cli/node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@ui5/cli/node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@ui5/cli/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ui5/cli/node_modules/stubborn-fs": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/stubborn-fs/-/stubborn-fs-1.2.5.tgz", + "integrity": "sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==" + }, + "node_modules/@ui5/cli/node_modules/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==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@ui5/cli/node_modules/tar": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@ui5/cli/node_modules/tar/node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@ui5/cli/node_modules/tar/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "engines": { + "node": ">=18" + } + }, + "node_modules/@ui5/cli/node_modules/terser": { + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.0.tgz", + "integrity": "sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@ui5/cli/node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/@ui5/cli/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/@ui5/cli/node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/@ui5/cli/node_modules/tuf-js": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-3.1.0.tgz", + "integrity": "sha512-3T3T04WzowbwV2FDiGXBbr81t64g1MUGGJRgT4x5o97N+8ArdhVCAF9IxFrxuSJmM3E5Asn7nKHkao0ibcZXAg==", + "dependencies": { + "@tufjs/models": "3.0.1", + "debug": "^4.4.1", + "make-fetch-happen": "^14.0.3" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@ui5/cli/node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@ui5/cli/node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==" + }, + "node_modules/@ui5/cli/node_modules/underscore": { + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", + "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==" + }, + "node_modules/@ui5/cli/node_modules/undici": { + "version": "6.21.3", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.3.tgz", + "integrity": "sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==", + "engines": { + "node": ">=18.17" + } + }, + "node_modules/@ui5/cli/node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ui5/cli/node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@ui5/cli/node_modules/update-notifier": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-7.3.1.tgz", + "integrity": "sha512-+dwUY4L35XFYEzE+OAL3sarJdUioVovq+8f7lcIJ7wnmnYQV5UD1Y/lcwaMSyaQ6Bj3JMj1XSTjZbNLHn/19yA==", + "dependencies": { + "boxen": "^8.0.1", + "chalk": "^5.3.0", + "configstore": "^7.0.0", + "is-in-ci": "^1.0.0", + "is-installed-globally": "^1.0.0", + "is-npm": "^6.0.0", + "latest-version": "^9.0.0", + "pupa": "^3.1.0", + "semver": "^7.6.3", + "xdg-basedir": "^5.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" + } + }, + "node_modules/@ui5/cli/node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/@ui5/cli/node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/@ui5/cli/node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/@ui5/cli/node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/@ui5/cli/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/@ui5/cli/node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@ui5/cli/node_modules/walk-up-path": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-3.0.1.tgz", + "integrity": "sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==" + }, + "node_modules/@ui5/cli/node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/@ui5/cli/node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@ui5/cli/node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ui5/cli/node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "engines": { + "node": ">=18" + } + }, + "node_modules/@ui5/cli/node_modules/when-exit": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/when-exit/-/when-exit-2.1.4.tgz", + "integrity": "sha512-4rnvd3A1t16PWzrBUcSDZqcAmsUIy4minDXT/CZ8F2mVDgd65i4Aalimgz1aQkRGU0iH5eT5+6Rx2TK8o443Pg==" + }, + "node_modules/@ui5/cli/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@ui5/cli/node_modules/widest-line": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz", + "integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==", + "dependencies": { + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ui5/cli/node_modules/widest-line/node_modules/emoji-regex": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.5.0.tgz", + "integrity": "sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==" + }, + "node_modules/@ui5/cli/node_modules/widest-line/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ui5/cli/node_modules/workerpool": { + "version": "9.3.4", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-9.3.4.tgz", + "integrity": "sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg==" + }, + "node_modules/@ui5/cli/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@ui5/cli/node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@ui5/cli/node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@ui5/cli/node_modules/wrap-ansi-cjs/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@ui5/cli/node_modules/wrap-ansi-cjs/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@ui5/cli/node_modules/wrap-ansi-cjs/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==" + }, + "node_modules/@ui5/cli/node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@ui5/cli/node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/@ui5/cli/node_modules/wrap-ansi/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ui5/cli/node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ui5/cli/node_modules/xdg-basedir": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", + "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ui5/cli/node_modules/xml2js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", + "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@ui5/cli/node_modules/xml2js/node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@ui5/cli/node_modules/xmlcreate": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", + "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==" + }, + "node_modules/@ui5/cli/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@ui5/cli/node_modules/yaml-ast-parser": { + "version": "0.0.43", + "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", + "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==" + }, + "node_modules/@ui5/cli/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@ui5/cli/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/@ui5/cli/node_modules/yesno": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/yesno/-/yesno-0.4.0.tgz", + "integrity": "sha512-tdBxmHvbXPBKYIg81bMCB7bVeDmHkRzk5rVJyYYXurwKkHq/MCd8rz4HSJUP7hW0H2NlXiq8IFiWvYKEHhlotA==" + }, + "node_modules/@ui5/fs": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@ui5/fs/-/fs-4.0.2.tgz", + "integrity": "sha512-0R7eb9xEMswvkN2wIiyYJtQY83evQJ7LQhTnRf5Ms0o2R29twGLP4XewqH+IoGWyT3T4SuDNTWmUU2UaTRY4zg==", + "dependencies": { + "@ui5/logger": "^4.0.1", + "clone": "^2.1.2", + "escape-string-regexp": "^5.0.0", + "globby": "^14.1.0", + "graceful-fs": "^4.2.11", + "micromatch": "^4.0.8", + "minimatch": "^10.0.3", + "pretty-hrtime": "^1.0.3", + "random-int": "^3.0.0" + }, + "engines": { + "node": "^20.11.0 || >=22.0.0", + "npm": ">= 8" + } + }, + "node_modules/@ui5/logger": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@ui5/logger/-/logger-4.0.2.tgz", + "integrity": "sha512-uscDCQyHFeenh4r2RbYuffTMn6IQdcNC1tXrQ4BF+apAFjmDGP11IHdAwVCKwxgyPrIC17HT2gub3ZugGM8kpQ==", + "dependencies": { + "chalk": "^5.6.0", + "cli-progress": "^3.12.0", + "figures": "^6.1.0" + }, + "engines": { + "node": "^20.11.0 || >=22.0.0", + "npm": ">= 8" + } + }, + "node_modules/@ui5/project": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@ui5/project/-/project-4.0.6.tgz", + "integrity": "sha512-ryopHahdKxU9GXXfEf3RNQxodHOOdqUmzrQ1uymoa3Om83BMBcURs3FQERjOP4soDbM5RiI7wEdaXX9VRvgH4w==", + "dependencies": { + "@npmcli/config": "^9.0.0", + "@ui5/fs": "^4.0.2", + "@ui5/logger": "^4.0.2", + "ajv": "^6.12.6", + "ajv-errors": "^1.0.1", + "chalk": "^5.6.2", + "escape-string-regexp": "^5.0.0", + "globby": "^14.1.0", + "graceful-fs": "^4.2.11", + "js-yaml": "^4.1.0", + "lockfile": "^1.0.4", + "make-fetch-happen": "^14.0.3", + "node-stream-zip": "^1.15.0", + "pacote": "^19.0.1", + "pretty-hrtime": "^1.0.3", + "read-package-up": "^11.0.0", + "read-pkg": "^9.0.1", + "resolve": "^1.22.10", + "semver": "^7.7.2", + "xml2js": "^0.6.2", + "yesno": "^0.4.0" + }, + "engines": { + "node": "^20.11.0 || >=22.0.0", + "npm": ">= 8" + }, + "peerDependencies": { + "@ui5/builder": "^4.0.11" + }, + "peerDependenciesMeta": { + "@ui5/builder": { + "optional": true + } + } + }, + "node_modules/@ui5/server": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@ui5/server/-/server-4.0.7.tgz", + "integrity": "sha512-bc6w/ispz8A1gnTFj3SqmA16geY6gMX8sP53enbq3YAf2HW7q5/E0/rdWj2BWlWQLW1zW/zVWCPAi6PX7lYJqQ==", + "dependencies": { + "@ui5/builder": "^4.0.11", + "@ui5/fs": "^4.0.2", + "@ui5/logger": "^4.0.2", + "body-parser": "^1.20.2", + "compression": "^1.8.1", + "cors": "^2.8.5", + "devcert-sanscache": "^0.5.1", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "express": "^4.21.2", + "fresh": "^0.5.2", + "graceful-fs": "^4.2.11", + "mime-types": "^2.1.35", + "parseurl": "^1.3.3", + "portscanner": "^2.2.0", + "replacestream": "^4.0.3", + "router": "^2.2.0", + "spdy": "^4.0.2", + "yesno": "^0.4.0" + }, + "engines": { + "node": "^20.11.0 || >=22.0.0", + "npm": ">= 8" + } + }, + "node_modules/@ui5/webcomponents": { + "version": "1.24.8", + "resolved": "https://registry.npmjs.org/@ui5/webcomponents/-/webcomponents-1.24.8.tgz", + "integrity": "sha512-lqFIcTt9wPGPluc6ok3uQ11waKceNgvL4ge8Q+l5Eg6l+WIHlg1rB+FPwY7JbONq4S0cCbMugwIgRlOhfNyVqg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@ui5/webcomponents-base": "1.24.8", + "@ui5/webcomponents-icons": "1.24.8", + "@ui5/webcomponents-icons-business-suite": "1.24.8", + "@ui5/webcomponents-icons-tnt": "1.24.8", + "@ui5/webcomponents-localization": "1.24.8", + "@ui5/webcomponents-theming": "1.24.8" + } + }, + "node_modules/@ui5/webcomponents-base": { + "version": "1.24.8", + "resolved": "https://registry.npmjs.org/@ui5/webcomponents-base/-/webcomponents-base-1.24.8.tgz", + "integrity": "sha512-sU5bHebMeIoWtm6Ul3mYsvK3uj5veRTQRUZHwc+4lv/rK/iJ4BpzoQPsHNIlKg2xwPdZJmFWfCt1PpPTAc6n6A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.1.2", + "lit-html": "^2.0.1" + } + }, + "node_modules/@ui5/webcomponents-icons": { + "version": "1.24.8", + "resolved": "https://registry.npmjs.org/@ui5/webcomponents-icons/-/webcomponents-icons-1.24.8.tgz", + "integrity": "sha512-zozw+/S68nCx1qzFbYqE+PS7xkkxFFTZAkZ5ID5O5IHlvt6egjgQL9TKx/gOC2kJtTfO5ZcCJpEToGaTDEB2ig==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@ui5/webcomponents-base": "1.24.8" + } + }, + "node_modules/@ui5/webcomponents-icons-business-suite": { + "version": "1.24.8", + "resolved": "https://registry.npmjs.org/@ui5/webcomponents-icons-business-suite/-/webcomponents-icons-business-suite-1.24.8.tgz", + "integrity": "sha512-MsmEfKNiMH2iSuyYzYAYwABJax5oBUYPytwin0vFi2181dqT7tn5ZboCHVcR6a083E22aLm1vfM58Lus96y0Tg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@ui5/webcomponents-base": "1.24.8" + } + }, + "node_modules/@ui5/webcomponents-icons-tnt": { + "version": "1.24.8", + "resolved": "https://registry.npmjs.org/@ui5/webcomponents-icons-tnt/-/webcomponents-icons-tnt-1.24.8.tgz", + "integrity": "sha512-U68ASfgYREZzJSTSI9yb0uS6ODgojHURvShUXn1fe1rVJYh7ZEBqwQfI11kxiiefKyZScJrvRHOYN44i0tXUDg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@ui5/webcomponents-base": "1.24.8" + } + }, + "node_modules/@ui5/webcomponents-localization": { + "version": "1.24.8", + "resolved": "https://registry.npmjs.org/@ui5/webcomponents-localization/-/webcomponents-localization-1.24.8.tgz", + "integrity": "sha512-SxD93MlOvTIU/Z2BLWyIy2K9RNnNE5ZvI6getBd/3g7ofumhVZ9cha4Z+8CxLBwKYva3dNXTZUgLtndVMr/4DA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/openui5": "^1.113.0", + "@ui5/webcomponents-base": "1.24.8" + } + }, + "node_modules/@ui5/webcomponents-theming": { + "version": "1.24.8", + "resolved": "https://registry.npmjs.org/@ui5/webcomponents-theming/-/webcomponents-theming-1.24.8.tgz", + "integrity": "sha512-8f5oXIb99gyPzHQJTyYvabQBJ7AQY4ufbaf9NH1ZoVei1MYxuaBh/R7JrvXAzvn/eSHQi6fDc1xJERDJhMDF0A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sap-theming/theming-base-content": "11.12.0", + "@ui5/webcomponents-base": "1.24.8" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.1.2.tgz", + "integrity": "sha512-nY9IwH12qeiJqumTCLJLE7IiNx7HZ39cbHaysEUd+Myvbz9KAqd2yq+U01Kab1R/H1BmiyM2ShTYlNH32Fzo3A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.21.tgz", + "integrity": "sha512-8i+LZ0vf6ZgII5Z9XmUvrCyEzocvWT+TeR2VBUVlzIH6Tyv57E20mPZ1bCS+tbejgUgmjrEh7q/0F0bibskAmw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.28.3", + "@vue/shared": "3.5.21", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.21.tgz", + "integrity": "sha512-jNtbu/u97wiyEBJlJ9kmdw7tAr5Vy0Aj5CgQmo+6pxWNQhXZDPsRr1UWPN4v3Zf82s2H3kF51IbzZ4jMWAgPlQ==", + "dev": true, + "dependencies": { + "@vue/compiler-core": "3.5.21", + "@vue/shared": "3.5.21" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.21.tgz", + "integrity": "sha512-SXlyk6I5eUGBd2v8Ie7tF6ADHE9kCR6mBEuPyH1nUZ0h6Xx6nZI29i12sJKQmzbDyr2tUHMhhTt51Z6blbkTTQ==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.28.3", + "@vue/compiler-core": "3.5.21", + "@vue/compiler-dom": "3.5.21", + "@vue/compiler-ssr": "3.5.21", + "@vue/shared": "3.5.21", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.18", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.21.tgz", + "integrity": "sha512-vKQ5olH5edFZdf5ZrlEgSO1j1DMA4u23TVK5XR1uMhvwnYvVdDF0nHXJUblL/GvzlShQbjhZZ2uvYmDlAbgo9w==", + "dev": true, + "dependencies": { + "@vue/compiler-dom": "3.5.21", + "@vue/shared": "3.5.21" + } + }, + "node_modules/@vue/devtools-api": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.3.8.tgz", + "integrity": "sha512-NURFwmxz4WukFU54IHgyGI2KSejdgHG5JC4xTcWmTWEBIc8aelj9fBy4qsboObGHFp3JIdRxxANO9s2wZA/pVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.3.8" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.3.8.tgz", + "integrity": "sha512-HYy3MQP1nZ6GbE4vrgJ/UB+MvZnhYmEwCa/UafrEpdpwa+jNCkz1ZdUrC5I7LpkH1ShREEV2/pZlAQdBj+ncLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^7.3.8", + "birpc": "^0.2.17", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.1" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.3.8.tgz", + "integrity": "sha512-1NiJbn7Yp47nPDWhFZyEKpB2+5/+7JYv8IQnU0ccMrgslPR2dL7u1DIyI7mLqy4HN1ll36gQy0k8GqBYSFgZJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.38.tgz", + "integrity": "sha512-4vl4wMMVniLsSYYeldAKzbk72+D3hUnkw9z8lDeJacTxAkXeDAP1uE9xr2+aKIN0ipOL8EG2GPouVTH6yF7Gnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/shared": "3.4.38" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.38.tgz", + "integrity": "sha512-21z3wA99EABtuf+O3IhdxP0iHgkBs1vuoCAsCKLVJPEjpVqvblwBnTj42vzHRlWDCyxu9ptDm7sI2ZMcWrQqlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.4.38", + "@vue/shared": "3.4.38" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.38.tgz", + "integrity": "sha512-afZzmUreU7vKwKsV17H1NDThEEmdYI+GCAK/KY1U957Ig2NATPVjCROv61R19fjZNzMmiU03n79OMnXyJVN0UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.4.38", + "@vue/runtime-core": "3.4.38", + "@vue/shared": "3.4.38", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.38.tgz", + "integrity": "sha512-NggOTr82FbPEkkUvBm4fTGcwUY8UuTsnWC/L2YZBmvaQ4C4Jl/Ao4HHTB+l7WnFCt5M/dN3l0XLuyjzswGYVCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.4.38", + "@vue/shared": "3.4.38" + }, + "peerDependencies": { + "vue": "3.4.38" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.21.tgz", + "integrity": "sha512-+2k1EQpnYuVuu3N7atWyG3/xoFWIVJZq4Mz8XNOdScFI0etES75fbny/oU4lKWk/577P1zmg0ioYvpGEDZ3DLw==", + "dev": true + }, + "node_modules/@vueuse/core": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-11.0.1.tgz", + "integrity": "sha512-YTrekI18WwEyP3h168Fir94G/HNC27wvXJI21Alm0sPOwvhihfkrvHIe+5PNJq+MpgWdRcsjvE/38JaoKrgZhQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.20", + "@vueuse/metadata": "11.0.1", + "@vueuse/shared": "11.0.1", + "vue-demi": ">=0.14.10" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/core/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@vueuse/integrations": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-11.0.1.tgz", + "integrity": "sha512-V/FQTS/aiV6RTFXOj8cXgqhtNJBvxvbHeLElOUR7N7F3Kr0btS+dkymLB54mFd0Or6uEGpgwwb41cs/q2/rdOg==", + "dev": true, + "license": "MIT", "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" + "@vueuse/core": "11.0.1", + "@vueuse/shared": "11.0.1", + "vue-demi": ">=0.14.10" }, - "engines": { - "node": ">= 0.8.0" + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "async-validator": "^4", + "axios": "^1", + "change-case": "^5", + "drauu": "^0.4", + "focus-trap": "^7", + "fuse.js": "^7", + "idb-keyval": "^6", + "jwt-decode": "^4", + "nprogress": "^0.2", + "qrcode": "^1.5", + "sortablejs": "^1", + "universal-cookie": "^7" + }, + "peerDependenciesMeta": { + "async-validator": { + "optional": true + }, + "axios": { + "optional": true + }, + "change-case": { + "optional": true + }, + "drauu": { + "optional": true + }, + "focus-trap": { + "optional": true + }, + "fuse.js": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "jwt-decode": { + "optional": true + }, + "nprogress": { + "optional": true + }, + "qrcode": { + "optional": true + }, + "sortablejs": { + "optional": true + }, + "universal-cookie": { + "optional": true + } } }, - "node_modules/@ui5/cli/node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/@ui5/cli/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" + "node_modules/@vueuse/integrations/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } } }, - "node_modules/@ui5/cli/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" + "node_modules/@vueuse/metadata": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-11.0.1.tgz", + "integrity": "sha512-dTFvuHFAjLYOiSd+t9Sk7xUiuL6jbfay/eX+g+jaipXXlwKur2VCqBCZX+jfu+2vROUGcUsdn3fJR9KkpadIOg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" } }, - "node_modules/@ui5/cli/node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "node_modules/@vueuse/shared": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-11.0.1.tgz", + "integrity": "sha512-eAPf5CQB3HR0S76HqrhjBqFYstZfiHWZq8xF9EQmobGBkrhPfErJEhr8aMNQMqd6MkENIx2pblIEfJGlHpClug==", + "dev": true, + "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" + "vue-demi": ">=0.14.10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/antfu" } }, - "node_modules/@ui5/cli/node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" + "node_modules/@vueuse/shared/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } } }, - "node_modules/@ui5/cli/node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "node_modules/@xml-tools/parser": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@xml-tools/parser/-/parser-1.0.11.tgz", + "integrity": "sha512-aKqQ077XnR+oQtHJlrAflaZaL7qZsulWc/i/ZEooar5JiWj1eLt0+Wg28cpa+XLney107wXqneC+oG1IZvxkTA==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, + "chevrotain": "7.1.1" + } + }, + "node_modules/abbrev": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", + "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" + "event-target-shim": "^5.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=6.5" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 0.6" } }, - "node_modules/@ui5/cli/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "node_modules/accepts/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 0.6" } }, - "node_modules/@ui5/cli/node_modules/sigstore": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-3.1.0.tgz", - "integrity": "sha512-ZpzWAFHIFqyFE56dXqgX/DkDRZdz+rRcjoIk/RQU4IX0wiCv1l8S7ZrXDHcCc+uaf+6o7w3h2l3g6GYG5TKN9Q==", - "dependencies": { - "@sigstore/bundle": "^3.1.0", - "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.4.0", - "@sigstore/sign": "^3.1.0", - "@sigstore/tuf": "^3.1.0", - "@sigstore/verify": "^2.1.0" + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=0.4.0" } }, - "node_modules/@ui5/cli/node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", - "engines": { - "node": ">=14.16" + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", + "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=0.4.0" } }, - "node_modules/@ui5/cli/node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" + "node": ">= 6.0.0" } }, - "node_modules/@ui5/cli/node_modules/socks": { - "version": "2.8.7", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", - "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", + "node_modules/agent-base/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, "dependencies": { - "ip-address": "^10.0.1", - "smart-buffer": "^4.2.0" + "ms": "^2.1.3" }, "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/@ui5/cli/node_modules/socks-proxy-agent": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", - "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dependencies": { - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "socks": "^2.8.3" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, - "engines": { - "node": ">= 14" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@ui5/cli/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" + "node_modules/ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "peerDependencies": { + "ajv": ">=5.0.0" } }, - "node_modules/@ui5/cli/node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "node_modules/algoliasearch": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.24.0.tgz", + "integrity": "sha512-bf0QV/9jVejssFBmz2HQLxUadxk574t4iwjCKp5E7NBzwKkrDEhKPISIIjAU/p6K5qDx3qoeh4+26zWN1jmw3g==", + "dev": true, + "license": "MIT", "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "@algolia/cache-browser-local-storage": "4.24.0", + "@algolia/cache-common": "4.24.0", + "@algolia/cache-in-memory": "4.24.0", + "@algolia/client-account": "4.24.0", + "@algolia/client-analytics": "4.24.0", + "@algolia/client-common": "4.24.0", + "@algolia/client-personalization": "4.24.0", + "@algolia/client-search": "4.24.0", + "@algolia/logger-common": "4.24.0", + "@algolia/logger-console": "4.24.0", + "@algolia/recommend": "4.24.0", + "@algolia/requester-browser-xhr": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/requester-node-http": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "node_modules/algoliasearch/node_modules/@algolia/client-common": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", + "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" } }, - "node_modules/@ui5/cli/node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "node_modules/algoliasearch/node_modules/@algolia/client-search": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz", + "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==", + "dev": true, + "license": "MIT", "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "@algolia/client-common": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" } }, - "node_modules/@ui5/cli/node_modules/spdx-correct/node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "node_modules/algoliasearch/node_modules/@algolia/requester-browser-xhr": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.24.0.tgz", + "integrity": "sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==", + "dev": true, + "license": "MIT", "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "@algolia/requester-common": "4.24.0" } }, - "node_modules/@ui5/cli/node_modules/spdx-exceptions": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==" - }, - "node_modules/@ui5/cli/node_modules/spdx-license-ids": { - "version": "3.0.22", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", - "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==" + "node_modules/algoliasearch/node_modules/@algolia/requester-node-http": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.24.0.tgz", + "integrity": "sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/requester-common": "4.24.0" + } }, - "node_modules/@ui5/cli/node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "node_modules/ansi-escape-sequences": { + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-6.2.4.tgz", + "integrity": "sha512-2KJQAG1Nk4Iyu0dJENKXQJE9smEASrpu/E0F7LSnR72tQXngKGLqfRkHbkinjNct5vvAQY4BwQNt+4Tvg73nDQ==", + "dev": true, "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" + "array-back": "^6.2.2" }, "engines": { - "node": ">=6.0.0" + "node": ">=12.17" + }, + "peerDependencies": { + "@75lb/nature": "latest" + }, + "peerDependenciesMeta": { + "@75lb/nature": { + "optional": true + } } }, - "node_modules/@ui5/cli/node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/@ui5/cli/node_modules/spdy-transport/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" }, "engines": { - "node": ">= 6" + "node": ">= 8" } }, - "node_modules/@ui5/cli/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "node_modules/are-docs-informative": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", + "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", + "dev": true, "engines": { - "node": ">= 0.8" + "node": ">=14" } }, - "node_modules/@ui5/cli/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" }, - "node_modules/@ui5/cli/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/array-back": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", + "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", + "dev": true, "engines": { - "node": ">=8" + "node": ">=12.17" } }, - "node_modules/@ui5/cli/node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@ui5/cli/node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "dev": true, "engines": { "node": ">=8" } }, - "node_modules/@ui5/cli/node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, "engines": { "node": ">=8" } }, - "node_modules/@ui5/cli/node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, "dependencies": { - "ansi-regex": "^5.0.1" + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" }, "engines": { - "node": ">=8" - } - }, - "node_modules/@ui5/cli/node_modules/string-width/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@ui5/cli/node_modules/string-width/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true, "engines": { "node": ">=8" } }, - "node_modules/@ui5/cli/node_modules/string-width/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dependencies": { - "ansi-regex": "^5.0.1" - }, + "lodash": "^4.17.14" + } + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/@ui5/cli/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, "dependencies": { - "ansi-regex": "^6.0.1" + "possible-typed-array-names": "^1.0.0" }, "engines": { - "node": ">=12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@ui5/cli/node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/axios": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz", + "integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==", + "dev": true, + "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" } }, - "node_modules/@ui5/cli/node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dev": true, + "dependencies": { + "safe-buffer": "5.1.2" + }, "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "node_modules/@ui5/cli/node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "node_modules/basic-auth/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -6181,976 +8872,1131 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/stubborn-fs": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/stubborn-fs/-/stubborn-fs-1.2.5.tgz", - "integrity": "sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==" - }, - "node_modules/@ui5/cli/node_modules/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==", - "engines": { - "node": ">= 0.4" - }, + "node_modules/birpc": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-0.2.17.tgz", + "integrity": "sha512-+hkTxhot+dWsLpp3gia5AkVHIsKlZybNT5gIYiDlNzJrmYPcTM9k5/w2uaj3IPpd7LlEYpmCj4Jj1nC41VhDFg==", + "dev": true, + "license": "MIT", "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/antfu" } }, - "node_modules/@ui5/cli/node_modules/tar": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", - "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", - "yallist": "^5.0.0" + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "engines": { - "node": ">=18" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/@ui5/cli/node_modules/tar/node_modules/mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, - "node_modules/@ui5/cli/node_modules/tar/node_modules/yallist": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", - "engines": { - "node": ">=18" + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@ui5/cli/node_modules/terser": { - "version": "5.44.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.0.tgz", - "integrity": "sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==", + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.15.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" + "fill-range": "^7.1.1" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/@ui5/cli/node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "dependencies": { + "run-applescript": "^7.0.0" }, "engines": { - "node": ">=12.0.0" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, + "node_modules/byte-size": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-9.0.1.tgz", + "integrity": "sha512-YLe9x3rabBrcI0cueCdLS2l5ONUKywcRpTs02B8KP9/Cimhj7o3ZccGrPnRvcbyHMbb7W79/3MUJl7iGgTXKEw==", + "dev": true, "engines": { - "node": ">=8.0" + "node": ">=12.17" + }, + "peerDependencies": { + "@75lb/nature": "latest" + }, + "peerDependenciesMeta": { + "@75lb/nature": { + "optional": true + } } }, - "node_modules/@ui5/cli/node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "engines": { - "node": ">=0.6" + "node": ">= 0.8" } }, - "node_modules/@ui5/cli/node_modules/tuf-js": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-3.1.0.tgz", - "integrity": "sha512-3T3T04WzowbwV2FDiGXBbr81t64g1MUGGJRgT4x5o97N+8ArdhVCAF9IxFrxuSJmM3E5Asn7nKHkao0ibcZXAg==", + "node_modules/cacache": { + "version": "19.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-19.0.1.tgz", + "integrity": "sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==", "dependencies": { - "@tufjs/models": "3.0.1", - "debug": "^4.4.1", - "make-fetch-happen": "^14.0.3" + "@npmcli/fs": "^4.0.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^7.0.2", + "ssri": "^12.0.0", + "tar": "^7.4.3", + "unique-filename": "^4.0.0" }, "engines": { "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@ui5/cli/node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "node_modules/cache-content-type": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", + "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", + "dev": true, "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "mime-types": "^2.1.18", + "ylru": "^1.2.0" }, "engines": { - "node": ">= 0.6" - } - }, - "node_modules/@ui5/cli/node_modules/uc.micro": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", - "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==" - }, - "node_modules/@ui5/cli/node_modules/underscore": { - "version": "1.13.7", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", - "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==" - }, - "node_modules/@ui5/cli/node_modules/undici": { - "version": "6.21.3", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.3.tgz", - "integrity": "sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==", - "engines": { - "node": ">=18.17" + "node": ">= 6.0.0" } }, - "node_modules/@ui5/cli/node_modules/unicorn-magic": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", - "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dev": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, "engines": { - "node": ">=18" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@ui5/cli/node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, "engines": { - "node": ">= 0.8" + "node": ">= 0.4" } }, - "node_modules/@ui5/cli/node_modules/update-notifier": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-7.3.1.tgz", - "integrity": "sha512-+dwUY4L35XFYEzE+OAL3sarJdUioVovq+8f7lcIJ7wnmnYQV5UD1Y/lcwaMSyaQ6Bj3JMj1XSTjZbNLHn/19yA==", + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "dependencies": { - "boxen": "^8.0.1", - "chalk": "^5.3.0", - "configstore": "^7.0.0", - "is-in-ci": "^1.0.0", - "is-installed-globally": "^1.0.0", - "is-npm": "^6.0.0", - "latest-version": "^9.0.0", - "pupa": "^3.1.0", - "semver": "^7.6.3", - "xdg-basedir": "^5.1.0" + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" }, "engines": { - "node": ">=18" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@ui5/cli/node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" + "node_modules/callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==", + "dev": true, + "engines": { + "node": "*" } }, - "node_modules/@ui5/cli/node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/@ui5/cli/node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, "engines": { - "node": ">= 0.4.0" + "node": ">=6" } }, - "node_modules/@ui5/cli/node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "license": "MIT", "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" } }, - "node_modules/@ui5/cli/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/cli/node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">= 6" } }, - "node_modules/@ui5/cli/node_modules/walk-up-path": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-3.0.1.tgz", - "integrity": "sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==" - }, - "node_modules/@ui5/cli/node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "license": "MIT", "dependencies": { - "minimalistic-assert": "^1.0.0" + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" } }, - "node_modules/@ui5/cli/node_modules/whatwg-encoding": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", - "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", - "dependencies": { - "iconv-lite": "0.6.3" - }, - "engines": { - "node": ">=18" - } + "node_modules/caniuse-lite": { + "version": "1.0.30001651", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz", + "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" }, - "node_modules/@ui5/cli/node_modules/whatwg-encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "node_modules/catharsis": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", + "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "lodash": "^4.17.15" }, "engines": { - "node": ">=0.10.0" + "node": ">= 10" } }, - "node_modules/@ui5/cli/node_modules/whatwg-mimetype": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", - "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", "engines": { - "node": ">=18" + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@ui5/cli/node_modules/when-exit": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/when-exit/-/when-exit-2.1.4.tgz", - "integrity": "sha512-4rnvd3A1t16PWzrBUcSDZqcAmsUIy4minDXT/CZ8F2mVDgd65i4Aalimgz1aQkRGU0iH5eT5+6Rx2TK8o443Pg==" - }, - "node_modules/@ui5/cli/node_modules/which": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", - "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "node_modules/chalk-template": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz", + "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", + "dev": true, "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" + "chalk": "^4.1.2" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/chalk-template?sponsor=1" } }, - "node_modules/@ui5/cli/node_modules/widest-line": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz", - "integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==", + "node_modules/chalk-template/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==", + "dev": true, "dependencies": { - "string-width": "^7.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=18" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@ui5/cli/node_modules/widest-line/node_modules/emoji-regex": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.5.0.tgz", - "integrity": "sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==" - }, - "node_modules/@ui5/cli/node_modules/widest-line/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "node_modules/chalk-template/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=18" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@ui5/cli/node_modules/workerpool": { - "version": "9.3.4", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-9.3.4.tgz", - "integrity": "sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg==" - }, - "node_modules/@ui5/cli/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "node_modules/cheerio": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0.tgz", + "integrity": "sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.1.0", + "encoding-sniffer": "^0.2.0", + "htmlparser2": "^9.1.0", + "parse5": "^7.1.2", + "parse5-htmlparser2-tree-adapter": "^7.0.0", + "parse5-parser-stream": "^7.1.2", + "undici": "^6.19.5", + "whatwg-mimetype": "^4.0.0" }, "engines": { - "node": ">=12" + "node": ">=18.17" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" } }, - "node_modules/@ui5/cli/node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/@ui5/cli/node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" + "node_modules/chevrotain": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-7.1.1.tgz", + "integrity": "sha512-wy3mC1x4ye+O+QkEinVJkPf5u2vsrDIYW9G7ZuwFl6v/Yu0LwUuT2POsb+NUWApebyxfkQq6+yDfRExbnI5rcw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "regexp-to-ast": "0.5.0" } }, - "node_modules/@ui5/cli/node_modules/wrap-ansi-cjs/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==", + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" }, "engines": { - "node": ">=8" + "node": ">= 8.10.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/@ui5/cli/node_modules/wrap-ansi-cjs/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==", + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", "dependencies": { - "color-name": "~1.1.4" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=7.0.0" + "node": ">= 6" } }, - "node_modules/@ui5/cli/node_modules/wrap-ansi-cjs/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==" + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "engines": { + "node": ">=18" + } }, - "node_modules/@ui5/cli/node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, + "node_modules/ci-info": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", + "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], "engines": { "node": ">=8" } }, - "node_modules/@ui5/cli/node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/@ui5/cli/node_modules/wrap-ansi/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "node_modules/cli-progress": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz", + "integrity": "sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "string-width": "^4.2.3" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/@ui5/cli/node_modules/wsl-utils": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", - "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, "dependencies": { - "is-wsl": "^3.1.0" - }, + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/node_modules/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, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/@ui5/cli/node_modules/xdg-basedir": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", - "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", + "node_modules/cliui/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==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=12" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@ui5/cli/node_modules/xml2js": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", - "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=4.0.0" + "node": ">=8" } }, - "node_modules/@ui5/cli/node_modules/xml2js/node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, "engines": { - "node": ">=4.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@ui5/cli/node_modules/xmlcreate": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", - "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==" - }, - "node_modules/@ui5/cli/node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", "engines": { - "node": ">=10" + "node": ">=0.8" } }, - "node_modules/@ui5/cli/node_modules/yaml-ast-parser": { - "version": "0.0.43", - "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", - "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==" - }, - "node_modules/@ui5/cli/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, "engines": { - "node": ">=12" + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" } }, - "node_modules/@ui5/cli/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "node_modules/co-body": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/co-body/-/co-body-6.2.0.tgz", + "integrity": "sha512-Kbpv2Yd1NdL1V/V4cwLVxraHDV6K8ayohr2rmH0J87Er8+zJjcTa6dAn9QMPC9CRgU8+aNajKbSf1TzDB1yKPA==", + "dev": true, + "dependencies": { + "@hapi/bourne": "^3.0.0", + "inflation": "^2.0.0", + "qs": "^6.5.2", + "raw-body": "^2.3.3", + "type-is": "^1.6.16" + }, "engines": { - "node": ">=12" + "node": ">=8.0.0" } }, - "node_modules/@ui5/cli/node_modules/yesno": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/yesno/-/yesno-0.4.0.tgz", - "integrity": "sha512-tdBxmHvbXPBKYIg81bMCB7bVeDmHkRzk5rVJyYYXurwKkHq/MCd8rz4HSJUP7hW0H2NlXiq8IFiWvYKEHhlotA==" + "node_modules/code-block-writer": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-12.0.0.tgz", + "integrity": "sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==", + "dev": true, + "license": "MIT" }, - "node_modules/@ui5/fs": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@ui5/fs/-/fs-4.0.2.tgz", - "integrity": "sha512-0R7eb9xEMswvkN2wIiyYJtQY83evQJ7LQhTnRf5Ms0o2R29twGLP4XewqH+IoGWyT3T4SuDNTWmUU2UaTRY4zg==", + "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==", "dependencies": { - "@ui5/logger": "^4.0.1", - "clone": "^2.1.2", - "escape-string-regexp": "^5.0.0", - "globby": "^14.1.0", - "graceful-fs": "^4.2.11", - "micromatch": "^4.0.8", - "minimatch": "^10.0.3", - "pretty-hrtime": "^1.0.3", - "random-int": "^3.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": "^20.11.0 || >=22.0.0", - "npm": ">= 8" + "node": ">=7.0.0" } }, - "node_modules/@ui5/logger": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@ui5/logger/-/logger-4.0.2.tgz", - "integrity": "sha512-uscDCQyHFeenh4r2RbYuffTMn6IQdcNC1tXrQ4BF+apAFjmDGP11IHdAwVCKwxgyPrIC17HT2gub3ZugGM8kpQ==", + "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==" + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", "dependencies": { - "chalk": "^5.6.0", - "cli-progress": "^3.12.0", - "figures": "^6.1.0" + "delayed-stream": "~1.0.0" }, "engines": { - "node": "^20.11.0 || >=22.0.0", - "npm": ">= 8" + "node": ">= 0.8" } }, - "node_modules/@ui5/project": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@ui5/project/-/project-4.0.6.tgz", - "integrity": "sha512-ryopHahdKxU9GXXfEf3RNQxodHOOdqUmzrQ1uymoa3Om83BMBcURs3FQERjOP4soDbM5RiI7wEdaXX9VRvgH4w==", + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" + }, + "node_modules/command-line-args": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-6.0.1.tgz", + "integrity": "sha512-Jr3eByUjqyK0qd8W0SGFW1nZwqCaNCtbXjRo2cRJC1OYxWl3MZ5t1US3jq+cO4sPavqgw4l9BMGX0CBe+trepg==", + "dev": true, "dependencies": { - "@npmcli/config": "^9.0.0", - "@ui5/fs": "^4.0.2", - "@ui5/logger": "^4.0.2", - "ajv": "^6.12.6", - "ajv-errors": "^1.0.1", - "chalk": "^5.6.2", - "escape-string-regexp": "^5.0.0", - "globby": "^14.1.0", - "graceful-fs": "^4.2.11", - "js-yaml": "^4.1.0", - "lockfile": "^1.0.4", - "make-fetch-happen": "^14.0.3", - "node-stream-zip": "^1.15.0", - "pacote": "^19.0.1", - "pretty-hrtime": "^1.0.3", - "read-package-up": "^11.0.0", - "read-pkg": "^9.0.1", - "resolve": "^1.22.10", - "semver": "^7.7.2", - "xml2js": "^0.6.2", - "yesno": "^0.4.0" + "array-back": "^6.2.2", + "find-replace": "^5.0.2", + "lodash.camelcase": "^4.3.0", + "typical": "^7.2.0" }, "engines": { - "node": "^20.11.0 || >=22.0.0", - "npm": ">= 8" + "node": ">=12.20" }, "peerDependencies": { - "@ui5/builder": "^4.0.11" + "@75lb/nature": "latest" }, "peerDependenciesMeta": { - "@ui5/builder": { + "@75lb/nature": { "optional": true } } }, - "node_modules/@ui5/server": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@ui5/server/-/server-4.0.7.tgz", - "integrity": "sha512-bc6w/ispz8A1gnTFj3SqmA16geY6gMX8sP53enbq3YAf2HW7q5/E0/rdWj2BWlWQLW1zW/zVWCPAi6PX7lYJqQ==", + "node_modules/command-line-usage": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-7.0.3.tgz", + "integrity": "sha512-PqMLy5+YGwhMh1wS04mVG44oqDsgyLRSKJBdOo1bnYhMKBW65gZF1dRp2OZRhiTjgUHljy99qkO7bsctLaw35Q==", + "dev": true, "dependencies": { - "@ui5/builder": "^4.0.11", - "@ui5/fs": "^4.0.2", - "@ui5/logger": "^4.0.2", - "body-parser": "^1.20.2", - "compression": "^1.8.1", - "cors": "^2.8.5", - "devcert-sanscache": "^0.5.1", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "express": "^4.21.2", - "fresh": "^0.5.2", - "graceful-fs": "^4.2.11", - "mime-types": "^2.1.35", - "parseurl": "^1.3.3", - "portscanner": "^2.2.0", - "replacestream": "^4.0.3", - "router": "^2.2.0", - "spdy": "^4.0.2", - "yesno": "^0.4.0" + "array-back": "^6.2.2", + "chalk-template": "^0.4.0", + "table-layout": "^4.1.0", + "typical": "^7.1.1" }, "engines": { - "node": "^20.11.0 || >=22.0.0", - "npm": ">= 8" + "node": ">=12.20.0" } }, - "node_modules/@vue/compiler-core": { - "version": "3.5.21", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.21.tgz", - "integrity": "sha512-8i+LZ0vf6ZgII5Z9XmUvrCyEzocvWT+TeR2VBUVlzIH6Tyv57E20mPZ1bCS+tbejgUgmjrEh7q/0F0bibskAmw==", + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/comment-parser": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", + "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", "dev": true, - "dependencies": { - "@babel/parser": "^7.28.3", - "@vue/shared": "3.5.21", - "entities": "^4.5.0", - "estree-walker": "^2.0.2", - "source-map-js": "^1.2.1" + "license": "MIT", + "engines": { + "node": ">= 12.0.0" } }, - "node_modules/@vue/compiler-dom": { - "version": "3.5.21", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.21.tgz", - "integrity": "sha512-jNtbu/u97wiyEBJlJ9kmdw7tAr5Vy0Aj5CgQmo+6pxWNQhXZDPsRr1UWPN4v3Zf82s2H3kF51IbzZ4jMWAgPlQ==", + "node_modules/common-log-format": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/common-log-format/-/common-log-format-1.0.0.tgz", + "integrity": "sha512-fFn/WPNbsTCGTTwdCpZfVZSa5mgqMEkA0gMTRApFSlEsYN+9B2FPfiqch5FT+jsv5IV1RHV3GeZvCa7Qg+jssw==", "dev": true, - "dependencies": { - "@vue/compiler-core": "3.5.21", - "@vue/shared": "3.5.21" + "bin": { + "clf": "bin/cli.js" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@vue/compiler-sfc": { - "version": "3.5.21", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.21.tgz", - "integrity": "sha512-SXlyk6I5eUGBd2v8Ie7tF6ADHE9kCR6mBEuPyH1nUZ0h6Xx6nZI29i12sJKQmzbDyr2tUHMhhTt51Z6blbkTTQ==", - "dev": true, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dependencies": { - "@babel/parser": "^7.28.3", - "@vue/compiler-core": "3.5.21", - "@vue/compiler-dom": "3.5.21", - "@vue/compiler-ssr": "3.5.21", - "@vue/shared": "3.5.21", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.18", - "postcss": "^8.5.6", - "source-map-js": "^1.2.1" + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" } }, - "node_modules/@vue/compiler-ssr": { - "version": "3.5.21", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.21.tgz", - "integrity": "sha512-vKQ5olH5edFZdf5ZrlEgSO1j1DMA4u23TVK5XR1uMhvwnYvVdDF0nHXJUblL/GvzlShQbjhZZ2uvYmDlAbgo9w==", - "dev": true, + "node_modules/compression": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", "dependencies": { - "@vue/compiler-dom": "3.5.21", - "@vue/shared": "3.5.21" + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.1.0", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/@vue/shared": { - "version": "3.5.21", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.21.tgz", - "integrity": "sha512-+2k1EQpnYuVuu3N7atWyG3/xoFWIVJZq4Mz8XNOdScFI0etES75fbny/oU4lKWk/577P1zmg0ioYvpGEDZ3DLw==", + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, - "node_modules/abbrev": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", - "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "node_modules/constant-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", + "integrity": "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==", "dev": true, + "license": "MIT", "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case": "^2.0.2" } }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "safe-buffer": "5.2.1" }, "engines": { "node": ">= 0.6" } }, - "node_modules/accepts/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "engines": { "node": ">= 0.6" } }, - "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "bin": { - "acorn": "bin/acorn" - }, + "node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "engines": { - "node": ">=0.4.0" + "node": ">= 0.6" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "node_modules/cookies": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.9.1.tgz", + "integrity": "sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==", "dev": true, "dependencies": { - "debug": "4" + "depd": "~2.0.0", + "keygrip": "~1.1.0" }, "engines": { - "node": ">= 6.0.0" + "node": ">= 0.8" } }, - "node_modules/agent-base/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "is-what": "^4.1.8" }, "engines": { - "node": ">=6.0" + "node": ">=12.13" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/mesqueeb" } }, - "node_modules/agent-base/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "node_modules/copy-to": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz", + "integrity": "sha512-3DdaFaU/Zf1AnpLiFDeNCD4TOWe3Zl2RZaTzUvWiIk5ERzcCodOE20Vqq4fzCbNoHURFHT4/us/Lfq+S2zyY4w==", "dev": true }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "object-assign": "^4", + "vary": "^1" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": ">= 0.10" } }, - "node_modules/ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "peerDependencies": { - "ajv": ">=5.0.0" + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/ansi-escape-sequences": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-6.2.4.tgz", - "integrity": "sha512-2KJQAG1Nk4Iyu0dJENKXQJE9smEASrpu/E0F7LSnR72tQXngKGLqfRkHbkinjNct5vvAQY4BwQNt+4Tvg73nDQ==", + "node_modules/create-mixin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/create-mixin/-/create-mixin-3.0.0.tgz", + "integrity": "sha512-LkdMqnWT9LaqBN4huqpUnMz56Yr1mVSoCduAd2xXefgH/YZP2sXCMAyztXjk4q8hTF/TlcDa+zQW2aTgGdjjKQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dependencies": { - "array-back": "^6.2.2" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=12.17" + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" }, - "peerDependencies": { - "@75lb/nature": "latest" + "bin": { + "node-which": "bin/node-which" }, - "peerDependenciesMeta": { - "@75lb/nature": { - "optional": true - } + "engines": { + "node": ">= 8" } }, - "node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "node_modules/crypto-random-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", + "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", + "dev": true, + "dependencies": { + "type-fest": "^1.0.1" + }, "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "node_modules/crypto-random-string/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/are-docs-informative": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", - "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", + "node_modules/css-declaration-sorter": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz", + "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==", "dev": true, + "license": "ISC", "engines": { - "node": ">=14" + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.0.9" } }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/array-back": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", - "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", - "dev": true, - "engines": { - "node": ">=12.17" + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "is-array-buffer": "^3.0.5" + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" }, "engines": { - "node": ">= 0.4" + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "engines": { + "node": ">= 6" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/array-differ": { + "node_modules/cssesc": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "node_modules/cssnano": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.0.5.tgz", + "integrity": "sha512-Aq0vqBLtpTT5Yxj+hLlLfNPFuRQCDIjx5JQAhhaedQKLNDvDGeVziF24PS+S1f0Z5KCxWvw0QVI3VNHNBITxVQ==", "dev": true, + "license": "MIT", + "dependencies": { + "cssnano-preset-default": "^7.0.5", + "lilconfig": "^3.1.2" + }, "engines": { - "node": ">=8" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "node_modules/cssnano-preset-default": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.5.tgz", + "integrity": "sha512-Jbzja0xaKwc5JzxPQoc+fotKpYtWEu4wQLMQe29CM0FjjdRjA4omvbGHl2DTGgARKxSTpPssBsok+ixv8uTBqw==", "dev": true, + "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "is-array-buffer": "^3.0.4" + "browserslist": "^4.23.3", + "css-declaration-sorter": "^7.2.0", + "cssnano-utils": "^5.0.0", + "postcss-calc": "^10.0.1", + "postcss-colormin": "^7.0.2", + "postcss-convert-values": "^7.0.3", + "postcss-discard-comments": "^7.0.2", + "postcss-discard-duplicates": "^7.0.1", + "postcss-discard-empty": "^7.0.0", + "postcss-discard-overridden": "^7.0.0", + "postcss-merge-longhand": "^7.0.3", + "postcss-merge-rules": "^7.0.3", + "postcss-minify-font-values": "^7.0.0", + "postcss-minify-gradients": "^7.0.0", + "postcss-minify-params": "^7.0.2", + "postcss-minify-selectors": "^7.0.3", + "postcss-normalize-charset": "^7.0.0", + "postcss-normalize-display-values": "^7.0.0", + "postcss-normalize-positions": "^7.0.0", + "postcss-normalize-repeat-style": "^7.0.0", + "postcss-normalize-string": "^7.0.0", + "postcss-normalize-timing-functions": "^7.0.0", + "postcss-normalize-unicode": "^7.0.2", + "postcss-normalize-url": "^7.0.0", + "postcss-normalize-whitespace": "^7.0.0", + "postcss-ordered-values": "^7.0.1", + "postcss-reduce-initial": "^7.0.2", + "postcss-reduce-transforms": "^7.0.0", + "postcss-svgo": "^7.0.1", + "postcss-unique-selectors": "^7.0.2" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/cssnano-utils": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-5.0.0.tgz", + "integrity": "sha512-Uij0Xdxc24L6SirFr25MlwC2rCFX6scyUmuKpzI+JQ7cyqDEwD42fJ0xfB3yLfOnRDU5LKGgjQ9FA6LYh76GWQ==", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.4" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", "dev": true, + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, "engines": { - "node": ">=8" + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" } }, - "node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "dev": true, + "license": "MIT", "dependencies": { - "lodash": "^4.17.14" + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" } }, - "node_modules/async-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/current-module-paths": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/current-module-paths/-/current-module-paths-1.1.2.tgz", + "integrity": "sha512-H4s4arcLx/ugbu1XkkgSvcUZax0L6tXUqnppGniQb8l5VjUKGHoayXE5RiriiPhYDd+kjZnaok1Uig13PKtKYQ==", "dev": true, "engines": { - "node": ">= 0.4" + "node": ">=12.17" } }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, "dependencies": { - "possible-typed-array-names": "^1.0.0" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -7159,145 +10005,87 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/balanced-match": { + "node_modules/data-view-byte-length": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, "dependencies": { - "safe-buffer": "5.1.2" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" }, "engines": { - "node": ">= 0.8" - } - }, - "node_modules/basic-auth/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "node": ">= 0.4" }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "funding": { + "url": "https://github.com/sponsors/inspect-js" } }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" + "ms": "2.0.0" } }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "node_modules/deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==", + "dev": true + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "engines": { + "node": ">=4.0.0" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true }, - "node_modules/bundle-name": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", - "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", "dev": true, "dependencies": { - "run-applescript": "^7.0.0" + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" }, "engines": { "node": ">=18" @@ -7306,1305 +10094,1556 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/byte-size": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-9.0.1.tgz", - "integrity": "sha512-YLe9x3rabBrcI0cueCdLS2l5ONUKywcRpTs02B8KP9/Cimhj7o3ZccGrPnRvcbyHMbb7W79/3MUJl7iGgTXKEw==", + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", "dev": true, "engines": { - "node": ">=12.17" + "node": ">=18" }, - "peerDependencies": { - "@75lb/nature": "latest" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, - "peerDependenciesMeta": { - "@75lb/nature": { - "optional": true - } + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, "engines": { - "node": ">= 0.8" + "node": ">=8" } }, - "node_modules/cacache": { - "version": "19.0.1", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-19.0.1.tgz", - "integrity": "sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==", + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, "dependencies": { - "@npmcli/fs": "^4.0.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^10.0.1", - "minipass": "^7.0.3", - "minipass-collect": "^2.0.1", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^7.0.2", - "ssri": "^12.0.0", - "tar": "^7.4.3", - "unique-filename": "^4.0.0" + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/cache-content-type": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", - "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, + "node_modules/depcheck": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/depcheck/-/depcheck-1.4.7.tgz", + "integrity": "sha512-1lklS/bV5chOxwNKA/2XUUk/hPORp8zihZsXflr8x0kLwmcZ9Y9BsS6Hs3ssvA+2wUVbG0U2Ciqvm1SokNjPkA==", "dev": true, "dependencies": { - "mime-types": "^2.1.18", - "ylru": "^1.2.0" + "@babel/parser": "^7.23.0", + "@babel/traverse": "^7.23.2", + "@vue/compiler-sfc": "^3.3.4", + "callsite": "^1.0.0", + "camelcase": "^6.3.0", + "cosmiconfig": "^7.1.0", + "debug": "^4.3.4", + "deps-regex": "^0.2.0", + "findup-sync": "^5.0.0", + "ignore": "^5.2.4", + "is-core-module": "^2.12.0", + "js-yaml": "^3.14.1", + "json5": "^2.2.3", + "lodash": "^4.17.21", + "minimatch": "^7.4.6", + "multimatch": "^5.0.0", + "please-upgrade-node": "^3.2.0", + "readdirp": "^3.6.0", + "require-package-name": "^2.0.1", + "resolve": "^1.22.3", + "resolve-from": "^5.0.0", + "semver": "^7.5.4", + "yargs": "^16.2.0" + }, + "bin": { + "depcheck": "bin/depcheck.js" }, "engines": { - "node": ">= 6.0.0" + "node": ">=10" } }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "node_modules/depcheck/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" + "sprintf-js": "~1.0.2" + } + }, + "node_modules/depcheck/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/depcheck/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" }, "engines": { - "node": ">= 0.4" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "node_modules/depcheck/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "engines": { - "node": ">= 0.4" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "node_modules/depcheck/node_modules/minimatch": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz", + "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", + "dev": true, "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==", - "dev": true, + "node_modules/depcheck/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "engines": { - "node": "*" + "node": ">= 0.8" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, + "node_modules/deps-regex": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/deps-regex/-/deps-regex-0.2.0.tgz", + "integrity": "sha512-PwuBojGMQAYbWkMXOY9Pd/NWCDNHVH12pnS7WHqZkTSeMESe4hwnKKRp0yR87g37113x4JPbo/oIvXY+s/f56Q==", + "dev": true + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "engines": { - "node": ">=6" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "node_modules/detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/catharsis": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", - "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" + }, + "node_modules/devcert-sanscache": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/devcert-sanscache/-/devcert-sanscache-0.5.1.tgz", + "integrity": "sha512-9ePmMvWItstun0c35V5WXUlNU4MCHtpXWxKUJcDiZvyKkcA3FxkL6PFHKqTd446mXMmvLpOGBxVD6GjBXeMA5A==", "dependencies": { - "lodash": "^4.17.15" + "command-exists": "^1.2.9", + "get-port": "^6.1.2", + "glob": "^10.4.5", + "rimraf": "^5.0.9" }, "engines": { - "node": ">= 10" - } - }, - "node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": "^14.13.1 || >=16.0.0" } }, - "node_modules/chalk-template": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz", - "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", + "node_modules/docdash": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/docdash/-/docdash-2.0.2.tgz", + "integrity": "sha512-3SDDheh9ddrwjzf6dPFe1a16M6ftstqTNjik2+1fx46l24H9dD2osT2q9y+nBEC1wWz4GIqA48JmicOLQ0R8xA==", "dev": true, "dependencies": { - "chalk": "^4.1.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/chalk-template?sponsor=1" + "@jsdoc/salty": "^0.2.1" } }, - "node_modules/chalk-template/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==", - "dev": true, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/chalk-template/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "domelementtype": "^2.3.0" }, "engines": { - "node": ">=10" + "node": ">= 4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/cheerio": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0.tgz", - "integrity": "sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==", + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", "dependencies": { - "cheerio-select": "^2.1.0", "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.1.0", - "encoding-sniffer": "^0.2.0", - "htmlparser2": "^9.1.0", - "parse5": "^7.1.2", - "parse5-htmlparser2-tree-adapter": "^7.0.0", - "parse5-parser-stream": "^7.1.2", - "undici": "^6.19.5", - "whatwg-mimetype": "^4.0.0" - }, - "engines": { - "node": ">=18.17" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" }, "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "dependencies": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "engines": { + "node": ">= 0.4" } }, - "node_modules/chownr": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz", + "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "engines": { - "node": ">=18" + "node": ">= 0.8" } }, - "node_modules/ci-info": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", - "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" } }, - "node_modules/cli-progress": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz", - "integrity": "sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==", + "node_modules/encoding-sniffer": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz", + "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==", "dependencies": { - "string-width": "^4.2.3" + "iconv-lite": "^0.6.3", + "whatwg-encoding": "^3.1.1" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/fb55/encoding-sniffer?sponsor=1" } }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, + "node_modules/encoding-sniffer/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/cliui/node_modules/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, + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/cliui/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==", - "dev": true, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "optional": true, "dependencies": { - "color-convert": "^2.0.1" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/enhance-visitors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/enhance-visitors/-/enhance-visitors-1.0.0.tgz", + "integrity": "sha512-+29eJLiUixTEDRaZ35Vu8jP3gPLNcQQkQkOQjLp2X+6cZGGPDD/uasbFzvLsJKnGZnvmyZ0srxudwOtskHeIDA==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.1" + "lodash": "^4.13.1" }, "engines": { - "node": ">=8" + "node": ">=4.0.0" } }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "engines": { - "node": ">=10" + "node": ">=0.12" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "engines": { - "node": ">=0.8" + "node": ">=6" } }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" + "dependencies": { + "is-arrayish": "^0.2.1" } }, - "node_modules/co-body": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/co-body/-/co-body-6.2.0.tgz", - "integrity": "sha512-Kbpv2Yd1NdL1V/V4cwLVxraHDV6K8ayohr2rmH0J87Er8+zJjcTa6dAn9QMPC9CRgU8+aNajKbSf1TzDB1yKPA==", + "node_modules/es-abstract": { + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", "dev": true, "dependencies": { - "@hapi/bourne": "^3.0.0", - "inflation": "^2.0.0", - "qs": "^6.5.2", - "raw-body": "^2.3.3", - "type-is": "^1.6.16" + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" }, "engines": { - "node": ">=8.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", - "dependencies": { - "color-name": "~1.1.4" - }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "engines": { - "node": ">=7.0.0" + "node": ">= 0.4" } }, - "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==" + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } }, - "node_modules/command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } }, - "node_modules/command-line-args": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-6.0.1.tgz", - "integrity": "sha512-Jr3eByUjqyK0qd8W0SGFW1nZwqCaNCtbXjRo2cRJC1OYxWl3MZ5t1US3jq+cO4sPavqgw4l9BMGX0CBe+trepg==", + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "dev": true, "dependencies": { - "array-back": "^6.2.2", - "find-replace": "^5.0.2", - "lodash.camelcase": "^4.3.0", - "typical": "^7.2.0" + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { - "node": ">=12.20" - }, - "peerDependencies": { - "@75lb/nature": "latest" - }, - "peerDependenciesMeta": { - "@75lb/nature": { - "optional": true - } + "node": ">= 0.4" } }, - "node_modules/command-line-usage": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-7.0.3.tgz", - "integrity": "sha512-PqMLy5+YGwhMh1wS04mVG44oqDsgyLRSKJBdOo1bnYhMKBW65gZF1dRp2OZRhiTjgUHljy99qkO7bsctLaw35Q==", + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, "dependencies": { - "array-back": "^6.2.2", - "chalk-template": "^0.4.0", - "table-layout": "^4.1.0", - "typical": "^7.1.1" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" }, "engines": { - "node": ">=12.20.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/comment-parser": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", - "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "dev": true, + "hasInstallScript": true, "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, "engines": { - "node": ">= 12.0.0" + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" } }, - "node_modules/common-log-format": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/common-log-format/-/common-log-format-1.0.0.tgz", - "integrity": "sha512-fFn/WPNbsTCGTTwdCpZfVZSa5mgqMEkA0gMTRApFSlEsYN+9B2FPfiqch5FT+jsv5IV1RHV3GeZvCa7Qg+jssw==", + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, - "bin": { - "clf": "bin/cli.js" - }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "engines": { + "node": ">=12" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escape-unicode": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/escape-unicode/-/escape-unicode-0.2.0.tgz", + "integrity": "sha512-7jMQuKb8nm0h/9HYLfu4NCLFwoUsd5XO6OZ1z86PbKcMf8zDK1m7nFR0iA2CCShq4TSValaLIveE8T1UBxgALQ==", "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/compression": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", - "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", + "node_modules/escope": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-4.0.0.tgz", + "integrity": "sha512-E36qlD/r6RJHVpPKArgMoMlNJzoRJFH8z/cAZlI9lbc45zB3+S7i9k6e/MNb+7bZQzNEa6r8WKN3BovpeIBwgA==", "dependencies": { - "bytes": "3.1.2", - "compressible": "~2.0.18", - "debug": "2.6.9", - "negotiator": "~0.6.4", - "on-headers": "~1.1.0", - "safe-buffer": "5.2.1", - "vary": "~1.1.2" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" }, "engines": { - "node": ">= 0.8.0" + "node": ">=4.0" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "node_modules/eslint": { + "version": "9.35.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.35.0.tgz", + "integrity": "sha512-QePbBFMJFjgmlE+cXAlbHZbHpdFVS2E/6vzCy7aKlebddvl1vadiC4JFV5u/wqTkNUwEV8WrQi257jf5f06hrg==", + "dev": true, "dependencies": { - "safe-buffer": "5.2.1" + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.3.1", + "@eslint/core": "^0.15.2", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.35.0", + "@eslint/plugin-kit": "^0.3.5", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" }, "engines": { - "node": ">= 0.6" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "node_modules/eslint-config-google": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz", + "integrity": "sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==", + "dev": true, "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" + }, + "peerDependencies": { + "eslint": ">=5.16.0" } }, - "node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "node_modules/eslint-plugin-ava": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-ava/-/eslint-plugin-ava-15.1.0.tgz", + "integrity": "sha512-+6Zxk1uYW3mf7lxCLWIQsFYgn3hfuCMbsKc0MtqfloOz1F6fiV5/PaWEaLgkL1egrSQmnyR7vOFP1wSPJbVUbw==", + "dev": true, + "dependencies": { + "enhance-visitors": "^1.0.0", + "eslint-utils": "^3.0.0", + "espree": "^9.0.0", + "espurify": "^2.1.1", + "import-modules": "^2.1.0", + "micro-spelling-correcter": "^1.1.1", + "pkg-dir": "^5.0.0", + "resolve-from": "^5.0.0" + }, "engines": { - "node": ">= 0.6" + "node": "^18.18 || >=20" + }, + "peerDependencies": { + "eslint": ">=9" } }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + "node_modules/eslint-plugin-ava/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } }, - "node_modules/cookies": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.9.1.tgz", - "integrity": "sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==", + "node_modules/eslint-plugin-ava/node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "dependencies": { - "depd": "~2.0.0", - "keygrip": "~1.1.0" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": ">= 0.8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/copy-to": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz", - "integrity": "sha512-3DdaFaU/Zf1AnpLiFDeNCD4TOWe3Zl2RZaTzUvWiIk5ERzcCodOE20Vqq4fzCbNoHURFHT4/us/Lfq+S2zyY4w==", - "dev": true - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "node_modules/eslint-plugin-jsdoc": { + "version": "60.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-60.5.0.tgz", + "integrity": "sha512-3ivSigRDi/04GFRRYqvv4PgLD/+ZBLfHEk/0WKNpDBcmucnEAhqFjmJhLo4W4SIpXKZ/WVQNVPEsFXVPz9fRjA==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "object-assign": "^4", - "vary": "^1" + "@es-joy/jsdoccomment": "~0.62.0", + "are-docs-informative": "^0.0.2", + "comment-parser": "1.4.1", + "debug": "^4.4.3", + "escape-string-regexp": "^4.0.0", + "espree": "^10.4.0", + "esquery": "^1.6.0", + "html-entities": "^2.6.0", + "object-deep-merge": "^1.0.5", + "parse-imports-exports": "^0.2.4", + "semver": "^7.7.2", + "spdx-expression-parse": "^4.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">=20.11.0" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" } }, - "node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "node_modules/eslint-plugin-jsdoc/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "ms": "^2.1.3" }, "engines": { - "node": ">=10" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/create-mixin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/create-mixin/-/create-mixin-3.0.0.tgz", - "integrity": "sha512-LkdMqnWT9LaqBN4huqpUnMz56Yr1mVSoCduAd2xXefgH/YZP2sXCMAyztXjk4q8hTF/TlcDa+zQW2aTgGdjjKQ==", + "node_modules/eslint-plugin-jsdoc/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "node_modules/eslint-plugin-jsdoc/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">= 8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/cross-spawn/node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } }, - "node_modules/cross-spawn/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, "dependencies": { - "isexe": "^2.0.0" + "eslint-visitor-keys": "^2.0.0" }, - "bin": { - "node-which": "bin/node-which" + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, "engines": { - "node": ">= 8" + "node": ">=10" } }, - "node_modules/crypto-random-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", - "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/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==", "dev": true, "dependencies": { - "type-fest": "^1.0.1" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=12" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/crypto-random-string/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/css-select": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", - "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "node_modules/eslint/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" + "ms": "^2.1.3" }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/css-what": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", - "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, "engines": { - "node": ">= 6" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/fb55" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/current-module-paths": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/current-module-paths/-/current-module-paths-1.1.2.tgz", - "integrity": "sha512-H4s4arcLx/ugbu1XkkgSvcUZax0L6tXUqnppGniQb8l5VjUKGHoayXE5RiriiPhYDd+kjZnaok1Uig13PKtKYQ==", + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=12.17" + "node": "*" } }, - "node_modules/data-view-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", - "dev": true, + "node_modules/eslint/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" }, "engines": { - "node": ">= 0.4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/eslint" } }, - "node_modules/data-view-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, "engines": { - "node": ">= 0.4" + "node": ">=4" + } + }, + "node_modules/espurify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/espurify/-/espurify-2.1.1.tgz", + "integrity": "sha512-zttWvnkhcDyGOhSH4vO2qCBILpdCMv/MX8lp4cqgRkQoDRGK2oZxi2GfWhlP2dIXmk7BaKeOTuzbHhyC68o8XQ==", + "dev": true + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" }, - "funding": { - "url": "https://github.com/sponsors/inspect-js" + "engines": { + "node": ">=0.10" } }, - "node_modules/data-view-byte-offset": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "estraverse": "^5.2.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4.0" } }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" } }, - "node_modules/deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==", + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, "engines": { - "node": ">=4.0.0" + "node": ">=0.10.0" } }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } }, - "node_modules/default-browser": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", - "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", "dev": true, - "dependencies": { - "bundle-name": "^4.1.0", - "default-browser-id": "^5.0.0" - }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, - "node_modules/default-browser-id": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", - "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.8.x" } }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", "dev": true, "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" + "homedir-polyfill": "^1.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true, - "engines": { - "node": ">=8" - } + "node_modules/exponential-backoff": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", + "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==" }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, + "node_modules/express": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, "engines": { - "node": ">= 0.4" + "node": ">= 0.10.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, - "node_modules/depcheck": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/depcheck/-/depcheck-1.4.7.tgz", - "integrity": "sha512-1lklS/bV5chOxwNKA/2XUUk/hPORp8zihZsXflr8x0kLwmcZ9Y9BsS6Hs3ssvA+2wUVbG0U2Ciqvm1SokNjPkA==", - "dev": true, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dependencies": { - "@babel/parser": "^7.23.0", - "@babel/traverse": "^7.23.2", - "@vue/compiler-sfc": "^3.3.4", - "callsite": "^1.0.0", - "camelcase": "^6.3.0", - "cosmiconfig": "^7.1.0", - "debug": "^4.3.4", - "deps-regex": "^0.2.0", - "findup-sync": "^5.0.0", - "ignore": "^5.2.4", - "is-core-module": "^2.12.0", - "js-yaml": "^3.14.1", - "json5": "^2.2.3", - "lodash": "^4.17.21", - "minimatch": "^7.4.6", - "multimatch": "^5.0.0", - "please-upgrade-node": "^3.2.0", - "readdirp": "^3.6.0", - "require-package-name": "^2.0.1", - "resolve": "^1.22.3", - "resolve-from": "^5.0.0", - "semver": "^7.5.4", - "yargs": "^16.2.0" - }, - "bin": { - "depcheck": "bin/depcheck.js" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" }, "engines": { - "node": ">=10" + "node": ">=8.6.0" } }, - "node_modules/depcheck/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dependencies": { - "sprintf-js": "~1.0.2" + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/depcheck/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", "dependencies": { - "balanced-match": "^1.0.0" + "reusify": "^1.0.4" } }, - "node_modules/depcheck/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, + "node_modules/figures": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", + "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", "dependencies": { - "ms": "^2.1.3" + "is-unicode-supported": "^2.0.0" }, "engines": { - "node": ">=6.0" + "node": ">=18" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/depcheck/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "flat-cache": "^4.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=16.0.0" } }, - "node_modules/depcheck/node_modules/minimatch": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz", - "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", + "node_modules/file-type": { + "version": "18.7.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-18.7.0.tgz", + "integrity": "sha512-ihHtXRzXEziMrQ56VSgU7wkxh55iNchFkosu7Y9/S+tXHdKyrGjVK0ujbqNnsxzea+78MaLhN6PGmfYSAv1ACw==", "dev": true, "dependencies": { - "brace-expansion": "^2.0.1" + "readable-web-to-node-stream": "^3.0.2", + "strtok3": "^7.0.0", + "token-types": "^5.0.1" }, "engines": { - "node": ">=10" + "node": ">=14.16" }, "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/depcheck/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/deps-regex": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/deps-regex/-/deps-regex-0.2.0.tgz", - "integrity": "sha512-PwuBojGMQAYbWkMXOY9Pd/NWCDNHVH12pnS7WHqZkTSeMESe4hwnKKRp0yR87g37113x4JPbo/oIvXY+s/f56Q==", - "dev": true - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "url": "https://github.com/sindresorhus/file-type?sponsor=1" } }, - "node_modules/detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", - "dev": true, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" - }, - "node_modules/devcert-sanscache": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/devcert-sanscache/-/devcert-sanscache-0.5.1.tgz", - "integrity": "sha512-9ePmMvWItstun0c35V5WXUlNU4MCHtpXWxKUJcDiZvyKkcA3FxkL6PFHKqTd446mXMmvLpOGBxVD6GjBXeMA5A==", + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "dependencies": { - "command-exists": "^1.2.9", - "get-port": "^6.1.2", - "glob": "^10.4.5", - "rimraf": "^5.0.9" + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" }, "engines": { - "node": "^14.13.1 || >=16.0.0" + "node": ">= 0.8" } }, - "node_modules/docdash": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/docdash/-/docdash-2.0.2.tgz", - "integrity": "sha512-3SDDheh9ddrwjzf6dPFe1a16M6ftstqTNjik2+1fx46l24H9dD2osT2q9y+nBEC1wWz4GIqA48JmicOLQ0R8xA==", + "node_modules/find-replace": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-5.0.2.tgz", + "integrity": "sha512-Y45BAiE3mz2QsrN2fb5QEtO4qb44NcS7en/0y9PEVsg351HsLeVclP8QPMH79Le9sH3rs5RSwJu99W0WPZO43Q==", "dev": true, - "dependencies": { - "@jsdoc/salty": "^0.2.1" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" + "engines": { + "node": ">=14" }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" + "peerDependencies": { + "@75lb/nature": "latest" + }, + "peerDependenciesMeta": { + "@75lb/nature": { + "optional": true } - ] + } }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, "dependencies": { - "domelementtype": "^2.3.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">= 4" + "node": ">=10" }, "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/domutils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", - "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" + "node_modules/find-up-simple": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz", + "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==", + "engines": { + "node": ">=18" }, "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "node_modules/findup-sync": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", + "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", + "dev": true, "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" + "detect-file": "^1.0.0", + "is-glob": "^4.0.3", + "micromatch": "^4.0.4", + "resolve-dir": "^1.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">= 10.13.0" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, "engines": { - "node": ">= 0.8" + "node": ">=16" } }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "optional": true, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true + }, + "node_modules/focus-trap": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.5.4.tgz", + "integrity": "sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==", + "dev": true, + "license": "MIT", "dependencies": { - "iconv-lite": "^0.6.2" + "tabbable": "^6.2.0" } }, - "node_modules/encoding-sniffer": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz", - "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==", - "dependencies": { - "iconv-lite": "^0.6.3", - "whatwg-encoding": "^3.1.1" + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" }, - "funding": { - "url": "https://github.com/fb55/encoding-sniffer?sponsor=1" + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "node_modules/encoding-sniffer/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "is-callable": "^1.2.7" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "optional": true, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/enhance-visitors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/enhance-visitors/-/enhance-visitors-1.0.0.tgz", - "integrity": "sha512-+29eJLiUixTEDRaZ35Vu8jP3gPLNcQQkQkOQjLp2X+6cZGGPDD/uasbFzvLsJKnGZnvmyZ0srxudwOtskHeIDA==", + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dev": true, + "license": "MIT", "dependencies": { - "lodash": "^4.13.1" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, "engines": { - "node": ">=4.0.0" + "node": ">= 6" } }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "engines": { - "node": ">=0.12" + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "type": "patreon", + "url": "https://github.com/sponsors/rawify" } }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "engines": { - "node": ">=6" + "node": ">= 0.6" } }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dev": true, + "license": "MIT", "dependencies": { - "is-arrayish": "^0.2.1" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" } }, - "node_modules/es-abstract": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", - "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", - "dev": true, + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", "dependencies": { - "array-buffer-byte-length": "^1.0.2", - "arraybuffer.prototype.slice": "^1.0.4", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "data-view-buffer": "^1.0.2", - "data-view-byte-length": "^1.0.2", - "data-view-byte-offset": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "es-set-tostringtag": "^2.1.0", - "es-to-primitive": "^1.3.0", - "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.3.0", - "get-proto": "^1.0.1", - "get-symbol-description": "^1.1.0", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "internal-slot": "^1.1.0", - "is-array-buffer": "^3.0.5", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.2", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.2.1", - "is-set": "^2.0.3", - "is-shared-array-buffer": "^1.0.4", - "is-string": "^1.1.1", - "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.1", - "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.4", - "object-keys": "^1.1.1", - "object.assign": "^4.1.7", - "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.4", - "safe-array-concat": "^1.1.3", - "safe-push-apply": "^1.0.0", - "safe-regex-test": "^1.1.0", - "set-proto": "^1.0.0", - "stop-iteration-iterator": "^1.1.0", - "string.prototype.trim": "^1.2.10", - "string.prototype.trimend": "^1.0.9", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.3", - "typed-array-byte-length": "^1.0.3", - "typed-array-byte-offset": "^1.0.4", - "typed-array-length": "^1.0.7", - "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.19" + "minipass": "^7.0.3" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 0.4" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "engines": { - "node": ">= 0.4" + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, "dependencies": { - "es-errors": "^1.3.0" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, "engines": { - "node": ">= 0.4" + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/es-to-primitive": { + "node_modules/get-intrinsic": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", - "dev": true, + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dependencies": { - "is-callable": "^1.2.7", - "is-date-object": "^1.0.5", - "is-symbol": "^1.0.4" + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -8613,24 +11652,34 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, + "node_modules/get-port": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-6.1.2.tgz", + "integrity": "sha512-BrGGraKm2uPqurfGVj/z97/zv8dPleC6x9JBNRTrDNtCkkRF4rPwrQXFgL7+I+q8QSdU4ntLQX2D7KIxSy8nGw==", "engines": { - "node": ">=6" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } }, - "node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "node_modules/get-stdin": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", + "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", + "dev": true, "engines": { "node": ">=12" }, @@ -8638,855 +11687,766 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/escape-unicode": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/escape-unicode/-/escape-unicode-0.2.0.tgz", - "integrity": "sha512-7jMQuKb8nm0h/9HYLfu4NCLFwoUsd5XO6OZ1z86PbKcMf8zDK1m7nFR0iA2CCShq4TSValaLIveE8T1UBxgALQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/escope": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-4.0.0.tgz", - "integrity": "sha512-E36qlD/r6RJHVpPKArgMoMlNJzoRJFH8z/cAZlI9lbc45zB3+S7i9k6e/MNb+7bZQzNEa6r8WKN3BovpeIBwgA==", + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, "dependencies": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" }, "engines": { - "node": ">=4.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint": { - "version": "9.35.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.35.0.tgz", - "integrity": "sha512-QePbBFMJFjgmlE+cXAlbHZbHpdFVS2E/6vzCy7aKlebddvl1vadiC4JFV5u/wqTkNUwEV8WrQi257jf5f06hrg==", - "dev": true, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.0", - "@eslint/config-helpers": "^0.3.1", - "@eslint/core": "^0.15.2", - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.35.0", - "@eslint/plugin-kit": "^0.3.5", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "@types/json-schema": "^7.0.15", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.4.0", - "eslint-visitor-keys": "^4.2.1", - "espree": "^10.4.0", - "esquery": "^1.5.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "glob": "dist/esm/bin.mjs" }, "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/eslint-config-google": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz", - "integrity": "sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==", + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "is-glob": "^4.0.3" }, - "peerDependencies": { - "eslint": ">=5.16.0" + "engines": { + "node": ">=10.13.0" } }, - "node_modules/eslint-plugin-ava": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-ava/-/eslint-plugin-ava-15.1.0.tgz", - "integrity": "sha512-+6Zxk1uYW3mf7lxCLWIQsFYgn3hfuCMbsKc0MtqfloOz1F6fiV5/PaWEaLgkL1egrSQmnyR7vOFP1wSPJbVUbw==", - "dev": true, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dependencies": { - "enhance-visitors": "^1.0.0", - "eslint-utils": "^3.0.0", - "espree": "^9.0.0", - "espurify": "^2.1.1", - "import-modules": "^2.1.0", - "micro-spelling-correcter": "^1.1.1", - "pkg-dir": "^5.0.0", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": "^18.18 || >=20" - }, - "peerDependencies": { - "eslint": ">=9" + "balanced-match": "^1.0.0" } }, - "node_modules/eslint-plugin-ava/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/eslint-plugin-ava/node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "node_modules/global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "dev": true, "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-jsdoc": { - "version": "60.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-60.5.0.tgz", - "integrity": "sha512-3ivSigRDi/04GFRRYqvv4PgLD/+ZBLfHEk/0WKNpDBcmucnEAhqFjmJhLo4W4SIpXKZ/WVQNVPEsFXVPz9fRjA==", + "node_modules/global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { - "@es-joy/jsdoccomment": "~0.62.0", - "are-docs-informative": "^0.0.2", - "comment-parser": "1.4.1", - "debug": "^4.4.3", - "escape-string-regexp": "^4.0.0", - "espree": "^10.4.0", - "esquery": "^1.6.0", - "html-entities": "^2.6.0", - "object-deep-merge": "^1.0.5", - "parse-imports-exports": "^0.2.4", - "semver": "^7.7.2", - "spdx-expression-parse": "^4.0.0" + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" }, "engines": { - "node": ">=20.11.0" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" + "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-jsdoc/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "node_modules/global-prefix/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 + }, + "node_modules/global-prefix/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" + "isexe": "^2.0.0" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "bin": { + "which": "bin/which" } }, - "node_modules/eslint-plugin-jsdoc/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/globals": { + "version": "16.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.4.0.tgz", + "integrity": "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==", "dev": true, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-jsdoc/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/eslint-scope": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", - "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">= 0.4" }, "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, + "node_modules/globby": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", + "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", "dependencies": { - "eslint-visitor-keys": "^2.0.0" + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.3", + "ignore": "^7.0.3", + "path-type": "^6.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.3.0" }, "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, + "node_modules/globby/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", "engines": { - "node": ">=10" + "node": ">= 4" } }, - "node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "node_modules/globby/node_modules/path-type": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", + "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=18" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/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==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" }, "engines": { - "node": ">=10" + "node": ">=0.4.7" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "optionalDependencies": { + "uglify-js": "^3.1.4" } }, - "node_modules/eslint/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, - "dependencies": { - "ms": "^2.1.3" - }, "engines": { - "node": ">=6.0" + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint/node_modules/escape-string-regexp": { + "node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { - "node": ">=10" + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "dunder-proto": "^1.0.0" }, "engines": { - "node": "*" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/espree": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, "dependencies": { - "acorn": "^8.15.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.1" + "has-symbols": "^1.0.3" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">= 0.4" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" }, "engines": { - "node": ">=4" + "node": ">= 0.4" } }, - "node_modules/espurify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/espurify/-/espurify-2.1.1.tgz", - "integrity": "sha512-zttWvnkhcDyGOhSH4vO2qCBILpdCMv/MX8lp4cqgRkQoDRGK2oZxi2GfWhlP2dIXmk7BaKeOTuzbHhyC68o8XQ==", - "dev": true - }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", "dev": true, "dependencies": { - "estraverse": "^5.1.0" + "parse-passwd": "^1.0.0" }, "engines": { - "node": ">=0.10" + "node": ">=0.10.0" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", "dev": true, - "engines": { - "node": ">=4.0" - } + "license": "MIT" }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "node_modules/hosted-git-info": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", + "integrity": "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==", "dependencies": { - "estraverse": "^5.2.0" + "lru-cache": "^10.0.1" }, "engines": { - "node": ">=4.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" } }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" + "node_modules/hpack.js/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" + "node_modules/html-entities": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz", + "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" + }, + "node_modules/htmlparser2": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz", + "integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.1.0", + "entities": "^4.5.0" } }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "node_modules/http-assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz", + "integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==", "dev": true, + "dependencies": { + "deep-equal": "~1.0.1", + "http-errors": "~1.8.0" + }, "engines": { - "node": ">=6" + "node": ">= 0.8" } }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "node_modules/http-assert/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, "engines": { - "node": ">=0.8.x" + "node": ">= 0.6" } }, - "node_modules/expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "node_modules/http-assert/node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dev": true, "dependencies": { - "homedir-polyfill": "^1.0.1" + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/exponential-backoff": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", - "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==" - }, - "node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, + "node_modules/http-assert/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, "engines": { - "node": ">= 0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "node": ">= 0.6" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==" }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, "engines": { - "node": ">=8.6.0" + "node": ">= 0.8" } }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, "dependencies": { - "is-glob": "^4.0.1" + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" }, "engines": { "node": ">= 6" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/figures": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", - "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", + "node_modules/http-proxy-agent/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, "dependencies": { - "is-unicode-supported": "^2.0.0" + "ms": "^2.1.3" }, "engines": { - "node": ">=18" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "node_modules/http-proxy-agent/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, "dependencies": { - "flat-cache": "^4.0.0" + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">=16.0.0" + "node": ">= 6" } }, - "node_modules/file-type": { - "version": "18.7.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-18.7.0.tgz", - "integrity": "sha512-ihHtXRzXEziMrQ56VSgU7wkxh55iNchFkosu7Y9/S+tXHdKyrGjVK0ujbqNnsxzea+78MaLhN6PGmfYSAv1ACw==", + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, "dependencies": { - "readable-web-to-node-stream": "^3.0.2", - "strtok3": "^7.0.0", - "token-types": "^5.0.1" + "ms": "^2.1.3" }, "engines": { - "node": ">=14.16" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/sindresorhus/file-type?sponsor=1" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, - "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { - "node": ">= 0.8" + "node": ">=0.10.0" } }, - "node_modules/find-replace": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-5.0.2.tgz", - "integrity": "sha512-Y45BAiE3mz2QsrN2fb5QEtO4qb44NcS7en/0y9PEVsg351HsLeVclP8QPMH79Le9sH3rs5RSwJu99W0WPZO43Q==", + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@75lb/nature": "latest" - }, - "peerDependenciesMeta": { - "@75lb/nature": { - "optional": true + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" } - } + ] }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-7.0.0.tgz", + "integrity": "sha512-T4gbf83A4NH95zvhVYZc+qWocBBGlpzUXLPGurJggw/WIOwicfXJChLDP/iBZnN5WqROSu5Bm3hhle4z8a8YGQ==", "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "minimatch": "^9.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/find-up-simple": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz", - "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/ignore-walk/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/findup-sync": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", - "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", - "dev": true, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.3", - "micromatch": "^4.0.4", - "resolve-dir": "^1.0.1" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">= 10.13.0" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">=16" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", - "dev": true - }, - "node_modules/for-each": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, - "dependencies": { - "is-callable": "^1.2.7" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4" } }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, + "node_modules/import-modules": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-modules/-/import-modules-2.1.0.tgz", + "integrity": "sha512-8HEWcnkbGpovH9yInoisxaSoIg9Brbul+Ju3Kqe2UsYDUBJD/iQjSgEj0zPcTDPKfPp2fs5xlv1i+JSye/m1/A==", + "dev": true, "engines": { - "node": ">=14" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "engines": { - "node": ">= 0.6" + "node": ">=0.8.19" } }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "node_modules/index-to-position": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.1.0.tgz", + "integrity": "sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==", "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fs-minipass": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", - "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", - "dependencies": { - "minipass": "^7.0.3" - }, + "node_modules/inflation": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.1.0.tgz", + "integrity": "sha512-t54PPJHG1Pp7VQvxyVCJ9mBbjG3Hqryges9bXoOO6GExCPa+//i/d5GSuFtpx3ALLd7lgIAur6zrIlBQyJuMlQ==", + "dev": true, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 0.8.0" } }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-5.0.0.tgz", + "integrity": "sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==", + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/function.prototype.name": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "functions-have-names": "^1.2.3", + "es-errors": "^1.3.0", "hasown": "^2.0.2", - "is-callable": "^1.2.7" + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/ip-address": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", + "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==", + "engines": { + "node": ">= 12" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">= 0.10" } }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -9495,50 +12455,38 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-port": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-6.1.2.tgz", - "integrity": "sha512-BrGGraKm2uPqurfGVj/z97/zv8dPleC6x9JBNRTrDNtCkkRF4rPwrQXFgL7+I+q8QSdU4ntLQX2D7KIxSy8nGw==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" - } - }, - "node_modules/get-stdin": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", - "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", - "dev": true, - "engines": { - "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-symbol-description": { + "node_modules/is-bigint": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6" + "has-bigints": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -9547,133 +12495,124 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" + "binary-extensions": "^2.0.0" }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=8" } }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "dev": true, "dependencies": { - "is-glob": "^4.0.3" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">=10.13.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dependencies": { - "balanced-match": "^1.0.0" + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/glob/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dependencies": { - "brace-expansion": "^2.0.1" + "hasown": "^2.0.2" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, "dependencies": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, "dependencies": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global-prefix/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 - }, - "node_modules/global-prefix/node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" + "node": ">= 0.4" }, - "bin": { - "which": "bin/which" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globals": { - "version": "16.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-16.4.0.tgz", - "integrity": "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==", + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, + "bin": { + "is-docker": "cli.js" + }, "engines": { - "node": ">=18" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", "dev": true, "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" + "call-bound": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -9682,90 +12621,92 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globby": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", - "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "dev": true, "dependencies": { - "@sindresorhus/merge-streams": "^2.1.0", - "fast-glob": "^3.3.3", - "ignore": "^7.0.3", - "path-type": "^6.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.3.0" + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { - "node": ">=18" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globby/node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, "engines": { - "node": ">= 4" + "node": ">=0.10.0" } }, - "node_modules/globby/node_modules/path-type": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", - "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, "engines": { - "node": ">=18" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "node_modules/is-inside-container/node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, "engines": { - "node": ">= 0.4" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" - }, - "node_modules/handlebars": { - "version": "4.7.8", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", - "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.2", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, "engines": { - "node": ">=0.4.7" + "node": ">= 0.4" }, - "optionalDependencies": { - "uglify-js": "^3.1.4" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-bigints": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", - "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, "engines": { "node": ">= 0.4" @@ -9774,34 +12715,53 @@ "url": "https://github.com/sponsors/ljharb" } }, - "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==", - "dev": true, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "engines": { - "node": ">=8" + "node": ">=0.12.0" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "node_modules/is-number-like": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", + "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", + "dependencies": { + "lodash.isfinite": "^3.3.2" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, "dependencies": { - "es-define-property": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-proto": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==" + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, "dependencies": { - "dunder-proto": "^1.0.0" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -9810,10 +12770,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -9821,13 +12782,13 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, "dependencies": { - "has-symbols": "^1.0.3" + "call-bound": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -9836,3130 +12797,3132 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, - "dependencies": { - "parse-passwd": "^1.0.0" - }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hosted-git-info": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", - "integrity": "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==", - "dependencies": { - "lru-cache": "^10.0.1" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/hpack.js/node_modules/string_decoder": { + "node_modules/is-string": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-entities": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz", - "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ], - "license": "MIT" - }, - "node_modules/htmlparser2": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz", - "integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.1.0", - "entities": "^4.5.0" - } - }, - "node_modules/http-assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz", - "integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, "dependencies": { - "deep-equal": "~1.0.1", - "http-errors": "~1.8.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-assert/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/http-assert/node_modules/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", - "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" + "node": ">= 0.4" }, - "engines": { - "node": ">= 0.6" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/http-assert/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", - "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==" - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" + "which-typed-array": "^1.1.16" }, "engines": { - "node": ">= 6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/http-proxy-agent/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "dependencies": { - "ms": "^2.1.3" - }, + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", "engines": { - "node": ">=6.0" + "node": ">=18" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/http-proxy-agent/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, "engines": { - "node": ">= 6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/https-proxy-agent/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", "dev": true, "dependencies": { - "ms": "^2.1.3" + "call-bound": "^1.0.3" }, "engines": { - "node": ">=6.0" + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/https-proxy-agent/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "license": "MIT", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, "engines": { - "node": ">= 4" + "node": ">=0.10.0" } }, - "node_modules/ignore-walk": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-7.0.0.tgz", - "integrity": "sha512-T4gbf83A4NH95zvhVYZc+qWocBBGlpzUXLPGurJggw/WIOwicfXJChLDP/iBZnN5WqROSu5Bm3hhle4z8a8YGQ==", + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, "dependencies": { - "minimatch": "^9.0.0" + "is-docker": "^2.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=8" } }, - "node_modules/ignore-walk/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dependencies": { - "balanced-match": "^1.0.0" + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "engines": { + "node": ">=16" } }, - "node_modules/ignore-walk/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" + "@isaacs/cliui": "^8.0.2" }, "funding": { "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "node_modules/jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" } }, - "node_modules/import-fresh/node_modules/resolve-from": { + "node_modules/js-tokens": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, - "node_modules/import-modules": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-modules/-/import-modules-2.1.0.tgz", - "integrity": "sha512-8HEWcnkbGpovH9yInoisxaSoIg9Brbul+Ju3Kqe2UsYDUBJD/iQjSgEj0zPcTDPKfPp2fs5xlv1i+JSye/m1/A==", - "dev": true, - "engines": { - "node": ">=8" + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "engines": { - "node": ">=0.8.19" + "node_modules/js2xmlparser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", + "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", + "dependencies": { + "xmlcreate": "^2.0.4" } }, - "node_modules/index-to-position": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.1.0.tgz", - "integrity": "sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==", - "engines": { - "node": ">=18" + "node_modules/jsdoc": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.4.tgz", + "integrity": "sha512-zeFezwyXeG4syyYHbvh1A967IAqq/67yXtXvuL5wnqCkFZe8I0vKfm+EO+YEvLguo6w9CDUbrAXVtJSHh2E8rw==", + "dependencies": { + "@babel/parser": "^7.20.15", + "@jsdoc/salty": "^0.2.1", + "@types/markdown-it": "^14.1.1", + "bluebird": "^3.7.2", + "catharsis": "^0.9.0", + "escape-string-regexp": "^2.0.0", + "js2xmlparser": "^4.0.2", + "klaw": "^3.0.0", + "markdown-it": "^14.1.0", + "markdown-it-anchor": "^8.6.7", + "marked": "^4.0.10", + "mkdirp": "^1.0.4", + "requizzle": "^0.2.3", + "strip-json-comments": "^3.1.0", + "underscore": "~1.13.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "jsdoc": "jsdoc.js" + }, + "engines": { + "node": ">=12.0.0" } }, - "node_modules/inflation": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.1.0.tgz", - "integrity": "sha512-t54PPJHG1Pp7VQvxyVCJ9mBbjG3Hqryges9bXoOO6GExCPa+//i/d5GSuFtpx3ALLd7lgIAur6zrIlBQyJuMlQ==", + "node_modules/jsdoc-type-pratt-parser": { + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-5.9.2.tgz", + "integrity": "sha512-TYzkACp/wPvDJLRY7qpHXtrhgwoAaojIOnLaaVNi+AbPU2u1kkjfKd9hXXTq0qSAGsyYXvwUXt99h9I5iCmjjw==", "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.8.0" + "node": ">=12.0.0" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-5.0.0.tgz", - "integrity": "sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==", + "node_modules/jsdoc/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=8" } }, - "node_modules/internal-slot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.2", - "side-channel": "^1.1.0" + "bin": { + "jsesc": "bin/jsesc" }, "engines": { - "node": ">= 0.4" + "node": ">=6" } }, - "node_modules/ip-address": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", - "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==", + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz", + "integrity": "sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==", "engines": { - "node": ">= 12" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, "engines": { - "node": ">= 0.10" + "node": ">=6" } }, - "node_modules/is-array-buffer": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" + "universalify": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "engines": [ + "node >= 0.2.0" + ] }, - "node_modules/is-async-function": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", - "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, "dependencies": { - "async-function": "^1.0.0", - "call-bound": "^1.0.3", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" }, - "engines": { - "node": ">= 0.4" + "bin": { + "JSONStream": "bin.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "*" } }, - "node_modules/is-bigint": { + "node_modules/keygrip": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", + "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", "dev": true, "dependencies": { - "has-bigints": "^1.0.2" + "tsscmp": "1.0.6" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.6" } }, - "node_modules/is-boolean-object": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", - "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" + "json-buffer": "3.0.1" + } + }, + "node_modules/klaw": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", + "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", + "dependencies": { + "graceful-fs": "^4.1.9" + } + }, + "node_modules/koa": { + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/koa/-/koa-2.16.2.tgz", + "integrity": "sha512-+CCssgnrWKx9aI3OeZwroa/ckG4JICxvIFnSiOUyl2Uv+UTI+xIw0FfFrWS7cQFpoePpr9o8csss7KzsTzNL8Q==", + "dev": true, + "dependencies": { + "accepts": "^1.3.5", + "cache-content-type": "^1.0.0", + "content-disposition": "~0.5.2", + "content-type": "^1.0.4", + "cookies": "~0.9.0", + "debug": "^4.3.2", + "delegates": "^1.0.0", + "depd": "^2.0.0", + "destroy": "^1.0.4", + "encodeurl": "^1.0.2", + "escape-html": "^1.0.3", + "fresh": "~0.5.2", + "http-assert": "^1.3.0", + "http-errors": "^1.6.3", + "is-generator-function": "^1.0.7", + "koa-compose": "^4.1.0", + "koa-convert": "^2.0.0", + "on-finished": "^2.3.0", + "only": "~0.0.2", + "parseurl": "^1.3.2", + "statuses": "^1.5.0", + "type-is": "^1.6.16", + "vary": "^1.1.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4" } }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "node_modules/koa-bodyparser": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/koa-bodyparser/-/koa-bodyparser-4.4.1.tgz", + "integrity": "sha512-kBH3IYPMb+iAXnrxIhXnW+gXV8OTzCu8VPDqvcDHW9SQrbkHmqPQtiZwrltNmSq6/lpipHnT7k7PsjlVD7kK0w==", "dev": true, - "engines": { - "node": ">= 0.4" + "dependencies": { + "co-body": "^6.0.0", + "copy-to": "^2.0.1", + "type-is": "^1.6.18" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8.0.0" } }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "node_modules/koa-compose": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", + "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==", + "dev": true + }, + "node_modules/koa-compress": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/koa-compress/-/koa-compress-5.1.1.tgz", + "integrity": "sha512-UgMIN7ZoEP2DuoSQmD6CYvFSLt0NReGlc2qSY4bO4Oq0L56OiD9pDG41Kj/zFmVY/A3Wvmn4BqKcfq5H30LGIg==", + "dev": true, "dependencies": { - "hasown": "^2.0.2" + "bytes": "^3.1.2", + "compressible": "^2.0.18", + "http-errors": "^1.8.1", + "koa-is-json": "^1.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 12" } }, - "node_modules/is-data-view": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "node_modules/koa-compress/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/koa-compress/node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dev": true, "dependencies": { - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "is-typed-array": "^1.1.13" + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.6" } }, - "node_modules/is-date-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "node_modules/koa-compress/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.6" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "node_modules/koa-conditional-get": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/koa-conditional-get/-/koa-conditional-get-2.0.0.tgz", + "integrity": "sha512-FTZYr681zfyW0bz8FDc55RJrRnicz6KPv2oA3GOf6knksJd0uJdfenKud+RtBjHzO0g1tVHNjwN6gk7OfHAtbQ==", + "dev": true + }, + "node_modules/koa-convert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-2.0.0.tgz", + "integrity": "sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==", "dev": true, - "bin": { - "is-docker": "cli.js" + "dependencies": { + "co": "^4.6.0", + "koa-compose": "^4.1.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 10" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" + "node_modules/koa-etag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/koa-etag/-/koa-etag-4.0.0.tgz", + "integrity": "sha512-1cSdezCkBWlyuB9l6c/IFoe1ANCDdPBxkDkRiaIup40xpUub6U/wwRXoKBZw/O5BifX9OlqAjYnDyzM6+l+TAg==", + "dev": true, + "dependencies": { + "etag": "^1.8.1" } }, - "node_modules/is-finalizationregistry": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "node_modules/koa-is-json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/koa-is-json/-/koa-is-json-1.0.0.tgz", + "integrity": "sha512-+97CtHAlWDx0ndt0J8y3P12EWLwTLMXIfMnYDev3wOTwH/RpBGMlfn4bDXlMEg1u73K6XRE9BbUp+5ZAYoRYWw==", + "dev": true + }, + "node_modules/koa-json": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/koa-json/-/koa-json-2.0.2.tgz", + "integrity": "sha512-8+dz0T2ekDuNN1svYoKPCV2txotQ3Ufg8Fn5bft1T48MPJWiC/HKmkk+3xj9EC/iNZuFYeLRazN2h2o3RSUXuQ==", "dev": true, "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "koa-is-json": "1", + "streaming-json-stringify": "3" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" + "node_modules/koa-morgan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/koa-morgan/-/koa-morgan-1.0.1.tgz", + "integrity": "sha512-JOUdCNlc21G50afBXfErUrr1RKymbgzlrO5KURY+wmDG1Uvd2jmxUJcHgylb/mYXy2SjiNZyYim/ptUBGsIi3A==", + "dev": true, + "dependencies": { + "morgan": "^1.6.1" } }, - "node_modules/is-generator-function": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", - "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "node_modules/koa-range": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/koa-range/-/koa-range-0.3.0.tgz", + "integrity": "sha512-Ich3pCz6RhtbajYXRWjIl6O5wtrLs6kE3nkXc9XmaWe+MysJyZO7K4L3oce1Jpg/iMgCbj+5UCiMm/rqVtcDIg==", "dev": true, "dependencies": { - "call-bound": "^1.0.3", - "get-proto": "^1.0.0", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" + "stream-slice": "^0.1.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=7" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/koa-route": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/koa-route/-/koa-route-4.0.1.tgz", + "integrity": "sha512-ytLrdDPF/qTMh20BxZCNpIUY329SoGu84xjGYeNsp/jkGT3OpZfkuK646sDScVJQ9XdsLXJVMml1dXMA5EIuxQ==", + "dev": true, "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" + "debug": "*", + "methods": "~1.1.0", + "path-to-regexp": "^6.2.1" } }, - "node_modules/is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "node_modules/koa-route/node_modules/path-to-regexp": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "dev": true + }, + "node_modules/koa-send": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/koa-send/-/koa-send-5.0.1.tgz", + "integrity": "sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==", "dev": true, "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" + "debug": "^4.1.1", + "http-errors": "^1.7.3", + "resolve-path": "^1.4.0" }, "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 8" } }, - "node_modules/is-inside-container/node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "node_modules/koa-send/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, - "bin": { - "is-docker": "cli.js" + "dependencies": { + "ms": "^2.1.3" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "node_modules/koa-send/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.6" } }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "node_modules/koa-send/node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dev": true, - "engines": { - "node": ">= 0.4" + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "engines": { - "node": ">=0.12.0" + "node": ">= 0.6" } }, - "node_modules/is-number-like": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", - "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", - "dependencies": { - "lodash.isfinite": "^3.3.2" + "node_modules/koa-send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/koa-send/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" } }, - "node_modules/is-number-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "node_modules/koa-static": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/koa-static/-/koa-static-5.0.0.tgz", + "integrity": "sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==", "dev": true, "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" + "debug": "^3.1.0", + "koa-send": "^5.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 7.6.0" } }, - "node_modules/is-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==" + "node_modules/koa-static/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "node_modules/koa-static/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/koa/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" + "ms": "^2.1.3" }, "engines": { - "node": ">= 0.4" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "node_modules/koa/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.8" } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "node_modules/koa/node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dev": true, "dependencies": { - "call-bound": "^1.0.3" + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.6" } }, - "node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "node_modules/koa/node_modules/http-errors/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.6" } }, - "node_modules/is-string": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "node_modules/koa/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/koa/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.6" } }, - "node_modules/is-symbol": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", - "dev": true, + "node_modules/less-openui5": { + "version": "0.11.6", + "resolved": "https://registry.npmjs.org/less-openui5/-/less-openui5-0.11.6.tgz", + "integrity": "sha512-sQmU+G2pJjFfzRI+XtXkk+T9G0s6UmWWUfOW0utPR46C9lfhNr4DH1lNJuImj64reXYi+vOwyNxPRkj0F3mofA==", "dependencies": { - "call-bound": "^1.0.2", - "has-symbols": "^1.1.0", - "safe-regex-test": "^1.1.0" + "@adobe/css-tools": "^4.0.2", + "clone": "^2.1.2", + "mime": "^1.6.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 10", + "npm": ">= 5" } }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "dependencies": { - "which-typed-array": "^1.1.16" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.8.0" } }, - "node_modules/is-unicode-supported": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", - "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "node_modules/lilconfig": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=18" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/antonk52" } }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/lit-html": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.8.0.tgz", + "integrity": "sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==", "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "license": "BSD-3-Clause", + "dependencies": { + "@types/trusted-types": "^2.0.2" } }, - "node_modules/is-weakref": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", - "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "node_modules/load-module": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/load-module/-/load-module-5.0.0.tgz", + "integrity": "sha512-zZBnYIvAuP2TprnRisam+N/A3v+JX60pvdKoHQRKyl4xlHLQQLpp7JKNyEQ6D3Si0/QIQMgXko3PtV+cx6L7mA==", "dev": true, "dependencies": { - "call-bound": "^1.0.3" + "array-back": "^6.2.2" }, "engines": { - "node": ">= 0.4" + "node": ">=12.20" + } + }, + "node_modules/local-web-server": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/local-web-server/-/local-web-server-5.4.0.tgz", + "integrity": "sha512-FkQT6ZuX+8ywks3Mol5nHtuKzf+Rhtp88PPJUkcU0fP6JzNi7s9a+dWRQ8WrCxlGe3vHij85A4R1uL4wRg06WA==", + "dev": true, + "dependencies": { + "current-module-paths": "^1.1.1", + "lws": "^4.1.5", + "lws-basic-auth": "^2.0.0", + "lws-blacklist": "^3.0.0", + "lws-body-parser": "^3.0.1", + "lws-compress": "^3.1.0", + "lws-conditional-get": "^3.0.0", + "lws-cors": "^4.2.1", + "lws-index": "^3.1.1", + "lws-json": "^2.0.0", + "lws-log": "^3.0.0", + "lws-mime": "^2.0.0", + "lws-range": "^4.0.1", + "lws-request-monitor": "^2.0.0", + "lws-rewrite": "^4.0.0", + "lws-spa": "^4.1.1", + "lws-static": "^3.1.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "ws": "bin/cli.js" + }, + "engines": { + "node": ">=12.20" } }, - "node_modules/is-weakset": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "dependencies": { - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" + "p-locate": "^5.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node_modules/lockfile": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.4.tgz", + "integrity": "sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA==", + "dependencies": { + "signal-exit": "^3.0.2" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "node_modules/lockfile/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true + }, + "node_modules/lodash.isfinite": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", + "integrity": "sha512-7FGG40uhC8Mm633uKW1r58aElFlBlxCrg9JfSi3P6aYiWmfiWF0PgMd86ZUsxE5GwWPdHoS2+48bwTh2VPkIQA==" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "engines": { - "node": ">=16" - } + "node_modules/lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==", + "dev": true }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "license": "MIT", "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "tslib": "^2.0.3" } }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "node_modules/lws": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lws/-/lws-4.2.0.tgz", + "integrity": "sha512-J6mZB9mNauMBjIEh0wCF3U5bdhhuiamwTmDQ0nCTXWp6tvXNi/3RCgc4F1UN6rGpTaKgEfDnDQEo9ThLsc0UAg==", + "dev": true, "dependencies": { - "argparse": "^2.0.1" + "@75lb/deep-merge": "^1.1.2", + "ansi-escape-sequences": "^6.2.2", + "array-back": "^6.2.2", + "byte-size": "^9.0.0", + "command-line-args": "^6.0.0", + "command-line-usage": "^7.0.3", + "create-mixin": "^3.0.0", + "current-module-paths": "^1.1.1", + "koa": "^2.15.3", + "load-module": "^5.0.0", + "open": "^8.4.2", + "qrcode-terminal": "^0.12.0", + "typical": "^7.1.1", + "walk-back": "^5.1.0" }, "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/js2xmlparser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", - "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", - "dependencies": { - "xmlcreate": "^2.0.4" + "lws": "bin/cli.js" + }, + "engines": { + "node": ">=12.20" } }, - "node_modules/jsdoc": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.4.tgz", - "integrity": "sha512-zeFezwyXeG4syyYHbvh1A967IAqq/67yXtXvuL5wnqCkFZe8I0vKfm+EO+YEvLguo6w9CDUbrAXVtJSHh2E8rw==", + "node_modules/lws-basic-auth": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lws-basic-auth/-/lws-basic-auth-2.0.0.tgz", + "integrity": "sha512-zzyoGFLQPuKaQJvHMLmmSyfT6lIvocwcDXllTVW5brD0t0YgHYopILkzja+x+MIlJX/YhNKniaTSasujniYVjw==", + "dev": true, "dependencies": { - "@babel/parser": "^7.20.15", - "@jsdoc/salty": "^0.2.1", - "@types/markdown-it": "^14.1.1", - "bluebird": "^3.7.2", - "catharsis": "^0.9.0", - "escape-string-regexp": "^2.0.0", - "js2xmlparser": "^4.0.2", - "klaw": "^3.0.0", - "markdown-it": "^14.1.0", - "markdown-it-anchor": "^8.6.7", - "marked": "^4.0.10", - "mkdirp": "^1.0.4", - "requizzle": "^0.2.3", - "strip-json-comments": "^3.1.0", - "underscore": "~1.13.2" - }, - "bin": { - "jsdoc": "jsdoc.js" + "basic-auth": "^2.0.1" }, "engines": { - "node": ">=12.0.0" + "node": ">=10" } }, - "node_modules/jsdoc-type-pratt-parser": { - "version": "5.9.2", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-5.9.2.tgz", - "integrity": "sha512-TYzkACp/wPvDJLRY7qpHXtrhgwoAaojIOnLaaVNi+AbPU2u1kkjfKd9hXXTq0qSAGsyYXvwUXt99h9I5iCmjjw==", + "node_modules/lws-blacklist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lws-blacklist/-/lws-blacklist-3.0.0.tgz", + "integrity": "sha512-KNXGDBmbj+UGfWMBAefe2vrfuWpEQms/9Fd7kfMScTqAKF6nrVoEs4pkxfefArG3bX0bu7jWLyB4tJGma5WC6Q==", "dev": true, - "license": "MIT", + "dependencies": { + "array-back": "^4.0.1", + "path-to-regexp": "^6.1.0" + }, "engines": { - "node": ">=12.0.0" + "node": ">=10" } }, - "node_modules/jsdoc/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "node_modules/lws-blacklist/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true, "engines": { "node": ">=8" } }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "node_modules/lws-blacklist/node_modules/path-to-regexp": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "dev": true + }, + "node_modules/lws-body-parser": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lws-body-parser/-/lws-body-parser-3.0.1.tgz", + "integrity": "sha512-HUlTGYukWRXnmAFlpJhaJWSFsfkOP4fC9fjEiYeyI0kTy0/SaMLwcLzi5hQ/eriLZNGuF+PqnhBMtOys6nPdfw==", "dev": true, - "bin": { - "jsesc": "bin/jsesc" + "dependencies": { + "koa-bodyparser": "^4.4.1" }, "engines": { - "node": ">=6" + "node": ">=12.17" } }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz", - "integrity": "sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==", + "node_modules/lws-compress": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lws-compress/-/lws-compress-3.1.0.tgz", + "integrity": "sha512-uBlpYFNBUD3FuQjXbtwasvD90w3HH6GRivknvbibSSsDQf1MtIM8WZ5fS4795n1ozTYnQD+Ai8T+Cpy0q0xuhA==", + "dev": true, + "dependencies": { + "koa-compress": "^5.0.1" + }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=12.17" } }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "node_modules/lws-conditional-get": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lws-conditional-get/-/lws-conditional-get-3.0.0.tgz", + "integrity": "sha512-/O+JSIB889kIYgo8QFyJJayW3W0BMRc8zPHE6F5FBGtdqpsl+UsKZHFiSmJSTRn/1HGgnmcXQz2UpbB1PQYVSw==", "dev": true, - "bin": { - "json5": "lib/cli.js" + "dependencies": { + "koa-conditional-get": "^2.0.0", + "koa-etag": "^4.0.0" }, "engines": { - "node": ">=6" + "node": ">=12.17" } }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "engines": [ - "node >= 0.2.0" - ] - }, - "node_modules/JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "node_modules/lws-cors": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lws-cors/-/lws-cors-4.2.1.tgz", + "integrity": "sha512-KXsAn0Wn8n0riJ3SDHQzEAuzTrdeQZDJIxPHWEupsImW2hnQuBZVW5zqsmfzxD8SkCDDnQyFNuQZjSlBZmexKg==", "dev": true, "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" + "@koa/cors": "^5.0.0" }, "engines": { - "node": "*" + "node": ">=12.17" } - }, - "node_modules/keygrip": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", - "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", + }, + "node_modules/lws-index": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lws-index/-/lws-index-3.1.1.tgz", + "integrity": "sha512-f1rjsCkrKHVbSe03lm6xQ1GNnqzq/tL5f0ge8kXJFRorpS8Sv7WDXzUsGswmGAgxPPvDj8L7E6zwD+BCjQRU8w==", "dev": true, "dependencies": { - "tsscmp": "1.0.6" + "serve-index-75lb": "^2.0.1" }, "engines": { - "node": ">= 0.6" + "node": ">=12.17" } }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "node_modules/lws-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lws-json/-/lws-json-2.0.0.tgz", + "integrity": "sha512-vqUFrAQ5BGpkMS2Mm/ZhgvUMi6Tgia7YtESG7pKjNoiSsD+TxncG0nqp8YjUh2xrEzi/SYFc/ed+9ZOl/t0A0g==", "dev": true, "dependencies": { - "json-buffer": "3.0.1" + "koa-json": "^2.0.2" + }, + "engines": { + "node": ">=10" } }, - "node_modules/klaw": { + "node_modules/lws-log": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", - "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", + "resolved": "https://registry.npmjs.org/lws-log/-/lws-log-3.0.0.tgz", + "integrity": "sha512-I0P5dcZkR97GQ92lyJHQlCZ6eRDota+4OQrEoVXSJQD1Dc8CFxy0+4ELYJke6RwEWmr0BwU65C1cCcSC1w5NFA==", + "dev": true, "dependencies": { - "graceful-fs": "^4.1.9" + "koa-morgan": "^1.0.1", + "stream-log-stats": "^3.0.2" + }, + "engines": { + "node": ">=12" } }, - "node_modules/koa": { - "version": "2.16.2", - "resolved": "https://registry.npmjs.org/koa/-/koa-2.16.2.tgz", - "integrity": "sha512-+CCssgnrWKx9aI3OeZwroa/ckG4JICxvIFnSiOUyl2Uv+UTI+xIw0FfFrWS7cQFpoePpr9o8csss7KzsTzNL8Q==", + "node_modules/lws-mime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lws-mime/-/lws-mime-2.0.0.tgz", + "integrity": "sha512-mfrAgRQ5+hkQ7LJ6EAgwnUeymNeYxwLXZY3UQ6C2hSTr7BqMSzm9k5O0C8wWP2dzdhChzITYKwzWbUnAYVBwtA==", "dev": true, - "dependencies": { - "accepts": "^1.3.5", - "cache-content-type": "^1.0.0", - "content-disposition": "~0.5.2", - "content-type": "^1.0.4", - "cookies": "~0.9.0", - "debug": "^4.3.2", - "delegates": "^1.0.0", - "depd": "^2.0.0", - "destroy": "^1.0.4", - "encodeurl": "^1.0.2", - "escape-html": "^1.0.3", - "fresh": "~0.5.2", - "http-assert": "^1.3.0", - "http-errors": "^1.6.3", - "is-generator-function": "^1.0.7", - "koa-compose": "^4.1.0", - "koa-convert": "^2.0.0", - "on-finished": "^2.3.0", - "only": "~0.0.2", - "parseurl": "^1.3.2", - "statuses": "^1.5.0", - "type-is": "^1.6.16", - "vary": "^1.1.2" - }, "engines": { - "node": "^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4" + "node": ">=10" } }, - "node_modules/koa-bodyparser": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/koa-bodyparser/-/koa-bodyparser-4.4.1.tgz", - "integrity": "sha512-kBH3IYPMb+iAXnrxIhXnW+gXV8OTzCu8VPDqvcDHW9SQrbkHmqPQtiZwrltNmSq6/lpipHnT7k7PsjlVD7kK0w==", + "node_modules/lws-range": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lws-range/-/lws-range-4.0.1.tgz", + "integrity": "sha512-rUkHpsRv5Ixr+8/E4cDCz6jUi6En6hnEaDZhPb0a1GU1vasOHhGcW0qilkgf0dtS0xDJzdKixdfcCW40ankIeQ==", "dev": true, "dependencies": { - "co-body": "^6.0.0", - "copy-to": "^2.0.1", - "type-is": "^1.6.18" + "koa-range": "^0.3.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=12.17" } }, - "node_modules/koa-compose": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", - "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==", - "dev": true - }, - "node_modules/koa-compress": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/koa-compress/-/koa-compress-5.1.1.tgz", - "integrity": "sha512-UgMIN7ZoEP2DuoSQmD6CYvFSLt0NReGlc2qSY4bO4Oq0L56OiD9pDG41Kj/zFmVY/A3Wvmn4BqKcfq5H30LGIg==", + "node_modules/lws-request-monitor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lws-request-monitor/-/lws-request-monitor-2.0.0.tgz", + "integrity": "sha512-ZTo0/pS42qiejcYlL+wlpurSbDSS0J7pDDohqBx7jjUQkgni2Qd8cPzn/kW8QI82gXgDmdZH+ps0vheLHlgdgg==", "dev": true, "dependencies": { - "bytes": "^3.1.2", - "compressible": "^2.0.18", - "http-errors": "^1.8.1", - "koa-is-json": "^1.0.0" + "byte-size": "^6.2.0" }, "engines": { - "node": ">= 12" + "node": ">=10" } }, - "node_modules/koa-compress/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "node_modules/lws-request-monitor/node_modules/byte-size": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-6.2.0.tgz", + "integrity": "sha512-6EspYUCAPMc7E2rltBgKwhG+Cmk0pDm9zDtF1Awe2dczNUL3YpZ8mTs/dueOTS1hqGWBOatqef4jYMGjln7WmA==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/koa-compress/node_modules/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "node_modules/lws-rewrite": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lws-rewrite/-/lws-rewrite-4.0.0.tgz", + "integrity": "sha512-I9rNDyAuy/1Wz2WMWTqjxFMlUTr8CugdHlUCjIudQkt04YnRdhP32iAoRnVnLsgP1UOiM44dxTW2EomQHHfirw==", "dev": true, "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" + "array-back": "^6.2.2", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "koa-route": "^4.0.1", + "path-to-regexp": "^6.2.2" + }, + "bin": { + "lws-rewrite": "bin/cli.js" }, "engines": { - "node": ">= 0.6" + "node": ">=12.17" } }, - "node_modules/koa-compress/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "node_modules/lws-rewrite/node_modules/path-to-regexp": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "dev": true + }, + "node_modules/lws-spa": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lws-spa/-/lws-spa-4.1.1.tgz", + "integrity": "sha512-v032GXet8j818l6vUyAlQm1HfcxPVM+Flvxptv6EcDveUJqvfNX5j1bo9PqKB8HbyEScek5OH8guFAqrSOwBNw==", "dev": true, + "dependencies": { + "koa-send": "^5.0.1" + }, "engines": { - "node": ">= 0.6" + "node": ">=12.17" } }, - "node_modules/koa-conditional-get": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/koa-conditional-get/-/koa-conditional-get-2.0.0.tgz", - "integrity": "sha512-FTZYr681zfyW0bz8FDc55RJrRnicz6KPv2oA3GOf6knksJd0uJdfenKud+RtBjHzO0g1tVHNjwN6gk7OfHAtbQ==", - "dev": true - }, - "node_modules/koa-convert": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-2.0.0.tgz", - "integrity": "sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==", + "node_modules/lws-static": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lws-static/-/lws-static-3.1.1.tgz", + "integrity": "sha512-4Xb6rE4gVp2ZmuiVYwvFaSsMUbQ8CwxSxzHzfK6URFz4g3vVT8+e+ekGlItp8ePf9w7u9l96HU7+QDswsmwhCg==", "dev": true, "dependencies": { - "co": "^4.6.0", - "koa-compose": "^4.1.0" + "koa-static": "^5.0.0" }, "engines": { - "node": ">= 10" + "node": ">=12.17" } }, - "node_modules/koa-etag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/koa-etag/-/koa-etag-4.0.0.tgz", - "integrity": "sha512-1cSdezCkBWlyuB9l6c/IFoe1ANCDdPBxkDkRiaIup40xpUub6U/wwRXoKBZw/O5BifX9OlqAjYnDyzM6+l+TAg==", + "node_modules/magic-string": { + "version": "0.30.19", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", + "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", "dev": true, "dependencies": { - "etag": "^1.8.1" + "@jridgewell/sourcemap-codec": "^1.5.5" } }, - "node_modules/koa-is-json": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/koa-is-json/-/koa-is-json-1.0.0.tgz", - "integrity": "sha512-+97CtHAlWDx0ndt0J8y3P12EWLwTLMXIfMnYDev3wOTwH/RpBGMlfn4bDXlMEg1u73K6XRE9BbUp+5ZAYoRYWw==", - "dev": true - }, - "node_modules/koa-json": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/koa-json/-/koa-json-2.0.2.tgz", - "integrity": "sha512-8+dz0T2ekDuNN1svYoKPCV2txotQ3Ufg8Fn5bft1T48MPJWiC/HKmkk+3xj9EC/iNZuFYeLRazN2h2o3RSUXuQ==", + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true, + "license": "ISC" + }, + "node_modules/make-fetch-happen": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-14.0.3.tgz", + "integrity": "sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==", "dependencies": { - "koa-is-json": "1", - "streaming-json-stringify": "3" + "@npmcli/agent": "^3.0.0", + "cacache": "^19.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^1.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "ssri": "^12.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/koa-morgan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/koa-morgan/-/koa-morgan-1.0.1.tgz", - "integrity": "sha512-JOUdCNlc21G50afBXfErUrr1RKymbgzlrO5KURY+wmDG1Uvd2jmxUJcHgylb/mYXy2SjiNZyYim/ptUBGsIi3A==", + "node_modules/make-fetch-happen/node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mark.js": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", + "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==", "dev": true, + "license": "MIT" + }, + "node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", "dependencies": { - "morgan": "^1.6.1" + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" } }, - "node_modules/koa-range": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/koa-range/-/koa-range-0.3.0.tgz", - "integrity": "sha512-Ich3pCz6RhtbajYXRWjIl6O5wtrLs6kE3nkXc9XmaWe+MysJyZO7K4L3oce1Jpg/iMgCbj+5UCiMm/rqVtcDIg==", + "node_modules/markdown-it-anchor": { + "version": "8.6.7", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", + "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", + "peerDependencies": { + "@types/markdown-it": "*", + "markdown-it": "*" + } + }, + "node_modules/markdown-it-implicit-figures": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/markdown-it-implicit-figures/-/markdown-it-implicit-figures-0.12.0.tgz", + "integrity": "sha512-IeD2V74f3ZBYrZ+bz/9uEGii0S61BYoD2731qsHTgYLlENUrTevlgODScScS1CK44/TV9ddlufGHCYCQueh1rw==", "dev": true, - "dependencies": { - "stream-slice": "^0.1.2" - }, + "license": "MIT", "engines": { - "node": ">=7" + "node": ">=0.10.0" } }, - "node_modules/koa-route": { + "node_modules/markdown-it-link-attributes": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/koa-route/-/koa-route-4.0.1.tgz", - "integrity": "sha512-ytLrdDPF/qTMh20BxZCNpIUY329SoGu84xjGYeNsp/jkGT3OpZfkuK646sDScVJQ9XdsLXJVMml1dXMA5EIuxQ==", + "resolved": "https://registry.npmjs.org/markdown-it-link-attributes/-/markdown-it-link-attributes-4.0.1.tgz", + "integrity": "sha512-pg5OK0jPLg62H4k7M9mRJLT61gUp9nvG0XveKYHMOOluASo9OEF13WlXrpAp2aj35LbedAy3QOCgQCw0tkLKAQ==", "dev": true, - "dependencies": { - "debug": "*", - "methods": "~1.1.0", - "path-to-regexp": "^6.2.1" - } - }, - "node_modules/koa-route/node_modules/path-to-regexp": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", - "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", - "dev": true + "license": "MIT" }, - "node_modules/koa-send": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/koa-send/-/koa-send-5.0.1.tgz", - "integrity": "sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==", + "node_modules/markdown-it-plantuml": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/markdown-it-plantuml/-/markdown-it-plantuml-1.4.1.tgz", + "integrity": "sha512-13KgnZaGYTHBp4iUmGofzZSBz+Zj6cyqfR0SXUIc9wgWTto5Xhn7NjaXYxY0z7uBeTUMlc9LMQq5uP4OM5xCHg==", "dev": true, - "dependencies": { - "debug": "^4.1.1", - "http-errors": "^1.7.3", - "resolve-path": "^1.4.0" + "license": "MIT" + }, + "node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "bin": { + "marked": "bin/marked.js" }, "engines": { - "node": ">= 8" + "node": ">= 12" } }, - "node_modules/koa-send/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "dependencies": { - "ms": "^2.1.3" - }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">= 0.4" } }, - "node_modules/koa-send/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "engines": { "node": ">= 0.6" } }, - "node_modules/koa-send/node_modules/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "node_modules/meow": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", + "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" - }, "engines": { - "node": ">= 0.6" + "node": ">=16.10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/koa-send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/koa-send/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true, - "engines": { - "node": ">= 0.6" + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/koa-static": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/koa-static/-/koa-static-5.0.0.tgz", - "integrity": "sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==", - "dev": true, - "dependencies": { - "debug": "^3.1.0", - "koa-send": "^5.0.0" - }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "engines": { - "node": ">= 7.6.0" + "node": ">= 8" } }, - "node_modules/koa-static/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" } }, - "node_modules/koa-static/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "node_modules/micro-spelling-correcter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/micro-spelling-correcter/-/micro-spelling-correcter-1.1.1.tgz", + "integrity": "sha512-lkJ3Rj/mtjlRcHk6YyCbvZhyWTOzdBvTHsxMmZSk5jxN1YyVSQ+JETAom55mdzfcyDrY/49Z7UCW760BK30crg==", "dev": true }, - "node_modules/koa/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dependencies": { - "ms": "^2.1.3" + "braces": "^3.0.3", + "picomatch": "^2.3.1" }, "engines": { - "node": ">=6.0" + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "engines": { + "node": ">=4" } }, - "node_modules/koa/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "engines": { - "node": ">= 0.8" + "node": ">= 0.6" } }, - "node_modules/koa/node_modules/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", - "dev": true, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" + "mime-db": "1.52.0" }, "engines": { "node": ">= 0.6" } }, - "node_modules/koa/node_modules/http-errors/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true, + "node_modules/mime-types/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "engines": { "node": ">= 0.6" } }, - "node_modules/koa/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, - "node_modules/koa/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true, + "node_modules/minimatch": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", + "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.0" + }, "engines": { - "node": ">= 0.6" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/less-openui5": { - "version": "0.11.6", - "resolved": "https://registry.npmjs.org/less-openui5/-/less-openui5-0.11.6.tgz", - "integrity": "sha512-sQmU+G2pJjFfzRI+XtXkk+T9G0s6UmWWUfOW0utPR46C9lfhNr4DH1lNJuImj64reXYi+vOwyNxPRkj0F3mofA==", - "dependencies": { - "@adobe/css-tools": "^4.0.2", - "clone": "^2.1.2", - "mime": "^1.6.0" - }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "engines": { - "node": ">= 10", - "npm": ">= 5" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, + "node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" + "minipass": "^7.0.3" }, "engines": { - "node": ">= 0.8.0" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/linkify-it": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", - "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "node_modules/minipass-fetch": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-4.0.1.tgz", + "integrity": "sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ==", "dependencies": { - "uc.micro": "^2.0.0" + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^3.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" } }, - "node_modules/load-module": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/load-module/-/load-module-5.0.0.tgz", - "integrity": "sha512-zZBnYIvAuP2TprnRisam+N/A3v+JX60pvdKoHQRKyl4xlHLQQLpp7JKNyEQ6D3Si0/QIQMgXko3PtV+cx6L7mA==", - "dev": true, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "dependencies": { - "array-back": "^6.2.2" + "minipass": "^3.0.0" }, "engines": { - "node": ">=12.20" + "node": ">= 8" } }, - "node_modules/local-web-server": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/local-web-server/-/local-web-server-5.4.0.tgz", - "integrity": "sha512-FkQT6ZuX+8ywks3Mol5nHtuKzf+Rhtp88PPJUkcU0fP6JzNi7s9a+dWRQ8WrCxlGe3vHij85A4R1uL4wRg06WA==", - "dev": true, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dependencies": { - "current-module-paths": "^1.1.1", - "lws": "^4.1.5", - "lws-basic-auth": "^2.0.0", - "lws-blacklist": "^3.0.0", - "lws-body-parser": "^3.0.1", - "lws-compress": "^3.1.0", - "lws-conditional-get": "^3.0.0", - "lws-cors": "^4.2.1", - "lws-index": "^3.1.1", - "lws-json": "^2.0.0", - "lws-log": "^3.0.0", - "lws-mime": "^2.0.0", - "lws-range": "^4.0.1", - "lws-request-monitor": "^2.0.0", - "lws-rewrite": "^4.0.0", - "lws-spa": "^4.1.1", - "lws-static": "^3.1.1" - }, - "bin": { - "ws": "bin/cli.js" + "yallist": "^4.0.0" }, "engines": { - "node": ">=12.20" + "node": ">=8" } }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "dependencies": { - "p-locate": "^5.0.0" + "minipass": "^3.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/lockfile": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.4.tgz", - "integrity": "sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA==", + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dependencies": { - "signal-exit": "^3.0.2" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/lockfile/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true - }, - "node_modules/lodash.isfinite": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", - "integrity": "sha512-7FGG40uhC8Mm633uKW1r58aElFlBlxCrg9JfSi3P6aYiWmfiWF0PgMd86ZUsxE5GwWPdHoS2+48bwTh2VPkIQA==" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.throttle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", - "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==", - "dev": true - }, - "node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, - "node_modules/lws": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lws/-/lws-4.2.0.tgz", - "integrity": "sha512-J6mZB9mNauMBjIEh0wCF3U5bdhhuiamwTmDQ0nCTXWp6tvXNi/3RCgc4F1UN6rGpTaKgEfDnDQEo9ThLsc0UAg==", - "dev": true, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", "dependencies": { - "@75lb/deep-merge": "^1.1.2", - "ansi-escape-sequences": "^6.2.2", - "array-back": "^6.2.2", - "byte-size": "^9.0.0", - "command-line-args": "^6.0.0", - "command-line-usage": "^7.0.3", - "create-mixin": "^3.0.0", - "current-module-paths": "^1.1.1", - "koa": "^2.15.3", - "load-module": "^5.0.0", - "open": "^8.4.2", - "qrcode-terminal": "^0.12.0", - "typical": "^7.1.1", - "walk-back": "^5.1.0" - }, - "bin": { - "lws": "bin/cli.js" + "minipass": "^3.0.0" }, "engines": { - "node": ">=12.20" + "node": ">=8" } }, - "node_modules/lws-basic-auth": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lws-basic-auth/-/lws-basic-auth-2.0.0.tgz", - "integrity": "sha512-zzyoGFLQPuKaQJvHMLmmSyfT6lIvocwcDXllTVW5brD0t0YgHYopILkzja+x+MIlJX/YhNKniaTSasujniYVjw==", - "dev": true, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dependencies": { - "basic-auth": "^2.0.1" + "yallist": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/lws-blacklist": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lws-blacklist/-/lws-blacklist-3.0.0.tgz", - "integrity": "sha512-KNXGDBmbj+UGfWMBAefe2vrfuWpEQms/9Fd7kfMScTqAKF6nrVoEs4pkxfefArG3bX0bu7jWLyB4tJGma5WC6Q==", - "dev": true, + "node_modules/minipass-sized/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/minizlib": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", + "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", "dependencies": { - "array-back": "^4.0.1", - "path-to-regexp": "^6.1.0" + "minipass": "^7.1.2" }, "engines": { - "node": ">=10" + "node": ">= 18" } }, - "node_modules/lws-blacklist/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", "dev": true, + "license": "MIT" + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/lws-blacklist/node_modules/path-to-regexp": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", - "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", - "dev": true - }, - "node_modules/lws-body-parser": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lws-body-parser/-/lws-body-parser-3.0.1.tgz", - "integrity": "sha512-HUlTGYukWRXnmAFlpJhaJWSFsfkOP4fC9fjEiYeyI0kTy0/SaMLwcLzi5hQ/eriLZNGuF+PqnhBMtOys6nPdfw==", + "node_modules/morgan": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.1.tgz", + "integrity": "sha512-223dMRJtI/l25dJKWpgij2cMtywuG/WiUKXdvwfbhGKBhy1puASqXwFzmWZ7+K73vUPoR7SS2Qz2cI/g9MKw0A==", "dev": true, "dependencies": { - "koa-bodyparser": "^4.4.1" + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.1.0" }, "engines": { - "node": ">=12.17" + "node": ">= 0.8.0" } }, - "node_modules/lws-compress": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lws-compress/-/lws-compress-3.1.0.tgz", - "integrity": "sha512-uBlpYFNBUD3FuQjXbtwasvD90w3HH6GRivknvbibSSsDQf1MtIM8WZ5fS4795n1ozTYnQD+Ai8T+Cpy0q0xuhA==", + "node_modules/morgan/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", "dev": true, "dependencies": { - "koa-compress": "^5.0.1" + "ee-first": "1.1.1" }, "engines": { - "node": ">=12.17" + "node": ">= 0.8" } }, - "node_modules/lws-conditional-get": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lws-conditional-get/-/lws-conditional-get-3.0.0.tgz", - "integrity": "sha512-/O+JSIB889kIYgo8QFyJJayW3W0BMRc8zPHE6F5FBGtdqpsl+UsKZHFiSmJSTRn/1HGgnmcXQz2UpbB1PQYVSw==", + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/multimatch": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", + "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", "dev": true, "dependencies": { - "koa-conditional-get": "^2.0.0", - "koa-etag": "^4.0.0" + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" }, "engines": { - "node": ">=12.17" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lws-cors": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lws-cors/-/lws-cors-4.2.1.tgz", - "integrity": "sha512-KXsAn0Wn8n0riJ3SDHQzEAuzTrdeQZDJIxPHWEupsImW2hnQuBZVW5zqsmfzxD8SkCDDnQyFNuQZjSlBZmexKg==", + "node_modules/multimatch/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { - "@koa/cors": "^5.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=12.17" + "node": "*" } }, - "node_modules/lws-index": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lws-index/-/lws-index-3.1.1.tgz", - "integrity": "sha512-f1rjsCkrKHVbSe03lm6xQ1GNnqzq/tL5f0ge8kXJFRorpS8Sv7WDXzUsGswmGAgxPPvDj8L7E6zwD+BCjQRU8w==", + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", "dev": true, + "license": "MIT", "dependencies": { - "serve-index-75lb": "^2.0.1" - }, - "engines": { - "node": ">=12.17" + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" } }, - "node_modules/lws-json": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lws-json/-/lws-json-2.0.0.tgz", - "integrity": "sha512-vqUFrAQ5BGpkMS2Mm/ZhgvUMi6Tgia7YtESG7pKjNoiSsD+TxncG0nqp8YjUh2xrEzi/SYFc/ed+9ZOl/t0A0g==", + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "dev": true, - "dependencies": { - "koa-json": "^2.0.2" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" }, "engines": { - "node": ">=10" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/lws-log": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lws-log/-/lws-log-3.0.0.tgz", - "integrity": "sha512-I0P5dcZkR97GQ92lyJHQlCZ6eRDota+4OQrEoVXSJQD1Dc8CFxy0+4ELYJke6RwEWmr0BwU65C1cCcSC1w5NFA==", + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "dev": true, + "license": "MIT", "dependencies": { - "koa-morgan": "^1.0.1", - "stream-log-stats": "^3.0.2" + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-gyp": { + "version": "11.4.2", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.4.2.tgz", + "integrity": "sha512-3gD+6zsrLQH7DyYOUIutaauuXrcyxeTPyQuZQCQoNPZMHMMS5m4y0xclNpvYzoK3VNzuyxT6eF4mkIL4WSZ1eQ==", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^14.0.3", + "nopt": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "tar": "^7.4.3", + "tinyglobby": "^0.2.12", + "which": "^5.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": ">=12" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/lws-mime": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lws-mime/-/lws-mime-2.0.0.tgz", - "integrity": "sha512-mfrAgRQ5+hkQ7LJ6EAgwnUeymNeYxwLXZY3UQ6C2hSTr7BqMSzm9k5O0C8wWP2dzdhChzITYKwzWbUnAYVBwtA==", + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", "dev": true, + "license": "MIT" + }, + "node_modules/node-stream-zip": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz", + "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==", "engines": { - "node": ">=10" + "node": ">=0.12.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/antelle" } }, - "node_modules/lws-range": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lws-range/-/lws-range-4.0.1.tgz", - "integrity": "sha512-rUkHpsRv5Ixr+8/E4cDCz6jUi6En6hnEaDZhPb0a1GU1vasOHhGcW0qilkgf0dtS0xDJzdKixdfcCW40ankIeQ==", - "dev": true, + "node_modules/nopt": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", + "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", "dependencies": { - "koa-range": "^0.3.0" + "abbrev": "^3.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" }, "engines": { - "node": ">=12.17" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/lws-request-monitor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lws-request-monitor/-/lws-request-monitor-2.0.0.tgz", - "integrity": "sha512-ZTo0/pS42qiejcYlL+wlpurSbDSS0J7pDDohqBx7jjUQkgni2Qd8cPzn/kW8QI82gXgDmdZH+ps0vheLHlgdgg==", - "dev": true, + "node_modules/normalize-package-data": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", "dependencies": { - "byte-size": "^6.2.0" + "hosted-git-info": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" }, "engines": { - "node": ">=10" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/lws-request-monitor/node_modules/byte-size": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-6.2.0.tgz", - "integrity": "sha512-6EspYUCAPMc7E2rltBgKwhG+Cmk0pDm9zDtF1Awe2dczNUL3YpZ8mTs/dueOTS1hqGWBOatqef4jYMGjln7WmA==", - "dev": true, + "node_modules/normalize-package-data/node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "dependencies": { + "lru-cache": "^10.0.1" + }, "engines": { - "node": ">=8" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/lws-rewrite": { + "node_modules/npm-bundled": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/lws-rewrite/-/lws-rewrite-4.0.0.tgz", - "integrity": "sha512-I9rNDyAuy/1Wz2WMWTqjxFMlUTr8CugdHlUCjIudQkt04YnRdhP32iAoRnVnLsgP1UOiM44dxTW2EomQHHfirw==", - "dev": true, + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-4.0.0.tgz", + "integrity": "sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA==", "dependencies": { - "array-back": "^6.2.2", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.1", - "koa-route": "^4.0.1", - "path-to-regexp": "^6.2.2" + "npm-normalize-package-bin": "^4.0.0" }, - "bin": { - "lws-rewrite": "bin/cli.js" + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-install-checks": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-7.1.2.tgz", + "integrity": "sha512-z9HJBCYw9Zr8BqXcllKIs5nI+QggAImbBdHphOzVYrz2CB4iQ6FzWyKmlqDZua+51nAu7FcemlbTc9VgQN5XDQ==", + "dependencies": { + "semver": "^7.1.1" }, "engines": { - "node": ">=12.17" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/lws-rewrite/node_modules/path-to-regexp": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", - "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", - "dev": true + "node_modules/npm-normalize-package-bin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz", + "integrity": "sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } }, - "node_modules/lws-spa": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lws-spa/-/lws-spa-4.1.1.tgz", - "integrity": "sha512-v032GXet8j818l6vUyAlQm1HfcxPVM+Flvxptv6EcDveUJqvfNX5j1bo9PqKB8HbyEScek5OH8guFAqrSOwBNw==", - "dev": true, + "node_modules/npm-package-arg": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-12.0.2.tgz", + "integrity": "sha512-f1NpFjNI9O4VbKMOlA5QoBq/vSQPORHcTZ2feJpFkTHJ9eQkdlmZEKSjcAhxTGInC7RlEyScT9ui67NaOsjFWA==", "dependencies": { - "koa-send": "^5.0.1" + "hosted-git-info": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^6.0.0" }, "engines": { - "node": ">=12.17" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/lws-static": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lws-static/-/lws-static-3.1.1.tgz", - "integrity": "sha512-4Xb6rE4gVp2ZmuiVYwvFaSsMUbQ8CwxSxzHzfK6URFz4g3vVT8+e+ekGlItp8ePf9w7u9l96HU7+QDswsmwhCg==", - "dev": true, + "node_modules/npm-packlist": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-9.0.0.tgz", + "integrity": "sha512-8qSayfmHJQTx3nJWYbbUmflpyarbLMBc6LCAjYsiGtXxDB68HaZpb8re6zeaLGxZzDuMdhsg70jryJe+RrItVQ==", "dependencies": { - "koa-static": "^5.0.0" + "ignore-walk": "^7.0.0" }, "engines": { - "node": ">=12.17" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/magic-string": { - "version": "0.30.19", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", - "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", - "dev": true, + "node_modules/npm-pick-manifest": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-10.0.0.tgz", + "integrity": "sha512-r4fFa4FqYY8xaM7fHecQ9Z2nE9hgNfJR+EmoKv0+chvzWkBcORX3r0FpTByP+CbOVJDladMXnPQGVN8PBLGuTQ==", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" + "npm-install-checks": "^7.1.0", + "npm-normalize-package-bin": "^4.0.0", + "npm-package-arg": "^12.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/make-fetch-happen": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-14.0.3.tgz", - "integrity": "sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==", + "node_modules/npm-registry-fetch": { + "version": "18.0.2", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-18.0.2.tgz", + "integrity": "sha512-LeVMZBBVy+oQb5R6FDV9OlJCcWDU+al10oKpe+nsvcHnG24Z3uM3SvJYKfGJlfGjVU8v9liejCrUR/M5HO5NEQ==", "dependencies": { - "@npmcli/agent": "^3.0.0", - "cacache": "^19.0.1", - "http-cache-semantics": "^4.1.1", + "@npmcli/redact": "^3.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^14.0.0", "minipass": "^7.0.2", "minipass-fetch": "^4.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^1.0.0", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1", - "ssri": "^12.0.0" + "minizlib": "^3.0.1", + "npm-package-arg": "^12.0.0", + "proc-log": "^5.0.0" }, "engines": { "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/make-fetch-happen/node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/markdown-it": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", - "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dependencies": { - "argparse": "^2.0.1", - "entities": "^4.4.0", - "linkify-it": "^5.0.0", - "mdurl": "^2.0.0", - "punycode.js": "^2.3.1", - "uc.micro": "^2.1.0" - }, - "bin": { - "markdown-it": "bin/markdown-it.mjs" - } - }, - "node_modules/markdown-it-anchor": { - "version": "8.6.7", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", - "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", - "peerDependencies": { - "@types/markdown-it": "*", - "markdown-it": "*" - } - }, - "node_modules/marked": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", - "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", - "bin": { - "marked": "bin/marked.js" + "boolbase": "^1.0.0" }, - "engines": { - "node": ">= 12" + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" } }, - "node_modules/mdurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" + "node_modules/object-deep-merge": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/object-deep-merge/-/object-deep-merge-1.0.5.tgz", + "integrity": "sha512-3DioFgOzetbxbeUq8pB2NunXo8V0n4EvqsWM/cJoI6IA9zghd7cl/2pBOuWRf4dlvA+fcg5ugFMZaN2/RuoaGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "4.2.0" } }, - "node_modules/meow": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", - "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", + "node_modules/object-deep-merge/node_modules/type-fest": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.2.0.tgz", + "integrity": "sha512-5zknd7Dss75pMSED270A1RQS3KloqRJA9XbXLe0eCxyw7xXFb3rd+9B0UQ/0E+LQT6lnrLviEolYORlRWamn4w==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=16.10" + "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "engines": { - "node": ">= 8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, "engines": { - "node": ">= 0.6" + "node": ">= 0.4" } }, - "node_modules/micro-spelling-correcter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/micro-spelling-correcter/-/micro-spelling-correcter-1.1.1.tgz", - "integrity": "sha512-lkJ3Rj/mtjlRcHk6YyCbvZhyWTOzdBvTHsxMmZSk5jxN1YyVSQ+JETAom55mdzfcyDrY/49Z7UCW760BK30crg==", - "dev": true - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" }, "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" + "node": ">= 0.4" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "engines": { - "node": ">= 0.6" - } + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dependencies": { - "mime-db": "1.52.0" + "ee-first": "1.1.1" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, - "node_modules/mime-types/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "node_modules/on-headers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + "node_modules/only": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", + "integrity": "sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==", + "dev": true }, - "node_modules/minimatch": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", - "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" }, "engines": { - "node": "20 || >=22" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "node_modules/open-cli": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/open-cli/-/open-cli-8.0.0.tgz", + "integrity": "sha512-3muD3BbfLyzl+aMVSEfn2FfOqGdPYR0O4KNnxXsLEPE2q9OSjBfJAaB6XKbrUzLgymoSMejvb5jpXJfru/Ko2A==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/minipass-collect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", - "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", "dependencies": { - "minipass": "^7.0.3" + "file-type": "^18.7.0", + "get-stdin": "^9.0.0", + "meow": "^12.1.1", + "open": "^10.0.0", + "tempy": "^3.1.0" + }, + "bin": { + "open-cli": "cli.js" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minipass-fetch": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-4.0.1.tgz", - "integrity": "sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ==", - "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^1.0.3", - "minizlib": "^3.0.1" - }, + "node_modules/open-cli/node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=12" }, - "optionalDependencies": { - "encoding": "^0.1.13" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "node_modules/open-cli/node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "dev": true, "dependencies": { - "minipass": "^3.0.0" + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" }, "engines": { - "node": ">= 8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, "dependencies": { - "yallist": "^4.0.0" + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { - "node": ">=8" + "node": ">= 0.8.0" } }, - "node_modules/minipass-flush/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, "dependencies": { - "minipass": "^3.0.0" + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, "dependencies": { - "yallist": "^4.0.0" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minipass-pipeline/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, "dependencies": { - "minipass": "^3.0.0" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dependencies": { - "yallist": "^4.0.0" - }, + "node_modules/p-map": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", + "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==", "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minipass-sized/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" }, - "node_modules/minizlib": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", - "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", + "node_modules/pacote": { + "version": "19.0.1", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-19.0.1.tgz", + "integrity": "sha512-zIpxWAsr/BvhrkSruspG8aqCQUUrWtpwx0GjiRZQhEM/pZXrigA32ElN3vTcCPUDOFmHr6SFxwYrvVUs5NTEUg==", "dependencies": { - "minipass": "^7.1.2" + "@npmcli/git": "^6.0.0", + "@npmcli/installed-package-contents": "^3.0.0", + "@npmcli/package-json": "^6.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "@npmcli/run-script": "^9.0.0", + "cacache": "^19.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^12.0.0", + "npm-packlist": "^9.0.0", + "npm-pick-manifest": "^10.0.0", + "npm-registry-fetch": "^18.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "sigstore": "^3.0.0", + "ssri": "^12.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "bin/index.js" }, "engines": { - "node": ">= 18" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, + "node_modules/pacote/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "engines": { "node": ">=10" } }, - "node_modules/morgan": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.1.tgz", - "integrity": "sha512-223dMRJtI/l25dJKWpgij2cMtywuG/WiUKXdvwfbhGKBhy1puASqXwFzmWZ7+K73vUPoR7SS2Qz2cI/g9MKw0A==", - "dev": true, + "node_modules/pacote/node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dependencies": { - "basic-auth": "~2.0.1", - "debug": "2.6.9", - "depd": "~2.0.0", - "on-finished": "~2.3.0", - "on-headers": "~1.1.0" + "minipass": "^3.0.0", + "yallist": "^4.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 8" } }, - "node_modules/morgan/node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dev": true, + "node_modules/pacote/node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dependencies": { - "ee-first": "1.1.1" + "yallist": "^4.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">=8" } }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/multimatch": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", - "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", - "dev": true, + "node_modules/pacote/node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dependencies": { - "@types/minimatch": "^3.0.3", - "array-differ": "^3.0.0", - "array-union": "^2.1.0", - "arrify": "^2.0.1", - "minimatch": "^3.0.4" + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/multimatch/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, + "node_modules/pacote/node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dependencies": { - "brace-expansion": "^1.1.7" + "minipass": "^3.0.0" }, "engines": { - "node": "*" + "node": ">= 8" } }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" + "node_modules/pacote/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" }, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": ">=8" } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/negotiator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "node_modules/pacote/node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "node_modules/pacote/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, - "node_modules/node-gyp": { - "version": "11.4.2", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.4.2.tgz", - "integrity": "sha512-3gD+6zsrLQH7DyYOUIutaauuXrcyxeTPyQuZQCQoNPZMHMMS5m4y0xclNpvYzoK3VNzuyxT6eF4mkIL4WSZ1eQ==", + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^14.0.3", - "nopt": "^8.0.0", - "proc-log": "^5.0.0", - "semver": "^7.3.5", - "tar": "^7.4.3", - "tinyglobby": "^0.2.12", - "which": "^5.0.0" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" + "callsites": "^3.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=6" } }, - "node_modules/node-stream-zip": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz", - "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==", - "engines": { - "node": ">=0.12.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/antelle" + "node_modules/parse-imports-exports": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/parse-imports-exports/-/parse-imports-exports-0.2.4.tgz", + "integrity": "sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ==", + "dev": true, + "dependencies": { + "parse-statements": "1.0.11" } }, - "node_modules/nopt": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", - "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, "dependencies": { - "abbrev": "^3.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/normalize-package-data": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", - "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", - "dependencies": { - "hosted-git-info": "^7.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, + "node_modules/parse-json/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", + "dev": true, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/normalize-package-data/node_modules/hosted-git-info": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", - "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "node_modules/parse-statements": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/parse-statements/-/parse-statements-1.0.11.tgz", + "integrity": "sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==", + "dev": true + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", "dependencies": { - "lru-cache": "^10.0.1" + "entities": "^6.0.0" }, - "engines": { - "node": "^16.14.0 || >=18.0.0" + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/npm-bundled": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-4.0.0.tgz", - "integrity": "sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA==", + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", + "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", "dependencies": { - "npm-normalize-package-bin": "^4.0.0" + "domhandler": "^5.0.3", + "parse5": "^7.0.0" }, - "engines": { - "node": "^18.17.0 || >=20.5.0" + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/npm-install-checks": { + "node_modules/parse5-parser-stream": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-7.1.2.tgz", - "integrity": "sha512-z9HJBCYw9Zr8BqXcllKIs5nI+QggAImbBdHphOzVYrz2CB4iQ6FzWyKmlqDZua+51nAu7FcemlbTc9VgQN5XDQ==", + "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", + "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", "dependencies": { - "semver": "^7.1.1" + "parse5": "^7.0.0" }, - "engines": { - "node": "^18.17.0 || >=20.5.0" + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/npm-normalize-package-bin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz", - "integrity": "sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==", + "node_modules/parse5/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/npm-package-arg": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-12.0.2.tgz", - "integrity": "sha512-f1NpFjNI9O4VbKMOlA5QoBq/vSQPORHcTZ2feJpFkTHJ9eQkdlmZEKSjcAhxTGInC7RlEyScT9ui67NaOsjFWA==", - "dependencies": { - "hosted-git-info": "^8.0.0", - "proc-log": "^5.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^6.0.0" - }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">= 0.8" } }, - "node_modules/npm-packlist": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-9.0.0.tgz", - "integrity": "sha512-8qSayfmHJQTx3nJWYbbUmflpyarbLMBc6LCAjYsiGtXxDB68HaZpb8re6zeaLGxZzDuMdhsg70jryJe+RrItVQ==", + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "license": "MIT", "dependencies": { - "ignore-walk": "^7.0.0" - }, + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=8" } }, - "node_modules/npm-pick-manifest": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-10.0.0.tgz", - "integrity": "sha512-r4fFa4FqYY8xaM7fHecQ9Z2nE9hgNfJR+EmoKv0+chvzWkBcORX3r0FpTByP+CbOVJDladMXnPQGVN8PBLGuTQ==", - "dependencies": { - "npm-install-checks": "^7.1.0", - "npm-normalize-package-bin": "^4.0.0", - "npm-package-arg": "^12.0.0", - "semver": "^7.3.5" - }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=0.10.0" } }, - "node_modules/npm-registry-fetch": { - "version": "18.0.2", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-18.0.2.tgz", - "integrity": "sha512-LeVMZBBVy+oQb5R6FDV9OlJCcWDU+al10oKpe+nsvcHnG24Z3uM3SvJYKfGJlfGjVU8v9liejCrUR/M5HO5NEQ==", - "dependencies": { - "@npmcli/redact": "^3.0.0", - "jsonparse": "^1.3.1", - "make-fetch-happen": "^14.0.0", - "minipass": "^7.0.2", - "minipass-fetch": "^4.0.0", - "minizlib": "^3.0.1", - "npm-package-arg": "^12.0.0", - "proc-log": "^5.0.0" - }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=8" } }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "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==" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dependencies": { - "boolbase": "^1.0.0" + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" }, "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==" }, - "node_modules/object-deep-merge": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/object-deep-merge/-/object-deep-merge-1.0.5.tgz", - "integrity": "sha512-3DioFgOzetbxbeUq8pB2NunXo8V0n4EvqsWM/cJoI6IA9zghd7cl/2pBOuWRf4dlvA+fcg5ugFMZaN2/RuoaGg==", + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "4.2.0" + "engines": { + "node": ">=8" } }, - "node_modules/object-deep-merge/node_modules/type-fest": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.2.0.tgz", - "integrity": "sha512-5zknd7Dss75pMSED270A1RQS3KloqRJA9XbXLe0eCxyw7xXFb3rd+9B0UQ/0E+LQT6lnrLviEolYORlRWamn4w==", + "node_modules/peek-readable": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.4.2.tgz", + "integrity": "sha512-peBp3qZyuS6cNIJ2akRNG1uo1WJ1d0wTxg/fxMdZ0BqCVhx242bSFHM9eNqflfJVS9SsgkzgT/1UgnsurBOTMg==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=16" + "node": ">=14.16" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/Borewit" } }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "engines": { - "node": ">= 0.4" + "node": ">=8.6" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" } }, - "node_modules/object.assign": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", "dev": true, "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0", - "has-symbols": "^1.1.0", - "object-keys": "^1.1.1" + "find-up": "^5.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10" } }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + "node_modules/please-upgrade-node": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "dev": true, + "dependencies": { + "semver-compare": "^1.0.0" + } }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "node_modules/portscanner": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz", + "integrity": "sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==", "dependencies": { - "ee-first": "1.1.1" + "async": "^2.6.0", + "is-number-like": "^1.0.3" }, "engines": { - "node": ">= 0.8" + "node": ">=0.4", + "npm": ">=1.0.0" } }, - "node_modules/on-headers": { + "node_modules/possible-typed-array-names": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", - "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/only": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", - "integrity": "sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==", - "dev": true - }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", "dev": true, - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.4" } }, - "node_modules/open-cli": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/open-cli/-/open-cli-8.0.0.tgz", - "integrity": "sha512-3muD3BbfLyzl+aMVSEfn2FfOqGdPYR0O4KNnxXsLEPE2q9OSjBfJAaB6XKbrUzLgymoSMejvb5jpXJfru/Ko2A==", + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "dev": true, - "dependencies": { - "file-type": "^18.7.0", - "get-stdin": "^9.0.0", - "meow": "^12.1.1", - "open": "^10.0.0", - "tempy": "^3.1.0" - }, - "bin": { - "open-cli": "cli.js" + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^10 || ^12 || >=14" } }, - "node_modules/open-cli/node_modules/define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "node_modules/postcss-calc": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.0.2.tgz", + "integrity": "sha512-DT/Wwm6fCKgpYVI7ZEWuPJ4az8hiEHtCUeYjZXqU7Ou4QqYh1Df2yCQ7Ca6N7xqKPFkxN3fhf+u9KSoOCJNAjg==", "dev": true, + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.2", + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=12" + "node": "^18.12 || ^20.9 || >=22.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.4.38" } }, - "node_modules/open-cli/node_modules/open": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", - "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "node_modules/postcss-colormin": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.2.tgz", + "integrity": "sha512-YntRXNngcvEvDbEjTdRWGU606eZvB5prmHG4BF0yLmVpamXbpsRJzevyy6MZVyuecgzI2AWAlvFi8DAeCqwpvA==", "dev": true, + "license": "MIT", "dependencies": { - "default-browser": "^5.2.1", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "wsl-utils": "^0.1.0" + "browserslist": "^4.23.3", + "caniuse-api": "^3.0.0", + "colord": "^2.9.3", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=18" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "node_modules/postcss-convert-values": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.3.tgz", + "integrity": "sha512-yJhocjCs2SQer0uZ9lXTMOwDowbxvhwFVrZeS6NPEij/XXthl73ggUmfwVvJM+Vaj5gtCKJV1jiUu4IhAUkX/Q==", "dev": true, + "license": "MIT", "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" + "browserslist": "^4.23.3", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">= 0.8.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/own-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "node_modules/postcss-discard-comments": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.2.tgz", + "integrity": "sha512-/Hje9Ls1IYcB9duELO/AyDUJI6aQVY3h5Rj1ziXgaLYCTi1iVBLnjg/TS0D6NszR/kDG6I86OwLmAYe+bvJjiQ==", "dev": true, + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.6", - "object-keys": "^1.1.1", - "safe-push-apply": "^1.0.0" + "postcss-selector-parser": "^6.1.1" }, "engines": { - "node": ">= 0.4" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/postcss-discard-duplicates": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.1.tgz", + "integrity": "sha512-oZA+v8Jkpu1ct/xbbrntHRsfLGuzoP+cpt0nJe5ED2FQF8n8bJtn7Bo28jSmBYwqgqnqkuSXJfSUEE7if4nClQ==", "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/postcss-discard-empty": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-7.0.0.tgz", + "integrity": "sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA==", "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/p-map": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", - "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==", + "node_modules/postcss-discard-overridden": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-7.0.0.tgz", + "integrity": "sha512-GmNAzx88u3k2+sBTZrJSDauR0ccpE24omTQCVmaTTZFz1du6AasspjaUPMJ2ud4RslZpoFKyf+6MSPETLojc6w==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=18" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" - }, - "node_modules/pacote": { - "version": "19.0.1", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-19.0.1.tgz", - "integrity": "sha512-zIpxWAsr/BvhrkSruspG8aqCQUUrWtpwx0GjiRZQhEM/pZXrigA32ElN3vTcCPUDOFmHr6SFxwYrvVUs5NTEUg==", + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "license": "MIT", "dependencies": { - "@npmcli/git": "^6.0.0", - "@npmcli/installed-package-contents": "^3.0.0", - "@npmcli/package-json": "^6.0.0", - "@npmcli/promise-spawn": "^8.0.0", - "@npmcli/run-script": "^9.0.0", - "cacache": "^19.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^7.0.2", - "npm-package-arg": "^12.0.0", - "npm-packlist": "^9.0.0", - "npm-pick-manifest": "^10.0.0", - "npm-registry-fetch": "^18.0.0", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1", - "sigstore": "^3.0.0", - "ssri": "^12.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "bin/index.js" + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" } }, - "node_modules/pacote/node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, "engines": { - "node": ">=10" + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" } }, - "node_modules/pacote/node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" }, "engines": { - "node": ">= 8" + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } } }, - "node_modules/pacote/node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dependencies": { - "yallist": "^4.0.0" + "node_modules/postcss-load-config/node_modules/yaml": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", + "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" }, "engines": { - "node": ">=8" + "node": ">= 14" } }, - "node_modules/pacote/node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "node_modules/postcss-merge-longhand": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.3.tgz", + "integrity": "sha512-8waYomFxshdv6M9Em3QRM9MettRLDRcH2JQi2l0Z1KlYD/vhal3gbkeSES0NuACXOlZBB0V/B0AseHZaklzWOA==", + "dev": true, + "license": "MIT", "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "postcss-value-parser": "^4.2.0", + "stylehacks": "^7.0.3" }, "engines": { - "node": ">=10" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/pacote/node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "node_modules/postcss-merge-rules": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.3.tgz", + "integrity": "sha512-2eSas2p3voPxNfdI5sQrvIkMaeUHpVc3EezgVs18hz/wRTQAC9U99tp9j3W5Jx9/L3qHkEDvizEx/LdnmumIvQ==", + "dev": true, + "license": "MIT", "dependencies": { - "minipass": "^3.0.0" + "browserslist": "^4.23.3", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^5.0.0", + "postcss-selector-parser": "^6.1.1" }, "engines": { - "node": ">= 8" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/pacote/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/postcss-minify-font-values": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-7.0.0.tgz", + "integrity": "sha512-2ckkZtgT0zG8SMc5aoNwtm5234eUx1GGFJKf2b1bSp8UflqaeFzR50lid4PfqVI9NtGqJ2J4Y7fwvnP/u1cQog==", + "dev": true, + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=8" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/pacote/node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "node_modules/postcss-minify-gradients": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-7.0.0.tgz", + "integrity": "sha512-pdUIIdj/C93ryCHew0UgBnL2DtUS3hfFa5XtERrs4x+hmpMYGhbzo6l/Ir5de41O0GaKVpK1ZbDNXSY6GkXvtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "colord": "^2.9.3", + "cssnano-utils": "^5.0.0", + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=8" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/pacote/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "node_modules/postcss-minify-params": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.2.tgz", + "integrity": "sha512-nyqVLu4MFl9df32zTsdcLqCFfE/z2+f8GE1KHPxWOAmegSo6lpV2GNy5XQvrzwbLmiU7d+fYay4cwto1oNdAaQ==", "dev": true, + "license": "MIT", "dependencies": { - "callsites": "^3.0.0" + "browserslist": "^4.23.3", + "cssnano-utils": "^5.0.0", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=6" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/parse-imports-exports": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/parse-imports-exports/-/parse-imports-exports-0.2.4.tgz", - "integrity": "sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ==", + "node_modules/postcss-minify-selectors": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.3.tgz", + "integrity": "sha512-SxTgUQSgBk6wEqzQZKEv1xQYIp9UBju6no9q+npohzSdhuSICQdkqmD1UMKkZWItS3olJSJMDDEY9WOJ5oGJew==", "dev": true, + "license": "MIT", "dependencies": { - "parse-statements": "1.0.11" + "cssesc": "^3.0.0", + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" + "postcss-selector-parser": "^6.1.1" }, "engines": { - "node": ">=8" + "node": ">=12.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.2.14" } }, - "node_modules/parse-json/node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", + "node_modules/postcss-normalize-charset": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-7.0.0.tgz", + "integrity": "sha512-ABisNUXMeZeDNzCQxPxBCkXexvBrUHV+p7/BXOY+ulxkcjUZO0cp8ekGBwvIh2LbCwnWbyMPNJVtBSdyhM2zYQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parse-statements": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/parse-statements/-/parse-statements-1.0.11.tgz", - "integrity": "sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==", - "dev": true - }, - "node_modules/parse5": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", - "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", - "dependencies": { - "entities": "^6.0.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", - "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", + "node_modules/postcss-normalize-display-values": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.0.tgz", + "integrity": "sha512-lnFZzNPeDf5uGMPYgGOw7v0BfB45+irSRz9gHQStdkkhiM0gTfvWkWB5BMxpn0OqgOQuZG/mRlZyJxp0EImr2Q==", + "dev": true, + "license": "MIT", "dependencies": { - "domhandler": "^5.0.3", - "parse5": "^7.0.0" + "postcss-value-parser": "^4.2.0" }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/parse5-parser-stream": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", - "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", + "node_modules/postcss-normalize-positions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-7.0.0.tgz", + "integrity": "sha512-I0yt8wX529UKIGs2y/9Ybs2CelSvItfmvg/DBIjTnoUSrPxSV7Z0yZ8ShSVtKNaV/wAY+m7bgtyVQLhB00A1NQ==", + "dev": true, + "license": "MIT", "dependencies": { - "parse5": "^7.0.0" + "postcss-value-parser": "^4.2.0" }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5/node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", "engines": { - "node": ">=0.12" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/postcss-normalize-repeat-style": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.0.tgz", + "integrity": "sha512-o3uSGYH+2q30ieM3ppu9GTjSXIzOrRdCUn8UOMGNw7Af61bmurHTWI87hRybrP6xDHvOe5WlAj3XzN6vEO8jLw==", "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=8" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "node_modules/postcss-normalize-string": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-7.0.0.tgz", + "integrity": "sha512-w/qzL212DFVOpMy3UGyxrND+Kb0fvCiBBujiaONIihq7VvtC7bswjWgKQU/w4VcRyDD8gpfqUiBQ4DUOwEJ6Qg==", "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/postcss-normalize-timing-functions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.0.tgz", + "integrity": "sha512-tNgw3YV0LYoRwg43N3lTe3AEWZ66W7Dh7lVEpJbHoKOuHc1sLrzMLMFjP8SNULHaykzsonUEDbKedv8C+7ej6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=8" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "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==" - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "node_modules/postcss-normalize-unicode": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.2.tgz", + "integrity": "sha512-ztisabK5C/+ZWBdYC+Y9JCkp3M9qBv/XFvDtSw0d/XwfT3UaKeW/YTm/MD/QrPNxuecia46vkfEhewjwcYFjkg==", + "dev": true, + "license": "MIT", "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "browserslist": "^4.23.3", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=16 || 14 >=14.18" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "node_modules/postcss-normalize-url": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-7.0.0.tgz", + "integrity": "sha512-+d7+PpE+jyPX1hDQZYG+NaFD+Nd2ris6r8fPTBAjE8z/U41n/bib3vze8x7rKs5H1uEw5ppe9IojewouHk0klQ==", "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=8" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/peek-readable": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.4.2.tgz", - "integrity": "sha512-peBp3qZyuS6cNIJ2akRNG1uo1WJ1d0wTxg/fxMdZ0BqCVhx242bSFHM9eNqflfJVS9SsgkzgT/1UgnsurBOTMg==", + "node_modules/postcss-normalize-whitespace": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.0.tgz", + "integrity": "sha512-37/toN4wwZErqohedXYqWgvcHUGlT8O/m2jVkAfAe9Bd4MzRqlBmXrJRePH0e9Wgnz2X7KymTgTOaaFizQe3AQ==", "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=14.16" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "node_modules/postcss-ordered-values": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-7.0.1.tgz", + "integrity": "sha512-irWScWRL6nRzYmBOXReIKch75RRhNS86UPUAxXdmW/l0FcAsg0lvAXQCby/1lymxn/o0gVa6Rv/0f03eJOwHxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssnano-utils": "^5.0.0", + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=8.6" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/pkg-dir": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", - "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", + "node_modules/postcss-reduce-initial": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.2.tgz", + "integrity": "sha512-pOnu9zqQww7dEKf62Nuju6JgsW2V0KRNBHxeKohU+JkHd/GAH5uvoObqFLqkeB2n20mr6yrlWDvo5UBU5GnkfA==", "dev": true, + "license": "MIT", "dependencies": { - "find-up": "^5.0.0" + "browserslist": "^4.23.3", + "caniuse-api": "^3.0.0" }, "engines": { - "node": ">=10" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/please-upgrade-node": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", - "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "node_modules/postcss-reduce-transforms": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.0.tgz", + "integrity": "sha512-pnt1HKKZ07/idH8cpATX/ujMbtOGhUfE+m8gbqwJE05aTaNw8gbo34a2e3if0xc0dlu75sUOiqvwCGY3fzOHew==", "dev": true, + "license": "MIT", "dependencies": { - "semver-compare": "^1.0.0" + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/portscanner": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz", - "integrity": "sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==", + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", "dependencies": { - "async": "^2.6.0", - "is-number-like": "^1.0.3" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": ">=0.4", - "npm": ">=1.0.0" + "node": ">=4" } }, - "node_modules/possible-typed-array-names": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "node_modules/postcss-svgo": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-7.0.1.tgz", + "integrity": "sha512-0WBUlSL4lhD9rA5k1e5D8EN5wCEyZD6HJk0jIvRxl+FDVOMlJ7DePHYWGGVc5QRqrJ3/06FTXM0bxjmJpmTPSA==", "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^3.3.2" + }, "engines": { - "node": ">= 0.4" + "node": "^18.12.0 || ^20.9.0 || >= 18" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "node_modules/postcss-unique-selectors": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.2.tgz", + "integrity": "sha512-CjSam+7Vf8cflJQsHrMS0P2hmy9u0+n/P001kb5eAszLmhjMqrt/i5AqQuNFihhViwDvEAezqTmXqaYXL2ugMw==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "license": "MIT", "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" + "postcss-selector-parser": "^6.1.1" }, "engines": { - "node": "^10 || ^12 || >=14" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/preact": { + "version": "10.23.2", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.23.2.tgz", + "integrity": "sha512-kKYfePf9rzKnxOAKDpsWhg/ysrHPqT+yQ7UW4JjdnqjFIeNUnNcEJvhuA8fDenxAGWzUqtd51DfVg7xp/8T9NA==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" } }, "node_modules/prelude-ls": { @@ -12971,6 +15934,22 @@ "node": ">= 0.8.0" } }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/pretty-data": { "version": "0.40.0", "resolved": "https://registry.npmjs.org/pretty-data/-/pretty-data-0.40.0.tgz", @@ -13033,6 +16012,13 @@ "node": ">= 0.10" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true, + "license": "MIT" + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -13469,6 +16455,13 @@ "node": ">=0.10.0" } }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, + "license": "MIT" + }, "node_modules/rimraf": { "version": "5.0.10", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", @@ -13483,6 +16476,42 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rollup": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.0.tgz", + "integrity": "sha512-vo+S/lfA2lMS7rZ2Qoubi6I5hwZwzXeUIctILZLbHI+laNtvhhOIon2S1JksA5UEDQ7l3vberd0fxK44lTYjbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.21.0", + "@rollup/rollup-android-arm64": "4.21.0", + "@rollup/rollup-darwin-arm64": "4.21.0", + "@rollup/rollup-darwin-x64": "4.21.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.21.0", + "@rollup/rollup-linux-arm-musleabihf": "4.21.0", + "@rollup/rollup-linux-arm64-gnu": "4.21.0", + "@rollup/rollup-linux-arm64-musl": "4.21.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.21.0", + "@rollup/rollup-linux-riscv64-gnu": "4.21.0", + "@rollup/rollup-linux-s390x-gnu": "4.21.0", + "@rollup/rollup-linux-x64-gnu": "4.21.0", + "@rollup/rollup-linux-x64-musl": "4.21.0", + "@rollup/rollup-win32-arm64-msvc": "4.21.0", + "@rollup/rollup-win32-ia32-msvc": "4.21.0", + "@rollup/rollup-win32-x64-msvc": "4.21.0", + "fsevents": "~2.3.2" + } + }, "node_modules/router": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", @@ -13643,6 +16672,14 @@ "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==" }, + "node_modules/search-insights": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.16.3.tgz", + "integrity": "sha512-hSHy/s4Zk2xibhj9XTCACB+1PqS+CaJxepGNBhKc/OsHRpqvHAUAm5+uZ6kJJbGXn0pb3XqekHjg6JAqPExzqg==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", @@ -13848,6 +16885,17 @@ "node": ">=8" } }, + "node_modules/shiki": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.14.1.tgz", + "integrity": "sha512-FujAN40NEejeXdzPt+3sZ3F2dx1U24BY2XTY01+MG8mbxCiA2XukXdcbyMyLAHJ/1AUUnQd1tZlvIjefWWEJeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/core": "1.14.1", + "@types/hast": "^3.0.4" + } + }, "node_modules/side-channel": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", @@ -13963,6 +17011,17 @@ "npm": ">= 3.0.0" } }, + "node_modules/snake-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/socks": { "version": "2.8.7", "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", @@ -14165,6 +17224,16 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -14543,6 +17612,69 @@ "url": "https://github.com/sponsors/Borewit" } }, + "node_modules/stylehacks": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.3.tgz", + "integrity": "sha512-4DqtecvI/Nd+2BCvW9YEF6lhBN5UM50IJ1R3rnEAhBwbCKf4VehRf+uqvnVArnBayjYD/WtT3g0G/HSRxWfTRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/superjson": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.1.tgz", + "integrity": "sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -14579,6 +17711,54 @@ "node": ">=12.17" } }, + "node_modules/tailwindcss": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.10.tgz", + "integrity": "sha512-KWZkVPm7yJRhdu4SRSl9d4AK2wM3a50UsvgHZO7xY77NQr2V+fIrEuoDGQcbvswWvFGbS2f6e+jC/6WJm1Dl0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.0", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/tar": { "version": "7.4.3", "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", @@ -14940,6 +18120,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/typescript": { + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/typical": { "version": "7.3.0", "resolved": "https://registry.npmjs.org/typical/-/typical-7.3.0.tgz", @@ -14998,6 +18193,13 @@ "node": ">=18.17" } }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true, + "license": "MIT" + }, "node_modules/unicorn-magic": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", @@ -15046,6 +18248,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -15054,6 +18266,57 @@ "node": ">= 0.8" } }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/upper-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz", + "integrity": "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/upper-case-first": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", + "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -15075,6 +18338,13 @@ "node": ">= 0.4.0" } }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "license": "MIT" + }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -15109,6 +18379,128 @@ "node": ">= 0.8" } }, + "node_modules/vite": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.2.tgz", + "integrity": "sha512-dDrQTRHp5C1fTFzcSaMxjk6vdpKvT+2/mIdE07Gw2ykehT49O0z/VHS3zZ8iV/Gh8BJJKHWOe5RjaNrW5xf/GA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.41", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vitepress": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.3.3.tgz", + "integrity": "sha512-6UzEw/wZ41S/CATby7ea7UlffvRER/uekxgN6hbEvSys9ukmLOKsz87Ehq9yOx1Rwiw+Sj97yjpivP8w1sUmng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@docsearch/css": "^3.6.1", + "@docsearch/js": "^3.6.1", + "@shikijs/core": "^1.13.0", + "@shikijs/transformers": "^1.13.0", + "@types/markdown-it": "^14.1.2", + "@vitejs/plugin-vue": "^5.1.2", + "@vue/devtools-api": "^7.3.8", + "@vue/shared": "^3.4.38", + "@vueuse/core": "^11.0.0", + "@vueuse/integrations": "^11.0.0", + "focus-trap": "^7.5.4", + "mark.js": "8.11.1", + "minisearch": "^7.1.0", + "shiki": "^1.13.0", + "vite": "^5.4.1", + "vue": "^3.4.38" + }, + "bin": { + "vitepress": "bin/vitepress.js" + }, + "peerDependencies": { + "markdown-it-mathjax3": "^4", + "postcss": "^8" + }, + "peerDependenciesMeta": { + "markdown-it-mathjax3": { + "optional": true + }, + "postcss": { + "optional": true + } + } + }, + "node_modules/vue": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.38.tgz", + "integrity": "sha512-f0ZgN+mZ5KFgVv9wz0f4OgVKukoXtS3nwET4c2vLBGQR50aI8G0cqbFtLlX9Yiyg3LFGBitruPHt2PxwTduJEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.4.38", + "@vue/compiler-sfc": "3.4.38", + "@vue/runtime-dom": "3.4.38", + "@vue/server-renderer": "3.4.38", + "@vue/shared": "3.4.38" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/walk-back": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/walk-back/-/walk-back-5.1.1.tgz", @@ -15498,6 +18890,16 @@ "node": ">= 4.0.0" } }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index 764aa13491..6b73da9f67 100644 --- a/package.json +++ b/package.json @@ -29,11 +29,14 @@ "jsdoc-generate": "node ./scripts/isWorkspace.js && npm run jsdoc-generate-workspace || npm run jsdoc-generate-local", "jsdoc-generate-local": "jsdoc -c ./jsdoc.json -t $(node -p 'path.dirname(require.resolve(\"docdash\"))') ./ || (echo 'Error during JSDoc generation! Check log.' && exit 1)", "jsdoc-generate-workspace": "jsdoc -c ./jsdoc-workspace.json -t $(node -p 'path.dirname(require.resolve(\"docdash\"))') ../ || (echo 'Error during JSDoc generation! Check log.' && exit 1)", - "docs": "bash ./scripts/serveDocs.sh", - "docs-generate": "bash ./scripts/buildDocs.sh && open-cli http://localhost:8000 && ws --compress -d site", + "start": "vitepress --open", + "serve-docs": "vitepress build && vitepress preview --port 8080", + "docs-generate": "vitepress build", "schema-generate": "node ./scripts/buildSchema.js ui5", "schema-workspace-generate": "node ./scripts/buildSchema.js ui5-workspace", "generate-cli-doc": "node ./scripts/generateCliDoc.js", + "replace-base-path-next": "node ./scripts/generatenextConfig.js", + "replace-base-path-stable": "node ./scripts/generateStableConfig.js", "depcheck": "depcheck --ignores @ui5/builder,@ui5/cli,@ui5/fs,@ui5/logger,@ui5/project,@ui5/server,docdash,local-web-server" }, "repository": { diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000000..90e7a83c5d --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,7 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + ...(process.env.NODE_ENV === 'production' ? { cssnano: {} } : {}) + } +} diff --git a/resources/UI5_CLI.graffle b/resources/UI5_CLI.graffle deleted file mode 100644 index eb8fba8323476f9df86098d1879e59b64f9d3b10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 464438 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

#01tm&b>j{5 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%0Dtv1?-^*z2w`GfUiWSj>e&a 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 g&0Dx5m1eoCzgbuLguhvaEyG6cjc)?6J)pZxPp5 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 H2LJ#7J^rf7 diff --git a/scripts/Dockerfile b/scripts/Dockerfile deleted file mode 100644 index e786d2a14b..0000000000 --- a/scripts/Dockerfile +++ /dev/null @@ -1,9 +0,0 @@ -FROM squidfunk/mkdocs-material:8.5.9 - -# mike version 2 is required in order to enable ENV vars for the container. By the time mike 2 is released we'll -# use a specific dev version: https://github.com/jimporter/mike/issues/125 -RUN python -m pip install 'mike @ git+https://github.com/jimporter/mike.git@e77357960886f9d9bf2e6ecbc39c7ca6991a2179' - -# Define env variables for mike -ENV GIT_COMMITTER_NAME="OpenUI5 Bot" -ENV GIT_COMMITTER_EMAIL="openui5@sap.com" diff --git a/scripts/buildDocs.sh b/scripts/buildDocs.sh deleted file mode 100755 index bd0f8f8eda..0000000000 --- a/scripts/buildDocs.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash -set -e - -cd "$(dirname -- "$0")/.." -echo "Changed directory to $(pwd)" - -# Store docker image name -DOCKER_IMAGE=ui5-cli/mkdocs-material - -# Build image if not existing -./scripts/buildImage.sh - -npm run generate-cli-doc - - -if [[ $MIKE_VERSION ]]; then # Build with Mike (versioning) - echo "Starting building & versioning Docs with Mike version: ${MIKE_VERSION}; alias: ${MIKE_ALIAS}..." - docker run --rm -v $(pwd):/docs --entrypoint mike \ - --env GIT_COMMITTER_NAME="${GIT_COMMITTER_NAME}" --env GIT_COMMITTER_EMAIL="${GIT_COMMITTER_EMAIL}" \ - $DOCKER_IMAGE deploy $MIKE_VERSION $MIKE_ALIAS --rebase --update-aliases - -else # Build with MkDocs - echo "Starting building Docs with MkDocs..." - docker run --rm -v $(pwd):/docs $DOCKER_IMAGE build - -fi - -npm run jsdoc-generate - -echo "Documentation has been built" diff --git a/scripts/buildImage.sh b/scripts/buildImage.sh deleted file mode 100755 index b638088587..0000000000 --- a/scripts/buildImage.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash -set -e - -cd "$(dirname -- "$0")" -echo "Changed directory to $(pwd)" - -# Store docker image name -DOCKER_IMAGE=ui5-cli/mkdocs-material -# If Dockerfile has been modified, we need to rebuild the image -DOCKER_TAG=$(node ./hash.js ./Dockerfile) - -if [[ "$(docker images -q $DOCKER_IMAGE:$DOCKER_TAG 2> /dev/null)" != "" ]]; then - echo "Image ${DOCKER_IMAGE}:${DOCKER_TAG} already exists" - exit 0 -fi - -echo "Building image '${DOCKER_IMAGE}:${DOCKER_TAG}'..." -docker build -t $DOCKER_IMAGE -f Dockerfile . -docker tag $DOCKER_IMAGE $DOCKER_IMAGE:$DOCKER_TAG # Tag the image with Dockerfile's hash -echo "Done building image." - -exit 0 diff --git a/scripts/generateCliDoc.js b/scripts/generateCliDoc.js index eb8fb3cb54..67db10b6c0 100644 --- a/scripts/generateCliDoc.js +++ b/scripts/generateCliDoc.js @@ -111,8 +111,19 @@ function generateDoc() { if (!(obj.commands.length <= 1)) { for (const all of obj.commands) { const temp = checkChars(all); - const {command, description} = splitString(temp); - commandsObj.push({childCommand: command, commandDescription: description}); + let {command, description, details} = splitString(temp); + + // Check and remove "

+ + + + \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/Benchmarking.html b/packages/documentation/docs/.vitepress/dist/Benchmarking.html new file mode 100644 index 0000000000..811e2be316 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/Benchmarking.html @@ -0,0 +1,38 @@ + + + + + + Benchmarking UI5 CLI | VitePress + + + + + + + + + + + + + + +
Skip to content

Benchmarking UI5 CLI

For benchmarking UI5 CLI we typically make use of the open source tool hyperfine.

In general we only benchmark calls to the UI5 CLI. However, we might add scripted benchmarks for some components in the future.

The following is a walk-through on how to evaluate the performance impact of an imaginary change in the UI5 Builder project.

Setup

  1. Install hyperfine

  2. Prepare the UI5 CLI projects you want to measure (optional if your development environment already reflects this):

    1. Start in an empty directory

      sh
      mkdir ui5-cli-benchmark && cd ui5-cli-benchmark/
    2. Clone UI5 CLI

      sh
      git clone git@github.com:SAP/ui5-cli.git
    3. Clone UI5 Builder (or your fork)

      sh
      git clone git@github.com:SAP/ui5-builder.git

      Make sure you check out the main branch, since we'll perform the baseline test first

    4. Install npm dependencies in both directories

      sh
      (cd ui5-cli && npm install)
      +(cd ui5-builder && npm install)
    5. Create global npm links for both projects

      sh
      (cd ui5-cli && npm link)
      +(cd ui5-builder && npm link)
    6. Link UI5 Builder into UI5 CLI

      sh
      (cd ui5-cli && npm link @ui5/builder)
    7. Verify your setup

      sh
      ui5 --version

      This should output the version and location of the UI5 CLI you just cloned.

      For example:

      3.0.0 (from /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs)
  3. Prepare your test project (we choose the openui5-sample-app)

    1. Clone the project

      sh
      git clone git@github.com:SAP/openui5-sample-app.git
    2. Navigate into the project

      sh
      cd openui5-sample-app
    3. Install any required npm dependencies

      sh
      npm install

      Note: We won't link UI5 CLI into this project. Instead, we'll call it directly.

    4. Verify that the previously installed UI5 CLI can be called with the following command:

      sh
      UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs --version

      On Windows:

      sh
      set UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs --version

      (Replace the path to ui5.cjs with the one shown in the previous ui5 --version output)

Benchmarking

  1. Depending on how reliable you'd like the measurements to be, consider preparing your system:

    1. Connect your computer to a power supply
    2. Make sure no updates or anti-virus scans are taking place
    3. Close all applications. This includes your IDE, since it might start indexing any new files created during the build, thus impacting I/O
    4. Don't interact with your system wile the benchmarking is running
  2. Perform the baseline measurement

    1. In the project, start your first benchmark

      sh
      hyperfine --warmup 1 \
      +'UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs build' \
      +--export-markdown ./baseline.md

      On Windows:

      sh
      hyperfine --warmup 1 \
      +'set UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs build' \
      +--export-markdown ./baseline.md
    2. Your baseline benchmark is now stored in baseline.md and should look similar to this:

      CommandMean [s]Min [s]Max [s]Relative
      UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs build1.439 ± 0.0361.4001.5071.00
  3. Prepare your change

    1. Switch to the branch that contains your change
      sh
      (cd ../ui5-builder && git checkout my-change)
    2. If your change requires different npm dependencies, reinstall them
      sh
      (cd ../ui5-builder && npm install)
    3. The link from UI5 CLI is still in place. However, if you have changes in multiple UI5 CLI modules, you might need to npm link those again
  4. Perform the change measurement

    1. In the project, start your second benchmark

      sh
      hyperfine --warmup 1 \
      +'UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs build' \
      +--export-markdown ./my_change.md

      On Windows:

      sh
      hyperfine --warmup 1 \
      +'set UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs build' \
      +--export-markdown ./my_change.md
    2. Your change's benchmark is now stored in my_change.md

Compile Results

  1. Merge both measurements into one markdown

    1. In this setup, Hyperfine can't correctly calculate the relative difference between results. The respective column always reads "1". Either remove the "Relative" column or calculate the relative difference yourself:

      • Use this formula to calculate the percentage increase based on the Mean result:
        (newMean - baselineMean) / baselineMean * 100
        ^^JavaScript function:^^
        #!js function calcDiff(baseVal, newVal) {return (newVal - baseVal) / baseVal * 100;}

      • Example for a performance improvement:
        Baseline of 10 seconds decreased to 7 seconds:
        (7-10)/10*100 = -30 => -30% change

      • Example for a performance deterioration:
        Baseline of 10 seconds increased to 12 seconds:
        (12-10)/10*100 = 20 => +20% change

    2. Change the unit in the Mean/Min/Max column headers to seconds or milliseconds according to your results.

    3. Change the command column to only contain the relevant ui5 build command, including any parameters. E.g. ui5 build --all

    4. You should end up with a markdown like this:

      md
      ui5-builder Ref | Command | Mean [s] | Min [s] | Max [s] | Relative
      +|:---|:---|---:|---:|---:|---:|
      +| main ([`1234567`](https://github.com/SAP/ui5-builder/commit/<sha>)) | `ui5 build` | 1.439 ± 0.036 | 1.400 | 1.507 | Baseline |
      +| feature-duck ([`9101112`](https://github.com/SAP/ui5-builder/commit/<sha>)) | `ui5 build` | 1.584 ± 0.074 | 1.477 | 1.680 | **+10%** |

      Rendering like this:

      ui5-builder RefCommandMean [s]Min [s]Max [s]Relative
      main (1234567)ui5 build1.439 ± 0.0361.4001.507Baseline
      feature-duck (9101112)ui5 build1.584 ± 0.0741.4771.680+10%
  2. You can now share these results on GitHub or wherever you might need them.

Happy benchmarking! 🏎

+ + + + \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/Builder.html b/packages/documentation/docs/.vitepress/dist/Builder.html new file mode 100644 index 0000000000..e22c926242 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/Builder.html @@ -0,0 +1,55 @@ + + + + + + UI5 Builder | VitePress + + + + + + + + + + + + + + +
Skip to content

UI5 Builder

The UI5 Builder module takes care of building your project.

Based on a project's type, the UI5 Builder defines a series of build steps to execute; these are also called "tasks".

For every type there is a set of default tasks. You can disable single tasks using the --exclude-task CLI parameter, and you can include tasks using the --include-task parameter.

API Reference

Tasks

Tasks are specific build steps to be executed during build phase.

They are responsible for collecting resources which can be modified by a processor. A task configures one or more processors and supplies them with the collected resources. After the respective processor processed the resources, the task is able to continue with its workflow.

A project can add custom tasks to the build by using the Custom Tasks Extensibility.

Standard Tasks

All available standard tasks are documented in the API reference. Search for @ui5/builder/tasks/ to filter the API reference for all available tasks. The list below offers the actual order of their execution:

TaskType applicationType libraryType theme-library
escapeNonAsciiCharactersenabledenabled
replaceCopyrightenabledenabledenabled
replaceVersionenabledenabledenabled
replaceBuildtimeenabled
generateJsdocdisabled¹
executeJsdocSdkTransformationdisabled¹
minifyenabledenabled
generateFlexChangesBundleenabledenabled
generateLibraryManifestenabled
enhanceManifestenabledenabled
generateComponentPreloadenableddisabled²
generateLibraryPreloadenabled
generateStandaloneAppBundledisabled³
transformBootstrapHtmldisabled³
generateBundledisabled⁴disabled⁴
buildThemesenabledenabled
generateThemeDesignerResourcesdisabled⁵disabled⁵
generateVersionInfodisabled¹
generateCachebusterInfodisabled
generateApiIndex*disabled¹ *
generateResourcesJsondisableddisableddisabled

Disabled tasks can be activated by certain build modes, the project configuration, or by using the --include-task CLI parameter. See footnotes where given


¹ Enabled in jsdoc build, which disables most of the other tasks
² Enabled for projects defining a component preload configuration
³ Enabled in self-contained build, which disables generateComponentPreload and generateLibraryPreload
⁴ Enabled for projects defining a bundle configuration
⁵ Can be enabled for framework projects via the includeTask option. For other projects, this task is skipped

minify

The minify task compresses all JavaScript resources of a project while preserving the original sources as so-called debug variants. For example when compressing a resource named Module.js, its content will be minified and a new resource Module-dbg.js is created and placed next to it.

The UI5 runtime can be instructed to load those debug variants instead of compressed resources and bundles. This can ease debugging in some cases, since the original sources are then used directly in the browser. For details, refer to the UI5 framework documentation on debugging.

For each resource it compresses, the minify task will also create a source map resource. Browsers can use this to map the content of a compressed JavaScript resource back to the original source file (now contained in the debug variant). All this happens automatically once you open the development tools in the browser and start debugging a project. While the browser still executes the code of the compressed resources, it will also show the debug variants and use the source maps to connect the two. This results in an improved debugging experience, which is almost identical to loading the debug variants directly as described before, only much faster.

Related to this, the bundling tasks will also incorporate the generated source maps to map the content of the bundles to the individual debug variants of the bundled modules.

Input Source Maps

TIP

Support for input source maps has been added in UI5 CLI v3.7.0.

For projects facilitating transpilation (such as TypeScript-based projects), it is commonly desired to debug in the browser using the original sources, e.g. TypeScript files. To make this work, the transpilation process first needs to create source maps and reference them in the generated JavaScript code.

UI5 CLI's minify task will then find this reference and incorporate the source map into the minification process. In the end, the minified JavaScript resources will reference an updated source map, which reflects the transpilation as well as the minification. The browser can use this to map every statement back to the original TypeScript file, making debugging a breeze.

WARNING

If a resource has been modified by another build task before minify is executed, any referenced source map will be ignored. This is to ensure the integrity of the source maps in the build result.

It is possible that the modification of the resource content is not reflected in the associated source map, rendering it corrupted. A corrupt source map can make it impossible to properly analyze and debug a resource in the browser development tools.

Standard tasks which may modify resources without updating the associated source maps currently include replaceVersion, replaceCopyright and replaceBuildtime.

Expand the block below to view a diagram illustrating the minification process and source map handling.

Minification Activity Diagram

minify Task Activity

Generation of Supported Locales

The enhanceManifest task fills the supportedLocales property in the manifest.json of a UI5 library/application automatically with the available locales determined by the existence of the respective .properties translation files. To disable the automatic generation of the supportedLocales, set supportedLocales to any desired value. For further resource bundle configuration options, see Supported Locales and Fallback Chain.

Requirements

This feature only becomes active under the following conditions:

  • The _version property in the manifest.json is set to 1.21.0 or higher
  • The specified resource bundle is located inside the project and within the namespace defined in the manifest.json

Scenario: Application

txt
- webapp/i18n/
+  - i18n.properties
+  - i18n_en.properties
+  - i18n_en_US.properties
+  - i18n_de.properties
+  - i18n_de_DE.properties

In the manifest.json the supportedLocales property will be enhanced as follows:

Source

json
"models": {
+    "i18n": {
+        "type": "sap.ui.model.resource.ResourceModel",
+        "settings": {
+            "bundleName": "my.app.i18n.i18n"
+        }
+    }
+}

Build Result

json
"models": {
+    "i18n": {
+        "type": "sap.ui.model.resource.ResourceModel",
+        "settings": {
+            "bundleName": "my.app.i18n.i18n",
+            "supportedLocales": [
+                "",
+                "de",
+                "de_DE",
+                "en",
+                "en_US"
+            ]
+        }
+    }
+}

Processors

Processors work with provided resources. They contain the actual build step logic to apply specific modifications to supplied resources, or to make use of the resources' content to create new resources out of that.

Processors can be implemented generically. The string replacer is an example for that. Since string replacement is a common build step, it can be useful in different contexts, e.g. code, version, date, and copyright replacement. A concrete replacement operation could be achieved by passing a custom configuration to the processor. This way, multiple tasks can make use of the same processor to achieve their build step.

To get a list of all available processors, please visit the API reference and search for @ui5/builder/processors/.

Legacy Bundle Tooling (lbt)

JavaScript port of the "legacy" Maven/Java based bundle tooling.

JavaScript Files Requiring Top Level Scope

UI5 CLI packages JavaScript files that require "top level scope" as a string, provided your project uses a Specification Version lower than 4.0. In this case, the code is evaluated using eval at runtime.

This ensures that the script works as expected, e.g. with regards to implicitly used globals. However, this eval runtime feature will be discontinued with UI5 2.x because of security best practices and to comply with stricter CSP settings (i.e. unsafe-eval).

If your project defines Specification Version 4.0 or higher, files requiring top level scope are no longer part of the created bundle and following error is logged by UI5 CLI:

Module myFancyModule requires top level scope and can only be embedded as a string (requires 'eval'), which is not supported with specVersion 4.0 and higher.

If you see this error message, please adjust your code by applying one of the following options:

Option 1: Use ui5-tooling-modules to bundle third-party npm packages. It converts files to sap.ui.define modules automatically.

Option 2: Wrap the respective files manually in sap.ui.define modules as shown below:

Example

Before:

js
const myFancyModule = {};

After:

js
sap.ui.define([], () => {
+   "use strict";
+   const myFancyModule = {};
+   return myFancyModule;
+});
+ + + + \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/CLI.html b/packages/documentation/docs/.vitepress/dist/CLI.html new file mode 100644 index 0000000000..0abb24ef59 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/CLI.html @@ -0,0 +1,28 @@ + + + + + + UI5 CLI | VitePress + + + + + + + + + + + + + + +
Skip to content

UI5 CLI

Requirements

  • Node.js version v20.11.0 and higher or v22.0.0 and higher (v21 is not supported)
  • npm version v8.0.0 or higher

Installation

Install the CLI using the npm package manager:

sh
npm install --global @ui5/cli
+
+# Verify installation
+ui5 --help

Usage/Syntax

ui5 <command> [options]

The CLI automatically checks for updates using update-notifier. While this is skipped in CI environments, you might also opt-out manually by following the steps described here.

Common options

These options you can use with each command.

OptionDescriptionDetails
-h, --helpShow help[boolean]
-v, --versionShow version number[boolean]
-c, --configPath to project configuration file in YAML format[string]
--dependency-definitionPath to a YAML file containing the project's dependency tree. This option will disable resolution of node package dependencies.[string]
--workspace-configPath to workspace configuration file in YAML format[string]
-w, --workspaceName of the workspace configuration to use[string] [default: "default"]
--loglevel, --log-levelSet the logging level[string] [choices: "silent", "error", "warn", "info", "perf", "verbose", "silly"] [default: "info"]
--verboseEnable verbose logging.[boolean] [default: false]
--perfEnable performance measurements and related logging.[boolean] [default: false]
--silentDisable all log output.[boolean] [default: false]

Examples

Execute command using a static dependency tree instead of resolving node package dependencies

ui5 <command> --dependency-definition /path/to/projectDependencies.yaml

Execute command using a project configuration from custom path

ui5 <command> --config /path/to/ui5.yaml

Execute command using the 'dolphin' workspace of a ui5-workspace.yaml

ui5 <command> --workspace dolphin

Execute command with the maximum log output

ui5 <command> --log-level silly

Commands

ui5 add

Description

Add SAPUI5/OpenUI5 framework libraries to the project configuration.

Usage

ui5 add [--development] [--optional] <framework-libraries..>

Options

OptionDescriptionDetails
-D, --development, --devAdd as development dependency[boolean] [default: false]
-O, --optionalAdd as optional dependency[boolean] [default: false]

Positionals

PositionalDescriptionDetails
framework-librariesFramework library names[array] [required] [default: []]

Examples

Add the framework libraries sap.ui.core and sap.m as dependencies

ui5 add sap.ui.core sap.m

Add the framework library sap.ui.support as development dependency

ui5 add -D sap.ui.support

Add the framework library themelib_sap_fiori_3 as optional dependency

ui5 add --optional themelib_sap_fiori_3

ui5 build

Description

Build project in current directory

Usage

ui5 build

Child Commands

CommandDescription
ui5 build jsdocBuild JSDoc resources
ui5 build preload(default) Build project and create preload bundles
ui5 build self-containedBuild project and create self-contained bundle. Recommended to be used in conjunction with --include-all-dependencies

Options

OptionDescriptionDetails
-a, --include-all-dependencies, --allInclude all dependencies in the build result. This is equivalent to '--include-dependency "*"'[boolean] [default: false]
--include-dependencyA list of dependencies to be included in the build result. You can use the asterisk '*' as an alias for including all dependencies in the build result. The listed dependencies cannot be overruled by dependencies defined in 'exclude-dependency'. The provided name must match with the dependency name shown in 'ui5 ls --flat'[array]
--include-dependency-regexpA list of regular expressions defining dependencies to be included in the build result. This list is prioritized like 'include-dependency'.[array]
--include-dependency-treeA list of dependencies to be included in the build result. Transitive dependencies are implicitly included and do not need to be part of this list. These dependencies overrule the selection of 'exclude-dependency-tree' but can be overruled by 'exclude-dependency'.[array]
--exclude-dependencyA list of dependencies to be excluded from the build result. The listed dependencies can be overruled by dependencies defined in 'include-dependency'. The provided name must match with the dependency name shown in 'ui5 ls --flat'[array]
--exclude-dependency-regexpA list of regular expressions defining dependencies to be excluded from the build result. This list is prioritized like 'exclude-dependency'.[array]
--exclude-dependency-treeA list of dependencies to be excluded from the build result. Transitive dependencies are implicitly included and do not need to be part of this list.[array]
--destPath of build destination[string] [default: "./dist"]
--clean-destIf present, clean the destination directory before building[boolean] [default: false]
--create-build-manifestStore build metadata in a '.ui5' directory in the build destination, allowing reuse of the build result in other builds[boolean] [default: false]
--include-taskA list of tasks to be added to the default execution set. This option takes precedence over any excludes.[array]
--exclude-taskA list of tasks to be excluded from the default task execution set[array]
--framework-versionOverrides the framework version defined by the project. Takes the same value as the version part of "ui5 use"[string]
--cache-modeCache mode to use when consuming SNAPSHOT versions of framework dependencies. The 'Default' behavior is to invalidate the cache after 9 hours. 'Force' uses the cache only and does not create any requests. 'Off' invalidates any existing cache and updates from the repository[string] [choices: "Default", "Force", "Off"] [default: "Default"]
--experimental-css-variablesGenerate CSS variables (css-variables.css, css-variables.source.less) and skeleton (library-skeleton(-RTL).css) for all themes[boolean] [default: false]
--output-styleProcesses build results into a specific directory structure.
- Flat: Omits the project namespace and the "resources" directory.
- Namespace: Respects the project namespace and the "resources" directory, maintaining the original structure.
- Default: The default directory structure for every project type. For applications, this is identical to "Flat", and for libraries, it is "Namespace". Other types have a more distinct default output style.
[string] [choices: "Default", "Flat", "Namespace"] [default: "Default"]

Examples

Preload build for project without dependencies

ui5 build

Self-contained build for project

ui5 build self-contained

Build project but only apply the minify- and generateComponentPreload tasks

ui5 build --exclude-task=* --include-task=minify generateComponentPreload

Build project by applying all default tasks including the minify task and excluding the generateComponentPreload task

ui5 build --include-task=minify --exclude-task=generateComponentPreload

Preload build with experimental CSS variables artifacts

ui5 build --experimental-css-variables

ui5 config

Description

Get and set UI5 CLI configuration options

Usage

ui5 config

Child Commands

CommandDescription
ui5 config set <opt​ion> [value]Set the value for a given configuration option. Clear an existing configuration by omitting the value
ui5 config get <opt​ion>Get the value for a given configuration option
ui5 config listDisplay the current configuration

Examples

Set a value for the ui5DataDir configuration

ui5 config set ui5DataDir /path/to/.ui5

Unset the current value of the ui5DataDir configuration

ui5 config set ui5DataDir

ui5 init

Description

Initialize the UI5 CLI configuration for an application or library project.

Usage

ui5 init

ui5 remove

Description

Remove SAPUI5/OpenUI5 framework libraries from the project configuration.

Usage

ui5 remove <framework-libraries..>

Positionals

PositionalDescriptionDetails
framework-librariesFramework library names[array] [required] [default: []]

Examples

Remove the framework libraries sap.ui.core and sap.m as dependencies

ui5 remove sap.ui.core sap.m

ui5 serve

Description

Start a web server for the current project

Usage

ui5 serve

Options

OptionDescriptionDetails
-p, --portPort to bind on (default for HTTP: 8080, HTTP/2: 8443)[number]
-o, --openOpen web server root directory in default browser. Optionally, supplied relative path will be appended to the root URL[string]
--h2Shortcut for enabling the HTTP/2 protocol for the web server[boolean] [default: false]
--simple-indexUse a simplified view for the server directory listing[boolean] [default: false]
--accept-remote-connectionsAccept remote connections. By default the server only accepts connections from localhost[boolean] [default: false]
--keyPath to the private key[string] [default: "~/.ui5/server/server.key"]
--certPath to the certificate[string] [default: "~/.ui5/server/server.crt"]
--sap-csp-policiesAlways send content security policies 'sap-target-level-1' and 'sap-target-level-3' in report-only mode[boolean] [default: false]
--serve-csp-reportsCollects and serves CSP reports upon request to '/.ui5/csp/csp-reports.json'[boolean] [default: false]
--framework-versionOverrides the framework version defined by the project. Takes the same value as the version part of "ui5 use"[string]
--cache-modeCache mode to use when consuming SNAPSHOT versions of framework dependencies. The 'Default' behavior is to invalidate the cache after 9 hours. 'Force' uses the cache only and does not create any requests. 'Off' invalidates any existing cache and updates from the repository[string] [choices: "Default", "Force", "Off"] [default: "Default"]

Examples

Start a web server for the current project

ui5 serve

Enable the HTTP/2 protocol for the web server (requires SSL certificate)

ui5 serve --h2

Use the project configuration from a custom path

ui5 serve --config /path/to/ui5.yaml

Use a static dependency definition file

ui5 serve --dependency-definition /path/to/projectDependencies.yaml

Listen to port 1337 and launch default browser with http://localhost:1337/test/QUnit.html

ui5 serve --port 1337 --open tests/QUnit.html

ui5 tree

Description

Outputs the dependency tree of the current project to stdout. It takes all relevant parameters of ui5 build into account.

Usage

ui5 tree

Options

OptionDescriptionDetails
--flatOutput a flat list of all dependencies instead of a tree hierarchy[boolean] [default: false]
--levelLimit the number of levels shown in the tree hierarchy[number]
--framework-versionOverrides the framework version defined by the project. Takes the same value as the version part of "ui5 use"[string]
--cache-modeCache mode to use when consuming SNAPSHOT versions of framework dependencies. The 'Default' behavior is to invalidate the cache after 9 hours. 'Force' uses the cache only and does not create any requests. 'Off' invalidates any existing cache and updates from the repository[string] [choices: "Default", "Force", "Off"] [default: "Default"]

ui5 use

Description

Initialize or update the project's framework configuration.

Usage

ui5 use <framework-info>

Positionals

PositionalDescriptionDetails
framework-infoFramework name, version or both (name@version).
Name can be "SAPUI5" or "OpenUI5" (case-insensitive).
Version can be "latest" (default), a version or range according to the Semantic Versioning specification (https://semver.org/), or a tag available in the npm registry.
For SAP-internal usage the version can also be "latest-snapshot", a version or range ending with -SNAPSHOT, or a simplified range such as "1-SNAPSHOT", "1.x-SNAPSHOT" or "1.108-SNAPSHOT".
[string] [required]

Examples

Use SAPUI5 in the latest available version

ui5 use sapui5@latest

Use OpenUI5 in the latest available 1.76 patch version

ui5 use openui5@1.76

Use the latest available version of the configured framework

ui5 use latest

Use OpenUI5 in the latest available version

ui5 use openui5

ui5 versions

Description

Shows the versions of all UI5 CLI modules

Usage

ui5 versions

Local vs. Global Installation

In general, we recommend a global installation of the UI5 CLI (npm install --global @ui5/cli).

However, it makes sense to add the UI5 CLI as a devDependency (npm install --save-dev @ui5/cli) to a project's package.json. This ensures that every developer working on the project uses the same version of the UI5 CLI and your continuous integration environments also uses this version.

In case you have both, a local installation in one of your projects as well as a global installation, the UI5 CLI will always try to invoke the local installation. This is in part because npm scripts defined in your package.json will also always invoke the local installation.

This behavior can be disabled by setting the environment variable UI5_CLI_NO_LOCAL.

Example
You have a project located in the directory /my-application.

You have installed the UI5 CLI globally. In addition, the project's package.json defines a devDependency to @ui5/cli and a start script "ui5 serve". This means there are at least two installations of @ui5/cli on your system. Their versions might not match.

This table illustrates which of the two installations is used in different scenarios. Note how the UI5 CLI always tries to prefer the version installed in the project.

Current Working DirectoryCommandGlobal UI5 CLILocal UI5 CLI
/ui5 --versionenabled
/my-applicationui5 --versionenabled
/my-applicationui5 serveenabled
/my-applicationUI5_CLI_NO_LOCAL=X ui5 serveenabled
/my-applicationnpm startenabled
/my-applicationUI5_CLI_NO_LOCAL=X npm startenabled
+ + + + \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/CodeAnalysis.html b/packages/documentation/docs/.vitepress/dist/CodeAnalysis.html new file mode 100644 index 0000000000..1a0520d7ee --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/CodeAnalysis.html @@ -0,0 +1,35 @@ + + + + + + Code Analysis | VitePress + + + + + + + + + + + + + + +
Skip to content

Code Analysis

During the build process, UI5 CLI executes a static code analysis of your project. In the following sections the term "simple literal" is used for the following language features:

  • string literals
  • numeric literals
  • Boolean literals
  • null / undefined
  • template literals without any expressions
  • arrays of the previous (spread operators are ignored)
  • object literals with "simple literals" used as keys and values (again, spread operators are ignored)

Dependency Analysis

UI5 CLI extracts dependency information from a project's code as outlined in the following sections. The APIs described there require the usage of "simple literals" when declaring dependencies.

JSModule Analyzer

The following APIs are analyzed by the JSModule Analyzer:

  • sap.ui.define
  • sap.ui.require
  • jQuery.sap.declare (deprecated)
  • jQuery.sap.require (deprecated)
  • sap.ui.requireSync (deprecated)
  • sap.ui.preload (restricted)
  • sap.ui.require.preload (restricted)

The JSModule Analyzer uses the "Abstract Syntax Tree" (AST) of a JavaScript file to decide whether a code block is executed conditionally or unconditionally.

The analyzer uses a set of rules to decide whether one of the above APIs is called whenever the module is executed or whether the API is only called under certain conditions.

For example, top-level code is always executed. Flow-control statements in JavaScript imply that certain blocks of code are only executed under certain conditions (for example, if blocks, else blocks, ...). Besides these inherent JavaScript rules, further common patterns are known to the analyzer, e.g. immediately invoked function expressions or the factory function of AMD modules.

Any dependencies found that - according to these rules - are always executed, are collected as eager (or standard) dependencies. Dependencies that are found on a code path that depends on certain conditions are collected as conditional dependencies.

The bundling implemented by UI5 CLI can either follow only eager dependencies (resolve: true) or additionally conditional dependencies (resolveConditional). For more information, see Custom Bundling.

When a dependency in one of the mentioned APIs is not a "simple literal" but an expression, the corresponding module is marked as "having dynamic dependencies". This marker is currently not further evaluated by UI5 CLI.

Component Analyzer

The Component Analyzer analyzes JavaScript files named Component.js to collect dependency information by searching for a manifest.json located in the same folder as the Component.js. If one is found, the sap.ui5 section is evaluated in the following way:

  • Any library dependency is added as a dependency to the library.js module of that library. If the library dependency is modeled as 'lazy', the module dependency will be added as 'conditional'.
  • Any component dependency is added as a dependency to a file named Component.js. If the dependency is modeled as 'lazy', the module dependency will be added as 'conditional'.
  • For each UI5 model for which a type is configured, a module dependency to that type is added.
  • For each route that contains a view name, a module dependency to that view is added.

Smart Template Analyzer

The Smart Template Analyzer analyzes a Smart Template app and its underlying template components to collect dependency information. It searches for a manifest.json located in the same folder as the Component.js. If it is found and if it is valid JSON, an sap.ui.generic.app section is searched and evaluated in the following way:

  • For each page configuration, the configured component is added as a dependency to the template app module.
  • If the page configuration contains a templateName, a dependency to that template view is added to the app.
  • Otherwise, the class definition of the component is analyzed to find a default template view name. If found, a dependency to that view is added to the app module.

The template component is analyzed in the following way:

  • precondition: the template component class is defined in an AMD-style module, using define or sap.ui.define
  • precondition: the module sap/suite/ui/generic/template/lib/TemplateAssembler is imported
  • precondition: a call to TemplateAssembler.getTemplateComponent is used to define the component class
  • precondition: that call is used in a top-level return statement of the factory function
  • precondition: necessary parameters to that call are given as an object literal (no further coding)
  • precondition: the settings define a managed property metadata.properties.templateName with a defaultValue of type string The default value of the property represents the template view of the template component. The manifest of the template app could in theory specify an alternative template in component.settings.templateName.

XML Template Analyzer

The XML Template Analyzer tackles XMLView and XMLFragment. It parses the XML, collects controls, and adds them as dependency to the ModuleInfo object. Additionally, some special dependencies are handled:

  • controller of the view
  • resource bundle (note: as locale-dependent dependencies can't be modelled yet in the ModuleInfo, only a dependency to the development version (aka raw language) of the bundle will be added)
  • component referenced via the ComponentContainer control
  • embedded fragments or views

In an XMLView/XMLFragment, usually three categories of element nodes exist: Controls, aggregations, and non-UI5 nodes (e.g. XHTML or SVG). The third category usually can be identified by its namespace. To distinguish between the first two categories, the analyzer checks whether a resource exists in the project or its dependencies whose name matches the qualified node name. For example, if the qualified node name is sap.m.Text, the analyzer checks whether sap/m/Text.js exists. If so, UI5 CLI detects this node as a control, otherwise as an aggregation.

XML Composite Analyzer

The XMLComposite control is deprecated since version UI5 1.88. Nevertheless, UI5 CLI will attempt to analyze the declaration of any such controls in a project.

The XML Composite Analyzer searches for the name of the configured fragment containing the XMLComposite control.

javascript
sap.ui.define([
+    "sap/ui/core/XMLComposite"
+], function(XMLComposite) {
+    return XMLComposite.extend("composites.MyComposite", {} 
+});
javascript
sap.ui.define([
+    "sap/ui/core/XMLComposite"
+], function(XMLComposite) {
+    return XMLComposite.extend("composites.MyComposite", {
+        fragment: "composites.custom.MyComposite"
+    } 
+});

Library Initialization

The library.js Analyzer checks every library.js file in the namespace of a library for occurences of a sap/ui/core/Core#initLibrary call. If found, the following information will be placed in the generated manifest.json:

  • noLibraryCSS: false when the noLibraryCSS property had been set in the initLibrary info object
  • types: string array with the names of the types contained in the library
  • controls: string array with the names of the controls defined in the library
  • elements: string array with the names of the elements defined in the library
  • interfaces: string array with the names of the interfaces defined in the library

sap/ui/core/Core#initLibrary requires the usage of "simple literals" for the parameters passed to this function call.

Note: Currently only the usage via the global sap.ui.getCore().initLibrary is supported by this analyzer. Requiring sap/ui/core/Core and then calling Core.initLibrary is not recognized by this analyzer.

JSDoc

The UI5 CLI offers a JSDoc build, which is enhanced by UI5-specific JSDoc features.

An UI5 SDK can be built locally. To get more insight into the local UI5 SDK build setup, have a look at our Developer's Guide.

Currently, the resources needed for a UI5 SDK build are stored in openui5 and in ui5-builder. This double maintenance is needed because these files are not part of the sap.ui.core library artefact, so building JSDoc for any library has no access to the needed resources. It's therefore necessary to have these resources also available in the ui5-builder. This might change in the future.

The following artefacts contribute to the JSDoc build:

  • jsdocGenerator.js: Executes the actual JSDoc build. UI5 CLI wrapper for plugin.cjs.

  • sdkTransformer.js: UI5 CLI wrapper for transformApiJson.cjs.

  • apiIndexGenerator.js: UI5 CLI wrapper for createIndexFiles.cjs.

  • createIndexFiles.cjs: Creates API index resources from all api.json resources and by interpreting the sap-ui-version.json available in the given test resources directory. The resulting index resources (e.g. api-index.json, api-index-deprecated.json, api-index-experimental.json and api-index-since.json) are only to be used in a UI5 SDK.

  • transformApiJson.cjs: Preprocesses api.json files for use in UI5 SDKs. Transforms the api.json as created by the JSDoc build into a pre-processed api.json file suitable for the SDK. The pre-processing includes formatting of type references, rewriting of links, and other time-consuming calculations.

  • plugin.cjs: UI5 plugin for JSDoc3. The plugin adds the following UI5-specific tag definitions to JSDoc3:

    • disclaimer
    • experimental
    • final
    • interface
    • implements
    • ui5-restricted, and more

    It furthermore listens to the following JSDoc3 events to implement additional functionality:

    • parseBegin: to create short names for all files that are to be parsed
    • fileBegin: to write to the log (a kind of progress indicator)
    • jsdocCommentFound: to pre-process comments, empty lines are used as paragraph markers, a default visibility is added, and legacy tag combinations used in JSDoc2 are converted to JSDoc3 conventions
    • newDoclet
    • parseComplete: remove undocumented/ignored/private doclets or duplicate doclets

    Last but not least, it implements an astNodeVisitor to detect UI5-specific "extend" calls and to create documentation for the properties, aggregations, etc. that are created with the "extend" call.

  • publish.cjs: JSDoc3 template for UI5 documentation generation.

    • adds missing namespaces
    • determines the export names of exported APIs
    • writes out the api.json from the collected JSDoc information
    • calculates the inheritance hierarchy
    • checks for cyclic dependencies
    • removes unnecessary whitespace from an HTML document
  • versionUtil.cjs: Provides helper methods to determine version-related information.

+ + + + \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/Configuration.html b/packages/documentation/docs/.vitepress/dist/Configuration.html new file mode 100644 index 0000000000..6df4caebff --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/Configuration.html @@ -0,0 +1,220 @@ + + + + + + Configuration | VitePress + + + + + + + + + + + + + + +
Skip to content

Configuration

A projects UI5 CLI configuration is typically located in a YAML file named ui5.yaml, located in the root directory.

INFO

This document describes the configuration of UI5 CLI-based projects and extensions. It represents Specification Version 3.0.

Validation / IDE support

Starting with Specification Version 2.0 the configuration is validated according to a JSON schema.
The current version of the schema can be found here: https://ui5.github.io/cli/schema/ui5.yaml.json

The schema is also part of the JSON Schema Store Catalog which is used by the YAML Language Server. See the list of clients to find extensions for various IDEs and editors.

Example

yaml
specVersion: "4.0"
+type: application|library|theme-library|module
+metadata:
+  name: some.project.name

General Configuration

Specification Version and -Type

A project must define a specification version (specVersion), to which its configuration is compatible to. Also see Specification Versions.

In addition, a project must define a type. This can be either application, library, theme-library (since Specification Version 1.1), or module.

The type defines the default path mappings and build tasks. See UI5 Builder: Types for details.

Example

yaml
specVersion: "4.0"
+type: application
yaml
specVersion: "4.0"
+type: library
yaml
specVersion: "4.0"
+type: theme-library
yaml
specVersion: "4.0"
+type: module

Kind

The configuration may also contain a kind property. This is used to differentiate between projects and extensions.

This configuration defaults to kind: project, which means you typically only need to specify it for extensions like Custom Tasks.

Metadata

Example

yaml
metadata:
+ name: my.company.project
+ copyright: |-
+  My Project
+   * (c) Copyright 2009-${currentYear} My Company
+   * Licensed under the XYZ License, Version n - see LICENSE.txt.

name

A project must have a name.

In UI5 CLI, a project is typically identified by the configured name. It must be unique and should ideally follow a namespace scheme like organization.product.project for UI5 projects or ui5-task-heavy-boulder for extension-projects.

The name property of projects defining Specification Version 3.0 and higher must satisfy the following conditions:

  • Must be at least 3 characters long
  • Must be no longer than 80 characters
  • Must contain lowercase characters only
  • Must contain alphanumeric characters, dash, underscore and period only
    • Exception: The @ and / characters are allowed at certain positions as explained below
  • Must start with an alphabetic character or an @ character
  • If it starts with an @ character, it must contain exactly one forward slash /
    • This is aligned with the npm concept for package scopes, for example @org/lib.name

A given copyright string will be used to fill placeholders like ${copyright} and @copyright@ in a project's source code. |- is a way to define a multi line string in YAML. Check the YAML Specification for details.
Inside the copyright string, you can use the placeholder ${currentYear} which will be replaced with the current year.

deprecated

In case your project is deprecated you may also define a property deprecated: true. In projects that have a direct dependency to your project, UI5 CLI will then display a deprecation warning.

Resources

Path Mapping

Depending on the project type, UI5 CLI expects your projects source files to be located in certain directories.

If your project's sources are located in different directories, you need to configure the path mapping accordingly. Depending on the type of project, there are several different path mappings available.

Note that all configured paths must be written in POSIX (i.e. using only forward slashes / as path segment separators) and relative to the project's root directory.

Available Path Mappings

Applications

  • webapp: Mapped to runtime path / (root)
yaml

+resources:
+  configuration:
+    paths:
+      webapp: webapp

Libraries

  • src: Mapped to runtime path /resources
  • test: Mapped to runtime path /test-resources
yaml
resources:
+  configuration:
+    paths:
+      src: src
+      test: test

Modules

Modules can map any virtual paths to any physical path within the project. However, it is recommended that modules include their namespace in thevirtual path and use the /resources prefix (e.g. /resources/my/librarymodule-xy/) to avoid name clashes with other projects.

yaml
resources:
+  configuration:
+    paths:
+      /resources/my/library/module-xy/: lib
+      /resources/my/library/module-xy-min/: dist

Example

For an application project with the following directory structure, youneed the path mapping configuration given below: Directory Structure:

yaml
my-app/
+\_ ui5.yaml
+\_ lib/ // [!code focus]
+ \_ js/ // [!code focus]
+   \_ app/ // [!code focus]

Path Mapping Configuration:

yaml
resources:
+ configuration:
+   paths:
+     webapp: lib/js/app // [!code focus]

Encoding of *.properties files

Info

This configuration is available since UI5 CLI v1.7.0

By default UI5 CLI expects different encodings for *.properties i18n files, depending on the project's specification version:

Specification VersionDefault propertiesFileSourceEncoding
2.0+UTF-8
0.1, 1.0 or 1.1ISO-8859-1

If your project uses a different encoding for *.properties files, you need to set the propertiesFileSourceEncoding configuration property.

UI5 CLI will read the corresponding files of the project in the given encoding. Any non-ASCII characters will be replaced with the respective Unicode escape sequences. This allows you to deploy the resulting files to any environment, independent of how it expects *.properties files to be encoded. Please refer to RFC 7 for details.

Custom Configuration

Info

This configuration is available since UI5 CLI v2.2.0 and applies only to projects defining Specification Version 2.1 or higher.

Custom configuration that is ignored by UI5 CLI.
This can be used to store UI5 specific configuration for third-party tools.

The "customConfiguration" value must be an object.
For third-party tools it is recommended to follow a namespace-like structure.

Framework Configuration

Info

This configuration is available since UI5 CLI v2.0.0 and applies only to projects defining [Specification Version(#specification-versions) 2.0 or higher.

Define your project's framework dependencies.

Framework and Version

In your project's framework configuration you must define whether you want to use the OpenUI5 or the SAPUI5 framework and which version:

yaml
framework:
+  name: OpenUI5
+  version: 1.82.0
yaml
framework:
+  name: SAPUI5
+  version: 1.82.0

If you are not sure which framework is right for you, see our documentation on the differences between OpenUI5 and SAPUI5.

You can find an overview of the available versions for each framework here:

Info

Projects that use the OpenUI5 framework cannot depend on projects thatuse the SAPUI5 framework.

Dependencies

Example

yaml
specVersion: "4.0"
+type: application
+metadata:
+  name: my.company.app
+framework:
+  name: OpenUI5
+  version: 1.82.0
+  libraries:
+    - name: sap.ui.core
+    - name: sap.m
+    - name: sap.ui.table
+    - name: themelib_sap_fiori_3
yaml
specVersion: "4.0"
+type: library
+metadata:
+  name: my.company.library
+framework:
+  name: SAPUI5
+  version: 1.82.0
+  libraries:
+    - name: sap.ui.core
+    - name: sap.m
+    - name: themelib_sap_belize
+      optional: true
+    - name: themelib_sap_bluecrystal
+      optional: true
+    - name: themelib_sap_fiori_3
+      optional: true

When building an application depending on this library as well as one of the theme libraries, only that theme is built for this library.

Runtime Dependencies

All libraries required by your project must be listed in the libraries section of the framework configuration:

yaml
framework:
+  name: OpenUI5
+  version: 1.82.0
+  libraries:
+    - name: sap.ui.core
+    - name: sap.m
+    - name: sap.ui.table
yaml
framework:
+  name: SAPUI5
+  version: 1.82.0
+  libraries:
+    - name: sap.ui.core
+    - name: sap.m
+    - name: sap.ui.comp

Development Dependencies

Development dependencies are only installed if the project defining them is the current root project. They are typically only required during the development of the project.

yaml
  libraries:
+    - name: sap.ushell
+      development: true

Note that a development dependency cannot be optional and vice versa.

Optional Dependencies

Optional dependencies are installed either if the project defining them is the current root project or if the dependency is already part of the current dependency tree. A typical use case is libraries defining optional dependencies to all theme libraries they support. You can choose which theme library to use by the application that is consuming the library by declaring it as a non-optional dependency.

yaml
  libraries:
+    - name: themelib_sap_fiori_3
+      optional: true

Build Configuration

Exclude Resources

Example

For projects of type module, this configuration is available since UI5CLI v3.5.0 and applies only to projects defining Specification Version 3.1 or higher.

yaml
builder:
+ resources:
+   excludes:
+     # You can specify paths relative to the configured "webapp" directory
+     - "index.html"
+     # When defining absolute paths, make sure to specify the namespace plus the "/resources/" prefix
+     - "/resources/my/project/namespace/test/**"
yaml
builder:
+ resources:
+   excludes:
+     # For libraries, all paths must be absolute, except for wildcards
+     - "/resources/some/project/name/test_results/**"
+     - "/test-resources/**"
+     - "!/test-resources/some/project/name/demo-app/**"
+     - "**/*.svg"
yaml
builder:
+ resources:
+   excludes:
+     # For modules, all paths must be absolute, except for wildcards
+     - "/resources/my/library/module-xy/min/**"
+     - "!/resources/my/library/module-xy/min/module-xy-bundle.js"
+     - "**/*.svg"

You can exclude a projects resources from the build process using a list of glob patterns. Matching resources will be ignored by the builder and all build tasks.

Patterns are applied to the virtual resource paths (i.e. the UI5 runtime paths). Exclude patterns are always applied after any includes.

Cachebuster

Example

yaml
builder:
+ cachebuster:
+   signatureType: time
yaml
builder:
+ cachebuster:
+   signatureType: hash

By default, the generated cachebuster info file signatures are based on timestamps (time). In setups like CI environments, a mechanism based on file hashes (hash) might be more reliable. Also see PR #241 for more details.

Component Preload Generation

For projects of type application a Component-preload.js bundle is generated by default. This bundle will contain most UI5 runtime-relevant resources of the component.
You can override this default behavior by defining a componentPreload configuration.

For projects of type library, no Component Preload is created by default.
However you can define a componentPreload configuration to create Component Preload bundles. Those will be created in addition to the library-preload.js bundle.

There are two ways to define the set of components for which preload bundles should be generated. You can either provide paths (allowing patterns) or namespaces. You can also combine both configuration options. Defining any of them overrides the default preload bundle generation for the root component of application projects.

paths

Example

yaml
builder:
+ componentPreload:
+   paths:
+       - "my/awesome/app/**/Component.js"

The paths option takes one or multiple patterns. For every matched file a separate Component-preload.js will be generated. Patterns are always applied relative to the project's virtual source directory /resources/.

namespaces

Example

yaml
builder:
+ componentPreload:
+   namespaces:
+     - "my/awesome/app"
+     - "my/awesome/app/componentOne"
+     - "my/awesome/app/componentTwo"

The namespaces option takes one or multiple component namespaces, which correspond to the directory structures.

excludes

Info

This configuration is available since UI5 CLI v2.10.0 and applies only to projects defining [Specification Version(#specification-versions) 2.3 or higher.

Example

yaml
builder:
+ componentPreload:
+   excludes:
+     - "my/awesome/app/localService/**"
yaml
builder:
+ componentPreload:
+   namespaces:
+     - "my/awesome/app"
+     - "my/awesome/app/componentOne"
+     - "my/awesome/app/componentTwo"
+   excludes:
+     - "my/awesome/app/**/thirdparty/"
+     - "!my/awesome/app/componentTwo/thirdparty/NotExcluded.js"

List of modules declared as glob patterns (resource name patterns) that are excluded from the component preload bundles. Similarly to the use of a single * or double ** asterisk, a pattern ending with a slash / denotes an arbitrary number of characters or folder names. Re-includes have to be marked with a leading exclamation mark !. The order of filters is relevant; a later inclusion overrides an earlier exclusion, and vice versa.

Note that patterns are always applied relative to the project's virtual source directory /resources/. Re-includes must start with the namespace of the component they apply to.

Library Preload Generation

For projects of type library a library-preload.js bundle is generated by default. This bundle will contain most UI5 runtime-relevant resources of the library.

excludes

Info

This configuration is available since UI5 CLI v2.10.0 and applies only to projects defining Specification Version 2.3 or higher.

Example

yaml
builder:
+ libraryPreload:
+   excludes:
+     - "my/lib/thirdparty/"
+     - "!my/lib/thirdparty/NotExcluded.js"

List of modules declared as glob patterns (resource name patterns) that are excluded from library-preload.js bundle. Similarly to the use of a single * or double ** asterisk, a pattern ending with a slash / denotes an arbitrary number of characters or folder names. Re-includes have to be marked with a leading exclamation mark !. The order of filters is relevant; a later inclusion overrides an earlier exclusion, and vice versa.

Note that patterns are always applied relative to the project's virtual source directory /resources/. Re-includes must start with the library's namespace.

Custom Tasks

Example

yaml
builder:
+ customTasks:
+   - name: custom-task-1
+     beforeTask: replaceCopyright
+     configuration:
+       some-key: some value
+   - name: custom-task-2
+     afterTask: custom-task-1
+     configuration:
+       color: blue

You can define custom build tasks that will be executed for the project. Please refer to the Custom Tasks Documentation for a detailed explanation and examples of the build extensibility.

Each customTasks entry must define the name of the custom task as defined in its metadata.name property.

In addition, the execution order needs to be defined by referencing a standard task or an already configured custom task using the afterTask or beforeTask property.

Optionally, arbitrary configuration can be passed to the custom task.

JSDoc

Example

yaml
builder:
+ jsdoc:
+   excludes:
+     - "some/project/name/thirdparty/**"

You can exclude the resources of a project from the JSDoc build process using a list of glob patterns. Matching resources will be ignored by the JSDoc build task.

Patterns are always applied relative to the project's virtual source directory /resources/.

These excludes are applied before any general builder excludes that have been defined in builder.resources.excludes.

Include Dependencies

Info

This configuration is available since UI5 CLI v2.12.0 and applies only to projects defining Specification Version 2.5 or higher.

Example

yaml
builder:
+ settings:
+   includeDependency:
+     - shimmed.thirdparty.library
+   includeDependencyRegExp:
+     - ^com\.namespace
+   includeDependencyTree:
+     - sap.m

You can include certain dependencies into the build process using the includeDependency builder setting. By using includeDependencyRegExp, a regular expression can be used, for example to specify a namespace to dynamically select a group of dependencies that have to be included into the build result. By using includeDependencyTree, a selected dependency including all of its sub-dependencies is used.

This configuration can be overwritten more precisely with the CLI parameters --include-dependency, --include-dependency-regexp, --include-dependency-tree, --exclude-dependency, --exclude-dependency-regexp and --exclude-dependency-tree.

Minification

For projects of types application and library, minification is done for all JavaScript files. During the minification step debug variants are created, original resources are minified, and source maps are created. You can exclude the resources of a project from minification using a list of glob patterns. Matching resources won't be minified, and no debug variants or source maps will be created.

The project's ui5.yaml file can contain a list of modules declared as glob patterns (resource name patterns) that are excluded from resource minification. Re-includes have to be marked with a leading exclamation mark !; see the example below. The order of filters is relevant; a later inclusion overrides an earlier exclusion, and vice versa.

Note that patterns are always applied relative to the project's virtual source directory /resources/.

Info

This configuration is available since UI5 CLI v2.14.0 and applies only to projects defining Specification Version 2.6 or higher.

Example

yaml
builder:
+ minification:
+   excludes:
+     - "my/lib/thirdparty/"
+     - "!my/lib/thirdparty/NotExcluded.js"

Server Configuration

Example

yaml
server:
+ settings:
+   httpPort: 1337
+   httpsPort: 1443

By default, UI5 CLI will serve applications using Port 8080. When running in HTTP/2 or HTTPS mode, Port 8443 will be used.

If the default port is already in use, the next highest free port will be used.

A project can also configure alternative default ports. If the configured port is already in use, an error will be thrown.

The default and configured server ports can always be overwritten with the CLI parameter --port.

Extension Configuration

Example

yaml
specVersion: "4.0"
+type: application
+metadata:
+ name: my.application
+---
+specVersion: "4.0"
+kind: extension
+type: project-shim
+metadata:
+ name: my.application.thirdparty
+shims:
+ configurations:
+   lodash:
+     specVersion: "4.0"
+     type: module
+     metadata:
+       name: lodash
+     resources:
+       configuration:
+         paths:
+           /resources/my/application/thirdparty/: ""

Extensions configuration can be added to any projects ui5.yaml. For better readability, it should to be located after the projects configuration, separated by three dashes "---".

In cases where an extension shall be reused across multiple projects you can make it a module itself and have its configuration in a standalone ui5.yaml located inside that module.

Extensions can be identified by the kind: extension configuration. Note that if no kind configuration is given, project is assumed.

Available Extensions

Custom Bundling

Example

yaml
builder:
+ bundles:
+   - bundleDefinition:
+       name: "sap-ui-custom.js"
+       sections:
+         - mode: raw
+           filters:
+           - ui5loader-autoconfig.js
+           resolve: true
+           sort: true
+     bundleOptions:
+       optimize: true
+   - bundleDefinition:
+       name: "app.js"
+       sections:
+         - mode: preload
+           filters:
+             - some/app/Component.js
+           resolve: true
+           sort: true
+         - mode: provided
+           filters:
+           - ui5loader-autoconfig.js
+           resolve: true
+     bundleOptions:
+       optimize: true

Custom bundles can be defined in the ui5.yaml. Within the builder/bundles configuration a list of bundleDefinitions can be described.

Properties

bundles

A list of bundle definitions. A bundleDefinition contains of the following options:

  • name: The module bundle name

  • defaultFileTypes: List of default file types which should be included in the bundle. Defaults to: .js, .control.xml, .fragment.html, .fragment.json, .fragment.xml, .view.html, .view.json and .view.xml

  • sections: A list of module bundle definition sections. Each section specifies an embedding technology (see API-Reference) and lists the resources that should be in- or excluded from the section.

    • mode: The embedding technology (e.g. provided, raw, preload, bundleInfo, depCache, require)

    • filters: List of modules declared as glob patterns (resource name patterns) that are in- or excluded. Similarly to the use of a single * or double ** asterisk, a pattern ending with a slash / denotes an arbitrary number of characters or folder names. Excludes have to be marked with a leading exclamation mark !. The order of filters is relevant; a later inclusion overrides an earlier exclusion, and vice versa.

    • resolve: Setting resolve to true will also include all (transitive) dependencies of the files

    • resolveConditional: Whether conditional dependencies of modules should be resolved and added to the module set for this section. By default set to false

    • declareRawModules: Whether raw modules should be declared after jQuery.sap.global became available. With the usage of the ui5loader, this flag should be set to 'false'. By default set to false

    • renderer: Whether renderers for controls should be added to the module set. By default set to false

    • sort: By default, modules are sorted by their dependencies. The sorting can be suppressed by setting the option to false

    • async (only available if mode equals require): Specifies whether the require section of the module should use an asynchronous API. When set to true, the modules are loaded using sap.ui.require. When set to false, modules are loaded using sap.ui.requireSync, which is not available in UI5 2.x.

bundleOptions

  • optimize: If set to true, the module bundle gets minified

  • decorateBootstrapModule: By default set to false. If set to true, the module will be decorated with an optimization marker

  • addTryCatchRestartWrapper: By default set to false. If set to true, bootable module bundles gets wrapped with a try/catch to filter "Restart" errors

  • numberOfParts: By default set to 1. The number of parts into which a module bundle should be splitted

  • sourceMap: By default set to true. Adds source map support to the bundle. Available since UI5 CLI v4.0.0

Specification Versions

A project must define a specification version by setting the specVersion property. UI5 CLI uses this information to detect whether the currently installed version is compatible to a project's configuration.

yaml
specVersion: "4.0"
+[...]

To use new features, a project might need to update the specVersion property.

For a given Specification Version MAJOR.MINOR we will increment:

  1. MAJOR when there are breaking changes that might require additional actions by the project maintainer
  2. MINOR when adding new features that are fully backward compatible

All changes are documented below.

Compatibility Matrix

Unless otherwise noted in the table below, UI5 CLI modules are backward compatible.

VersionUI5 CLI Release
4.0v4.0.0+
3.2v3.8.0+
3.1v3.5.0+
3.0v3.0.0+
2.6v2.14.0+
2.5v2.12.0+
2.4v2.11.0+
2.3v2.10.0+
2.2v2.4.0+
2.1v2.2.0+
2.0v2.0.0+
1.1v1.13.0+
1.0v1.0.0+
0.1v0.0.1+

Specification Version 4.0

Breaking changes:

Specification Version 4.0 projects are supported by UI5 CLI v4.0.0 and above.

Also see Migrate to v4 for details on these breaking changes.

Specification Version 3.2

Features:

Specification Version 3.2 projects are supported by UI5 CLI v3.8.0 and above.

Specification Version 3.1

Features:

Specification Version 3.1 projects are supported by UI5 CLI v3.5.0 and above.

Specification Version 3.0

Breaking changes:

  • The metadata.name property is now restricted to contain only certain characters and no uppercase letters. See name for details

  • bundleOptions has been modified:

    • debugMode has been removed
    • optimize now always defaults to true #685

Features:

  • Adds support for sourceMap configuration for the application and library bundleOptions

Specification Version 3.0 projects are supported by UI5 CLI v3.0.0 and above.

Specification Version 2.6

Features:

  • Adds support for excludes configuration for the application and library minification

Specification Version 2.6 projects are supported by UI5 CLI v2.14.0 and above.

Specification Version 2.5

Features:

Specification Version 2.5 projects are supported by UI5 CLI v2.12.0 and above.

Specification Version 2.4

Features:

  • Adds support for bundleInfo mode in bundle definitions.

Specification Version 2.4 projects are supported by UI5 CLI v2.11.0 and above.

Specification Version 2.3

Features:

  • Adds support for excludes configuration of component- and library preload bundles

Specification Version 2.3 projects are supported by UI5 CLI v2.10.0 and above.

Specification Version 2.2

Features:

Specification Version 2.2 projects are supported by UI5 CLI v2.4.0 and above.

Specification Version 2.1

Features:

Specification Version 2.1 projects are supported by UI5 CLI v2.2.0 and above.

Specification Version 2.0

Breaking changes:

  • Adds and enforces schema validation of the ui5.yaml
  • By default the encoding of *.properties files is expected to be UTF-8 (as opposed to ISO-8859-1 in projects defining specification versions below 2.0)

Features:

  • Adds support for the "framework" configuration to consume SAPUI5 libraries.

Specification Version 2.0 projects are supported by UI5 CLI v2.0.0 and above.

Specification Version 1.1

Features:

  • Adds support for the theme-library type.

Specification Version 1.1 projects are supported by UI5 CLI v1.13.0 and above.

Specification Version 1.0

First stable release.

Specification Version 1.0 projects are supported by UI5 CLI v1.0.0 and above.

Specification Version 0.1

Initial version.

Specification Version 0.1 projects are compatible with UI5 CLI v0.0.1 and above.

+ + + + \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/ESSupport.html b/packages/documentation/docs/.vitepress/dist/ESSupport.html new file mode 100644 index 0000000000..968bf75565 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/ESSupport.html @@ -0,0 +1,259 @@ + + + + + + ECMAScript Support | VitePress + + + + + + + + + + + + + + +
Skip to content

ECMAScript Support

UI5 Tooling offers general support for ES2023 ECMAScript features. While a ui5 build is executed, UI5 Tooling analyses a project's code. Depending on the project type, you have to consider some restrictions regarding the usage of certain ECMAScript syntax.

UI5 Tooling VersionSupported ECMAScript VersionNote
v3.11+ECMAScript 2023
v3.0+ECMAScript 2022
v2.0+ECMAScript 2009/ES5Note that code up to ECMAScript 2020 can be parsed, however required code analysis might not work correctly for specific language features

The following section describes all restrictions grouped by the kind of ECMAScript language feature. To get more insights into the code analysing executed by UI5 Tooling check out Code Analysis.

Language Features with Restrictions

The following sections describe the restrictions grouped by the ECMAScript language feature.

JavaScript modules

In general, UI5 Tooling only analyzes JavaScript files of type script. JavaScript Modules are not analyzed.

UI5 Tooling and the UI5 Runtime does not support the usage of export and import of JavaScript Modules. Therefore, sap.ui.define has to be used.

javascript
sap.ui.define([
+    "ModuleA",
+    "ModuleB"
+], function(ModuleA, ModuleB) {
+    return ModuleA.extend("ModuleC", {});
+});
javascript
import ModuleA from "ModuleA";
+import ModuleB from "ModuleB";
+export default class ModuleC extends ModuleA {};

Template Literal

Template Literals without an expressions can be used in all places where string literals can be used. However, since UI5 Tooling will attempt a static code analysis for certain calls to UI5 API, Template Literals with one or more expressions (e.g. Hello ${planets[2]}) can't be used in the scenarios described below.

Template Literal in sap.ui.define or sap.ui.require

Template Literals with one or more expressions inside a sap.ui.define or sap.ui.require call are not supported.

javascript
sap.ui.define([
+    `ModuleA`,
+    `ModuleB`
+], function(ModuleA, ModuleB) {
+});
javascript
const i = `B`;
+sap.ui.define([
+    `ModuleA`,
+    `Module${i}`
+], function(ModuleA, ModuleB) {
+});

The same rule applies also for the usage of deprecated or no longer recommended APIs jQuery.sap.declare, jQuery.sap.declare, define, require, require.predefine, sap.ui.predefine, sap.ui.requireSync and sap.ui.require.preload.

Template Literal in Smart Template Declaration

When declaring a Smart Template using a Template Literal with one or more expressions in the name of the Smart Template is not supported.

javascript
sap.ui.define([
+    `sap/suite/ui/generic/template/lib/TemplateAssembler`
+], function(TemplateAssembler) {
+    return TemplateAssembler.getTemplateComponent(getMethods, 
+        `sap.suite.ui.generic.templates.Page.Component`, {
+            metadata: {
+                properties: {
+                    templateName: {
+                        type: `string`,
+                        defaultValue: `sap.suite.ui.generic.templates.Page.view.Page`
+                    }
+                },
+                manifest: `json`
+            }
+        }
+    );
+});
javascript
sap.ui.define([
+    `sap/suite/ui/generic/template/lib/TemplateAssembler`
+], function(TemplateAssembler) {
+    const name = `Component`;
+    return TemplateAssembler.getTemplateComponent(getMethods,
+        `sap.suite.ui.generic.templates.Page.${name}`, {
+            metadata: {
+                properties: {
+                    templateName: {
+                        type: `string`,
+                        defaultValue: `sap.suite.ui.generic.templates.Page.view.Page`
+                    }
+                },
+                manifest: `json`
+            }
+        }
+    );
+});

Template Literal in XMLComposite Declaration

The XMLComposite control is deprecated since version UI5 1.88. Nevertheless UI5 Tooling will attempt to analyze the declaration of any such controls in a project.

Declaring an XMLComposite control using a Template Literal with one or more expressions in the name, is not supported.

javascript
sap.ui.define([
+    `sap/ui/core/XMLComposite`
+], function(XMLComposite) {
+    return XMLComposite.extend(`composites.MyComposite`, {} 
+});
javascript
sap.ui.define([
+    `sap/ui/core/XMLComposite`
+], function(XMLComposite) {
+    const name = `MyComposite`;
+    return XMLComposite.extend(`composites.${name}`, {});
+});

Template Literal in sap/ui/core/Core#initLibrary Call

A library is typically initialized via an accompanying library.js. Within that file, the object which is supplied to the sap/ui/core/Core#initLibrary method, must not use a Template Literal with one or more expressions for the library name.

javascript
sap.ui.getCore().initLibrary({
+    name: `my.lib`
+});
javascript
const libraryName = `lib`;
+sap.ui.getCore().initLibrary({
+    name: `my.${libraryName}`
+});

Reserved Variable Names in a Template Literal

While UI5 Tooling performs a build placeholders are replaced with a values offered by the build. For example ${version} is replaced with the actual version defined in the package.json of the project. Therefore it is required to not use any Template Literal where any expression contains variable with following names:

  • version
  • project.version
  • buildtime
  • copyright
javascript
const myVersion = `1.2`;
+const transformedVersion `v${myVersion}`
javascript
const version = `1.2`;
+const transformedVersion `v${version}`

UI5 Tooling searches for the exact match of ${version}, so with adding whitespaces before and after the variable name ${ version } UI5 Tooling won't replace this occurence. This can be enforced by the dedicated ESLint config template-curly-spacing with option always.

Spread Element

A Spread Element can be used in all places, except the following.

Spread Element in sap.ui.define or sap.ui.require

A Spread Element as a parameter in a sap.ui.define or sap.ui.require call is not supported.

javascript
sap.ui.define([
+    "ModuleA",
+    "ModuleB"
+], function(ModuleA, ModuleB) {
+});
javascript
const dependencies = ["ModuleA", "ModuleB"];
+sap.ui.define([
+    ...dependencies
+], function(ModuleA, ModuleB) {
+});

The same rule applies also for the usage of deprecated or no longer recommended APIs jQuery.sap.declare, jQuery.sap.declare, define, require, require.predefine, sap.ui.predefine, sap.ui.requireSync and sap.ui.require.preload.

Spread Element in Smart Template Declaration

When declaring a Smart Template, the usage of a Spread Element in the configuration is not supported.

javascript
sap.ui.define([
+    "sap/suite/ui/generic/template/lib/TemplateAssembler"
+], function(TemplateAssembler) {
+    return TemplateAssembler.getTemplateComponent(getMethods, 
+        "sap.suite.ui.generic.templates.Page.Component", {
+            metadata: {
+                properties: {
+                    templateName: {
+                        type: "string",
+                        defaultValue: "sap.suite.ui.generic.templates.Page.view.Page"
+                    }
+                },
+                manifest: "json"
+            }
+        }
+    );
+});
javascript
sap.ui.define([
+    "sap/suite/ui/generic/template/lib/TemplateAssembler"
+], function(TemplateAssembler) {
+    const myTemplate = {
+        templateName: {
+            type: "string",
+            defaultValue: "sap.suite.ui.generic.templates.Page.view.Page"
+        }
+    };
+    return TemplateAssembler.getTemplateComponent(getMethods,
+        "sap.suite.ui.generic.templates.Page.Component", {
+            metadata: {
+                properties: {
+                    ...myTemplate
+                }
+                manifest: "json"
+            }
+        }
+    );
+});

Spread Element in XMLComposite Declaration

The XMLComposite control is deprecated since version UI5 1.88. Nevertheless UI5 Tooling will attempt to analyze the declaration of any such controls in a project.

When declaring an XMLComposite, the usage of a Spread Element in the configuration is not supported.

javascript
sap.ui.define([
+    "sap/ui/core/XMLComposite"
+], function(XMLComposite) {
+    return XMLComposite.extend("composites.MyComposite", {
+        fragment: "composites.custom.MyComposite"
+    } 
+});
javascript
sap.ui.define([
+    "sap/ui/core/XMLComposite"
+], function(XMLComposite) {
+    const myXMLComposite = {
+          fragment: "composites.custom.MyComposite"
+    };
+    return XMLComposite.extend(`composites.MyComposite`, {
+        ...myXMLComposite
+    });
+});

Spread Element in sap/ui/core/Core#initLibrary Call

A library is typically initialized via an accompanying library.js. Within that file, the object which is supplied to the sap/ui/core/Core#initLibrary method, must not use a Spread Element.

javascript
sap.ui.getCore().initLibrary({
+    name: "my.lib"
+});
javascript
const mylib = {
+    name: "my.lib"
+};
+sap.ui.getCore().initLibrary({
+    ...mylib
+});

Object Expression

An Object Expression can be used in all places except in following places.

Object Expression in sap.ui.define or sap.ui.require

An Object Expression as a parameter in a sap.ui.define or sap.ui.require call is not supported.

javascript
sap.ui.define([
+    "Bar"
+], function(Bar){
+});
javascript
const dependency = "Bar";
+sap.ui.define([
+    dependency
+], function(Bar){
+});

The same rule applies also for the usage of deprecated or no longer recommended APIs jQuery.sap.declare, jQuery.sap.declare, define, require, require.predefine, sap.ui.predefine, sap.ui.requireSync and sap.ui.require.preload.

Object Expression in Smart Template Declaration

When declaring a Smart Template, the usage of an Object Expression in the configuration is not supported.

javascript
sap.ui.define([
+    "sap/suite/ui/generic/template/lib/TemplateAssembler"
+], function(TemplateAssembler) {
+    return TemplateAssembler.getTemplateComponent(getMethods, 
+        "sap.suite.ui.generic.templates.Page.Component", {
+            metadata: {
+                properties: {
+                    templateName: {
+                        type: "string",
+                        defaultValue: "sap.suite.ui.generic.templates.Page.view.Page"
+                    }
+                },
+                manifest: "json"
+            }
+        }
+    );
+});
javascript
sap.ui.define([
+    "sap/suite/ui/generic/template/lib/TemplateAssembler"
+], function(TemplateAssembler) {
+    const key = "templateName"
+    return TemplateAssembler.getTemplateComponent(getMethods,
+        `sap.suite.ui.generic.templates.Page.${name}`, {
+            metadata: {
+                properties: {
+                    [key]: {
+                        type: "string",
+                        defaultValue: "sap.suite.ui.generic.templates.Page.view.Page"
+                    }
+                }
+                manifest: "json"
+            }
+        }
+    );
+});

Object Expression in XMLComposite Declaration

The XMLComposite control is deprecated since version UI5 1.88. Nevertheless UI5 Tooling will attempt to analyze the declaration of any such controls in a project.

When declaring an XMLComposite, the usage of an Object Expression in the configuration is not supported.

javascript
sap.ui.define([
+    "sap/ui/core/XMLComposite"
+], function(XMLComposite) {
+    return XMLComposite.extend("composites.MyComposite", {
+        fragment: "composites.custom.MyComposite"
+    } 
+});
javascript
sap.ui.define([
+    "sap/ui/core/XMLComposite"
+], function(XMLComposite) {
+    const key = "fragment";
+    return XMLComposite.extend("composites.MyComposite", {
+        [key]: "composites.custom.MyComposite"
+    });
+});

Object Expression in sap/ui/core/Core#initLibrary Call

A library is typically initialized via an accompanying library.js. Within that file, the object which is supplied to the sap/ui/core/Core#initLibrary method, must not use an Object Expression.

javascript
sap.ui.getCore().initLibrary({
+    name: "my.lib"
+});
javascript
const key = "name";
+sap.ui.getCore().initLibrary({
+    [key]: "my.lib"
+});

Computed Property

A Computed Property can be used in all places except in following places.

Computed Property when using extend

One or more Computed Property as a parameter in an UI5 Module extend call is not supported.

javascript
sap.ui.define([
+    "Bar"
+], function(Bar){
+    return Bar.extend("my.Bar" {});
+});
javascript
const name = "my";
+sap.ui.define([
+    "Bar"
+], function(Bar){
+    return Bar.extend(name + ".Bar", {});
+});

Computed Properties in sap/ui/core/Core#initLibrary Call

A library is typically initialized via an accompanying library.js. Within that file, the object which is supplied to the sap/ui/core/Core#initLibrary method, must not use an Computed Property.

javascript
sap.ui.getCore().initLibrary({
+    name: "my.lib"
+});
javascript
const name = "my";
+sap.ui.getCore().initLibrary({
+    name: name + ".lib"
+});

Class Declaration

If you want to generate a JSDoc build of your project and using a Class Declaration the class declaration should not be returned directly. Declare the class and return the class in a separate statement. If not JSDoc treats the the class declaration as a return statement and does not recognize any JSDoc if such is provided right above the class declaration.

javascript
sap.ui.define([
+    "Bar"
+], function(Bar){
+    /**
+     * JSDoc block here
+     */
+    class Foo extends Bar {
+        make () {}
+    }
+    return Foo;
+});
javascript
sap.ui.define([
+    "Bar"
+], function(Bar){
+    /**
+     * JSDoc block here
+     */
+    return class Foo extends Bar {
+        make () {}
+    }
+});

Arrow Function Expression

If you want to generate a JSDoc build of your project and use an Arrow Function Expression the JSDoc has to be written above the arrow function and not above the sap.ui.define/sap.ui.require command.

javascript
sap.ui.define([
+    "Bar"
+], 
+/**
+ * JSDoc block here
+ */
+(Bar) => Bar.extends("Foo", {
+}));
javascript
/**
+ * JSDoc block here
+ */
+sap.ui.define([
+    "Bar"
+], (Bar) => Bar.extends("Foo", {
+}));
+ + + + \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/FAQ.html b/packages/documentation/docs/.vitepress/dist/FAQ.html new file mode 100644 index 0000000000..e9043010d3 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/FAQ.html @@ -0,0 +1,25 @@ + + + + + + FAQ | VitePress + + + + + + + + + + + + + + +
Skip to content

FAQ

How Can I Contribute?

Please check our Contribution Guidelines.

How Can I Obtain Support?

Please follow our Contribution Guidelines on how to report an issue.

What's the Difference Between OpenUI5 and SAPUI5?

The open source project OpenUI5 provides most of the fundamental framework features. SAPUI5 enhances this by providing additional libraries under a different license.

OpenUI5 is provided under the Apache 2.0 license. The SAPUI5 packages that are consumed in UI5 CLI are provided under the terms of the SAP Developer License Agreement.

Note that projects which use the OpenUI5 framework cannot depend on projects that use the SAPUI5 framework. However, SAPUI5 projects can depend on OpenUI5 projects.

Please also see the UI5 SDK documentation "SAPUI5 vs. OpenUI5".

Why package.json? / Why npm?

Currently, UI5 CLI can only resolve dependencies defined in a package.json file. This might change in the future by adding Translators for additional dependency management systems.

To manage your dependencies, you can use almost any Node.js package manager that relies on package.json files. Popular ones are npm, Yarn and pnpm. UI5 CLI itself uses npm.

UI5 CLI resolves dependencies almost the same way Node.js does when executing a require / import statement.

Where are the npm Packages?

+ + + + \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/FileSystem.html b/packages/documentation/docs/.vitepress/dist/FileSystem.html new file mode 100644 index 0000000000..9af1f94a00 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/FileSystem.html @@ -0,0 +1,25 @@ + + + + + + UI5 FS | VitePress + + + + + + + + + + + + + + +
Skip to content

UI5 FS

The UI5 FS provides a UI5-specific file system abstraction.

API Reference

Overview

The virtual file system "UI5 FS" offers an abstraction layer from the physical file system. Among other features, it can combine a set of scattered file locations into a well-defined virtual structure.

Resource

A Resource basically represents a file. Besides providing access to the file content, it also carries metadata like the virtual path of the Resource.

Resources are typically created and stored in Adapters. Once read from a physical file system, they are typically kept in memory for further processing in other modules.

This ensures a high build performance, as physical read and write access for a high number of resources is kept to a minimum.

Adapters

Adapters abstract access to different resource locations.

The Memory Adapter represents a virtual file system which maintains respective Resources inside a virtual data structure.

The File System Adapter, on the other hand, has direct access to the physical file system. It maps a "virtual base path" to a given physical path.

Both adapters provide APIs to retrieve and persist Resources, namely

  • to retrieve a single resource by its virtual path use byPath(),

  • to retrieve many resources based on patterns use byGlob(),

  • to persist a single resource use write().

Reader Collections

Reader collections allow grouped access to multiple adapters, which might even be nested in other reader collections.

They implement the same API for retrieving resources as adapters (byPath and byGlob). Multiple flavors exist:

  • ReaderCollection: The most basic collection. Allows parallel read access to multiple readers (i.e. adapters or collections)
  • ReaderCollectionPrioritized: Contains a list of readers which are searched in-order. This allows one reader to "overlay" resources of another
  • DuplexCollection: Contains a single reader and a single "writer". It therefore also implements the Adapter API for persisting resources (write()). When retrieving resources, the writer is prioritized over the reader
  • WriterCollection: Contains a set of writers and a mapping for each of them. When writing a resource, the writer is chosen based on the resource's virtual path.
+ + + + \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/GettingStarted.html b/packages/documentation/docs/.vitepress/dist/GettingStarted.html new file mode 100644 index 0000000000..5c211d059f --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/GettingStarted.html @@ -0,0 +1,33 @@ + + + + + + Getting Started | VitePress + + + + + + + + + + + + + + +
Skip to content

Getting Started

Installing the UI5 CLI

Requirements

  • Node.js version v20.11.0 and higher or v22.0.0 and higher (v21 is not supported)
  • npm version v8.0.0 or higher

Installation

sh
# Global installation to have the command available
+npm install --global @ui5/cli
+
+# Additional local install in your project
+npm install --save-dev @ui5/cli
+
+# Verify installation
+ui5 --help

The globally installed UI5 CLI will always try to invoke a locally installed version of the UI5 CLI (if present). This way you can use different versions of the UI5 CLI across your projects. Please see the UI5 CLI documentation for details.

⚡️ Quick Start: OpenUI5 Sample App

Check out the OpenUI5 Sample App featuring a full blown How-to to play around with UI5 CLI!

Starting a New Project

The easiest way to start a new UI5 project is to use a template generator like generator-easy-ui5.

Choose a template that is designed for the type of project you want to create and the target environment where you want to deploy it to. Make sure that the template already uses UI5 CLI. A good indicator for that is the presence of a ui5.yaml file in the generated project.

When working with SAP Business Application Studio, there are several templates available to you. Check out the tutorial on creating a basic SAPUI5 application and deploying it to Cloud Foundry from within SAP Business Application Studio: Create an SAP Fiori App Using SAP Business Application Studio

You can find many guides on UI5 development with SAP Business Application Studio in the Tutorial Navigator.

Enabling an Existing Project

You can easily check whether or not a project (application or library) can already be used with the UI5 CLI by looking for a ui5.yaml file in the project's root directory.
This file (with some exceptions) is required for all projects and their dependencies (e.g. reuse libraries) to use them in the UI5 CLI.

Setup

If your project is not set up for use with the UI5 CLI yet, follow these steps:

  1. If your project does not have a package.json file, let npm generate it:

    sh
    npm init --yes
  2. Generate the ui5.yaml file:

    sh
    ui5 init
  3. Define the framework you want to use

sh
ui5 use openui5@latest
sh
ui5 use sapui5@latest

You can choose between the OpenUI5 and the SAPUI5 framework.

Don't know which one to choose? Check out our documentation on the differences between OpenUI5 and SAPUI5.

  1. Add required libraries

    sh
    ui5 add sap.ui.core sap.m sap.ui.table themelib_sap_fiori_3 # [...]

    You can find a documentation of all libraries, including samples and more, in the Demo Kit:

  2. Start the server and work on your project! 🎉

    sh
    ui5 serve

Tip

Use ui5 serve to start a local development server and ui5 build --all to produce an optimized, static version of your project, which you can then deploy to your production environment.

Find more information here:

  1. If you are using Git or similar version control, commit package.json and ui5.yaml to your repository.
    sh
    git add package.json ui5.yaml
    +git commit -m "Enable use with UI5 CLI"

Hooray! You can now use UI5 CLI in your project! 🎉

+ + + + \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/HomePage.html b/packages/documentation/docs/.vitepress/dist/HomePage.html new file mode 100644 index 0000000000..0093eae8a8 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/HomePage.html @@ -0,0 +1,80 @@ + + + + + + UI5 Tooling | VitePress + + + + + + + + + + + + + + +
Skip to content

UI5 Tooling

An open and modular toolchain to develop state-of-the-art applications based on the UI5 framework.

🚀 New Release

UI5 Tooling V4 is here 🎉

Read the announcement blog post: SAP Community: UI5 Tooling 4.0

And checkout the Migrate to v4 documentation.

Get Started

Main Features

💻 UI5 CLI

Also see the UI5 CLI Documentation

sh
# Global
+npm install --global @ui5/cli
+
+# In your project
+npm install --save-dev @ui5/cli

⚙️ Project Setup

Configure your project for use with UI5 Tooling.
Also see the Configuration Documentation

❯ ui5 init
+Wrote ui5.yaml:
+
+specVersion: "4.0"
+metadata:
+  name: my-app
+type: application

🚚 Dependency Management

UI5 framework dependencies are managed by the tooling. All other dependencies are managed by your favorite node package manager.

❯ ui5 use SAPUI5@1.117.0
+Updated configuration written to ui5.yaml
+This project is now using SAPUI5 version 1.117.0
+
+❯ ui5 add sap.ui.core sap.m themelib_sap_fiori_3
+Updated configuration written to ui5.yaml
+Added framework libraries sap.ui.core sap.m themelib_sap_fiori_3 as dependencies

🏄 Development Server

Start a local development server to work on your project.
Also see the Server Documentation

❯ ui5 serve
+Server started
+URL: http://localhost:8080

🛠 Build for Production

Build an optimized version of your project.
Also see the Builder Documentation

bash
 ui5 build
+info graph:helpers:ui5Framework Using OpenUI5 version: 1.117.0
+info ProjectBuilder Preparing build for project my-app
+info ProjectBuilder   Target directory: ./dist
+info ProjectBuilder Cleaning target directory...
+info Project 1 of 1: Building application project my-app...
+info my-app Running task escapeNonAsciiCharacters...
+info my-app Running task replaceCopyright...
+info my-app Running task replaceVersion...
+info my-app Running task minify...
+info my-app Running task generateFlexChangesBundle...
+info my-app Running task generateComponentPreload...
+info ProjectBuilder Build succeeded in 296 ms
+info ProjectBuilder Executing cleanup tasks...

🧪 Node.js API

Most UI5 Tooling modules provide JavaScript APIs for direct consumption in other Node.js projects. This allows you to rely on UI5 Tooling for UI5-specific build functionality and project handling, while creating your own tools to perfectly match the needs of your project.

All available APIs are documented in the UI5 Tooling API Reference.

js
import {graphFromPackageDependencies} from "@ui5/project/graph";
+
+async function buildApp(projectPath, destinationPath) {
+    const graph = await graphFromPackageDependencies({
+        cwd: projectPath
+    });
+    await graph.build({
+        destPath: destinationPath,
+        selfContained: true,
+        excludedTasks: ["transformBootstrapHtml"],
+        includedDependencies: ["*"]
+    });
+}
js
async function buildApp(projectPath, destinationPath) { 
+    const {graphFromPackageDependencies} = 
+        await import("@ui5/project/graph");
+    const graph = await graphFromPackageDependencies({
+        cwd: projectPath
+    });
+    await graph.build({
+        destPath: destinationPath,
+        selfContained: true,
+        excludedTasks: ["transformBootstrapHtml"],
+        includedDependencies: ["*"]
+    });
+}
+ + + + \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/OpenUI5.html b/packages/documentation/docs/.vitepress/dist/OpenUI5.html new file mode 100644 index 0000000000..be2d5d1890 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/OpenUI5.html @@ -0,0 +1,51 @@ + + + + + + Consuming OpenUI5 Libraries | VitePress + + + + + + + + + + + + + + +
Skip to content

Consuming OpenUI5 Libraries

OpenUI5 consumption with UI5 CLI is very similar to SAPUI5 consumption. Please refer to the documentation on Consuming SAPUI5 Libraries for a general description of how UI5 CLI can fetch and provide framework dependencies to your project.

Note that projects using the SAPUI5 framework can depend on projects using the OpenUI5 framework. However, OpenUI5 projects can't depend on SAPUI5 projects.

Please also refer to our documentation on the differences between OpenUI5 and SAPUI5.

INFO

The minimum OpenUI5 version that can be consumed by UI5 CLI is 1.52.5

Configuration

Your project's ui5.yaml provides a configuration section dedicated to framework dependency handling.

This configuration can be maintained by editing the file, or by using the UI5 CLI:

Example

Using the UI5 CLI:

sh
ui5 use openui5@latest
+ui5 add sap.ui.core sap.m sap.ui.table themelib_sap_fiori_3

Example ui5.yaml of an application

yaml
specVersion: "4.0"
+type: application
+metadata:
+  name: some.project.name
+framework:
+  name: OpenUI5
+  version: 1.76.0
+  libraries:
+    - name: sap.ui.core
+    - name: sap.m
+    - name: sap.ui.table
+    - name: themelib_sap_fiori_3

Example ui5.yaml of a library

yaml
specVersion: "4.0"
+type: library
+metadata:
+  name: some.library
+framework:
+  name: OpenUI5
+  version: 1.76.0
+  libraries:
+    - name: sap.ui.core
+    - name: themelib_sap_belize
+      optional: true
+    - name: themelib_sap_bluecrystal
+      optional: true
+    - name: themelib_sap_fiori_3
+      optional: true

Please make sure that your project defines Specification Version 2.0 or higher.

For details, please see the corresponding framework configuration documentation.

Linking Framework Dependencies

When working on UI5 applications or libraries that use OpenUI5, you can link a local OpenUI5 repository into that project. This allows you to make changes to the project itself as well as to the OpenUI5 libraries simultaneously and test them immediately.

A detailed step-by-step guide on how to achieve such a setup with the OpenUI5 Sample App can be found here.

OpenUI5 Framework Development

Please refer to the OpenUI5 Framework Development Documentation.

+ + + + \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/Overview.html b/packages/documentation/docs/.vitepress/dist/Overview.html new file mode 100644 index 0000000000..dcb15abcfb --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/Overview.html @@ -0,0 +1,56 @@ + + + + + + Development Overview | VitePress + + + + + + + + + + + + + + +
Skip to content

Development Overview

When developing a UI5 project on your local system, you should use the UI5 Server (ui5 serve) and not the UI5 Builder (ui5 build). Building a project should only be required when deploying it.

However, you might have good reasons to also use the UI5 Builder during development. In such cases, feel free to let us know! Maybe your use case could be covered by a future enhancement of the UI5 Server.

Project Dependencies

UI5 CLI differentiates between "framework dependencies" and "project dependencies".

Framework dependencies are generally libraries and themes provided by the SAP frameworks "OpenUI5" and "SAPUI5". UI5 CLI will take care of downloading them and handling their versions for you. Please see the corresponding documentation on both options:

Project dependencies are all other libraries, custom themes, UI5 CLI extensions or JavaScript modules your project depends on. In general these dependencies are maintained in the package.json of your project. See also: FAQ: Why package.json? / Why npm?.

Linking Projects

Would you like to work on an application project and one or more of its dependencies at the same time? We got you covered!

UI5 Workspaces

The recommended approach for setting up a development environment where simultaneous work on multiple UI5 projects is required.

Head over to the UI5 Workspaces documentation for the details. Below is an example based on a simple scenario with an application and a reuse library project:

Example: Your Directory Structure

my-app/
+    \_ node_modules/
+    \_ webapp/
+    \_ ui5.yaml
+    \_ package.json
+my-reuse-library/
+    \_ node_modules/
+    \_ src/
+    \_ test/
+    \_ ui5.yaml
+    \_ package.json

In its package.json, my-app should already define a dependency to my-reuse-library. So, after running the npm install command, a copy of the my-reuse-library-package should be retrieved from the package registry and added to my-app's node_modules/ directory.

In the my-app directory, create a new file named ui5-workspace.yaml with the following content:

yaml
specVersion: workspace/1.0
+metadata:
+    name: default
+dependencyManagement:
+    resolutions:
+        - path: ../my-reuse-library

That's it! Start a server via ui5 serve, and you will see that any changes you make in my-reuse-library are immediately visible in my-app.

Package Managers

By leaving dependency management up to the tool of your choice (see FAQ: Why package.json? / Why npm?) you have a variety of other options for linking dependencies into your project.

Here is an example using the npm CLI in Version 8, an application, and a reuse library project:

Example: Your Directory Structure

my-app/
+    \_ node_modules/
+    \_ webapp/
+    \_ ui5.yaml
+    \_ package.json
+my-reuse-library/
+    \_ node_modules/
+    \_ src/
+    \_ test/
+    \_ ui5.yaml
+    \_ package.json

In its package.json, my-app should already define a dependency to my-reuse-library. So, after running the npm install command, a copy of the "my-reuse-library"-package should be retrieved from the package registry and added to my-app's node_modules/ directory.

Now all you need to do is replacing this copy of the my-reuse-library package with a link to the my-reuse-library project located somewhere on your computer. In this example it is right next to my-app, but that doesn't really matter.

First, in the directory of the my-reuse-library project, create a global link:

sh
npm link

Then, in the my-app directory, use that link to replace the registry package:

sh
npm link my-reuse-library

Note: "my-reuse-library" is the name defined in the package.json and not necessarily the directory or ui5.yaml name

That's it. You can check whether the linking worked by executing ui5 tree in the my-app directory and looking for the path attributes in its output.

Static Dependency Definition

As an alternative to defining your project dependencies in the package.json, you can define a static dependency hierarchy for the project in a YAML file. This is typically only advised in special cases where none of the other concepts work.

To use such a file in UI5 CLI, provide a path to it using the --dependency-definition parameter. Note that all package.json dependencies will be ignored (including UI5 CLI extensions), but UI5 framework dependencies defined in ui5.yaml will still be used.

Example: projectDependencies.yaml

yaml
id: my.app
+version: "local"
+path: "."
+dependencies:
+  - id: my.lib
+    version: "local"
+    path: "../my.lib"

By placing this file in the root directory of the my.app application project, you can start a server with a local copy of the my.lib dependency, located in the same parent directory, using the command ui5 serve --dependency-definition ./projectDependencies.yaml.

The structure of the dependency definition file follows that of the @ui5/project/graph/providers/DependencyTree~TreeNode type.

HTTP/2 Development Webserver

The UI5 CLI contains a web server to serve the project via HTTP/2 protocol.

sh
ui5 serve --h2

This requires an SSL certificate. You are guided through the automatic generation process. Also see the UI5 Server documentation

Integration in Other Tools

One of the key features of the UI5 CLI is its modularization. Single parts of UI5 CLI can easily be integrated in other Node.js-based tools and frameworks like Grunt or Gulp.

All JavaScript APIs available for direct consumption are listed here. However, for standard UI5 development, the UI5 CLI should always be the first choice.

+ + + + \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/Privacy.html b/packages/documentation/docs/.vitepress/dist/Privacy.html new file mode 100644 index 0000000000..999e07c0a3 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/Privacy.html @@ -0,0 +1,25 @@ + + + + + + Privacy | VitePress + + + + + + + + + + + + + + +
Skip to content

Privacy

This site is hosted by GitHub Pages. Please see the GitHub Privacy Statement for any information how GitHub processes your personal data.

+ + + + \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/Project.html b/packages/documentation/docs/.vitepress/dist/Project.html new file mode 100644 index 0000000000..905cd72e6b --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/Project.html @@ -0,0 +1,25 @@ + + + + + + UI5 Project | VitePress + + + + + + + + + + + + + + +
Skip to content

UI5 Project

The UI5 Project module provides functionality to build a UI5 project. Also see Development Overview: Project Dependencies.

Types

Types define how a project can be configured and how it is built. A type orchestrates a set of tasks and defines the order in which they get applied during build phase. Furthermore, it takes care of formatting and validating the project-specific configuration.

Also see UI5 Project: Configuration

application

Projects of type application are typically the main or root project. In a projects dependency tree, there should only be one project of type application. If multiple are found, those further away from the root are ignored.

The source directory of an application (typically named webapp) is mapped to the virtual root path /.

An applications source directory may or may not contain a Component.js file. If it does, it must also contain a manifest.json file. If there is a Component.js file, an optimized Component-preload.js file will be generated during the build.

library

UI5 libraries are often referred to as reuse-, custom- or control libraries. They are a key component in sharing code across multiple projects in UI5.

A project of type library must have a source directory (typically named src). It may also feature a "test" directory. These directories are mapped to the virtual directories /resources for the sources and /test-resources for the test resources.

These directories should contain a directory structure representing the namespace of the library (e.g. src/my/first/library) to prevent name clashes between the resources of different libraries.

theme-library

Available since Specification Version 1.1

UI5 theme libraries provide theming resources for the controls of one or multiple libraries.

A project of type theme-library must have a source directory (typically named src). It may also feature a "test" directory. These directories are mapped to the virtual directories /resources for the sources and /test-resources for the test resources.

The source directory must contain a directory structure representing the namespaces of the libraries it provides theme resources for. For example, a theme library named my_custom_theme, providing resources for a library named my.library should have these resources in a directory path my/library/themes/my_custom_theme/.

module

The module type is meant for usage with non-UI5 resources like third-party libraries. Their path mapping can be configured freely. During a build, their resources are copied without modifications.

Build Output Style

The Output Style offers you control over your project's build output folder. Namespaces like sap.m or sap.ui.core can be streamlined, producing a more concise and flat output. For example, a resource like /resources/sap/m/RangeSlider.js will be transformed into ./RangeSlider.js. And vice versa, applications that are built by default with Flat output, can leverage any namespaces they might have.

In the table below you can find the available combinations of project type & output style.

Project Type / Requested Output StyleResulting Style
application
DefaultRoot project is written Flat-style. ¹
FlatSame as Default.
NamespaceRoot project is written Namespace-style (resources are prefixed with the project's namespace). ¹
library
DefaultRoot project is written Namespace-style. ¹
FlatRoot project is written Flat-style (without its namespace, logging warnings for resources outside of it). ¹
NamespaceSame as Default.
theme-library
DefaultRoot project is written in the style of the sources (multiple namespaces). ¹
FlatUnsupported ²
NamespaceUnsupported ²
module
DefaultRoot project is written with the configured paths. ^1^
FlatUnsupported ^3^
NamespaceUnsupported ^3^

¹ The Output Style is only applied to the root project's output folder structure. Any dependencies included in the build would retain their Default output style.
² Theme libraries in most cases have more than one namespace.
³ Modules have explicit path mappings configured and no namespace concept.

API Reference

+ + + + \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/SAPUI5.html b/packages/documentation/docs/.vitepress/dist/SAPUI5.html new file mode 100644 index 0000000000..dddb43293f --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/SAPUI5.html @@ -0,0 +1,56 @@ + + + + + + Consuming SAPUI5 Libraries | VitePress + + + + + + + + + + + + + + +
Skip to content

Consuming SAPUI5 Libraries

The minimum version of SAPUI5 that can be consumed by UI5 CLI as described below is **1.76.0.**  
+For lower versions, consider using the [CDN bootstrap](https://ui5.sap.com/#/topic/2d3eb2f322ea4a82983c1c62a33ec4ae) or a custom middleware like [ui5-middleware-simpleproxy](https://www.npmjs.com/package/ui5-middleware-simpleproxy).
+

Overview

SAPUI5 libraries are hosted on the public npm registry at registry.npmjs.org. However, you should not install them using node package managers such as npm. Let UI5 CLI handle them instead by following this guide.

INFO

For more background information also see the Blog Post "UI5ers Buzz #49: The UI5 CLI and SAPUI5 – The Next Step"

Usage

Since Version 2.0 of the UI5 CLI, it will automatically download all required framework dependencies of a project that have been listed in the corresponding ui5.yaml file. They will be cached in a .ui5 directory located in the user's home directory. This happens transparently whenever you execute the ui5 serve or ui5 build commands.

All non-framework dependencies, such as reuse libraries or UI5 CLI extensions, still need to be maintained as npm dependencies in the projects package.json. At the same time, framework dependencies listed in the ui5.yaml should not be listed in the package.json as they will be ignored by the UI5 CLI.

Configuration

Your project's ui5.yaml provides a configuration section dedicated to framework dependency handling.

This configuration can be maintained by editing the file, or by using the UI5 CLI:

IMPORTANT

Using the UI5 CLI:

sh
ui5 use sapui5@latest
+ui5 add sap.ui.core sap.m sap.ui.comp themelib_sap_fiori_3
+ui5 add -D sap.ushell

Example ui5.yaml of an application

yaml
specVersion: "4.0"
+type: application
+metadata:
+  name: some.project.name
+framework:
+  name: SAPUI5
+  version: 1.82.0
+  libraries:
+    - name: sap.ui.core
+    - name: sap.m
+    - name: sap.ui.comp
+    - name: sap.ushell
+      development: true
+    - name: themelib_sap_fiori_3

Example ui5.yaml of a library

yaml
specVersion: "4.0"
+type: library
+metadata:
+  name: some.library
+framework:
+  name: SAPUI5
+  version: 1.82.0
+  libraries:
+    - name: sap.ui.core
+    - name: themelib_sap_belize
+      optional: true
+    - name: themelib_sap_bluecrystal
+      optional: true
+    - name: themelib_sap_fiori_3
+      optional: true

Please make sure that your project defines Specification Version 2.0 or higher.

For details please refer to the framework configuration documentation.

Differences Between OpenUI5 and SAPUI5

Please refer to our documentation on the differences between OpenUI5 and SAPUI5

+ + + + \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/Server.html b/packages/documentation/docs/.vitepress/dist/Server.html new file mode 100644 index 0000000000..a2d4793876 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/Server.html @@ -0,0 +1,25 @@ + + + + + + UI5 Server | VitePress + + + + + + + + + + + + + + +
Skip to content

UI5 Server

The UI5 Server module can serve project's sources for development and testing purposes.

API Reference

Custom Server Middleware Extensibility

All available standard middleware are listed below in the order of their execution.

A project can also add custom middleware to the server by using the Custom Server Middleware Extensibility.

MiddlewareDescription
cspSee chapter csp
compressionStandard Express compression middleware
corsStandard Express cors middleware
discoverySee chapter discovery
serveResourcesSee chapter serveResources
testRunnerSee chapter testRunner
serveThemesSee chapter serveThemes
versionInfoSee chapter versionInfo
nonReadRequestsSee chapter nonReadRequests
serveIndexSee chapter serveIndex

csp

The Content Security Policy (CSP) middleware is active by default.

The header content-security-policy can be set by adding URL parameter sap-ui-xx-csp-policy to the request with the policy name as value.

To set the policy to report-only, append :report-only or :ro to the policy name. E.g. /index.html?sap-ui-xx-csp-policy=sap-target-level-1:report-only

sendSAPTargetCSP parameter

The default CSP policies can be modified using parameter sendSAPTargetCSP (--sap-csp-policies when using the CLI). With sendSAPTargetCSP set to true the policies sap-target-level-1 and sap-target-level-3 policies are activated and send as report-only.

Serve CSP Reports

Serving of CSP reports can be activated with parameter serveCSPReports (--serve-csp-reports when using the CLI). With serveCSPReports set to true, the CSP reports are collected and can be downloaded from the server path /.ui5/csp/csp-reports.json.

discovery

This middleware lists project files with URLs under several /discovery endpoints. This is exclusively used by the OpenUI5 test suite application.

serveResources

This middleware resolves requests using the ui5-fs-file system abstraction.

The following file content transformations are executed:

  • Escaping non-ASCII characters in .properties translation files based on a project's configuration
  • Enhancing the manifest.json with supported locales determined by available .properties translation files

testRunner

Serves a static version of the UI5 QUnit TestRunner at /test-resources/sap/ui/qunit/testrunner.html.

serveThemes

Compiles CSS files for themes on-the-fly from the source *.less files.

Changes made to these *.less files while the server is running will automatically lead to the re-compilation of the relevant CSS files when requested again.

versionInfo

Generates and serves the version info file /resources/sap-ui-version.json, which is required for several framework functionalities.

nonReadRequests

Answers all non-read requests (POST, PUT, DELETE, etc.) that have not been answered by any other middleware with the 404 "Not Found" status code . This signals the client that these operations are not supported by the server.

serveIndex

In case a directory has been requested, this middleware renders an HTML with a list of the directory's content.

SSL Certificates

When starting the UI5 Server in HTTPS- or HTTP/2 mode, for example by using UI5 CLI parameter --h2, you will be prompted for the automatic generation of a local SSL certificate if necessary.

Follow the given instructions and enter your password to install the generated certificate as trusted. You can find the generated certificate and corresponding private key under .ui5/server in your user's home directory.

TIP

If Chrome unintentionally redirects an HTTP-URL to HTTPS, you need to delete the HSTS mapping in chrome://net-internals/#hsts by entering the domain name (e.g. localhost) and pressing "delete".

+ + + + \ No newline at end of file diff --git a/docs/public/TripPinClassDiagram.jpg b/packages/documentation/docs/.vitepress/dist/TripPinClassDiagram.jpg similarity index 100% rename from docs/public/TripPinClassDiagram.jpg rename to packages/documentation/docs/.vitepress/dist/TripPinClassDiagram.jpg diff --git a/packages/documentation/docs/.vitepress/dist/Troubleshooting.html b/packages/documentation/docs/.vitepress/dist/Troubleshooting.html new file mode 100644 index 0000000000..877afd384c --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/Troubleshooting.html @@ -0,0 +1,25 @@ + + + + + + Troubleshooting | VitePress + + + + + + + + + + + + + + +
Skip to content

Troubleshooting

UI5 Server

Chrome Redirects HTTP URLs to HTTPS (ERR_SSL_PROTOCOL_ERROR)

An HTTPS server or proxy that was previously running on a domain (e.g. localhost), might have set an HSTS header, enforcing Chrome to always use HTTPS for this domain. See https://www.chromium.org/hsts. This makes it impossible to connect to an HTTP-only server running on the same domain.

Resolution

You need to delete the HSTS mapping in chrome://net-internals/#hsts by entering the domain name (e.g. localhost) and pressing "delete".

Issues Not Listed Here

Please follow our Contribution Guidelines on how to report an issue.

UI5 Project

~/.ui5 Taking too Much Disk Space

There are possibly many versions of UI5 framework dependencies installed on your system, taking a large amount of disk space.

Resolution

Remove the .ui5/framework/ directory from your user's home directory:

sh
rm -rf ~/.ui5/framework/

Any missing framework dependencies will be downloaded again during the next UI5 CLI invocation.

Environment Variables

Changing the Log Level

In CI environments or in a combination with other tools, the usage of UI5 CLI's --log-level command parameter might be inconvenient and even impossible.

Resolution

Replace UI5 CLI's --log-level option with the UI5_LOG_LVL environment variable.

Example:

UI5_LOG_LVL=silly ui5 build

On Windows:

set UI5_LOG_LVL=silly ui5 build

Cross Environment via cross-env:

cross-env UI5_LOG_LVL=silly ui5 build

UI5 + Karma:

cross-env UI5_LOG_LVL=verbose npm run karma

WARNING

The combination of the UI5_LOG_LVL environment variable with the --log-level CLI parameter might lead to unexpected results; they should be used interchangeably but not together. The CLI parameter takes precedence over the UI5_LOG_LVL environment variable.

Changing UI5 CLI's Data Directory

UI5 CLI's data directory is by default at ~/.ui5. It's the place where the framework artifacts are stored. In some cases and environments this is not a convenient location and the user needs to provide a better one.

The path to it can either be provided via environment variable or permanently set in the configuration.

Info

Paths are resolved relative to the current root project path (i.e. where the package.json is located).

Environment variable UI5_DATA_DIR

Unix:

sh
UI5_DATA_DIR=/my/custom/location/.ui5 ui5 build

Windows:

sh
set UI5_DATA_DIR="C:\\my\\custom\\location\\.ui5" ui5 build

Configuration ui5DataDir

Configure a custom directory:

sh
ui5 config set ui5DataDir /my/custom/location/.ui5

Unset the configuration to switch back to the default directory:

sh
ui5 config set ui5DataDir
+ + + + \ No newline at end of file diff --git a/docs/public/UI5-VitePress-fire-and-water.jpg b/packages/documentation/docs/.vitepress/dist/UI5-VitePress-fire-and-water.jpg similarity index 100% rename from docs/public/UI5-VitePress-fire-and-water.jpg rename to packages/documentation/docs/.vitepress/dist/UI5-VitePress-fire-and-water.jpg diff --git a/packages/documentation/docs/.vitepress/dist/Workspace.html b/packages/documentation/docs/.vitepress/dist/Workspace.html new file mode 100644 index 0000000000..7cba811441 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/Workspace.html @@ -0,0 +1,57 @@ + + + + + + UI5 Workspaces | VitePress + + + + + + + + + + + + + + +
Skip to content

UI5 Workspaces

Info

UI5 Workspaces is a new feature available since UI5 CLI v3.0.0

Example

ui5-workspace.yaml

yaml
yaml title="ui5-workspace.yaml"
+specVersion: workspace/1.0
+metadata:
+   name: default
+dependencyManagement:
+   resolutions:
+       - path: ../heavy.library

General Concept

UI5 Workspaces can be used to create a personalized local development environment for a UI5 project. They allow to use UI5 dependencies from local directories without the need to use the link features of package managers like npm. "UI5 dependencies" generally refers to projects that have a ui5.yaml.

Workspaces are typically configured in a ui5-workspace.yaml file, located next to the project's ui5.yaml. The file can contain one or many workspace configurations, each separated by three dashes. For example:

Example

ui5-workspace.yaml

yaml
specVersion: workspace/1.0
+metadata:
+   name: default
+dependencyManagement:
+   resolutions:
+  	    - path: ../heavy.library
+---
+specVersion: workspace/1.0
+metadata:
+   name: extended
+dependencyManagement:
+   resolutions:
+  	    - path: ../heavy.library
+  	    - path: ../light.library
+  	    - path: ../test.library

If a workspace configuration named default exists, it will be used automatically; otherwise the workspace must be specified using the UI5 CLI parameter --workspace.

Workspaces can only be used in the project that is currently being worked on, i.e. the current root project. Workspace configurations of dependencies are ignored. The workspace file, however, does not necessarily have to be located within the project. You can reference any workspace configuration file via the UI5 CLI parameter --workspace-config.

This concept has been discussed in an RFC: RFC 0006 Local Dependency Resolution

Configuration

A UI5 Workspace configuration must define a specification version (specVersion) compatible with its configuration. For more information, see Workspace Specification Versions.

yaml
specVersion: "workspace/1.0"

Metadata

Example

yaml
specVersion: workspace/1.0
+metadata:
+   name: dolphin

name

A workspace must have a name. This allows to easily switch between individual workspace configurations.

If a workspace is named default, it will be used automatically, unless a different workspace is selected using the --workspace CLI parameter.

The name property must satisfy the following conditions. They are identical to project names:

  • Must be at least 3 characters long
  • Must be no longer than 80 characters
  • Must contain lowercase characters only
  • Must contain alphanumeric characters, dash, underscore and period only
    • Exception: The @ and / characters are allowed at certain positions as explained below
  • Must start with an alphabetic character or an @ character
  • If it starts with an @ character, it must contain exactly one forward slash /
    • This is aligned with the npm concept for package scopes, for example @org/lib.name

Dependency Management

UI5 Workspace configurations allow to influence the dependency resolution when working with a UI5 project.

Example

yaml
specVersion: workspace/1.0
+metadata:
+   name: dolphin
+dependencyManagement:
+	resolutions:
+  		- path: ../light.library
+  		- path: ../heavy.library
+  		- path: ../test.library

Resolutions

yaml
dependencyManagement:
+   	resolutions:
+       	- path: ../test.library

Resolution paths will be used by UI5 CLI to look for project dependencies. Any dependencies found via these paths will be used over the ones found with the regular dependency resolution mechanism. This includes UI5 CLI extensions.

Paths must point to a directory containing a package.json. UI5 CLI will attempt to find a UI5 project here. However, if the package.json contains a workspaces, or equivalently, ui5.workspaces configuration (which overrules the first), UI5 CLI will resolve the workspace first and attempt to find UI5 projects in the configured "npm workspaces". This is commonly used in mono-repos. An example can be found in the OpenUI5 repository.

Paths must be written in POSIX (i.e. using only forward slashes / as path segment separators) and must be relative to the workspace configuration file. Absolute paths, or paths relative to the home directory (~), are not allowed. This is to ensure that workspace configuration files are easy to share and to reduce the chance of them exposing sensitive information like user names or large directory hierarchies. Symbolic links are followed.

Note that this configuration only affects the resolution of dependencies which have already been found during the regular dependency resolution process of a project. For example, if a workspace resolution path resolves to a project that would otherwise not be part of the dependency tree of the current root project, it will not be added to the dependency tree. Also, transitive dependencies of resolved projects are not being followed.

Workspace Specification Versions

A workspace configuration must define a Specification Version by setting the specVersion property. UI5 CLI uses this information to detect whether the currently installed version is compatible with a workspace's configuration.

yaml
specVersion: "workspace/1.0"
+[...]

To use new features, a workspace configuration might need to update the specVersion property.

For a given Specification Version "workspace/MAJOR.MINOR"" we will increment:

  1. MAJOR when there are breaking changes that might require additional actions by the project's maintainer
  2. MINOR when adding new features that are fully backward-compatible

All changes are documented below.

Compatibility Matrix

Unless otherwise noted in the table below, UI5 CLI modules are backward-compatible.

VersionUI5 CLI Release
workspace/1.0v3.0.0+

Specification Version workspace/1.0

Initial version.

Specification Version workspace/1.0 configurations are compatible with UI5 CLI v3.0.0 and above.

+ + + + \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/assets/Benchmarking.md.BzpEKz8R.js b/packages/documentation/docs/.vitepress/dist/assets/Benchmarking.md.BzpEKz8R.js new file mode 100644 index 0000000000..3a0ff7ef09 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/Benchmarking.md.BzpEKz8R.js @@ -0,0 +1,14 @@ +import{_ as s,c as a,o as e,ae as t}from"./chunks/framework.CBTkueSR.js";const c=JSON.parse('{"title":"Benchmarking UI5 CLI","description":"","frontmatter":{},"headers":[],"relativePath":"Benchmarking.md","filePath":"Benchmarking.md"}'),n={name:"Benchmarking.md"};function l(h,i,p,r,d,k){return e(),a("div",null,[...i[0]||(i[0]=[t(`

Benchmarking UI5 CLI

For benchmarking UI5 CLI we typically make use of the open source tool hyperfine.

In general we only benchmark calls to the UI5 CLI. However, we might add scripted benchmarks for some components in the future.

The following is a walk-through on how to evaluate the performance impact of an imaginary change in the UI5 Builder project.

Setup

  1. Install hyperfine

  2. Prepare the UI5 CLI projects you want to measure (optional if your development environment already reflects this):

    1. Start in an empty directory

      sh
      mkdir ui5-cli-benchmark && cd ui5-cli-benchmark/
    2. Clone UI5 CLI

      sh
      git clone git@github.com:SAP/ui5-cli.git
    3. Clone UI5 Builder (or your fork)

      sh
      git clone git@github.com:SAP/ui5-builder.git

      Make sure you check out the main branch, since we'll perform the baseline test first

    4. Install npm dependencies in both directories

      sh
      (cd ui5-cli && npm install)
      +(cd ui5-builder && npm install)
    5. Create global npm links for both projects

      sh
      (cd ui5-cli && npm link)
      +(cd ui5-builder && npm link)
    6. Link UI5 Builder into UI5 CLI

      sh
      (cd ui5-cli && npm link @ui5/builder)
    7. Verify your setup

      sh
      ui5 --version

      This should output the version and location of the UI5 CLI you just cloned.

      For example:

      3.0.0 (from /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs)
  3. Prepare your test project (we choose the openui5-sample-app)

    1. Clone the project

      sh
      git clone git@github.com:SAP/openui5-sample-app.git
    2. Navigate into the project

      sh
      cd openui5-sample-app
    3. Install any required npm dependencies

      sh
      npm install

      Note: We won't link UI5 CLI into this project. Instead, we'll call it directly.

    4. Verify that the previously installed UI5 CLI can be called with the following command:

      sh
      UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs --version

      On Windows:

      sh
      set UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs --version

      (Replace the path to ui5.cjs with the one shown in the previous ui5 --version output)

Benchmarking

  1. Depending on how reliable you'd like the measurements to be, consider preparing your system:

    1. Connect your computer to a power supply
    2. Make sure no updates or anti-virus scans are taking place
    3. Close all applications. This includes your IDE, since it might start indexing any new files created during the build, thus impacting I/O
    4. Don't interact with your system wile the benchmarking is running
  2. Perform the baseline measurement

    1. In the project, start your first benchmark

      sh
      hyperfine --warmup 1 \\
      +'UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs build' \\
      +--export-markdown ./baseline.md

      On Windows:

      sh
      hyperfine --warmup 1 \\
      +'set UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs build' \\
      +--export-markdown ./baseline.md
    2. Your baseline benchmark is now stored in baseline.md and should look similar to this:

      CommandMean [s]Min [s]Max [s]Relative
      UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs build1.439 ± 0.0361.4001.5071.00
  3. Prepare your change

    1. Switch to the branch that contains your change
      sh
      (cd ../ui5-builder && git checkout my-change)
    2. If your change requires different npm dependencies, reinstall them
      sh
      (cd ../ui5-builder && npm install)
    3. The link from UI5 CLI is still in place. However, if you have changes in multiple UI5 CLI modules, you might need to npm link those again
  4. Perform the change measurement

    1. In the project, start your second benchmark

      sh
      hyperfine --warmup 1 \\
      +'UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs build' \\
      +--export-markdown ./my_change.md

      On Windows:

      sh
      hyperfine --warmup 1 \\
      +'set UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs build' \\
      +--export-markdown ./my_change.md
    2. Your change's benchmark is now stored in my_change.md

Compile Results

  1. Merge both measurements into one markdown

    1. In this setup, Hyperfine can't correctly calculate the relative difference between results. The respective column always reads "1". Either remove the "Relative" column or calculate the relative difference yourself:

      • Use this formula to calculate the percentage increase based on the Mean result:
        (newMean - baselineMean) / baselineMean * 100
        ^^JavaScript function:^^
        #!js function calcDiff(baseVal, newVal) {return (newVal - baseVal) / baseVal * 100;}

      • Example for a performance improvement:
        Baseline of 10 seconds decreased to 7 seconds:
        (7-10)/10*100 = -30 => -30% change

      • Example for a performance deterioration:
        Baseline of 10 seconds increased to 12 seconds:
        (12-10)/10*100 = 20 => +20% change

    2. Change the unit in the Mean/Min/Max column headers to seconds or milliseconds according to your results.

    3. Change the command column to only contain the relevant ui5 build command, including any parameters. E.g. ui5 build --all

    4. You should end up with a markdown like this:

      md
      ui5-builder Ref | Command | Mean [s] | Min [s] | Max [s] | Relative
      +|:---|:---|---:|---:|---:|---:|
      +| main ([\`1234567\`](https://github.com/SAP/ui5-builder/commit/<sha>)) | \`ui5 build\` | 1.439 ± 0.036 | 1.400 | 1.507 | Baseline |
      +| feature-duck ([\`9101112\`](https://github.com/SAP/ui5-builder/commit/<sha>)) | \`ui5 build\` | 1.584 ± 0.074 | 1.477 | 1.680 | **+10%** |

      Rendering like this:

      ui5-builder RefCommandMean [s]Min [s]Max [s]Relative
      main (1234567)ui5 build1.439 ± 0.0361.4001.507Baseline
      feature-duck (9101112)ui5 build1.584 ± 0.0741.4771.680+10%
  2. You can now share these results on GitHub or wherever you might need them.

Happy benchmarking! 🏎

`,11)])])}const g=s(n,[["render",l]]);export{c as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/Benchmarking.md.BzpEKz8R.lean.js b/packages/documentation/docs/.vitepress/dist/assets/Benchmarking.md.BzpEKz8R.lean.js new file mode 100644 index 0000000000..1e0898f55a --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/Benchmarking.md.BzpEKz8R.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as e,ae as t}from"./chunks/framework.CBTkueSR.js";const c=JSON.parse('{"title":"Benchmarking UI5 CLI","description":"","frontmatter":{},"headers":[],"relativePath":"Benchmarking.md","filePath":"Benchmarking.md"}'),n={name:"Benchmarking.md"};function l(h,i,p,r,d,k){return e(),a("div",null,[...i[0]||(i[0]=[t("",11)])])}const g=s(n,[["render",l]]);export{c as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/Builder.md.ssqqwD1L.js b/packages/documentation/docs/.vitepress/dist/assets/Builder.md.ssqqwD1L.js new file mode 100644 index 0000000000..4470c8cfee --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/Builder.md.ssqqwD1L.js @@ -0,0 +1,31 @@ +import{_ as t,c as s,o as a,ae as i}from"./chunks/framework.CBTkueSR.js";const n="/assets/Task_Minify.C_54hEom.svg",g=JSON.parse('{"title":"UI5 Builder","description":"","frontmatter":{},"headers":[],"relativePath":"Builder.md","filePath":"Builder.md"}'),r={name:"Builder.md"};function l(o,e,d,c,p,h){return a(),s("div",null,[...e[0]||(e[0]=[i('

UI5 Builder

The UI5 Builder module takes care of building your project.

Based on a project's type, the UI5 Builder defines a series of build steps to execute; these are also called "tasks".

For every type there is a set of default tasks. You can disable single tasks using the --exclude-task CLI parameter, and you can include tasks using the --include-task parameter.

API Reference

Tasks

Tasks are specific build steps to be executed during build phase.

They are responsible for collecting resources which can be modified by a processor. A task configures one or more processors and supplies them with the collected resources. After the respective processor processed the resources, the task is able to continue with its workflow.

A project can add custom tasks to the build by using the Custom Tasks Extensibility.

Standard Tasks

All available standard tasks are documented in the API reference. Search for @ui5/builder/tasks/ to filter the API reference for all available tasks. The list below offers the actual order of their execution:

TaskType applicationType libraryType theme-library
escapeNonAsciiCharactersenabledenabled
replaceCopyrightenabledenabledenabled
replaceVersionenabledenabledenabled
replaceBuildtimeenabled
generateJsdocdisabled¹
executeJsdocSdkTransformationdisabled¹
minifyenabledenabled
generateFlexChangesBundleenabledenabled
generateLibraryManifestenabled
enhanceManifestenabledenabled
generateComponentPreloadenableddisabled²
generateLibraryPreloadenabled
generateStandaloneAppBundledisabled³
transformBootstrapHtmldisabled³
generateBundledisabled⁴disabled⁴
buildThemesenabledenabled
generateThemeDesignerResourcesdisabled⁵disabled⁵
generateVersionInfodisabled¹
generateCachebusterInfodisabled
generateApiIndex*disabled¹ *
generateResourcesJsondisableddisableddisabled

Disabled tasks can be activated by certain build modes, the project configuration, or by using the --include-task CLI parameter. See footnotes where given


¹ Enabled in jsdoc build, which disables most of the other tasks
² Enabled for projects defining a component preload configuration
³ Enabled in self-contained build, which disables generateComponentPreload and generateLibraryPreload
⁴ Enabled for projects defining a bundle configuration
⁵ Can be enabled for framework projects via the includeTask option. For other projects, this task is skipped

minify

The minify task compresses all JavaScript resources of a project while preserving the original sources as so-called debug variants. For example when compressing a resource named Module.js, its content will be minified and a new resource Module-dbg.js is created and placed next to it.

The UI5 runtime can be instructed to load those debug variants instead of compressed resources and bundles. This can ease debugging in some cases, since the original sources are then used directly in the browser. For details, refer to the UI5 framework documentation on debugging.

For each resource it compresses, the minify task will also create a source map resource. Browsers can use this to map the content of a compressed JavaScript resource back to the original source file (now contained in the debug variant). All this happens automatically once you open the development tools in the browser and start debugging a project. While the browser still executes the code of the compressed resources, it will also show the debug variants and use the source maps to connect the two. This results in an improved debugging experience, which is almost identical to loading the debug variants directly as described before, only much faster.

Related to this, the bundling tasks will also incorporate the generated source maps to map the content of the bundles to the individual debug variants of the bundled modules.

Input Source Maps

TIP

Support for input source maps has been added in UI5 CLI v3.7.0.

For projects facilitating transpilation (such as TypeScript-based projects), it is commonly desired to debug in the browser using the original sources, e.g. TypeScript files. To make this work, the transpilation process first needs to create source maps and reference them in the generated JavaScript code.

UI5 CLI's minify task will then find this reference and incorporate the source map into the minification process. In the end, the minified JavaScript resources will reference an updated source map, which reflects the transpilation as well as the minification. The browser can use this to map every statement back to the original TypeScript file, making debugging a breeze.

WARNING

If a resource has been modified by another build task before minify is executed, any referenced source map will be ignored. This is to ensure the integrity of the source maps in the build result.

It is possible that the modification of the resource content is not reflected in the associated source map, rendering it corrupted. A corrupt source map can make it impossible to properly analyze and debug a resource in the browser development tools.

Standard tasks which may modify resources without updating the associated source maps currently include replaceVersion, replaceCopyright and replaceBuildtime.

Expand the block below to view a diagram illustrating the minification process and source map handling.

Minification Activity Diagram

minify Task Activity

Generation of Supported Locales

The enhanceManifest task fills the supportedLocales property in the manifest.json of a UI5 library/application automatically with the available locales determined by the existence of the respective .properties translation files. To disable the automatic generation of the supportedLocales, set supportedLocales to any desired value. For further resource bundle configuration options, see Supported Locales and Fallback Chain.

Requirements

This feature only becomes active under the following conditions:

  • The _version property in the manifest.json is set to 1.21.0 or higher
  • The specified resource bundle is located inside the project and within the namespace defined in the manifest.json

Scenario: Application

txt
- webapp/i18n/
+  - i18n.properties
+  - i18n_en.properties
+  - i18n_en_US.properties
+  - i18n_de.properties
+  - i18n_de_DE.properties

In the manifest.json the supportedLocales property will be enhanced as follows:

Source

json
"models": {
+    "i18n": {
+        "type": "sap.ui.model.resource.ResourceModel",
+        "settings": {
+            "bundleName": "my.app.i18n.i18n"
+        }
+    }
+}

Build Result

json
"models": {
+    "i18n": {
+        "type": "sap.ui.model.resource.ResourceModel",
+        "settings": {
+            "bundleName": "my.app.i18n.i18n",
+            "supportedLocales": [
+                "",
+                "de",
+                "de_DE",
+                "en",
+                "en_US"
+            ]
+        }
+    }
+}

Processors

Processors work with provided resources. They contain the actual build step logic to apply specific modifications to supplied resources, or to make use of the resources' content to create new resources out of that.

Processors can be implemented generically. The string replacer is an example for that. Since string replacement is a common build step, it can be useful in different contexts, e.g. code, version, date, and copyright replacement. A concrete replacement operation could be achieved by passing a custom configuration to the processor. This way, multiple tasks can make use of the same processor to achieve their build step.

To get a list of all available processors, please visit the API reference and search for @ui5/builder/processors/.

Legacy Bundle Tooling (lbt)

JavaScript port of the "legacy" Maven/Java based bundle tooling.

JavaScript Files Requiring Top Level Scope

UI5 CLI packages JavaScript files that require "top level scope" as a string, provided your project uses a Specification Version lower than 4.0. In this case, the code is evaluated using eval at runtime.

This ensures that the script works as expected, e.g. with regards to implicitly used globals. However, this eval runtime feature will be discontinued with UI5 2.x because of security best practices and to comply with stricter CSP settings (i.e. unsafe-eval).

If your project defines Specification Version 4.0 or higher, files requiring top level scope are no longer part of the created bundle and following error is logged by UI5 CLI:

Module myFancyModule requires top level scope and can only be embedded as a string (requires 'eval'), which is not supported with specVersion 4.0 and higher.

If you see this error message, please adjust your code by applying one of the following options:

Option 1: Use ui5-tooling-modules to bundle third-party npm packages. It converts files to sap.ui.define modules automatically.

Option 2: Wrap the respective files manually in sap.ui.define modules as shown below:

Example

Before:

js
const myFancyModule = {};

After:

js
sap.ui.define([], () => {
+   "use strict";
+   const myFancyModule = {};
+   return myFancyModule;
+});
`,54)])])}const k=t(r,[["render",l]]);export{g as __pageData,k as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/Builder.md.ssqqwD1L.lean.js b/packages/documentation/docs/.vitepress/dist/assets/Builder.md.ssqqwD1L.lean.js new file mode 100644 index 0000000000..330d6b2a30 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/Builder.md.ssqqwD1L.lean.js @@ -0,0 +1 @@ +import{_ as t,c as s,o as a,ae as i}from"./chunks/framework.CBTkueSR.js";const n="/assets/Task_Minify.C_54hEom.svg",g=JSON.parse('{"title":"UI5 Builder","description":"","frontmatter":{},"headers":[],"relativePath":"Builder.md","filePath":"Builder.md"}'),r={name:"Builder.md"};function l(o,e,d,c,p,h){return a(),s("div",null,[...e[0]||(e[0]=[i("",54)])])}const k=t(r,[["render",l]]);export{g as __pageData,k as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/CLI.md.D5X2ohRt.js b/packages/documentation/docs/.vitepress/dist/assets/CLI.md.D5X2ohRt.js new file mode 100644 index 0000000000..eb651858f5 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/CLI.md.D5X2ohRt.js @@ -0,0 +1,4 @@ +import{_ as t,c as a,o as s,ae as i}from"./chunks/framework.CBTkueSR.js";const h=JSON.parse('{"title":"UI5 CLI","description":"","frontmatter":{},"headers":[],"relativePath":"CLI.md","filePath":"CLI.md"}'),o={name:"CLI.md"};function n(d,e,r,l,p,c){return s(),a("div",null,[...e[0]||(e[0]=[i(`

UI5 CLI

Requirements

  • Node.js version v20.11.0 and higher or v22.0.0 and higher (v21 is not supported)
  • npm version v8.0.0 or higher

Installation

Install the CLI using the npm package manager:

sh
npm install --global @ui5/cli
+
+# Verify installation
+ui5 --help

Usage/Syntax

ui5 <command> [options]

The CLI automatically checks for updates using update-notifier. While this is skipped in CI environments, you might also opt-out manually by following the steps described here.

Common options

These options you can use with each command.

OptionDescriptionDetails
-h, --helpShow help[boolean]
-v, --versionShow version number[boolean]
-c, --configPath to project configuration file in YAML format[string]
--dependency-definitionPath to a YAML file containing the project's dependency tree. This option will disable resolution of node package dependencies.[string]
--workspace-configPath to workspace configuration file in YAML format[string]
-w, --workspaceName of the workspace configuration to use[string] [default: "default"]
--loglevel, --log-levelSet the logging level[string] [choices: "silent", "error", "warn", "info", "perf", "verbose", "silly"] [default: "info"]
--verboseEnable verbose logging.[boolean] [default: false]
--perfEnable performance measurements and related logging.[boolean] [default: false]
--silentDisable all log output.[boolean] [default: false]

Examples

Execute command using a static dependency tree instead of resolving node package dependencies

ui5 <command> --dependency-definition /path/to/projectDependencies.yaml

Execute command using a project configuration from custom path

ui5 <command> --config /path/to/ui5.yaml

Execute command using the 'dolphin' workspace of a ui5-workspace.yaml

ui5 <command> --workspace dolphin

Execute command with the maximum log output

ui5 <command> --log-level silly

Commands

ui5 add

Description

Add SAPUI5/OpenUI5 framework libraries to the project configuration.

Usage

ui5 add [--development] [--optional] <framework-libraries..>

Options

OptionDescriptionDetails
-D, --development, --devAdd as development dependency[boolean] [default: false]
-O, --optionalAdd as optional dependency[boolean] [default: false]

Positionals

PositionalDescriptionDetails
framework-librariesFramework library names[array] [required] [default: []]

Examples

Add the framework libraries sap.ui.core and sap.m as dependencies

ui5 add sap.ui.core sap.m

Add the framework library sap.ui.support as development dependency

ui5 add -D sap.ui.support

Add the framework library themelib_sap_fiori_3 as optional dependency

ui5 add --optional themelib_sap_fiori_3

ui5 build

Description

Build project in current directory

Usage

ui5 build

Child Commands

CommandDescription
ui5 build jsdocBuild JSDoc resources
ui5 build preload(default) Build project and create preload bundles
ui5 build self-containedBuild project and create self-contained bundle. Recommended to be used in conjunction with --include-all-dependencies

Options

OptionDescriptionDetails
-a, --include-all-dependencies, --allInclude all dependencies in the build result. This is equivalent to '--include-dependency "*"'[boolean] [default: false]
--include-dependencyA list of dependencies to be included in the build result. You can use the asterisk '*' as an alias for including all dependencies in the build result. The listed dependencies cannot be overruled by dependencies defined in 'exclude-dependency'. The provided name must match with the dependency name shown in 'ui5 ls --flat'[array]
--include-dependency-regexpA list of regular expressions defining dependencies to be included in the build result. This list is prioritized like 'include-dependency'.[array]
--include-dependency-treeA list of dependencies to be included in the build result. Transitive dependencies are implicitly included and do not need to be part of this list. These dependencies overrule the selection of 'exclude-dependency-tree' but can be overruled by 'exclude-dependency'.[array]
--exclude-dependencyA list of dependencies to be excluded from the build result. The listed dependencies can be overruled by dependencies defined in 'include-dependency'. The provided name must match with the dependency name shown in 'ui5 ls --flat'[array]
--exclude-dependency-regexpA list of regular expressions defining dependencies to be excluded from the build result. This list is prioritized like 'exclude-dependency'.[array]
--exclude-dependency-treeA list of dependencies to be excluded from the build result. Transitive dependencies are implicitly included and do not need to be part of this list.[array]
--destPath of build destination[string] [default: "./dist"]
--clean-destIf present, clean the destination directory before building[boolean] [default: false]
--create-build-manifestStore build metadata in a '.ui5' directory in the build destination, allowing reuse of the build result in other builds[boolean] [default: false]
--include-taskA list of tasks to be added to the default execution set. This option takes precedence over any excludes.[array]
--exclude-taskA list of tasks to be excluded from the default task execution set[array]
--framework-versionOverrides the framework version defined by the project. Takes the same value as the version part of "ui5 use"[string]
--cache-modeCache mode to use when consuming SNAPSHOT versions of framework dependencies. The 'Default' behavior is to invalidate the cache after 9 hours. 'Force' uses the cache only and does not create any requests. 'Off' invalidates any existing cache and updates from the repository[string] [choices: "Default", "Force", "Off"] [default: "Default"]
--experimental-css-variablesGenerate CSS variables (css-variables.css, css-variables.source.less) and skeleton (library-skeleton(-RTL).css) for all themes[boolean] [default: false]
--output-styleProcesses build results into a specific directory structure.
- Flat: Omits the project namespace and the "resources" directory.
- Namespace: Respects the project namespace and the "resources" directory, maintaining the original structure.
- Default: The default directory structure for every project type. For applications, this is identical to "Flat", and for libraries, it is "Namespace". Other types have a more distinct default output style.
[string] [choices: "Default", "Flat", "Namespace"] [default: "Default"]

Examples

Preload build for project without dependencies

ui5 build

Self-contained build for project

ui5 build self-contained

Build project but only apply the minify- and generateComponentPreload tasks

ui5 build --exclude-task=* --include-task=minify generateComponentPreload

Build project by applying all default tasks including the minify task and excluding the generateComponentPreload task

ui5 build --include-task=minify --exclude-task=generateComponentPreload

Preload build with experimental CSS variables artifacts

ui5 build --experimental-css-variables

ui5 config

Description

Get and set UI5 CLI configuration options

Usage

ui5 config

Child Commands

CommandDescription
ui5 config set <opt​ion> [value]Set the value for a given configuration option. Clear an existing configuration by omitting the value
ui5 config get <opt​ion>Get the value for a given configuration option
ui5 config listDisplay the current configuration

Examples

Set a value for the ui5DataDir configuration

ui5 config set ui5DataDir /path/to/.ui5

Unset the current value of the ui5DataDir configuration

ui5 config set ui5DataDir

ui5 init

Description

Initialize the UI5 CLI configuration for an application or library project.

Usage

ui5 init

ui5 remove

Description

Remove SAPUI5/OpenUI5 framework libraries from the project configuration.

Usage

ui5 remove <framework-libraries..>

Positionals

PositionalDescriptionDetails
framework-librariesFramework library names[array] [required] [default: []]

Examples

Remove the framework libraries sap.ui.core and sap.m as dependencies

ui5 remove sap.ui.core sap.m

ui5 serve

Description

Start a web server for the current project

Usage

ui5 serve

Options

OptionDescriptionDetails
-p, --portPort to bind on (default for HTTP: 8080, HTTP/2: 8443)[number]
-o, --openOpen web server root directory in default browser. Optionally, supplied relative path will be appended to the root URL[string]
--h2Shortcut for enabling the HTTP/2 protocol for the web server[boolean] [default: false]
--simple-indexUse a simplified view for the server directory listing[boolean] [default: false]
--accept-remote-connectionsAccept remote connections. By default the server only accepts connections from localhost[boolean] [default: false]
--keyPath to the private key[string] [default: "~/.ui5/server/server.key"]
--certPath to the certificate[string] [default: "~/.ui5/server/server.crt"]
--sap-csp-policiesAlways send content security policies 'sap-target-level-1' and 'sap-target-level-3' in report-only mode[boolean] [default: false]
--serve-csp-reportsCollects and serves CSP reports upon request to '/.ui5/csp/csp-reports.json'[boolean] [default: false]
--framework-versionOverrides the framework version defined by the project. Takes the same value as the version part of "ui5 use"[string]
--cache-modeCache mode to use when consuming SNAPSHOT versions of framework dependencies. The 'Default' behavior is to invalidate the cache after 9 hours. 'Force' uses the cache only and does not create any requests. 'Off' invalidates any existing cache and updates from the repository[string] [choices: "Default", "Force", "Off"] [default: "Default"]

Examples

Start a web server for the current project

ui5 serve

Enable the HTTP/2 protocol for the web server (requires SSL certificate)

ui5 serve --h2

Use the project configuration from a custom path

ui5 serve --config /path/to/ui5.yaml

Use a static dependency definition file

ui5 serve --dependency-definition /path/to/projectDependencies.yaml

Listen to port 1337 and launch default browser with http://localhost:1337/test/QUnit.html

ui5 serve --port 1337 --open tests/QUnit.html

ui5 tree

Description

Outputs the dependency tree of the current project to stdout. It takes all relevant parameters of ui5 build into account.

Usage

ui5 tree

Options

OptionDescriptionDetails
--flatOutput a flat list of all dependencies instead of a tree hierarchy[boolean] [default: false]
--levelLimit the number of levels shown in the tree hierarchy[number]
--framework-versionOverrides the framework version defined by the project. Takes the same value as the version part of "ui5 use"[string]
--cache-modeCache mode to use when consuming SNAPSHOT versions of framework dependencies. The 'Default' behavior is to invalidate the cache after 9 hours. 'Force' uses the cache only and does not create any requests. 'Off' invalidates any existing cache and updates from the repository[string] [choices: "Default", "Force", "Off"] [default: "Default"]

ui5 use

Description

Initialize or update the project's framework configuration.

Usage

ui5 use <framework-info>

Positionals

PositionalDescriptionDetails
framework-infoFramework name, version or both (name@version).
Name can be "SAPUI5" or "OpenUI5" (case-insensitive).
Version can be "latest" (default), a version or range according to the Semantic Versioning specification (https://semver.org/), or a tag available in the npm registry.
For SAP-internal usage the version can also be "latest-snapshot", a version or range ending with -SNAPSHOT, or a simplified range such as "1-SNAPSHOT", "1.x-SNAPSHOT" or "1.108-SNAPSHOT".
[string] [required]

Examples

Use SAPUI5 in the latest available version

ui5 use sapui5@latest

Use OpenUI5 in the latest available 1.76 patch version

ui5 use openui5@1.76

Use the latest available version of the configured framework

ui5 use latest

Use OpenUI5 in the latest available version

ui5 use openui5

ui5 versions

Description

Shows the versions of all UI5 CLI modules

Usage

ui5 versions

Local vs. Global Installation

In general, we recommend a global installation of the UI5 CLI (npm install --global @ui5/cli).

However, it makes sense to add the UI5 CLI as a devDependency (npm install --save-dev @ui5/cli) to a project's package.json. This ensures that every developer working on the project uses the same version of the UI5 CLI and your continuous integration environments also uses this version.

In case you have both, a local installation in one of your projects as well as a global installation, the UI5 CLI will always try to invoke the local installation. This is in part because npm scripts defined in your package.json will also always invoke the local installation.

This behavior can be disabled by setting the environment variable UI5_CLI_NO_LOCAL.

Example
You have a project located in the directory /my-application.

You have installed the UI5 CLI globally. In addition, the project's package.json defines a devDependency to @ui5/cli and a start script "ui5 serve". This means there are at least two installations of @ui5/cli on your system. Their versions might not match.

This table illustrates which of the two installations is used in different scenarios. Note how the UI5 CLI always tries to prefer the version installed in the project.

Current Working DirectoryCommandGlobal UI5 CLILocal UI5 CLI
/ui5 --versionenabled
/my-applicationui5 --versionenabled
/my-applicationui5 serveenabled
/my-applicationUI5_CLI_NO_LOCAL=X ui5 serveenabled
/my-applicationnpm startenabled
/my-applicationUI5_CLI_NO_LOCAL=X npm startenabled
`,140)])])}const g=t(o,[["render",n]]);export{h as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/CLI.md.D5X2ohRt.lean.js b/packages/documentation/docs/.vitepress/dist/assets/CLI.md.D5X2ohRt.lean.js new file mode 100644 index 0000000000..7fdb4c8e21 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/CLI.md.D5X2ohRt.lean.js @@ -0,0 +1 @@ +import{_ as t,c as a,o as s,ae as i}from"./chunks/framework.CBTkueSR.js";const h=JSON.parse('{"title":"UI5 CLI","description":"","frontmatter":{},"headers":[],"relativePath":"CLI.md","filePath":"CLI.md"}'),o={name:"CLI.md"};function n(d,e,r,l,p,c){return s(),a("div",null,[...e[0]||(e[0]=[i("",140)])])}const g=t(o,[["render",n]]);export{h as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/CodeAnalysis.md.lj6v3W4Y.js b/packages/documentation/docs/.vitepress/dist/assets/CodeAnalysis.md.lj6v3W4Y.js new file mode 100644 index 0000000000..69ed10b7fe --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/CodeAnalysis.md.lj6v3W4Y.js @@ -0,0 +1,11 @@ +import{_ as i,c as a,o as t,ae as n}from"./chunks/framework.CBTkueSR.js";const u=JSON.parse('{"title":"Code Analysis","description":"","frontmatter":{},"headers":[],"relativePath":"CodeAnalysis.md","filePath":"CodeAnalysis.md"}'),o={name:"CodeAnalysis.md"};function s(l,e,r,d,c,p){return t(),a("div",null,[...e[0]||(e[0]=[n(`

Code Analysis

During the build process, UI5 CLI executes a static code analysis of your project. In the following sections the term "simple literal" is used for the following language features:

  • string literals
  • numeric literals
  • Boolean literals
  • null / undefined
  • template literals without any expressions
  • arrays of the previous (spread operators are ignored)
  • object literals with "simple literals" used as keys and values (again, spread operators are ignored)

Dependency Analysis

UI5 CLI extracts dependency information from a project's code as outlined in the following sections. The APIs described there require the usage of "simple literals" when declaring dependencies.

JSModule Analyzer

The following APIs are analyzed by the JSModule Analyzer:

  • sap.ui.define
  • sap.ui.require
  • jQuery.sap.declare (deprecated)
  • jQuery.sap.require (deprecated)
  • sap.ui.requireSync (deprecated)
  • sap.ui.preload (restricted)
  • sap.ui.require.preload (restricted)

The JSModule Analyzer uses the "Abstract Syntax Tree" (AST) of a JavaScript file to decide whether a code block is executed conditionally or unconditionally.

The analyzer uses a set of rules to decide whether one of the above APIs is called whenever the module is executed or whether the API is only called under certain conditions.

For example, top-level code is always executed. Flow-control statements in JavaScript imply that certain blocks of code are only executed under certain conditions (for example, if blocks, else blocks, ...). Besides these inherent JavaScript rules, further common patterns are known to the analyzer, e.g. immediately invoked function expressions or the factory function of AMD modules.

Any dependencies found that - according to these rules - are always executed, are collected as eager (or standard) dependencies. Dependencies that are found on a code path that depends on certain conditions are collected as conditional dependencies.

The bundling implemented by UI5 CLI can either follow only eager dependencies (resolve: true) or additionally conditional dependencies (resolveConditional). For more information, see Custom Bundling.

When a dependency in one of the mentioned APIs is not a "simple literal" but an expression, the corresponding module is marked as "having dynamic dependencies". This marker is currently not further evaluated by UI5 CLI.

Component Analyzer

The Component Analyzer analyzes JavaScript files named Component.js to collect dependency information by searching for a manifest.json located in the same folder as the Component.js. If one is found, the sap.ui5 section is evaluated in the following way:

  • Any library dependency is added as a dependency to the library.js module of that library. If the library dependency is modeled as 'lazy', the module dependency will be added as 'conditional'.
  • Any component dependency is added as a dependency to a file named Component.js. If the dependency is modeled as 'lazy', the module dependency will be added as 'conditional'.
  • For each UI5 model for which a type is configured, a module dependency to that type is added.
  • For each route that contains a view name, a module dependency to that view is added.

Smart Template Analyzer

The Smart Template Analyzer analyzes a Smart Template app and its underlying template components to collect dependency information. It searches for a manifest.json located in the same folder as the Component.js. If it is found and if it is valid JSON, an sap.ui.generic.app section is searched and evaluated in the following way:

  • For each page configuration, the configured component is added as a dependency to the template app module.
  • If the page configuration contains a templateName, a dependency to that template view is added to the app.
  • Otherwise, the class definition of the component is analyzed to find a default template view name. If found, a dependency to that view is added to the app module.

The template component is analyzed in the following way:

  • precondition: the template component class is defined in an AMD-style module, using define or sap.ui.define
  • precondition: the module sap/suite/ui/generic/template/lib/TemplateAssembler is imported
  • precondition: a call to TemplateAssembler.getTemplateComponent is used to define the component class
  • precondition: that call is used in a top-level return statement of the factory function
  • precondition: necessary parameters to that call are given as an object literal (no further coding)
  • precondition: the settings define a managed property metadata.properties.templateName with a defaultValue of type string The default value of the property represents the template view of the template component. The manifest of the template app could in theory specify an alternative template in component.settings.templateName.

XML Template Analyzer

The XML Template Analyzer tackles XMLView and XMLFragment. It parses the XML, collects controls, and adds them as dependency to the ModuleInfo object. Additionally, some special dependencies are handled:

  • controller of the view
  • resource bundle (note: as locale-dependent dependencies can't be modelled yet in the ModuleInfo, only a dependency to the development version (aka raw language) of the bundle will be added)
  • component referenced via the ComponentContainer control
  • embedded fragments or views

In an XMLView/XMLFragment, usually three categories of element nodes exist: Controls, aggregations, and non-UI5 nodes (e.g. XHTML or SVG). The third category usually can be identified by its namespace. To distinguish between the first two categories, the analyzer checks whether a resource exists in the project or its dependencies whose name matches the qualified node name. For example, if the qualified node name is sap.m.Text, the analyzer checks whether sap/m/Text.js exists. If so, UI5 CLI detects this node as a control, otherwise as an aggregation.

XML Composite Analyzer

The XMLComposite control is deprecated since version UI5 1.88. Nevertheless, UI5 CLI will attempt to analyze the declaration of any such controls in a project.

The XML Composite Analyzer searches for the name of the configured fragment containing the XMLComposite control.

javascript
sap.ui.define([
+    "sap/ui/core/XMLComposite"
+], function(XMLComposite) {
+    return XMLComposite.extend("composites.MyComposite", {} 
+});
javascript
sap.ui.define([
+    "sap/ui/core/XMLComposite"
+], function(XMLComposite) {
+    return XMLComposite.extend("composites.MyComposite", {
+        fragment: "composites.custom.MyComposite"
+    } 
+});

Library Initialization

The library.js Analyzer checks every library.js file in the namespace of a library for occurences of a sap/ui/core/Core#initLibrary call. If found, the following information will be placed in the generated manifest.json:

  • noLibraryCSS: false when the noLibraryCSS property had been set in the initLibrary info object
  • types: string array with the names of the types contained in the library
  • controls: string array with the names of the controls defined in the library
  • elements: string array with the names of the elements defined in the library
  • interfaces: string array with the names of the interfaces defined in the library

sap/ui/core/Core#initLibrary requires the usage of "simple literals" for the parameters passed to this function call.

Note: Currently only the usage via the global sap.ui.getCore().initLibrary is supported by this analyzer. Requiring sap/ui/core/Core and then calling Core.initLibrary is not recognized by this analyzer.

JSDoc

The UI5 CLI offers a JSDoc build, which is enhanced by UI5-specific JSDoc features.

An UI5 SDK can be built locally. To get more insight into the local UI5 SDK build setup, have a look at our Developer's Guide.

Currently, the resources needed for a UI5 SDK build are stored in openui5 and in ui5-builder. This double maintenance is needed because these files are not part of the sap.ui.core library artefact, so building JSDoc for any library has no access to the needed resources. It's therefore necessary to have these resources also available in the ui5-builder. This might change in the future.

The following artefacts contribute to the JSDoc build:

  • jsdocGenerator.js: Executes the actual JSDoc build. UI5 CLI wrapper for plugin.cjs.

  • sdkTransformer.js: UI5 CLI wrapper for transformApiJson.cjs.

  • apiIndexGenerator.js: UI5 CLI wrapper for createIndexFiles.cjs.

  • createIndexFiles.cjs: Creates API index resources from all api.json resources and by interpreting the sap-ui-version.json available in the given test resources directory. The resulting index resources (e.g. api-index.json, api-index-deprecated.json, api-index-experimental.json and api-index-since.json) are only to be used in a UI5 SDK.

  • transformApiJson.cjs: Preprocesses api.json files for use in UI5 SDKs. Transforms the api.json as created by the JSDoc build into a pre-processed api.json file suitable for the SDK. The pre-processing includes formatting of type references, rewriting of links, and other time-consuming calculations.

  • plugin.cjs: UI5 plugin for JSDoc3. The plugin adds the following UI5-specific tag definitions to JSDoc3:

    • disclaimer
    • experimental
    • final
    • interface
    • implements
    • ui5-restricted, and more

    It furthermore listens to the following JSDoc3 events to implement additional functionality:

    • parseBegin: to create short names for all files that are to be parsed
    • fileBegin: to write to the log (a kind of progress indicator)
    • jsdocCommentFound: to pre-process comments, empty lines are used as paragraph markers, a default visibility is added, and legacy tag combinations used in JSDoc2 are converted to JSDoc3 conventions
    • newDoclet
    • parseComplete: remove undocumented/ignored/private doclets or duplicate doclets

    Last but not least, it implements an astNodeVisitor to detect UI5-specific "extend" calls and to create documentation for the properties, aggregations, etc. that are created with the "extend" call.

  • publish.cjs: JSDoc3 template for UI5 documentation generation.

    • adds missing namespaces
    • determines the export names of exported APIs
    • writes out the api.json from the collected JSDoc information
    • calculates the inheritance hierarchy
    • checks for cyclic dependencies
    • removes unnecessary whitespace from an HTML document
  • versionUtil.cjs: Provides helper methods to determine version-related information.

`,41)])])}const m=i(o,[["render",s]]);export{u as __pageData,m as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/CodeAnalysis.md.lj6v3W4Y.lean.js b/packages/documentation/docs/.vitepress/dist/assets/CodeAnalysis.md.lj6v3W4Y.lean.js new file mode 100644 index 0000000000..eb2edc3f59 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/CodeAnalysis.md.lj6v3W4Y.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as t,ae as n}from"./chunks/framework.CBTkueSR.js";const u=JSON.parse('{"title":"Code Analysis","description":"","frontmatter":{},"headers":[],"relativePath":"CodeAnalysis.md","filePath":"CodeAnalysis.md"}'),o={name:"CodeAnalysis.md"};function s(l,e,r,d,c,p){return t(),a("div",null,[...e[0]||(e[0]=[n("",41)])])}const m=i(o,[["render",s]]);export{u as __pageData,m as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/Configuration.md.DJDUtYxO.js b/packages/documentation/docs/.vitepress/dist/assets/Configuration.md.DJDUtYxO.js new file mode 100644 index 0000000000..09adbe210e --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/Configuration.md.DJDUtYxO.js @@ -0,0 +1,196 @@ +import{_ as i,c as a,o as e,ae as t}from"./chunks/framework.CBTkueSR.js";const k=JSON.parse('{"title":"Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"Configuration.md","filePath":"Configuration.md"}'),n={name:"Configuration.md"};function l(p,s,o,r,h,d){return e(),a("div",null,[...s[0]||(s[0]=[t(`

Configuration

A projects UI5 CLI configuration is typically located in a YAML file named ui5.yaml, located in the root directory.

INFO

This document describes the configuration of UI5 CLI-based projects and extensions. It represents Specification Version 3.0.

Validation / IDE support

Starting with Specification Version 2.0 the configuration is validated according to a JSON schema.
The current version of the schema can be found here: https://ui5.github.io/cli/schema/ui5.yaml.json

The schema is also part of the JSON Schema Store Catalog which is used by the YAML Language Server. See the list of clients to find extensions for various IDEs and editors.

Example

yaml
specVersion: "4.0"
+type: application|library|theme-library|module
+metadata:
+  name: some.project.name

General Configuration

Specification Version and -Type

A project must define a specification version (specVersion), to which its configuration is compatible to. Also see Specification Versions.

In addition, a project must define a type. This can be either application, library, theme-library (since Specification Version 1.1), or module.

The type defines the default path mappings and build tasks. See UI5 Builder: Types for details.

Example

yaml
specVersion: "4.0"
+type: application
yaml
specVersion: "4.0"
+type: library
yaml
specVersion: "4.0"
+type: theme-library
yaml
specVersion: "4.0"
+type: module

Kind

The configuration may also contain a kind property. This is used to differentiate between projects and extensions.

This configuration defaults to kind: project, which means you typically only need to specify it for extensions like Custom Tasks.

Metadata

Example

yaml
metadata:
+ name: my.company.project
+ copyright: |-
+  My Project
+   * (c) Copyright 2009-\${currentYear} My Company
+   * Licensed under the XYZ License, Version n - see LICENSE.txt.

name

A project must have a name.

In UI5 CLI, a project is typically identified by the configured name. It must be unique and should ideally follow a namespace scheme like organization.product.project for UI5 projects or ui5-task-heavy-boulder for extension-projects.

The name property of projects defining Specification Version 3.0 and higher must satisfy the following conditions:

  • Must be at least 3 characters long
  • Must be no longer than 80 characters
  • Must contain lowercase characters only
  • Must contain alphanumeric characters, dash, underscore and period only
    • Exception: The @ and / characters are allowed at certain positions as explained below
  • Must start with an alphabetic character or an @ character
  • If it starts with an @ character, it must contain exactly one forward slash /
    • This is aligned with the npm concept for package scopes, for example @org/lib.name

A given copyright string will be used to fill placeholders like \${copyright} and @copyright@ in a project's source code. |- is a way to define a multi line string in YAML. Check the YAML Specification for details.
Inside the copyright string, you can use the placeholder \${currentYear} which will be replaced with the current year.

deprecated

In case your project is deprecated you may also define a property deprecated: true. In projects that have a direct dependency to your project, UI5 CLI will then display a deprecation warning.

Resources

Path Mapping

Depending on the project type, UI5 CLI expects your projects source files to be located in certain directories.

If your project's sources are located in different directories, you need to configure the path mapping accordingly. Depending on the type of project, there are several different path mappings available.

Note that all configured paths must be written in POSIX (i.e. using only forward slashes / as path segment separators) and relative to the project's root directory.

Available Path Mappings

Applications

  • webapp: Mapped to runtime path / (root)
yaml

+resources:
+  configuration:
+    paths:
+      webapp: webapp

Libraries

  • src: Mapped to runtime path /resources
  • test: Mapped to runtime path /test-resources
yaml
resources:
+  configuration:
+    paths:
+      src: src
+      test: test

Modules

Modules can map any virtual paths to any physical path within the project. However, it is recommended that modules include their namespace in thevirtual path and use the /resources prefix (e.g. /resources/my/librarymodule-xy/) to avoid name clashes with other projects.

yaml
resources:
+  configuration:
+    paths:
+      /resources/my/library/module-xy/: lib
+      /resources/my/library/module-xy-min/: dist

Example

For an application project with the following directory structure, youneed the path mapping configuration given below: Directory Structure:

yaml
my-app/
+\\_ ui5.yaml
+\\_ lib/ // [!code focus]
+ \\_ js/ // [!code focus]
+   \\_ app/ // [!code focus]

Path Mapping Configuration:

yaml
resources:
+ configuration:
+   paths:
+     webapp: lib/js/app // [!code focus]

Encoding of *.properties files

Info

This configuration is available since UI5 CLI v1.7.0

By default UI5 CLI expects different encodings for *.properties i18n files, depending on the project's specification version:

Specification VersionDefault propertiesFileSourceEncoding
2.0+UTF-8
0.1, 1.0 or 1.1ISO-8859-1

If your project uses a different encoding for *.properties files, you need to set the propertiesFileSourceEncoding configuration property.

UI5 CLI will read the corresponding files of the project in the given encoding. Any non-ASCII characters will be replaced with the respective Unicode escape sequences. This allows you to deploy the resulting files to any environment, independent of how it expects *.properties files to be encoded. Please refer to RFC 7 for details.

Custom Configuration

Info

This configuration is available since UI5 CLI v2.2.0 and applies only to projects defining Specification Version 2.1 or higher.

Custom configuration that is ignored by UI5 CLI.
This can be used to store UI5 specific configuration for third-party tools.

The "customConfiguration" value must be an object.
For third-party tools it is recommended to follow a namespace-like structure.

Framework Configuration

Info

This configuration is available since UI5 CLI v2.0.0 and applies only to projects defining [Specification Version(#specification-versions) 2.0 or higher.

Define your project's framework dependencies.

Framework and Version

In your project's framework configuration you must define whether you want to use the OpenUI5 or the SAPUI5 framework and which version:

yaml
framework:
+  name: OpenUI5
+  version: 1.82.0
yaml
framework:
+  name: SAPUI5
+  version: 1.82.0

If you are not sure which framework is right for you, see our documentation on the differences between OpenUI5 and SAPUI5.

You can find an overview of the available versions for each framework here:

Info

Projects that use the OpenUI5 framework cannot depend on projects thatuse the SAPUI5 framework.

Dependencies

Example

yaml
specVersion: "4.0"
+type: application
+metadata:
+  name: my.company.app
+framework:
+  name: OpenUI5
+  version: 1.82.0
+  libraries:
+    - name: sap.ui.core
+    - name: sap.m
+    - name: sap.ui.table
+    - name: themelib_sap_fiori_3
yaml
specVersion: "4.0"
+type: library
+metadata:
+  name: my.company.library
+framework:
+  name: SAPUI5
+  version: 1.82.0
+  libraries:
+    - name: sap.ui.core
+    - name: sap.m
+    - name: themelib_sap_belize
+      optional: true
+    - name: themelib_sap_bluecrystal
+      optional: true
+    - name: themelib_sap_fiori_3
+      optional: true

When building an application depending on this library as well as one of the theme libraries, only that theme is built for this library.

Runtime Dependencies

All libraries required by your project must be listed in the libraries section of the framework configuration:

yaml
framework:
+  name: OpenUI5
+  version: 1.82.0
+  libraries:
+    - name: sap.ui.core
+    - name: sap.m
+    - name: sap.ui.table
yaml
framework:
+  name: SAPUI5
+  version: 1.82.0
+  libraries:
+    - name: sap.ui.core
+    - name: sap.m
+    - name: sap.ui.comp

Development Dependencies

Development dependencies are only installed if the project defining them is the current root project. They are typically only required during the development of the project.

yaml
  libraries:
+    - name: sap.ushell
+      development: true

Note that a development dependency cannot be optional and vice versa.

Optional Dependencies

Optional dependencies are installed either if the project defining them is the current root project or if the dependency is already part of the current dependency tree. A typical use case is libraries defining optional dependencies to all theme libraries they support. You can choose which theme library to use by the application that is consuming the library by declaring it as a non-optional dependency.

yaml
  libraries:
+    - name: themelib_sap_fiori_3
+      optional: true

Build Configuration

Exclude Resources

Example

For projects of type module, this configuration is available since UI5CLI v3.5.0 and applies only to projects defining Specification Version 3.1 or higher.

yaml
builder:
+ resources:
+   excludes:
+     # You can specify paths relative to the configured "webapp" directory
+     - "index.html"
+     # When defining absolute paths, make sure to specify the namespace plus the "/resources/" prefix
+     - "/resources/my/project/namespace/test/**"
yaml
builder:
+ resources:
+   excludes:
+     # For libraries, all paths must be absolute, except for wildcards
+     - "/resources/some/project/name/test_results/**"
+     - "/test-resources/**"
+     - "!/test-resources/some/project/name/demo-app/**"
+     - "**/*.svg"
yaml
builder:
+ resources:
+   excludes:
+     # For modules, all paths must be absolute, except for wildcards
+     - "/resources/my/library/module-xy/min/**"
+     - "!/resources/my/library/module-xy/min/module-xy-bundle.js"
+     - "**/*.svg"

You can exclude a projects resources from the build process using a list of glob patterns. Matching resources will be ignored by the builder and all build tasks.

Patterns are applied to the virtual resource paths (i.e. the UI5 runtime paths). Exclude patterns are always applied after any includes.

Cachebuster

Example

yaml
builder:
+ cachebuster:
+   signatureType: time
yaml
builder:
+ cachebuster:
+   signatureType: hash

By default, the generated cachebuster info file signatures are based on timestamps (time). In setups like CI environments, a mechanism based on file hashes (hash) might be more reliable. Also see PR #241 for more details.

Component Preload Generation

For projects of type application a Component-preload.js bundle is generated by default. This bundle will contain most UI5 runtime-relevant resources of the component.
You can override this default behavior by defining a componentPreload configuration.

For projects of type library, no Component Preload is created by default.
However you can define a componentPreload configuration to create Component Preload bundles. Those will be created in addition to the library-preload.js bundle.

There are two ways to define the set of components for which preload bundles should be generated. You can either provide paths (allowing patterns) or namespaces. You can also combine both configuration options. Defining any of them overrides the default preload bundle generation for the root component of application projects.

paths

Example

yaml
builder:
+ componentPreload:
+   paths:
+       - "my/awesome/app/**/Component.js"

The paths option takes one or multiple patterns. For every matched file a separate Component-preload.js will be generated. Patterns are always applied relative to the project's virtual source directory /resources/.

namespaces

Example

yaml
builder:
+ componentPreload:
+   namespaces:
+     - "my/awesome/app"
+     - "my/awesome/app/componentOne"
+     - "my/awesome/app/componentTwo"

The namespaces option takes one or multiple component namespaces, which correspond to the directory structures.

excludes

Info

This configuration is available since UI5 CLI v2.10.0 and applies only to projects defining [Specification Version(#specification-versions) 2.3 or higher.

Example

yaml
builder:
+ componentPreload:
+   excludes:
+     - "my/awesome/app/localService/**"
yaml
builder:
+ componentPreload:
+   namespaces:
+     - "my/awesome/app"
+     - "my/awesome/app/componentOne"
+     - "my/awesome/app/componentTwo"
+   excludes:
+     - "my/awesome/app/**/thirdparty/"
+     - "!my/awesome/app/componentTwo/thirdparty/NotExcluded.js"

List of modules declared as glob patterns (resource name patterns) that are excluded from the component preload bundles. Similarly to the use of a single * or double ** asterisk, a pattern ending with a slash / denotes an arbitrary number of characters or folder names. Re-includes have to be marked with a leading exclamation mark !. The order of filters is relevant; a later inclusion overrides an earlier exclusion, and vice versa.

Note that patterns are always applied relative to the project's virtual source directory /resources/. Re-includes must start with the namespace of the component they apply to.

Library Preload Generation

For projects of type library a library-preload.js bundle is generated by default. This bundle will contain most UI5 runtime-relevant resources of the library.

excludes

Info

This configuration is available since UI5 CLI v2.10.0 and applies only to projects defining Specification Version 2.3 or higher.

Example

yaml
builder:
+ libraryPreload:
+   excludes:
+     - "my/lib/thirdparty/"
+     - "!my/lib/thirdparty/NotExcluded.js"

List of modules declared as glob patterns (resource name patterns) that are excluded from library-preload.js bundle. Similarly to the use of a single * or double ** asterisk, a pattern ending with a slash / denotes an arbitrary number of characters or folder names. Re-includes have to be marked with a leading exclamation mark !. The order of filters is relevant; a later inclusion overrides an earlier exclusion, and vice versa.

Note that patterns are always applied relative to the project's virtual source directory /resources/. Re-includes must start with the library's namespace.

Custom Tasks

Example

yaml
builder:
+ customTasks:
+   - name: custom-task-1
+     beforeTask: replaceCopyright
+     configuration:
+       some-key: some value
+   - name: custom-task-2
+     afterTask: custom-task-1
+     configuration:
+       color: blue

You can define custom build tasks that will be executed for the project. Please refer to the Custom Tasks Documentation for a detailed explanation and examples of the build extensibility.

Each customTasks entry must define the name of the custom task as defined in its metadata.name property.

In addition, the execution order needs to be defined by referencing a standard task or an already configured custom task using the afterTask or beforeTask property.

Optionally, arbitrary configuration can be passed to the custom task.

JSDoc

Example

yaml
builder:
+ jsdoc:
+   excludes:
+     - "some/project/name/thirdparty/**"

You can exclude the resources of a project from the JSDoc build process using a list of glob patterns. Matching resources will be ignored by the JSDoc build task.

Patterns are always applied relative to the project's virtual source directory /resources/.

These excludes are applied before any general builder excludes that have been defined in builder.resources.excludes.

Include Dependencies

Info

This configuration is available since UI5 CLI v2.12.0 and applies only to projects defining Specification Version 2.5 or higher.

Example

yaml
builder:
+ settings:
+   includeDependency:
+     - shimmed.thirdparty.library
+   includeDependencyRegExp:
+     - ^com\\.namespace
+   includeDependencyTree:
+     - sap.m

You can include certain dependencies into the build process using the includeDependency builder setting. By using includeDependencyRegExp, a regular expression can be used, for example to specify a namespace to dynamically select a group of dependencies that have to be included into the build result. By using includeDependencyTree, a selected dependency including all of its sub-dependencies is used.

This configuration can be overwritten more precisely with the CLI parameters --include-dependency, --include-dependency-regexp, --include-dependency-tree, --exclude-dependency, --exclude-dependency-regexp and --exclude-dependency-tree.

Minification

For projects of types application and library, minification is done for all JavaScript files. During the minification step debug variants are created, original resources are minified, and source maps are created. You can exclude the resources of a project from minification using a list of glob patterns. Matching resources won't be minified, and no debug variants or source maps will be created.

The project's ui5.yaml file can contain a list of modules declared as glob patterns (resource name patterns) that are excluded from resource minification. Re-includes have to be marked with a leading exclamation mark !; see the example below. The order of filters is relevant; a later inclusion overrides an earlier exclusion, and vice versa.

Note that patterns are always applied relative to the project's virtual source directory /resources/.

Info

This configuration is available since UI5 CLI v2.14.0 and applies only to projects defining Specification Version 2.6 or higher.

Example

yaml
builder:
+ minification:
+   excludes:
+     - "my/lib/thirdparty/"
+     - "!my/lib/thirdparty/NotExcluded.js"

Server Configuration

Example

yaml
server:
+ settings:
+   httpPort: 1337
+   httpsPort: 1443

By default, UI5 CLI will serve applications using Port 8080. When running in HTTP/2 or HTTPS mode, Port 8443 will be used.

If the default port is already in use, the next highest free port will be used.

A project can also configure alternative default ports. If the configured port is already in use, an error will be thrown.

The default and configured server ports can always be overwritten with the CLI parameter --port.

Extension Configuration

Example

yaml
specVersion: "4.0"
+type: application
+metadata:
+ name: my.application
+---
+specVersion: "4.0"
+kind: extension
+type: project-shim
+metadata:
+ name: my.application.thirdparty
+shims:
+ configurations:
+   lodash:
+     specVersion: "4.0"
+     type: module
+     metadata:
+       name: lodash
+     resources:
+       configuration:
+         paths:
+           /resources/my/application/thirdparty/: ""

Extensions configuration can be added to any projects ui5.yaml. For better readability, it should to be located after the projects configuration, separated by three dashes "---".

In cases where an extension shall be reused across multiple projects you can make it a module itself and have its configuration in a standalone ui5.yaml located inside that module.

Extensions can be identified by the kind: extension configuration. Note that if no kind configuration is given, project is assumed.

Available Extensions

Custom Bundling

Example

yaml
builder:
+ bundles:
+   - bundleDefinition:
+       name: "sap-ui-custom.js"
+       sections:
+         - mode: raw
+           filters:
+           - ui5loader-autoconfig.js
+           resolve: true
+           sort: true
+     bundleOptions:
+       optimize: true
+   - bundleDefinition:
+       name: "app.js"
+       sections:
+         - mode: preload
+           filters:
+             - some/app/Component.js
+           resolve: true
+           sort: true
+         - mode: provided
+           filters:
+           - ui5loader-autoconfig.js
+           resolve: true
+     bundleOptions:
+       optimize: true

Custom bundles can be defined in the ui5.yaml. Within the builder/bundles configuration a list of bundleDefinitions can be described.

Properties

bundles

A list of bundle definitions. A bundleDefinition contains of the following options:

  • name: The module bundle name

  • defaultFileTypes: List of default file types which should be included in the bundle. Defaults to: .js, .control.xml, .fragment.html, .fragment.json, .fragment.xml, .view.html, .view.json and .view.xml

  • sections: A list of module bundle definition sections. Each section specifies an embedding technology (see API-Reference) and lists the resources that should be in- or excluded from the section.

    • mode: The embedding technology (e.g. provided, raw, preload, bundleInfo, depCache, require)

    • filters: List of modules declared as glob patterns (resource name patterns) that are in- or excluded. Similarly to the use of a single * or double ** asterisk, a pattern ending with a slash / denotes an arbitrary number of characters or folder names. Excludes have to be marked with a leading exclamation mark !. The order of filters is relevant; a later inclusion overrides an earlier exclusion, and vice versa.

    • resolve: Setting resolve to true will also include all (transitive) dependencies of the files

    • resolveConditional: Whether conditional dependencies of modules should be resolved and added to the module set for this section. By default set to false

    • declareRawModules: Whether raw modules should be declared after jQuery.sap.global became available. With the usage of the ui5loader, this flag should be set to 'false'. By default set to false

    • renderer: Whether renderers for controls should be added to the module set. By default set to false

    • sort: By default, modules are sorted by their dependencies. The sorting can be suppressed by setting the option to false

    • async (only available if mode equals require): Specifies whether the require section of the module should use an asynchronous API. When set to true, the modules are loaded using sap.ui.require. When set to false, modules are loaded using sap.ui.requireSync, which is not available in UI5 2.x.

bundleOptions

  • optimize: If set to true, the module bundle gets minified

  • decorateBootstrapModule: By default set to false. If set to true, the module will be decorated with an optimization marker

  • addTryCatchRestartWrapper: By default set to false. If set to true, bootable module bundles gets wrapped with a try/catch to filter "Restart" errors

  • numberOfParts: By default set to 1. The number of parts into which a module bundle should be splitted

  • sourceMap: By default set to true. Adds source map support to the bundle. Available since UI5 CLI v4.0.0

Specification Versions

A project must define a specification version by setting the specVersion property. UI5 CLI uses this information to detect whether the currently installed version is compatible to a project's configuration.

yaml
specVersion: "4.0"
+[...]

To use new features, a project might need to update the specVersion property.

For a given Specification Version MAJOR.MINOR we will increment:

  1. MAJOR when there are breaking changes that might require additional actions by the project maintainer
  2. MINOR when adding new features that are fully backward compatible

All changes are documented below.

Compatibility Matrix

Unless otherwise noted in the table below, UI5 CLI modules are backward compatible.

VersionUI5 CLI Release
4.0v4.0.0+
3.2v3.8.0+
3.1v3.5.0+
3.0v3.0.0+
2.6v2.14.0+
2.5v2.12.0+
2.4v2.11.0+
2.3v2.10.0+
2.2v2.4.0+
2.1v2.2.0+
2.0v2.0.0+
1.1v1.13.0+
1.0v1.0.0+
0.1v0.0.1+

Specification Version 4.0

Breaking changes:

Specification Version 4.0 projects are supported by UI5 CLI v4.0.0 and above.

Also see Migrate to v4 for details on these breaking changes.

Specification Version 3.2

Features:

Specification Version 3.2 projects are supported by UI5 CLI v3.8.0 and above.

Specification Version 3.1

Features:

Specification Version 3.1 projects are supported by UI5 CLI v3.5.0 and above.

Specification Version 3.0

Breaking changes:

  • The metadata.name property is now restricted to contain only certain characters and no uppercase letters. See name for details

  • bundleOptions has been modified:

    • debugMode has been removed
    • optimize now always defaults to true #685

Features:

  • Adds support for sourceMap configuration for the application and library bundleOptions

Specification Version 3.0 projects are supported by UI5 CLI v3.0.0 and above.

Specification Version 2.6

Features:

  • Adds support for excludes configuration for the application and library minification

Specification Version 2.6 projects are supported by UI5 CLI v2.14.0 and above.

Specification Version 2.5

Features:

Specification Version 2.5 projects are supported by UI5 CLI v2.12.0 and above.

Specification Version 2.4

Features:

  • Adds support for bundleInfo mode in bundle definitions.

Specification Version 2.4 projects are supported by UI5 CLI v2.11.0 and above.

Specification Version 2.3

Features:

  • Adds support for excludes configuration of component- and library preload bundles

Specification Version 2.3 projects are supported by UI5 CLI v2.10.0 and above.

Specification Version 2.2

Features:

Specification Version 2.2 projects are supported by UI5 CLI v2.4.0 and above.

Specification Version 2.1

Features:

Specification Version 2.1 projects are supported by UI5 CLI v2.2.0 and above.

Specification Version 2.0

Breaking changes:

  • Adds and enforces schema validation of the ui5.yaml
  • By default the encoding of *.properties files is expected to be UTF-8 (as opposed to ISO-8859-1 in projects defining specification versions below 2.0)

Features:

  • Adds support for the "framework" configuration to consume SAPUI5 libraries.

Specification Version 2.0 projects are supported by UI5 CLI v2.0.0 and above.

Specification Version 1.1

Features:

  • Adds support for the theme-library type.

Specification Version 1.1 projects are supported by UI5 CLI v1.13.0 and above.

Specification Version 1.0

First stable release.

Specification Version 1.0 projects are supported by UI5 CLI v1.0.0 and above.

Specification Version 0.1

Initial version.

Specification Version 0.1 projects are compatible with UI5 CLI v0.0.1 and above.

`,214)])])}const u=i(n,[["render",l]]);export{k as __pageData,u as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/Configuration.md.DJDUtYxO.lean.js b/packages/documentation/docs/.vitepress/dist/assets/Configuration.md.DJDUtYxO.lean.js new file mode 100644 index 0000000000..ad9ba6e72a --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/Configuration.md.DJDUtYxO.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as e,ae as t}from"./chunks/framework.CBTkueSR.js";const k=JSON.parse('{"title":"Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"Configuration.md","filePath":"Configuration.md"}'),n={name:"Configuration.md"};function l(p,s,o,r,h,d){return e(),a("div",null,[...s[0]||(s[0]=[t("",214)])])}const u=i(n,[["render",l]]);export{k as __pageData,u as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/ESSupport.md.C_9do6hM.js b/packages/documentation/docs/.vitepress/dist/assets/ESSupport.md.C_9do6hM.js new file mode 100644 index 0000000000..2f22fa2f7f --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/ESSupport.md.C_9do6hM.js @@ -0,0 +1,235 @@ +import{_ as i,c as a,o as e,ae as t}from"./chunks/framework.CBTkueSR.js";const E=JSON.parse('{"title":"ECMAScript Support","description":"","frontmatter":{},"headers":[],"relativePath":"ESSupport.md","filePath":"ESSupport.md"}'),n={name:"ESSupport.md"};function p(l,s,h,k,r,d){return e(),a("div",null,[...s[0]||(s[0]=[t(`

ECMAScript Support

UI5 Tooling offers general support for ES2023 ECMAScript features. While a ui5 build is executed, UI5 Tooling analyses a project's code. Depending on the project type, you have to consider some restrictions regarding the usage of certain ECMAScript syntax.

UI5 Tooling VersionSupported ECMAScript VersionNote
v3.11+ECMAScript 2023
v3.0+ECMAScript 2022
v2.0+ECMAScript 2009/ES5Note that code up to ECMAScript 2020 can be parsed, however required code analysis might not work correctly for specific language features

The following section describes all restrictions grouped by the kind of ECMAScript language feature. To get more insights into the code analysing executed by UI5 Tooling check out Code Analysis.

Language Features with Restrictions

The following sections describe the restrictions grouped by the ECMAScript language feature.

JavaScript modules

In general, UI5 Tooling only analyzes JavaScript files of type script. JavaScript Modules are not analyzed.

UI5 Tooling and the UI5 Runtime does not support the usage of export and import of JavaScript Modules. Therefore, sap.ui.define has to be used.

javascript
sap.ui.define([
+    "ModuleA",
+    "ModuleB"
+], function(ModuleA, ModuleB) {
+    return ModuleA.extend("ModuleC", {});
+});
javascript
import ModuleA from "ModuleA";
+import ModuleB from "ModuleB";
+export default class ModuleC extends ModuleA {};

Template Literal

Template Literals without an expressions can be used in all places where string literals can be used. However, since UI5 Tooling will attempt a static code analysis for certain calls to UI5 API, Template Literals with one or more expressions (e.g. Hello \${planets[2]}) can't be used in the scenarios described below.

Template Literal in sap.ui.define or sap.ui.require

Template Literals with one or more expressions inside a sap.ui.define or sap.ui.require call are not supported.

javascript
sap.ui.define([
+    \`ModuleA\`,
+    \`ModuleB\`
+], function(ModuleA, ModuleB) {
+});
javascript
const i = \`B\`;
+sap.ui.define([
+    \`ModuleA\`,
+    \`Module\${i}\`
+], function(ModuleA, ModuleB) {
+});

The same rule applies also for the usage of deprecated or no longer recommended APIs jQuery.sap.declare, jQuery.sap.declare, define, require, require.predefine, sap.ui.predefine, sap.ui.requireSync and sap.ui.require.preload.

Template Literal in Smart Template Declaration

When declaring a Smart Template using a Template Literal with one or more expressions in the name of the Smart Template is not supported.

javascript
sap.ui.define([
+    \`sap/suite/ui/generic/template/lib/TemplateAssembler\`
+], function(TemplateAssembler) {
+    return TemplateAssembler.getTemplateComponent(getMethods, 
+        \`sap.suite.ui.generic.templates.Page.Component\`, {
+            metadata: {
+                properties: {
+                    templateName: {
+                        type: \`string\`,
+                        defaultValue: \`sap.suite.ui.generic.templates.Page.view.Page\`
+                    }
+                },
+                manifest: \`json\`
+            }
+        }
+    );
+});
javascript
sap.ui.define([
+    \`sap/suite/ui/generic/template/lib/TemplateAssembler\`
+], function(TemplateAssembler) {
+    const name = \`Component\`;
+    return TemplateAssembler.getTemplateComponent(getMethods,
+        \`sap.suite.ui.generic.templates.Page.\${name}\`, {
+            metadata: {
+                properties: {
+                    templateName: {
+                        type: \`string\`,
+                        defaultValue: \`sap.suite.ui.generic.templates.Page.view.Page\`
+                    }
+                },
+                manifest: \`json\`
+            }
+        }
+    );
+});

Template Literal in XMLComposite Declaration

The XMLComposite control is deprecated since version UI5 1.88. Nevertheless UI5 Tooling will attempt to analyze the declaration of any such controls in a project.

Declaring an XMLComposite control using a Template Literal with one or more expressions in the name, is not supported.

javascript
sap.ui.define([
+    \`sap/ui/core/XMLComposite\`
+], function(XMLComposite) {
+    return XMLComposite.extend(\`composites.MyComposite\`, {} 
+});
javascript
sap.ui.define([
+    \`sap/ui/core/XMLComposite\`
+], function(XMLComposite) {
+    const name = \`MyComposite\`;
+    return XMLComposite.extend(\`composites.\${name}\`, {});
+});

Template Literal in sap/ui/core/Core#initLibrary Call

A library is typically initialized via an accompanying library.js. Within that file, the object which is supplied to the sap/ui/core/Core#initLibrary method, must not use a Template Literal with one or more expressions for the library name.

javascript
sap.ui.getCore().initLibrary({
+    name: \`my.lib\`
+});
javascript
const libraryName = \`lib\`;
+sap.ui.getCore().initLibrary({
+    name: \`my.\${libraryName}\`
+});

Reserved Variable Names in a Template Literal

While UI5 Tooling performs a build placeholders are replaced with a values offered by the build. For example \${version} is replaced with the actual version defined in the package.json of the project. Therefore it is required to not use any Template Literal where any expression contains variable with following names:

  • version
  • project.version
  • buildtime
  • copyright
javascript
const myVersion = \`1.2\`;
+const transformedVersion \`v\${myVersion}\`
javascript
const version = \`1.2\`;
+const transformedVersion \`v\${version}\`

UI5 Tooling searches for the exact match of \${version}, so with adding whitespaces before and after the variable name \${ version } UI5 Tooling won't replace this occurence. This can be enforced by the dedicated ESLint config template-curly-spacing with option always.

Spread Element

A Spread Element can be used in all places, except the following.

Spread Element in sap.ui.define or sap.ui.require

A Spread Element as a parameter in a sap.ui.define or sap.ui.require call is not supported.

javascript
sap.ui.define([
+    "ModuleA",
+    "ModuleB"
+], function(ModuleA, ModuleB) {
+});
javascript
const dependencies = ["ModuleA", "ModuleB"];
+sap.ui.define([
+    ...dependencies
+], function(ModuleA, ModuleB) {
+});

The same rule applies also for the usage of deprecated or no longer recommended APIs jQuery.sap.declare, jQuery.sap.declare, define, require, require.predefine, sap.ui.predefine, sap.ui.requireSync and sap.ui.require.preload.

Spread Element in Smart Template Declaration

When declaring a Smart Template, the usage of a Spread Element in the configuration is not supported.

javascript
sap.ui.define([
+    "sap/suite/ui/generic/template/lib/TemplateAssembler"
+], function(TemplateAssembler) {
+    return TemplateAssembler.getTemplateComponent(getMethods, 
+        "sap.suite.ui.generic.templates.Page.Component", {
+            metadata: {
+                properties: {
+                    templateName: {
+                        type: "string",
+                        defaultValue: "sap.suite.ui.generic.templates.Page.view.Page"
+                    }
+                },
+                manifest: "json"
+            }
+        }
+    );
+});
javascript
sap.ui.define([
+    "sap/suite/ui/generic/template/lib/TemplateAssembler"
+], function(TemplateAssembler) {
+    const myTemplate = {
+        templateName: {
+            type: "string",
+            defaultValue: "sap.suite.ui.generic.templates.Page.view.Page"
+        }
+    };
+    return TemplateAssembler.getTemplateComponent(getMethods,
+        "sap.suite.ui.generic.templates.Page.Component", {
+            metadata: {
+                properties: {
+                    ...myTemplate
+                }
+                manifest: "json"
+            }
+        }
+    );
+});

Spread Element in XMLComposite Declaration

The XMLComposite control is deprecated since version UI5 1.88. Nevertheless UI5 Tooling will attempt to analyze the declaration of any such controls in a project.

When declaring an XMLComposite, the usage of a Spread Element in the configuration is not supported.

javascript
sap.ui.define([
+    "sap/ui/core/XMLComposite"
+], function(XMLComposite) {
+    return XMLComposite.extend("composites.MyComposite", {
+        fragment: "composites.custom.MyComposite"
+    } 
+});
javascript
sap.ui.define([
+    "sap/ui/core/XMLComposite"
+], function(XMLComposite) {
+    const myXMLComposite = {
+          fragment: "composites.custom.MyComposite"
+    };
+    return XMLComposite.extend(\`composites.MyComposite\`, {
+        ...myXMLComposite
+    });
+});

Spread Element in sap/ui/core/Core#initLibrary Call

A library is typically initialized via an accompanying library.js. Within that file, the object which is supplied to the sap/ui/core/Core#initLibrary method, must not use a Spread Element.

javascript
sap.ui.getCore().initLibrary({
+    name: "my.lib"
+});
javascript
const mylib = {
+    name: "my.lib"
+};
+sap.ui.getCore().initLibrary({
+    ...mylib
+});

Object Expression

An Object Expression can be used in all places except in following places.

Object Expression in sap.ui.define or sap.ui.require

An Object Expression as a parameter in a sap.ui.define or sap.ui.require call is not supported.

javascript
sap.ui.define([
+    "Bar"
+], function(Bar){
+});
javascript
const dependency = "Bar";
+sap.ui.define([
+    dependency
+], function(Bar){
+});

The same rule applies also for the usage of deprecated or no longer recommended APIs jQuery.sap.declare, jQuery.sap.declare, define, require, require.predefine, sap.ui.predefine, sap.ui.requireSync and sap.ui.require.preload.

Object Expression in Smart Template Declaration

When declaring a Smart Template, the usage of an Object Expression in the configuration is not supported.

javascript
sap.ui.define([
+    "sap/suite/ui/generic/template/lib/TemplateAssembler"
+], function(TemplateAssembler) {
+    return TemplateAssembler.getTemplateComponent(getMethods, 
+        "sap.suite.ui.generic.templates.Page.Component", {
+            metadata: {
+                properties: {
+                    templateName: {
+                        type: "string",
+                        defaultValue: "sap.suite.ui.generic.templates.Page.view.Page"
+                    }
+                },
+                manifest: "json"
+            }
+        }
+    );
+});
javascript
sap.ui.define([
+    "sap/suite/ui/generic/template/lib/TemplateAssembler"
+], function(TemplateAssembler) {
+    const key = "templateName"
+    return TemplateAssembler.getTemplateComponent(getMethods,
+        \`sap.suite.ui.generic.templates.Page.\${name}\`, {
+            metadata: {
+                properties: {
+                    [key]: {
+                        type: "string",
+                        defaultValue: "sap.suite.ui.generic.templates.Page.view.Page"
+                    }
+                }
+                manifest: "json"
+            }
+        }
+    );
+});

Object Expression in XMLComposite Declaration

The XMLComposite control is deprecated since version UI5 1.88. Nevertheless UI5 Tooling will attempt to analyze the declaration of any such controls in a project.

When declaring an XMLComposite, the usage of an Object Expression in the configuration is not supported.

javascript
sap.ui.define([
+    "sap/ui/core/XMLComposite"
+], function(XMLComposite) {
+    return XMLComposite.extend("composites.MyComposite", {
+        fragment: "composites.custom.MyComposite"
+    } 
+});
javascript
sap.ui.define([
+    "sap/ui/core/XMLComposite"
+], function(XMLComposite) {
+    const key = "fragment";
+    return XMLComposite.extend("composites.MyComposite", {
+        [key]: "composites.custom.MyComposite"
+    });
+});

Object Expression in sap/ui/core/Core#initLibrary Call

A library is typically initialized via an accompanying library.js. Within that file, the object which is supplied to the sap/ui/core/Core#initLibrary method, must not use an Object Expression.

javascript
sap.ui.getCore().initLibrary({
+    name: "my.lib"
+});
javascript
const key = "name";
+sap.ui.getCore().initLibrary({
+    [key]: "my.lib"
+});

Computed Property

A Computed Property can be used in all places except in following places.

Computed Property when using extend

One or more Computed Property as a parameter in an UI5 Module extend call is not supported.

javascript
sap.ui.define([
+    "Bar"
+], function(Bar){
+    return Bar.extend("my.Bar" {});
+});
javascript
const name = "my";
+sap.ui.define([
+    "Bar"
+], function(Bar){
+    return Bar.extend(name + ".Bar", {});
+});

Computed Properties in sap/ui/core/Core#initLibrary Call

A library is typically initialized via an accompanying library.js. Within that file, the object which is supplied to the sap/ui/core/Core#initLibrary method, must not use an Computed Property.

javascript
sap.ui.getCore().initLibrary({
+    name: "my.lib"
+});
javascript
const name = "my";
+sap.ui.getCore().initLibrary({
+    name: name + ".lib"
+});

Class Declaration

If you want to generate a JSDoc build of your project and using a Class Declaration the class declaration should not be returned directly. Declare the class and return the class in a separate statement. If not JSDoc treats the the class declaration as a return statement and does not recognize any JSDoc if such is provided right above the class declaration.

javascript
sap.ui.define([
+    "Bar"
+], function(Bar){
+    /**
+     * JSDoc block here
+     */
+    class Foo extends Bar {
+        make () {}
+    }
+    return Foo;
+});
javascript
sap.ui.define([
+    "Bar"
+], function(Bar){
+    /**
+     * JSDoc block here
+     */
+    return class Foo extends Bar {
+        make () {}
+    }
+});

Arrow Function Expression

If you want to generate a JSDoc build of your project and use an Arrow Function Expression the JSDoc has to be written above the arrow function and not above the sap.ui.define/sap.ui.require command.

javascript
sap.ui.define([
+    "Bar"
+], 
+/**
+ * JSDoc block here
+ */
+(Bar) => Bar.extends("Foo", {
+}));
javascript
/**
+ * JSDoc block here
+ */
+sap.ui.define([
+    "Bar"
+], (Bar) => Bar.extends("Foo", {
+}));
`,77)])])}const c=i(n,[["render",p]]);export{E as __pageData,c as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/ESSupport.md.C_9do6hM.lean.js b/packages/documentation/docs/.vitepress/dist/assets/ESSupport.md.C_9do6hM.lean.js new file mode 100644 index 0000000000..a09ced2c33 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/ESSupport.md.C_9do6hM.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as e,ae as t}from"./chunks/framework.CBTkueSR.js";const E=JSON.parse('{"title":"ECMAScript Support","description":"","frontmatter":{},"headers":[],"relativePath":"ESSupport.md","filePath":"ESSupport.md"}'),n={name:"ESSupport.md"};function p(l,s,h,k,r,d){return e(),a("div",null,[...s[0]||(s[0]=[t("",77)])])}const c=i(n,[["render",p]]);export{E as __pageData,c as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/FAQ.md.icEjlMM4.js b/packages/documentation/docs/.vitepress/dist/assets/FAQ.md.icEjlMM4.js new file mode 100644 index 0000000000..841aca08ec --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/FAQ.md.icEjlMM4.js @@ -0,0 +1 @@ +import{_ as a,c as r,o as t,ae as n}from"./chunks/framework.CBTkueSR.js";const u=JSON.parse('{"title":"FAQ","description":"","frontmatter":{},"headers":[],"relativePath":"FAQ.md","filePath":"FAQ.md"}'),o={name:"FAQ.md"};function s(i,e,p,h,c,l){return t(),r("div",null,[...e[0]||(e[0]=[n('

FAQ

How Can I Contribute?

Please check our Contribution Guidelines.

How Can I Obtain Support?

Please follow our Contribution Guidelines on how to report an issue.

What's the Difference Between OpenUI5 and SAPUI5?

The open source project OpenUI5 provides most of the fundamental framework features. SAPUI5 enhances this by providing additional libraries under a different license.

OpenUI5 is provided under the Apache 2.0 license. The SAPUI5 packages that are consumed in UI5 CLI are provided under the terms of the SAP Developer License Agreement.

Note that projects which use the OpenUI5 framework cannot depend on projects that use the SAPUI5 framework. However, SAPUI5 projects can depend on OpenUI5 projects.

Please also see the UI5 SDK documentation "SAPUI5 vs. OpenUI5".

Why package.json? / Why npm?

Currently, UI5 CLI can only resolve dependencies defined in a package.json file. This might change in the future by adding Translators for additional dependency management systems.

To manage your dependencies, you can use almost any Node.js package manager that relies on package.json files. Popular ones are npm, Yarn and pnpm. UI5 CLI itself uses npm.

UI5 CLI resolves dependencies almost the same way Node.js does when executing a require / import statement.

Where are the npm Packages?

',16)])])}const f=a(o,[["render",s]]);export{u as __pageData,f as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/FAQ.md.icEjlMM4.lean.js b/packages/documentation/docs/.vitepress/dist/assets/FAQ.md.icEjlMM4.lean.js new file mode 100644 index 0000000000..1e53b8887f --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/FAQ.md.icEjlMM4.lean.js @@ -0,0 +1 @@ +import{_ as a,c as r,o as t,ae as n}from"./chunks/framework.CBTkueSR.js";const u=JSON.parse('{"title":"FAQ","description":"","frontmatter":{},"headers":[],"relativePath":"FAQ.md","filePath":"FAQ.md"}'),o={name:"FAQ.md"};function s(i,e,p,h,c,l){return t(),r("div",null,[...e[0]||(e[0]=[n("",16)])])}const f=a(o,[["render",s]]);export{u as __pageData,f as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/FileSystem.md.D7YyUyY3.js b/packages/documentation/docs/.vitepress/dist/assets/FileSystem.md.D7YyUyY3.js new file mode 100644 index 0000000000..27ffca444e --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/FileSystem.md.D7YyUyY3.js @@ -0,0 +1 @@ +import{_ as r,c as t,o as a,ae as i}from"./chunks/framework.CBTkueSR.js";const d=JSON.parse('{"title":"UI5 FS","description":"","frontmatter":{},"headers":[],"relativePath":"FileSystem.md","filePath":"FileSystem.md"}'),s={name:"FileSystem.md"};function o(l,e,n,c,h,p){return a(),t("div",null,[...e[0]||(e[0]=[i('

UI5 FS

The UI5 FS provides a UI5-specific file system abstraction.

API Reference

Overview

The virtual file system "UI5 FS" offers an abstraction layer from the physical file system. Among other features, it can combine a set of scattered file locations into a well-defined virtual structure.

Resource

A Resource basically represents a file. Besides providing access to the file content, it also carries metadata like the virtual path of the Resource.

Resources are typically created and stored in Adapters. Once read from a physical file system, they are typically kept in memory for further processing in other modules.

This ensures a high build performance, as physical read and write access for a high number of resources is kept to a minimum.

Adapters

Adapters abstract access to different resource locations.

The Memory Adapter represents a virtual file system which maintains respective Resources inside a virtual data structure.

The File System Adapter, on the other hand, has direct access to the physical file system. It maps a "virtual base path" to a given physical path.

Both adapters provide APIs to retrieve and persist Resources, namely

  • to retrieve a single resource by its virtual path use byPath(),

  • to retrieve many resources based on patterns use byGlob(),

  • to persist a single resource use write().

Reader Collections

Reader collections allow grouped access to multiple adapters, which might even be nested in other reader collections.

They implement the same API for retrieving resources as adapters (byPath and byGlob). Multiple flavors exist:

  • ReaderCollection: The most basic collection. Allows parallel read access to multiple readers (i.e. adapters or collections)
  • ReaderCollectionPrioritized: Contains a list of readers which are searched in-order. This allows one reader to "overlay" resources of another
  • DuplexCollection: Contains a single reader and a single "writer". It therefore also implements the Adapter API for persisting resources (write()). When retrieving resources, the writer is prioritized over the reader
  • WriterCollection: Contains a set of writers and a mapping for each of them. When writing a resource, the writer is chosen based on the resource's virtual path.
',19)])])}const f=r(s,[["render",o]]);export{d as __pageData,f as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/FileSystem.md.D7YyUyY3.lean.js b/packages/documentation/docs/.vitepress/dist/assets/FileSystem.md.D7YyUyY3.lean.js new file mode 100644 index 0000000000..3ab47dd7fb --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/FileSystem.md.D7YyUyY3.lean.js @@ -0,0 +1 @@ +import{_ as r,c as t,o as a,ae as i}from"./chunks/framework.CBTkueSR.js";const d=JSON.parse('{"title":"UI5 FS","description":"","frontmatter":{},"headers":[],"relativePath":"FileSystem.md","filePath":"FileSystem.md"}'),s={name:"FileSystem.md"};function o(l,e,n,c,h,p){return a(),t("div",null,[...e[0]||(e[0]=[i("",19)])])}const f=r(s,[["render",o]]);export{d as __pageData,f as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/GettingStarted.md.CPfMgG6N.js b/packages/documentation/docs/.vitepress/dist/assets/GettingStarted.md.CPfMgG6N.js new file mode 100644 index 0000000000..169c10481a --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/GettingStarted.md.CPfMgG6N.js @@ -0,0 +1,9 @@ +import{_ as e,c as i,o as t,ae as s}from"./chunks/framework.CBTkueSR.js";const u=JSON.parse('{"title":"Getting Started","description":"","frontmatter":{},"headers":[],"relativePath":"GettingStarted.md","filePath":"GettingStarted.md"}'),n={name:"GettingStarted.md"};function l(o,a,p,r,h,d){return t(),i("div",null,[...a[0]||(a[0]=[s(`

Getting Started

Installing the UI5 CLI

Requirements

  • Node.js version v20.11.0 and higher or v22.0.0 and higher (v21 is not supported)
  • npm version v8.0.0 or higher

Installation

sh
# Global installation to have the command available
+npm install --global @ui5/cli
+
+# Additional local install in your project
+npm install --save-dev @ui5/cli
+
+# Verify installation
+ui5 --help

The globally installed UI5 CLI will always try to invoke a locally installed version of the UI5 CLI (if present). This way you can use different versions of the UI5 CLI across your projects. Please see the UI5 CLI documentation for details.

⚡️ Quick Start: OpenUI5 Sample App

Check out the OpenUI5 Sample App featuring a full blown How-to to play around with UI5 CLI!

Starting a New Project

The easiest way to start a new UI5 project is to use a template generator like generator-easy-ui5.

Choose a template that is designed for the type of project you want to create and the target environment where you want to deploy it to. Make sure that the template already uses UI5 CLI. A good indicator for that is the presence of a ui5.yaml file in the generated project.

When working with SAP Business Application Studio, there are several templates available to you. Check out the tutorial on creating a basic SAPUI5 application and deploying it to Cloud Foundry from within SAP Business Application Studio: Create an SAP Fiori App Using SAP Business Application Studio

You can find many guides on UI5 development with SAP Business Application Studio in the Tutorial Navigator.

Enabling an Existing Project

You can easily check whether or not a project (application or library) can already be used with the UI5 CLI by looking for a ui5.yaml file in the project's root directory.
This file (with some exceptions) is required for all projects and their dependencies (e.g. reuse libraries) to use them in the UI5 CLI.

Setup

If your project is not set up for use with the UI5 CLI yet, follow these steps:

  1. If your project does not have a package.json file, let npm generate it:

    sh
    npm init --yes
  2. Generate the ui5.yaml file:

    sh
    ui5 init
  3. Define the framework you want to use

sh
ui5 use openui5@latest
sh
ui5 use sapui5@latest

You can choose between the OpenUI5 and the SAPUI5 framework.

Don't know which one to choose? Check out our documentation on the differences between OpenUI5 and SAPUI5.

  1. Add required libraries

    sh
    ui5 add sap.ui.core sap.m sap.ui.table themelib_sap_fiori_3 # [...]

    You can find a documentation of all libraries, including samples and more, in the Demo Kit:

  2. Start the server and work on your project! 🎉

    sh
    ui5 serve

Tip

Use ui5 serve to start a local development server and ui5 build --all to produce an optimized, static version of your project, which you can then deploy to your production environment.

Find more information here:

  1. If you are using Git or similar version control, commit package.json and ui5.yaml to your repository.
    sh
    git add package.json ui5.yaml
    +git commit -m "Enable use with UI5 CLI"

Hooray! You can now use UI5 CLI in your project! 🎉

`,26)])])}const k=e(n,[["render",l]]);export{u as __pageData,k as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/GettingStarted.md.CPfMgG6N.lean.js b/packages/documentation/docs/.vitepress/dist/assets/GettingStarted.md.CPfMgG6N.lean.js new file mode 100644 index 0000000000..33ce8d9ea7 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/GettingStarted.md.CPfMgG6N.lean.js @@ -0,0 +1 @@ +import{_ as e,c as i,o as t,ae as s}from"./chunks/framework.CBTkueSR.js";const u=JSON.parse('{"title":"Getting Started","description":"","frontmatter":{},"headers":[],"relativePath":"GettingStarted.md","filePath":"GettingStarted.md"}'),n={name:"GettingStarted.md"};function l(o,a,p,r,h,d){return t(),i("div",null,[...a[0]||(a[0]=[s("",26)])])}const k=e(n,[["render",l]]);export{u as __pageData,k as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/HomePage.md.BnZy5h7J.js b/packages/documentation/docs/.vitepress/dist/assets/HomePage.md.BnZy5h7J.js new file mode 100644 index 0000000000..46e7148d61 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/HomePage.md.BnZy5h7J.js @@ -0,0 +1,56 @@ +import{_ as i,c as a,o as n,ae as t}from"./chunks/framework.CBTkueSR.js";const F=JSON.parse('{"title":"UI5 Tooling","description":"","frontmatter":{},"headers":[],"relativePath":"HomePage.md","filePath":"HomePage.md"}'),e={name:"HomePage.md"};function p(l,s,h,k,r,d){return n(),a("div",null,[...s[0]||(s[0]=[t(`

UI5 Tooling

An open and modular toolchain to develop state-of-the-art applications based on the UI5 framework.

🚀 New Release

UI5 Tooling V4 is here 🎉

Read the announcement blog post: SAP Community: UI5 Tooling 4.0

And checkout the Migrate to v4 documentation.

Get Started

Main Features

💻 UI5 CLI

Also see the UI5 CLI Documentation

sh
# Global
+npm install --global @ui5/cli
+
+# In your project
+npm install --save-dev @ui5/cli

⚙️ Project Setup

Configure your project for use with UI5 Tooling.
Also see the Configuration Documentation

❯ ui5 init
+Wrote ui5.yaml:
+
+specVersion: "4.0"
+metadata:
+  name: my-app
+type: application

🚚 Dependency Management

UI5 framework dependencies are managed by the tooling. All other dependencies are managed by your favorite node package manager.

❯ ui5 use SAPUI5@1.117.0
+Updated configuration written to ui5.yaml
+This project is now using SAPUI5 version 1.117.0
+
+❯ ui5 add sap.ui.core sap.m themelib_sap_fiori_3
+Updated configuration written to ui5.yaml
+Added framework libraries sap.ui.core sap.m themelib_sap_fiori_3 as dependencies

🏄 Development Server

Start a local development server to work on your project.
Also see the Server Documentation

❯ ui5 serve
+Server started
+URL: http://localhost:8080

🛠 Build for Production

Build an optimized version of your project.
Also see the Builder Documentation

bash
 ui5 build
+info graph:helpers:ui5Framework Using OpenUI5 version: 1.117.0
+info ProjectBuilder Preparing build for project my-app
+info ProjectBuilder   Target directory: ./dist
+info ProjectBuilder Cleaning target directory...
+info Project 1 of 1: Building application project my-app...
+info my-app Running task escapeNonAsciiCharacters...
+info my-app Running task replaceCopyright...
+info my-app Running task replaceVersion...
+info my-app Running task minify...
+info my-app Running task generateFlexChangesBundle...
+info my-app Running task generateComponentPreload...
+info ProjectBuilder Build succeeded in 296 ms
+info ProjectBuilder Executing cleanup tasks...

🧪 Node.js API

Most UI5 Tooling modules provide JavaScript APIs for direct consumption in other Node.js projects. This allows you to rely on UI5 Tooling for UI5-specific build functionality and project handling, while creating your own tools to perfectly match the needs of your project.

All available APIs are documented in the UI5 Tooling API Reference.

js
import {graphFromPackageDependencies} from "@ui5/project/graph";
+
+async function buildApp(projectPath, destinationPath) {
+    const graph = await graphFromPackageDependencies({
+        cwd: projectPath
+    });
+    await graph.build({
+        destPath: destinationPath,
+        selfContained: true,
+        excludedTasks: ["transformBootstrapHtml"],
+        includedDependencies: ["*"]
+    });
+}
js
async function buildApp(projectPath, destinationPath) { 
+    const {graphFromPackageDependencies} = 
+        await import("@ui5/project/graph");
+    const graph = await graphFromPackageDependencies({
+        cwd: projectPath
+    });
+    await graph.build({
+        destPath: destinationPath,
+        selfContained: true,
+        excludedTasks: ["transformBootstrapHtml"],
+        includedDependencies: ["*"]
+    });
+}
`,24)])])}const g=i(e,[["render",p]]);export{F as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/HomePage.md.BnZy5h7J.lean.js b/packages/documentation/docs/.vitepress/dist/assets/HomePage.md.BnZy5h7J.lean.js new file mode 100644 index 0000000000..25afff9f4f --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/HomePage.md.BnZy5h7J.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,ae as t}from"./chunks/framework.CBTkueSR.js";const F=JSON.parse('{"title":"UI5 Tooling","description":"","frontmatter":{},"headers":[],"relativePath":"HomePage.md","filePath":"HomePage.md"}'),e={name:"HomePage.md"};function p(l,s,h,k,r,d){return n(),a("div",null,[...s[0]||(s[0]=[t("",24)])])}const g=i(e,[["render",p]]);export{F as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/OpenUI5.md.BhzTxPJW.js b/packages/documentation/docs/.vitepress/dist/assets/OpenUI5.md.BhzTxPJW.js new file mode 100644 index 0000000000..ad8d47f7dc --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/OpenUI5.md.BhzTxPJW.js @@ -0,0 +1,27 @@ +import{_ as i,c as a,o as n,ae as e}from"./chunks/framework.CBTkueSR.js";const E=JSON.parse('{"title":"Consuming OpenUI5 Libraries","description":"","frontmatter":{},"headers":[],"relativePath":"OpenUI5.md","filePath":"OpenUI5.md"}'),t={name:"OpenUI5.md"};function p(l,s,h,k,r,o){return n(),a("div",null,[...s[0]||(s[0]=[e(`

Consuming OpenUI5 Libraries

OpenUI5 consumption with UI5 CLI is very similar to SAPUI5 consumption. Please refer to the documentation on Consuming SAPUI5 Libraries for a general description of how UI5 CLI can fetch and provide framework dependencies to your project.

Note that projects using the SAPUI5 framework can depend on projects using the OpenUI5 framework. However, OpenUI5 projects can't depend on SAPUI5 projects.

Please also refer to our documentation on the differences between OpenUI5 and SAPUI5.

INFO

The minimum OpenUI5 version that can be consumed by UI5 CLI is 1.52.5

Configuration

Your project's ui5.yaml provides a configuration section dedicated to framework dependency handling.

This configuration can be maintained by editing the file, or by using the UI5 CLI:

Example

Using the UI5 CLI:

sh
ui5 use openui5@latest
+ui5 add sap.ui.core sap.m sap.ui.table themelib_sap_fiori_3

Example ui5.yaml of an application

yaml
specVersion: "4.0"
+type: application
+metadata:
+  name: some.project.name
+framework:
+  name: OpenUI5
+  version: 1.76.0
+  libraries:
+    - name: sap.ui.core
+    - name: sap.m
+    - name: sap.ui.table
+    - name: themelib_sap_fiori_3

Example ui5.yaml of a library

yaml
specVersion: "4.0"
+type: library
+metadata:
+  name: some.library
+framework:
+  name: OpenUI5
+  version: 1.76.0
+  libraries:
+    - name: sap.ui.core
+    - name: themelib_sap_belize
+      optional: true
+    - name: themelib_sap_bluecrystal
+      optional: true
+    - name: themelib_sap_fiori_3
+      optional: true

Please make sure that your project defines Specification Version 2.0 or higher.

For details, please see the corresponding framework configuration documentation.

Linking Framework Dependencies

When working on UI5 applications or libraries that use OpenUI5, you can link a local OpenUI5 repository into that project. This allows you to make changes to the project itself as well as to the OpenUI5 libraries simultaneously and test them immediately.

A detailed step-by-step guide on how to achieve such a setup with the OpenUI5 Sample App can be found here.

OpenUI5 Framework Development

Please refer to the OpenUI5 Framework Development Documentation.

`,20)])])}const g=i(t,[["render",p]]);export{E as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/OpenUI5.md.BhzTxPJW.lean.js b/packages/documentation/docs/.vitepress/dist/assets/OpenUI5.md.BhzTxPJW.lean.js new file mode 100644 index 0000000000..136480b7d7 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/OpenUI5.md.BhzTxPJW.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,ae as e}from"./chunks/framework.CBTkueSR.js";const E=JSON.parse('{"title":"Consuming OpenUI5 Libraries","description":"","frontmatter":{},"headers":[],"relativePath":"OpenUI5.md","filePath":"OpenUI5.md"}'),t={name:"OpenUI5.md"};function p(l,s,h,k,r,o){return n(),a("div",null,[...s[0]||(s[0]=[e("",20)])])}const g=i(t,[["render",p]]);export{E as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/Overview.md.Bxk3KCe3.js b/packages/documentation/docs/.vitepress/dist/assets/Overview.md.Bxk3KCe3.js new file mode 100644 index 0000000000..3bd7f8f8a1 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/Overview.md.Bxk3KCe3.js @@ -0,0 +1,32 @@ +import{_ as a,c as s,o as n,ae as i}from"./chunks/framework.CBTkueSR.js";const k=JSON.parse('{"title":"Development Overview","description":"","frontmatter":{},"headers":[],"relativePath":"Overview.md","filePath":"Overview.md"}'),t={name:"Overview.md"};function o(p,e,r,l,d,h){return n(),s("div",null,[...e[0]||(e[0]=[i(`

Development Overview

When developing a UI5 project on your local system, you should use the UI5 Server (ui5 serve) and not the UI5 Builder (ui5 build). Building a project should only be required when deploying it.

However, you might have good reasons to also use the UI5 Builder during development. In such cases, feel free to let us know! Maybe your use case could be covered by a future enhancement of the UI5 Server.

Project Dependencies

UI5 CLI differentiates between "framework dependencies" and "project dependencies".

Framework dependencies are generally libraries and themes provided by the SAP frameworks "OpenUI5" and "SAPUI5". UI5 CLI will take care of downloading them and handling their versions for you. Please see the corresponding documentation on both options:

Project dependencies are all other libraries, custom themes, UI5 CLI extensions or JavaScript modules your project depends on. In general these dependencies are maintained in the package.json of your project. See also: FAQ: Why package.json? / Why npm?.

Linking Projects

Would you like to work on an application project and one or more of its dependencies at the same time? We got you covered!

UI5 Workspaces

The recommended approach for setting up a development environment where simultaneous work on multiple UI5 projects is required.

Head over to the UI5 Workspaces documentation for the details. Below is an example based on a simple scenario with an application and a reuse library project:

Example: Your Directory Structure

my-app/
+    \\_ node_modules/
+    \\_ webapp/
+    \\_ ui5.yaml
+    \\_ package.json
+my-reuse-library/
+    \\_ node_modules/
+    \\_ src/
+    \\_ test/
+    \\_ ui5.yaml
+    \\_ package.json

In its package.json, my-app should already define a dependency to my-reuse-library. So, after running the npm install command, a copy of the my-reuse-library-package should be retrieved from the package registry and added to my-app's node_modules/ directory.

In the my-app directory, create a new file named ui5-workspace.yaml with the following content:

yaml
specVersion: workspace/1.0
+metadata:
+    name: default
+dependencyManagement:
+    resolutions:
+        - path: ../my-reuse-library

That's it! Start a server via ui5 serve, and you will see that any changes you make in my-reuse-library are immediately visible in my-app.

Package Managers

By leaving dependency management up to the tool of your choice (see FAQ: Why package.json? / Why npm?) you have a variety of other options for linking dependencies into your project.

Here is an example using the npm CLI in Version 8, an application, and a reuse library project:

Example: Your Directory Structure

my-app/
+    \\_ node_modules/
+    \\_ webapp/
+    \\_ ui5.yaml
+    \\_ package.json
+my-reuse-library/
+    \\_ node_modules/
+    \\_ src/
+    \\_ test/
+    \\_ ui5.yaml
+    \\_ package.json

In its package.json, my-app should already define a dependency to my-reuse-library. So, after running the npm install command, a copy of the "my-reuse-library"-package should be retrieved from the package registry and added to my-app's node_modules/ directory.

Now all you need to do is replacing this copy of the my-reuse-library package with a link to the my-reuse-library project located somewhere on your computer. In this example it is right next to my-app, but that doesn't really matter.

First, in the directory of the my-reuse-library project, create a global link:

sh
npm link

Then, in the my-app directory, use that link to replace the registry package:

sh
npm link my-reuse-library

Note: "my-reuse-library" is the name defined in the package.json and not necessarily the directory or ui5.yaml name

That's it. You can check whether the linking worked by executing ui5 tree in the my-app directory and looking for the path attributes in its output.

Static Dependency Definition

As an alternative to defining your project dependencies in the package.json, you can define a static dependency hierarchy for the project in a YAML file. This is typically only advised in special cases where none of the other concepts work.

To use such a file in UI5 CLI, provide a path to it using the --dependency-definition parameter. Note that all package.json dependencies will be ignored (including UI5 CLI extensions), but UI5 framework dependencies defined in ui5.yaml will still be used.

Example: projectDependencies.yaml

yaml
id: my.app
+version: "local"
+path: "."
+dependencies:
+  - id: my.lib
+    version: "local"
+    path: "../my.lib"

By placing this file in the root directory of the my.app application project, you can start a server with a local copy of the my.lib dependency, located in the same parent directory, using the command ui5 serve --dependency-definition ./projectDependencies.yaml.

The structure of the dependency definition file follows that of the @ui5/project/graph/providers/DependencyTree~TreeNode type.

HTTP/2 Development Webserver

The UI5 CLI contains a web server to serve the project via HTTP/2 protocol.

sh
ui5 serve --h2

This requires an SSL certificate. You are guided through the automatic generation process. Also see the UI5 Server documentation

Integration in Other Tools

One of the key features of the UI5 CLI is its modularization. Single parts of UI5 CLI can easily be integrated in other Node.js-based tools and frameworks like Grunt or Gulp.

All JavaScript APIs available for direct consumption are listed here. However, for standard UI5 development, the UI5 CLI should always be the first choice.

`,46)])])}const u=a(t,[["render",o]]);export{k as __pageData,u as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/Overview.md.Bxk3KCe3.lean.js b/packages/documentation/docs/.vitepress/dist/assets/Overview.md.Bxk3KCe3.lean.js new file mode 100644 index 0000000000..cb7a30f7f9 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/Overview.md.Bxk3KCe3.lean.js @@ -0,0 +1 @@ +import{_ as a,c as s,o as n,ae as i}from"./chunks/framework.CBTkueSR.js";const k=JSON.parse('{"title":"Development Overview","description":"","frontmatter":{},"headers":[],"relativePath":"Overview.md","filePath":"Overview.md"}'),t={name:"Overview.md"};function o(p,e,r,l,d,h){return n(),s("div",null,[...e[0]||(e[0]=[i("",46)])])}const u=a(t,[["render",o]]);export{k as __pageData,u as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/Privacy.md.DEAZGlsC.js b/packages/documentation/docs/.vitepress/dist/assets/Privacy.md.DEAZGlsC.js new file mode 100644 index 0000000000..db65add00c --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/Privacy.md.DEAZGlsC.js @@ -0,0 +1 @@ +import{_ as r,c as i,o as s,j as a,a as e}from"./chunks/framework.CBTkueSR.js";const y=JSON.parse('{"title":"Privacy","description":"","frontmatter":{},"headers":[],"relativePath":"Privacy.md","filePath":"Privacy.md"}'),o={name:"Privacy.md"};function c(n,t,p,l,d,h){return s(),i("div",null,[...t[0]||(t[0]=[a("h1",{id:"privacy",tabindex:"-1"},[e("Privacy "),a("a",{class:"header-anchor",href:"#privacy","aria-label":'Permalink to "Privacy"'},"​")],-1),a("p",null,[e("This site is hosted by "),a("a",{href:"https://pages.github.com/",target:"_blank"},"GitHub Pages"),e(". Please see the "),a("a",{href:"https://docs.github.com/en/github/site-policy/github-privacy-statement",target:"_blank"}," GitHub Privacy Statement"),e(" for any information how GitHub processes your personal data.")],-1)])])}const u=r(o,[["render",c]]);export{y as __pageData,u as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/Privacy.md.DEAZGlsC.lean.js b/packages/documentation/docs/.vitepress/dist/assets/Privacy.md.DEAZGlsC.lean.js new file mode 100644 index 0000000000..db65add00c --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/Privacy.md.DEAZGlsC.lean.js @@ -0,0 +1 @@ +import{_ as r,c as i,o as s,j as a,a as e}from"./chunks/framework.CBTkueSR.js";const y=JSON.parse('{"title":"Privacy","description":"","frontmatter":{},"headers":[],"relativePath":"Privacy.md","filePath":"Privacy.md"}'),o={name:"Privacy.md"};function c(n,t,p,l,d,h){return s(),i("div",null,[...t[0]||(t[0]=[a("h1",{id:"privacy",tabindex:"-1"},[e("Privacy "),a("a",{class:"header-anchor",href:"#privacy","aria-label":'Permalink to "Privacy"'},"​")],-1),a("p",null,[e("This site is hosted by "),a("a",{href:"https://pages.github.com/",target:"_blank"},"GitHub Pages"),e(". Please see the "),a("a",{href:"https://docs.github.com/en/github/site-policy/github-privacy-statement",target:"_blank"}," GitHub Privacy Statement"),e(" for any information how GitHub processes your personal data.")],-1)])])}const u=r(o,[["render",c]]);export{y as __pageData,u as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/Project.md.DXUu18Wn.js b/packages/documentation/docs/.vitepress/dist/assets/Project.md.DXUu18Wn.js new file mode 100644 index 0000000000..8f5720ba93 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/Project.md.DXUu18Wn.js @@ -0,0 +1 @@ +import{_ as t,c as r,o,ae as a}from"./chunks/framework.CBTkueSR.js";const h=JSON.parse('{"title":"UI5 Project","description":"","frontmatter":{},"headers":[],"relativePath":"Project.md","filePath":"Project.md"}'),d={name:"Project.md"};function i(c,e,s,n,l,p){return o(),r("div",null,[...e[0]||(e[0]=[a('

UI5 Project

The UI5 Project module provides functionality to build a UI5 project. Also see Development Overview: Project Dependencies.

Types

Types define how a project can be configured and how it is built. A type orchestrates a set of tasks and defines the order in which they get applied during build phase. Furthermore, it takes care of formatting and validating the project-specific configuration.

Also see UI5 Project: Configuration

application

Projects of type application are typically the main or root project. In a projects dependency tree, there should only be one project of type application. If multiple are found, those further away from the root are ignored.

The source directory of an application (typically named webapp) is mapped to the virtual root path /.

An applications source directory may or may not contain a Component.js file. If it does, it must also contain a manifest.json file. If there is a Component.js file, an optimized Component-preload.js file will be generated during the build.

library

UI5 libraries are often referred to as reuse-, custom- or control libraries. They are a key component in sharing code across multiple projects in UI5.

A project of type library must have a source directory (typically named src). It may also feature a "test" directory. These directories are mapped to the virtual directories /resources for the sources and /test-resources for the test resources.

These directories should contain a directory structure representing the namespace of the library (e.g. src/my/first/library) to prevent name clashes between the resources of different libraries.

theme-library

Available since Specification Version 1.1

UI5 theme libraries provide theming resources for the controls of one or multiple libraries.

A project of type theme-library must have a source directory (typically named src). It may also feature a "test" directory. These directories are mapped to the virtual directories /resources for the sources and /test-resources for the test resources.

The source directory must contain a directory structure representing the namespaces of the libraries it provides theme resources for. For example, a theme library named my_custom_theme, providing resources for a library named my.library should have these resources in a directory path my/library/themes/my_custom_theme/.

module

The module type is meant for usage with non-UI5 resources like third-party libraries. Their path mapping can be configured freely. During a build, their resources are copied without modifications.

Build Output Style

The Output Style offers you control over your project's build output folder. Namespaces like sap.m or sap.ui.core can be streamlined, producing a more concise and flat output. For example, a resource like /resources/sap/m/RangeSlider.js will be transformed into ./RangeSlider.js. And vice versa, applications that are built by default with Flat output, can leverage any namespaces they might have.

In the table below you can find the available combinations of project type & output style.

Project Type / Requested Output StyleResulting Style
application
DefaultRoot project is written Flat-style. ¹
FlatSame as Default.
NamespaceRoot project is written Namespace-style (resources are prefixed with the project's namespace). ¹
library
DefaultRoot project is written Namespace-style. ¹
FlatRoot project is written Flat-style (without its namespace, logging warnings for resources outside of it). ¹
NamespaceSame as Default.
theme-library
DefaultRoot project is written in the style of the sources (multiple namespaces). ¹
FlatUnsupported ²
NamespaceUnsupported ²
module
DefaultRoot project is written with the configured paths. ^1^
FlatUnsupported ^3^
NamespaceUnsupported ^3^

¹ The Output Style is only applied to the root project's output folder structure. Any dependencies included in the build would retain their Default output style.
² Theme libraries in most cases have more than one namespace.
³ Modules have explicit path mappings configured and no namespace concept.

API Reference

',26)])])}const m=t(d,[["render",i]]);export{h as __pageData,m as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/Project.md.DXUu18Wn.lean.js b/packages/documentation/docs/.vitepress/dist/assets/Project.md.DXUu18Wn.lean.js new file mode 100644 index 0000000000..8e0e225c10 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/Project.md.DXUu18Wn.lean.js @@ -0,0 +1 @@ +import{_ as t,c as r,o,ae as a}from"./chunks/framework.CBTkueSR.js";const h=JSON.parse('{"title":"UI5 Project","description":"","frontmatter":{},"headers":[],"relativePath":"Project.md","filePath":"Project.md"}'),d={name:"Project.md"};function i(c,e,s,n,l,p){return o(),r("div",null,[...e[0]||(e[0]=[a("",26)])])}const m=t(d,[["render",i]]);export{h as __pageData,m as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/SAPUI5.md.DzeOp_G2.js b/packages/documentation/docs/.vitepress/dist/assets/SAPUI5.md.DzeOp_G2.js new file mode 100644 index 0000000000..fbf414ee74 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/SAPUI5.md.DzeOp_G2.js @@ -0,0 +1,32 @@ +import{_ as i,c as a,o as e,ae as n}from"./chunks/framework.CBTkueSR.js";const E=JSON.parse('{"title":"Consuming SAPUI5 Libraries","description":"","frontmatter":{},"headers":[],"relativePath":"SAPUI5.md","filePath":"SAPUI5.md"}'),t={name:"SAPUI5.md"};function h(l,s,p,k,r,o){return e(),a("div",null,[...s[0]||(s[0]=[n(`

Consuming SAPUI5 Libraries

The minimum version of SAPUI5 that can be consumed by UI5 CLI as described below is **1.76.0.**  
+For lower versions, consider using the [CDN bootstrap](https://ui5.sap.com/#/topic/2d3eb2f322ea4a82983c1c62a33ec4ae) or a custom middleware like [ui5-middleware-simpleproxy](https://www.npmjs.com/package/ui5-middleware-simpleproxy).
+

Overview

SAPUI5 libraries are hosted on the public npm registry at registry.npmjs.org. However, you should not install them using node package managers such as npm. Let UI5 CLI handle them instead by following this guide.

INFO

For more background information also see the Blog Post "UI5ers Buzz #49: The UI5 CLI and SAPUI5 – The Next Step"

Usage

Since Version 2.0 of the UI5 CLI, it will automatically download all required framework dependencies of a project that have been listed in the corresponding ui5.yaml file. They will be cached in a .ui5 directory located in the user's home directory. This happens transparently whenever you execute the ui5 serve or ui5 build commands.

All non-framework dependencies, such as reuse libraries or UI5 CLI extensions, still need to be maintained as npm dependencies in the projects package.json. At the same time, framework dependencies listed in the ui5.yaml should not be listed in the package.json as they will be ignored by the UI5 CLI.

Configuration

Your project's ui5.yaml provides a configuration section dedicated to framework dependency handling.

This configuration can be maintained by editing the file, or by using the UI5 CLI:

IMPORTANT

Using the UI5 CLI:

sh
ui5 use sapui5@latest
+ui5 add sap.ui.core sap.m sap.ui.comp themelib_sap_fiori_3
+ui5 add -D sap.ushell

Example ui5.yaml of an application

yaml
specVersion: "4.0"
+type: application
+metadata:
+  name: some.project.name
+framework:
+  name: SAPUI5
+  version: 1.82.0
+  libraries:
+    - name: sap.ui.core
+    - name: sap.m
+    - name: sap.ui.comp
+    - name: sap.ushell
+      development: true
+    - name: themelib_sap_fiori_3

Example ui5.yaml of a library

yaml
specVersion: "4.0"
+type: library
+metadata:
+  name: some.library
+framework:
+  name: SAPUI5
+  version: 1.82.0
+  libraries:
+    - name: sap.ui.core
+    - name: themelib_sap_belize
+      optional: true
+    - name: themelib_sap_bluecrystal
+      optional: true
+    - name: themelib_sap_fiori_3
+      optional: true

Please make sure that your project defines Specification Version 2.0 or higher.

For details please refer to the framework configuration documentation.

Differences Between OpenUI5 and SAPUI5

Please refer to our documentation on the differences between OpenUI5 and SAPUI5

`,20)])])}const c=i(t,[["render",h]]);export{E as __pageData,c as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/SAPUI5.md.DzeOp_G2.lean.js b/packages/documentation/docs/.vitepress/dist/assets/SAPUI5.md.DzeOp_G2.lean.js new file mode 100644 index 0000000000..48a47c7e64 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/SAPUI5.md.DzeOp_G2.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as e,ae as n}from"./chunks/framework.CBTkueSR.js";const E=JSON.parse('{"title":"Consuming SAPUI5 Libraries","description":"","frontmatter":{},"headers":[],"relativePath":"SAPUI5.md","filePath":"SAPUI5.md"}'),t={name:"SAPUI5.md"};function h(l,s,p,k,r,o){return e(),a("div",null,[...s[0]||(s[0]=[n("",20)])])}const c=i(t,[["render",h]]);export{E as __pageData,c as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/Server.md.0NEcQ1ii.js b/packages/documentation/docs/.vitepress/dist/assets/Server.md.0NEcQ1ii.js new file mode 100644 index 0000000000..73a7630211 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/Server.md.0NEcQ1ii.js @@ -0,0 +1 @@ +import{_ as r,c as t,o as a,ae as s}from"./chunks/framework.CBTkueSR.js";const u=JSON.parse('{"title":"UI5 Server","description":"","frontmatter":{},"headers":[],"relativePath":"Server.md","filePath":"Server.md"}'),o={name:"Server.md"};function i(d,e,n,c,l,h){return a(),t("div",null,[...e[0]||(e[0]=[s('

UI5 Server

The UI5 Server module can serve project's sources for development and testing purposes.

API Reference

Custom Server Middleware Extensibility

All available standard middleware are listed below in the order of their execution.

A project can also add custom middleware to the server by using the Custom Server Middleware Extensibility.

MiddlewareDescription
cspSee chapter csp
compressionStandard Express compression middleware
corsStandard Express cors middleware
discoverySee chapter discovery
serveResourcesSee chapter serveResources
testRunnerSee chapter testRunner
serveThemesSee chapter serveThemes
versionInfoSee chapter versionInfo
nonReadRequestsSee chapter nonReadRequests
serveIndexSee chapter serveIndex

csp

The Content Security Policy (CSP) middleware is active by default.

The header content-security-policy can be set by adding URL parameter sap-ui-xx-csp-policy to the request with the policy name as value.

To set the policy to report-only, append :report-only or :ro to the policy name. E.g. /index.html?sap-ui-xx-csp-policy=sap-target-level-1:report-only

sendSAPTargetCSP parameter

The default CSP policies can be modified using parameter sendSAPTargetCSP (--sap-csp-policies when using the CLI). With sendSAPTargetCSP set to true the policies sap-target-level-1 and sap-target-level-3 policies are activated and send as report-only.

Serve CSP Reports

Serving of CSP reports can be activated with parameter serveCSPReports (--serve-csp-reports when using the CLI). With serveCSPReports set to true, the CSP reports are collected and can be downloaded from the server path /.ui5/csp/csp-reports.json.

discovery

This middleware lists project files with URLs under several /discovery endpoints. This is exclusively used by the OpenUI5 test suite application.

serveResources

This middleware resolves requests using the ui5-fs-file system abstraction.

The following file content transformations are executed:

  • Escaping non-ASCII characters in .properties translation files based on a project's configuration
  • Enhancing the manifest.json with supported locales determined by available .properties translation files

testRunner

Serves a static version of the UI5 QUnit TestRunner at /test-resources/sap/ui/qunit/testrunner.html.

serveThemes

Compiles CSS files for themes on-the-fly from the source *.less files.

Changes made to these *.less files while the server is running will automatically lead to the re-compilation of the relevant CSS files when requested again.

versionInfo

Generates and serves the version info file /resources/sap-ui-version.json, which is required for several framework functionalities.

nonReadRequests

Answers all non-read requests (POST, PUT, DELETE, etc.) that have not been answered by any other middleware with the 404 "Not Found" status code . This signals the client that these operations are not supported by the server.

serveIndex

In case a directory has been requested, this middleware renders an HTML with a list of the directory's content.

SSL Certificates

When starting the UI5 Server in HTTPS- or HTTP/2 mode, for example by using UI5 CLI parameter --h2, you will be prompted for the automatic generation of a local SSL certificate if necessary.

Follow the given instructions and enter your password to install the generated certificate as trusted. You can find the generated certificate and corresponding private key under .ui5/server in your user's home directory.

TIP

If Chrome unintentionally redirects an HTTP-URL to HTTPS, you need to delete the HSTS mapping in chrome://net-internals/#hsts by entering the domain name (e.g. localhost) and pressing "delete".

',36)])])}const f=r(o,[["render",i]]);export{u as __pageData,f as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/Server.md.0NEcQ1ii.lean.js b/packages/documentation/docs/.vitepress/dist/assets/Server.md.0NEcQ1ii.lean.js new file mode 100644 index 0000000000..4a71d1ccb1 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/Server.md.0NEcQ1ii.lean.js @@ -0,0 +1 @@ +import{_ as r,c as t,o as a,ae as s}from"./chunks/framework.CBTkueSR.js";const u=JSON.parse('{"title":"UI5 Server","description":"","frontmatter":{},"headers":[],"relativePath":"Server.md","filePath":"Server.md"}'),o={name:"Server.md"};function i(d,e,n,c,l,h){return a(),t("div",null,[...e[0]||(e[0]=[s("",36)])])}const f=r(o,[["render",i]]);export{u as __pageData,f as default}; diff --git a/docs/images/UI5_CLI/Task_Minify.svg b/packages/documentation/docs/.vitepress/dist/assets/Task_Minify.C_54hEom.svg similarity index 100% rename from docs/images/UI5_CLI/Task_Minify.svg rename to packages/documentation/docs/.vitepress/dist/assets/Task_Minify.C_54hEom.svg diff --git a/packages/documentation/docs/.vitepress/dist/assets/Troubleshooting.md.zLa9CUap.js b/packages/documentation/docs/.vitepress/dist/assets/Troubleshooting.md.zLa9CUap.js new file mode 100644 index 0000000000..395cbcfbde --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/Troubleshooting.md.zLa9CUap.js @@ -0,0 +1 @@ +import{_ as a,c as i,o as s,ae as t}from"./chunks/framework.CBTkueSR.js";const u=JSON.parse('{"title":"Troubleshooting","description":"","frontmatter":{},"headers":[],"relativePath":"Troubleshooting.md","filePath":"Troubleshooting.md"}'),o={name:"Troubleshooting.md"};function n(r,e,h,l,d,p){return s(),i("div",null,[...e[0]||(e[0]=[t('

Troubleshooting

UI5 Server

Chrome Redirects HTTP URLs to HTTPS (ERR_SSL_PROTOCOL_ERROR)

An HTTPS server or proxy that was previously running on a domain (e.g. localhost), might have set an HSTS header, enforcing Chrome to always use HTTPS for this domain. See https://www.chromium.org/hsts. This makes it impossible to connect to an HTTP-only server running on the same domain.

Resolution

You need to delete the HSTS mapping in chrome://net-internals/#hsts by entering the domain name (e.g. localhost) and pressing "delete".

Issues Not Listed Here

Please follow our Contribution Guidelines on how to report an issue.

UI5 Project

~/.ui5 Taking too Much Disk Space

There are possibly many versions of UI5 framework dependencies installed on your system, taking a large amount of disk space.

Resolution

Remove the .ui5/framework/ directory from your user's home directory:

sh
rm -rf ~/.ui5/framework/

Any missing framework dependencies will be downloaded again during the next UI5 CLI invocation.

Environment Variables

Changing the Log Level

In CI environments or in a combination with other tools, the usage of UI5 CLI's --log-level command parameter might be inconvenient and even impossible.

Resolution

Replace UI5 CLI's --log-level option with the UI5_LOG_LVL environment variable.

Example:

UI5_LOG_LVL=silly ui5 build

On Windows:

set UI5_LOG_LVL=silly ui5 build

Cross Environment via cross-env:

cross-env UI5_LOG_LVL=silly ui5 build

UI5 + Karma:

cross-env UI5_LOG_LVL=verbose npm run karma

WARNING

The combination of the UI5_LOG_LVL environment variable with the --log-level CLI parameter might lead to unexpected results; they should be used interchangeably but not together. The CLI parameter takes precedence over the UI5_LOG_LVL environment variable.

Changing UI5 CLI's Data Directory

UI5 CLI's data directory is by default at ~/.ui5. It's the place where the framework artifacts are stored. In some cases and environments this is not a convenient location and the user needs to provide a better one.

The path to it can either be provided via environment variable or permanently set in the configuration.

Info

Paths are resolved relative to the current root project path (i.e. where the package.json is located).

Environment variable UI5_DATA_DIR

Unix:

sh
UI5_DATA_DIR=/my/custom/location/.ui5 ui5 build

Windows:

sh
set UI5_DATA_DIR="C:\\\\my\\\\custom\\\\location\\\\.ui5" ui5 build

Configuration ui5DataDir

Configure a custom directory:

sh
ui5 config set ui5DataDir /my/custom/location/.ui5

Unset the configuration to switch back to the default directory:

sh
ui5 config set ui5DataDir
',43)])])}const k=a(o,[["render",n]]);export{u as __pageData,k as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/Troubleshooting.md.zLa9CUap.lean.js b/packages/documentation/docs/.vitepress/dist/assets/Troubleshooting.md.zLa9CUap.lean.js new file mode 100644 index 0000000000..3c055275ba --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/Troubleshooting.md.zLa9CUap.lean.js @@ -0,0 +1 @@ +import{_ as a,c as i,o as s,ae as t}from"./chunks/framework.CBTkueSR.js";const u=JSON.parse('{"title":"Troubleshooting","description":"","frontmatter":{},"headers":[],"relativePath":"Troubleshooting.md","filePath":"Troubleshooting.md"}'),o={name:"Troubleshooting.md"};function n(r,e,h,l,d,p){return s(),i("div",null,[...e[0]||(e[0]=[t("",43)])])}const k=a(o,[["render",n]]);export{u as __pageData,k as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/Workspace.md.Cozjt-6A.js b/packages/documentation/docs/.vitepress/dist/assets/Workspace.md.Cozjt-6A.js new file mode 100644 index 0000000000..d8f699bb3b --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/Workspace.md.Cozjt-6A.js @@ -0,0 +1,33 @@ +import{_ as a,c as i,o as e,ae as t}from"./chunks/framework.CBTkueSR.js";const d=JSON.parse('{"title":"UI5 Workspaces","description":"","frontmatter":{},"headers":[],"relativePath":"Workspace.md","filePath":"Workspace.md"}'),n={name:"Workspace.md"};function l(p,s,o,r,h,c){return e(),i("div",null,[...s[0]||(s[0]=[t(`

UI5 Workspaces

Info

UI5 Workspaces is a new feature available since UI5 CLI v3.0.0

Example

ui5-workspace.yaml

yaml
yaml title="ui5-workspace.yaml"
+specVersion: workspace/1.0
+metadata:
+   name: default
+dependencyManagement:
+   resolutions:
+       - path: ../heavy.library

General Concept

UI5 Workspaces can be used to create a personalized local development environment for a UI5 project. They allow to use UI5 dependencies from local directories without the need to use the link features of package managers like npm. "UI5 dependencies" generally refers to projects that have a ui5.yaml.

Workspaces are typically configured in a ui5-workspace.yaml file, located next to the project's ui5.yaml. The file can contain one or many workspace configurations, each separated by three dashes. For example:

Example

ui5-workspace.yaml

yaml
specVersion: workspace/1.0
+metadata:
+   name: default
+dependencyManagement:
+   resolutions:
+  	    - path: ../heavy.library
+---
+specVersion: workspace/1.0
+metadata:
+   name: extended
+dependencyManagement:
+   resolutions:
+  	    - path: ../heavy.library
+  	    - path: ../light.library
+  	    - path: ../test.library

If a workspace configuration named default exists, it will be used automatically; otherwise the workspace must be specified using the UI5 CLI parameter --workspace.

Workspaces can only be used in the project that is currently being worked on, i.e. the current root project. Workspace configurations of dependencies are ignored. The workspace file, however, does not necessarily have to be located within the project. You can reference any workspace configuration file via the UI5 CLI parameter --workspace-config.

This concept has been discussed in an RFC: RFC 0006 Local Dependency Resolution

Configuration

A UI5 Workspace configuration must define a specification version (specVersion) compatible with its configuration. For more information, see Workspace Specification Versions.

yaml
specVersion: "workspace/1.0"

Metadata

Example

yaml
specVersion: workspace/1.0
+metadata:
+   name: dolphin

name

A workspace must have a name. This allows to easily switch between individual workspace configurations.

If a workspace is named default, it will be used automatically, unless a different workspace is selected using the --workspace CLI parameter.

The name property must satisfy the following conditions. They are identical to project names:

  • Must be at least 3 characters long
  • Must be no longer than 80 characters
  • Must contain lowercase characters only
  • Must contain alphanumeric characters, dash, underscore and period only
    • Exception: The @ and / characters are allowed at certain positions as explained below
  • Must start with an alphabetic character or an @ character
  • If it starts with an @ character, it must contain exactly one forward slash /
    • This is aligned with the npm concept for package scopes, for example @org/lib.name

Dependency Management

UI5 Workspace configurations allow to influence the dependency resolution when working with a UI5 project.

Example

yaml
specVersion: workspace/1.0
+metadata:
+   name: dolphin
+dependencyManagement:
+	resolutions:
+  		- path: ../light.library
+  		- path: ../heavy.library
+  		- path: ../test.library

Resolutions

yaml
dependencyManagement:
+   	resolutions:
+       	- path: ../test.library

Resolution paths will be used by UI5 CLI to look for project dependencies. Any dependencies found via these paths will be used over the ones found with the regular dependency resolution mechanism. This includes UI5 CLI extensions.

Paths must point to a directory containing a package.json. UI5 CLI will attempt to find a UI5 project here. However, if the package.json contains a workspaces, or equivalently, ui5.workspaces configuration (which overrules the first), UI5 CLI will resolve the workspace first and attempt to find UI5 projects in the configured "npm workspaces". This is commonly used in mono-repos. An example can be found in the OpenUI5 repository.

Paths must be written in POSIX (i.e. using only forward slashes / as path segment separators) and must be relative to the workspace configuration file. Absolute paths, or paths relative to the home directory (~), are not allowed. This is to ensure that workspace configuration files are easy to share and to reduce the chance of them exposing sensitive information like user names or large directory hierarchies. Symbolic links are followed.

Note that this configuration only affects the resolution of dependencies which have already been found during the regular dependency resolution process of a project. For example, if a workspace resolution path resolves to a project that would otherwise not be part of the dependency tree of the current root project, it will not be added to the dependency tree. Also, transitive dependencies of resolved projects are not being followed.

Workspace Specification Versions

A workspace configuration must define a Specification Version by setting the specVersion property. UI5 CLI uses this information to detect whether the currently installed version is compatible with a workspace's configuration.

yaml
specVersion: "workspace/1.0"
+[...]

To use new features, a workspace configuration might need to update the specVersion property.

For a given Specification Version "workspace/MAJOR.MINOR"" we will increment:

  1. MAJOR when there are breaking changes that might require additional actions by the project's maintainer
  2. MINOR when adding new features that are fully backward-compatible

All changes are documented below.

Compatibility Matrix

Unless otherwise noted in the table below, UI5 CLI modules are backward-compatible.

VersionUI5 CLI Release
workspace/1.0v3.0.0+

Specification Version workspace/1.0

Initial version.

Specification Version workspace/1.0 configurations are compatible with UI5 CLI v3.0.0 and above.

`,42)])])}const g=a(n,[["render",l]]);export{d as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/Workspace.md.Cozjt-6A.lean.js b/packages/documentation/docs/.vitepress/dist/assets/Workspace.md.Cozjt-6A.lean.js new file mode 100644 index 0000000000..df3ad581c5 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/Workspace.md.Cozjt-6A.lean.js @@ -0,0 +1 @@ +import{_ as a,c as i,o as e,ae as t}from"./chunks/framework.CBTkueSR.js";const d=JSON.parse('{"title":"UI5 Workspaces","description":"","frontmatter":{},"headers":[],"relativePath":"Workspace.md","filePath":"Workspace.md"}'),n={name:"Workspace.md"};function l(p,s,o,r,h,c){return e(),i("div",null,[...s[0]||(s[0]=[t("",42)])])}const g=a(n,[["render",l]]);export{d as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/app.BXNXXhu6.js b/packages/documentation/docs/.vitepress/dist/assets/app.BXNXXhu6.js new file mode 100644 index 0000000000..9d0f2969e0 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/app.BXNXXhu6.js @@ -0,0 +1 @@ +import{t as p}from"./chunks/theme.CWt1tcxf.js";import{R as s,a0 as i,a1 as u,a2 as c,a3 as l,a4 as f,a5 as d,a6 as m,a7 as h,a8 as g,a9 as A,d as v,u as y,v as C,s as P,aa as b,ab as w,ac as R,ad as E}from"./chunks/framework.CBTkueSR.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=y();return C(()=>{P(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&b(),w(),R(),n.setup&&n.setup(),()=>E(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=_(),a=D();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function D(){return A(S)}function _(){let e=s;return h(a=>{let t=g(a),o=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),o=import(t)),s&&(e=!1),o},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/chunks/framework.CBTkueSR.js b/packages/documentation/docs/.vitepress/dist/assets/chunks/framework.CBTkueSR.js new file mode 100644 index 0000000000..aa65ec1f36 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/chunks/framework.CBTkueSR.js @@ -0,0 +1,18 @@ +/** +* @vue/shared v3.5.22 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function Ps(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const se={},Rt=[],ke=()=>{},Xr=()=>!1,en=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Is=e=>e.startsWith("onUpdate:"),fe=Object.assign,Ls=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Po=Object.prototype.hasOwnProperty,Q=(e,t)=>Po.call(e,t),B=Array.isArray,Mt=e=>In(e)==="[object Map]",Yr=e=>In(e)==="[object Set]",G=e=>typeof e=="function",le=e=>typeof e=="string",Qe=e=>typeof e=="symbol",ee=e=>e!==null&&typeof e=="object",zr=e=>(ee(e)||G(e))&&G(e.then)&&G(e.catch),Jr=Object.prototype.toString,In=e=>Jr.call(e),Io=e=>In(e).slice(8,-1),Qr=e=>In(e)==="[object Object]",Ns=e=>le(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Ot=Ps(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Ln=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Lo=/-\w/g,Ne=Ln(e=>e.replace(Lo,t=>t.slice(1).toUpperCase())),No=/\B([A-Z])/g,lt=Ln(e=>e.replace(No,"-$1").toLowerCase()),Nn=Ln(e=>e.charAt(0).toUpperCase()+e.slice(1)),vn=Ln(e=>e?`on${Nn(e)}`:""),rt=(e,t)=>!Object.is(e,t),Yn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},Fo=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Ho=e=>{const t=le(e)?Number(e):NaN;return isNaN(t)?e:t};let sr;const Fn=()=>sr||(sr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Fs(e){if(B(e)){const t={};for(let n=0;n{if(n){const s=n.split($o);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function Hs(e){let t="";if(le(e))t=e;else if(B(e))for(let n=0;n!!(e&&e.__v_isRef===!0),Uo=e=>le(e)?e:e==null?"":B(e)||ee(e)&&(e.toString===Jr||!G(e.toString))?ti(e)?Uo(e.value):JSON.stringify(e,ni,2):String(e),ni=(e,t)=>ti(t)?ni(e,t.value):Mt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],i)=>(n[zn(s,i)+" =>"]=r,n),{})}:Yr(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>zn(n))}:Qe(t)?zn(t):ee(t)&&!B(t)&&!Qr(t)?String(t):t,zn=(e,t="")=>{var n;return Qe(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.5.22 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let ge;class Bo{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=ge,!t&&ge&&(this.index=(ge.scopes||(ge.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0&&--this._on===0&&(ge=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n0)return;if(Wt){let t=Wt;for(Wt=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Vt;){let t=Vt;for(Vt=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function li(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function ci(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),js(s),qo(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function ys(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(ai(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function ai(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Kt)||(e.globalVersion=Kt,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!ys(e))))return;e.flags|=2;const t=e.dep,n=ne,s=He;ne=e,He=!0;try{li(e);const r=e.fn(e._value);(t.version===0||rt(r,e._value))&&(e.flags|=128,e._value=r,t.version++)}catch(r){throw t.version++,r}finally{ne=n,He=s,ci(e),e.flags&=-3}}function js(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)js(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function qo(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let He=!0;const fi=[];function Xe(){fi.push(He),He=!1}function Ye(){const e=fi.pop();He=e===void 0?!0:e}function rr(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=ne;ne=void 0;try{t()}finally{ne=n}}}let Kt=0;class Go{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Hn{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!ne||!He||ne===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==ne)n=this.activeLink=new Go(ne,this),ne.deps?(n.prevDep=ne.depsTail,ne.depsTail.nextDep=n,ne.depsTail=n):ne.deps=ne.depsTail=n,ui(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=ne.depsTail,n.nextDep=void 0,ne.depsTail.nextDep=n,ne.depsTail=n,ne.deps===n&&(ne.deps=s)}return n}trigger(t){this.version++,Kt++,this.notify(t)}notify(t){Ds();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{$s()}}}function ui(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)ui(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Sn=new WeakMap,pt=Symbol(""),_s=Symbol(""),qt=Symbol("");function ve(e,t,n){if(He&&ne){let s=Sn.get(e);s||Sn.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new Hn),r.map=s,r.key=n),r.track()}}function Ge(e,t,n,s,r,i){const l=Sn.get(e);if(!l){Kt++;return}const o=c=>{c&&c.trigger()};if(Ds(),t==="clear")l.forEach(o);else{const c=B(e),f=c&&Ns(n);if(c&&n==="length"){const a=Number(s);l.forEach((h,v)=>{(v==="length"||v===qt||!Qe(v)&&v>=a)&&o(h)})}else switch((n!==void 0||l.has(void 0))&&o(l.get(n)),f&&o(l.get(qt)),t){case"add":c?f&&o(l.get("length")):(o(l.get(pt)),Mt(e)&&o(l.get(_s)));break;case"delete":c||(o(l.get(pt)),Mt(e)&&o(l.get(_s)));break;case"set":Mt(e)&&o(l.get(pt));break}}$s()}function Xo(e,t){const n=Sn.get(e);return n&&n.get(t)}function Et(e){const t=J(e);return t===e?t:(ve(t,"iterate",qt),Pe(e)?t:t.map(ue))}function Dn(e){return ve(e=J(e),"iterate",qt),e}const Yo={__proto__:null,[Symbol.iterator](){return Qn(this,Symbol.iterator,ue)},concat(...e){return Et(this).concat(...e.map(t=>B(t)?Et(t):t))},entries(){return Qn(this,"entries",e=>(e[1]=ue(e[1]),e))},every(e,t){return Ue(this,"every",e,t,void 0,arguments)},filter(e,t){return Ue(this,"filter",e,t,n=>n.map(ue),arguments)},find(e,t){return Ue(this,"find",e,t,ue,arguments)},findIndex(e,t){return Ue(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Ue(this,"findLast",e,t,ue,arguments)},findLastIndex(e,t){return Ue(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Ue(this,"forEach",e,t,void 0,arguments)},includes(...e){return Zn(this,"includes",e)},indexOf(...e){return Zn(this,"indexOf",e)},join(e){return Et(this).join(e)},lastIndexOf(...e){return Zn(this,"lastIndexOf",e)},map(e,t){return Ue(this,"map",e,t,void 0,arguments)},pop(){return Dt(this,"pop")},push(...e){return Dt(this,"push",e)},reduce(e,...t){return ir(this,"reduce",e,t)},reduceRight(e,...t){return ir(this,"reduceRight",e,t)},shift(){return Dt(this,"shift")},some(e,t){return Ue(this,"some",e,t,void 0,arguments)},splice(...e){return Dt(this,"splice",e)},toReversed(){return Et(this).toReversed()},toSorted(e){return Et(this).toSorted(e)},toSpliced(...e){return Et(this).toSpliced(...e)},unshift(...e){return Dt(this,"unshift",e)},values(){return Qn(this,"values",ue)}};function Qn(e,t,n){const s=Dn(e),r=s[t]();return s!==e&&!Pe(e)&&(r._next=r.next,r.next=()=>{const i=r._next();return i.done||(i.value=n(i.value)),i}),r}const zo=Array.prototype;function Ue(e,t,n,s,r,i){const l=Dn(e),o=l!==e&&!Pe(e),c=l[t];if(c!==zo[t]){const h=c.apply(e,i);return o?ue(h):h}let f=n;l!==e&&(o?f=function(h,v){return n.call(this,ue(h),v,e)}:n.length>2&&(f=function(h,v){return n.call(this,h,v,e)}));const a=c.call(l,f,s);return o&&r?r(a):a}function ir(e,t,n,s){const r=Dn(e);let i=n;return r!==e&&(Pe(e)?n.length>3&&(i=function(l,o,c){return n.call(this,l,o,c,e)}):i=function(l,o,c){return n.call(this,l,ue(o),c,e)}),r[t](i,...s)}function Zn(e,t,n){const s=J(e);ve(s,"iterate",qt);const r=s[t](...n);return(r===-1||r===!1)&&ks(n[0])?(n[0]=J(n[0]),s[t](...n)):r}function Dt(e,t,n=[]){Xe(),Ds();const s=J(e)[t].apply(e,n);return $s(),Ye(),s}const Jo=Ps("__proto__,__v_isRef,__isVue"),di=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Qe));function Qo(e){Qe(e)||(e=String(e));const t=J(this);return ve(t,"has",e),t.hasOwnProperty(e)}class hi{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?cl:vi:i?mi:gi).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const l=B(t);if(!r){let c;if(l&&(c=Yo[n]))return c;if(n==="hasOwnProperty")return Qo}const o=Reflect.get(t,n,ae(t)?t:s);if((Qe(n)?di.has(n):Jo(n))||(r||ve(t,"get",n),i))return o;if(ae(o)){const c=l&&Ns(n)?o:o.value;return r&&ee(c)?Gt(c):c}return ee(o)?r?Gt(o):Lt(o):o}}class pi extends hi{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];if(!this._isShallow){const c=it(i);if(!Pe(s)&&!it(s)&&(i=J(i),s=J(s)),!B(t)&&ae(i)&&!ae(s))return c||(i.value=s),!0}const l=B(t)&&Ns(n)?Number(n)e,on=e=>Reflect.getPrototypeOf(e);function sl(e,t,n){return function(...s){const r=this.__v_raw,i=J(r),l=Mt(i),o=e==="entries"||e===Symbol.iterator&&l,c=e==="keys"&&l,f=r[e](...s),a=n?bs:t?xn:ue;return!t&&ve(i,"iterate",c?_s:pt),{next(){const{value:h,done:v}=f.next();return v?{value:h,done:v}:{value:o?[a(h[0]),a(h[1])]:a(h),done:v}},[Symbol.iterator](){return this}}}}function ln(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function rl(e,t){const n={get(r){const i=this.__v_raw,l=J(i),o=J(r);e||(rt(r,o)&&ve(l,"get",r),ve(l,"get",o));const{has:c}=on(l),f=t?bs:e?xn:ue;if(c.call(l,r))return f(i.get(r));if(c.call(l,o))return f(i.get(o));i!==l&&i.get(r)},get size(){const r=this.__v_raw;return!e&&ve(J(r),"iterate",pt),r.size},has(r){const i=this.__v_raw,l=J(i),o=J(r);return e||(rt(r,o)&&ve(l,"has",r),ve(l,"has",o)),r===o?i.has(r):i.has(r)||i.has(o)},forEach(r,i){const l=this,o=l.__v_raw,c=J(o),f=t?bs:e?xn:ue;return!e&&ve(c,"iterate",pt),o.forEach((a,h)=>r.call(i,f(a),f(h),l))}};return fe(n,e?{add:ln("add"),set:ln("set"),delete:ln("delete"),clear:ln("clear")}:{add(r){!t&&!Pe(r)&&!it(r)&&(r=J(r));const i=J(this);return on(i).has.call(i,r)||(i.add(r),Ge(i,"add",r,r)),this},set(r,i){!t&&!Pe(i)&&!it(i)&&(i=J(i));const l=J(this),{has:o,get:c}=on(l);let f=o.call(l,r);f||(r=J(r),f=o.call(l,r));const a=c.call(l,r);return l.set(r,i),f?rt(i,a)&&Ge(l,"set",r,i):Ge(l,"add",r,i),this},delete(r){const i=J(this),{has:l,get:o}=on(i);let c=l.call(i,r);c||(r=J(r),c=l.call(i,r)),o&&o.call(i,r);const f=i.delete(r);return c&&Ge(i,"delete",r,void 0),f},clear(){const r=J(this),i=r.size!==0,l=r.clear();return i&&Ge(r,"clear",void 0,void 0),l}}),["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=sl(r,e,t)}),n}function Vs(e,t){const n=rl(e,t);return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(Q(n,r)&&r in s?n:s,r,i)}const il={get:Vs(!1,!1)},ol={get:Vs(!1,!0)},ll={get:Vs(!0,!1)};const gi=new WeakMap,mi=new WeakMap,vi=new WeakMap,cl=new WeakMap;function al(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function fl(e){return e.__v_skip||!Object.isExtensible(e)?0:al(Io(e))}function Lt(e){return it(e)?e:Ws(e,!1,el,il,gi)}function ul(e){return Ws(e,!1,nl,ol,mi)}function Gt(e){return Ws(e,!0,tl,ll,vi)}function Ws(e,t,n,s,r){if(!ee(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=fl(e);if(i===0)return e;const l=r.get(e);if(l)return l;const o=new Proxy(e,i===2?s:n);return r.set(e,o),o}function gt(e){return it(e)?gt(e.__v_raw):!!(e&&e.__v_isReactive)}function it(e){return!!(e&&e.__v_isReadonly)}function Pe(e){return!!(e&&e.__v_isShallow)}function ks(e){return e?!!e.__v_raw:!1}function J(e){const t=e&&e.__v_raw;return t?J(t):e}function yn(e){return!Q(e,"__v_skip")&&Object.isExtensible(e)&&Zr(e,"__v_skip",!0),e}const ue=e=>ee(e)?Lt(e):e,xn=e=>ee(e)?Gt(e):e;function ae(e){return e?e.__v_isRef===!0:!1}function mt(e){return yi(e,!1)}function Ie(e){return yi(e,!0)}function yi(e,t){return ae(e)?e:new dl(e,t)}class dl{constructor(t,n){this.dep=new Hn,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:J(t),this._value=n?t:ue(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||Pe(t)||it(t);t=s?t:J(t),rt(t,n)&&(this._rawValue=t,this._value=s?t:ue(t),this.dep.trigger())}}function Us(e){return ae(e)?e.value:e}function ce(e){return G(e)?e():Us(e)}const hl={get:(e,t,n)=>t==="__v_raw"?e:Us(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return ae(r)&&!ae(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function _i(e){return gt(e)?e:new Proxy(e,hl)}class pl{constructor(t){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new Hn,{get:s,set:r}=t(n.track.bind(n),n.trigger.bind(n));this._get=s,this._set=r}get value(){return this._value=this._get()}set value(t){this._set(t)}}function gl(e){return new pl(e)}class ml{constructor(t,n,s){this._object=t,this._key=n,this._defaultValue=s,this.__v_isRef=!0,this._value=void 0}get value(){const t=this._object[this._key];return this._value=t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return Xo(J(this._object),this._key)}}class vl{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function yl(e,t,n){return ae(e)?e:G(e)?new vl(e):ee(e)&&arguments.length>1?_l(e,t,n):mt(e)}function _l(e,t,n){const s=e[t];return ae(s)?s:new ml(e,t,n)}class bl{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Hn(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Kt-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&ne!==this)return oi(this,!0),!0}get value(){const t=this.dep.track();return ai(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function wl(e,t,n=!1){let s,r;return G(e)?s=e:(s=e.get,r=e.set),new bl(s,r,n)}const cn={},Tn=new WeakMap;let dt;function Sl(e,t=!1,n=dt){if(n){let s=Tn.get(n);s||Tn.set(n,s=[]),s.push(e)}}function xl(e,t,n=se){const{immediate:s,deep:r,once:i,scheduler:l,augmentJob:o,call:c}=n,f=g=>r?g:Pe(g)||r===!1||r===0?st(g,1):st(g);let a,h,v,y,C=!1,I=!1;if(ae(e)?(h=()=>e.value,C=Pe(e)):gt(e)?(h=()=>f(e),C=!0):B(e)?(I=!0,C=e.some(g=>gt(g)||Pe(g)),h=()=>e.map(g=>{if(ae(g))return g.value;if(gt(g))return f(g);if(G(g))return c?c(g,2):g()})):G(e)?t?h=c?()=>c(e,2):e:h=()=>{if(v){Xe();try{v()}finally{Ye()}}const g=dt;dt=a;try{return c?c(e,3,[y]):e(y)}finally{dt=g}}:h=ke,t&&r){const g=h,O=r===!0?1/0:r;h=()=>st(g(),O)}const K=si(),H=()=>{a.stop(),K&&K.active&&Ls(K.effects,a)};if(i&&t){const g=t;t=(...O)=>{g(...O),H()}}let V=I?new Array(e.length).fill(cn):cn;const p=g=>{if(!(!(a.flags&1)||!a.dirty&&!g))if(t){const O=a.run();if(r||C||(I?O.some((W,R)=>rt(W,V[R])):rt(O,V))){v&&v();const W=dt;dt=a;try{const R=[O,V===cn?void 0:I&&V[0]===cn?[]:V,y];V=O,c?c(t,3,R):t(...R)}finally{dt=W}}}else a.run()};return o&&o(p),a=new ri(h),a.scheduler=l?()=>l(p,!1):p,y=g=>Sl(g,!1,a),v=a.onStop=()=>{const g=Tn.get(a);if(g){if(c)c(g,4);else for(const O of g)O();Tn.delete(a)}},t?s?p(!0):V=a.run():l?l(p.bind(null,!0),!0):a.run(),H.pause=a.pause.bind(a),H.resume=a.resume.bind(a),H.stop=H,H}function st(e,t=1/0,n){if(t<=0||!ee(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,ae(e))st(e.value,t,n);else if(B(e))for(let s=0;s{st(s,t,n)});else if(Qr(e)){for(const s in e)st(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&st(e[s],t,n)}return e}/** +* @vue/runtime-core v3.5.22 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function tn(e,t,n,s){try{return s?e(...s):e()}catch(r){$n(r,t,n)}}function De(e,t,n,s){if(G(e)){const r=tn(e,t,n,s);return r&&zr(r)&&r.catch(i=>{$n(i,t,n)}),r}if(B(e)){const r=[];for(let i=0;i>>1,r=be[s],i=Xt(r);i=Xt(n)?be.push(e):be.splice(El(t),0,e),e.flags|=1,wi()}}function wi(){En||(En=bi.then(Si))}function Cl(e){B(e)?Pt.push(...e):tt&&e.id===-1?tt.splice(At+1,0,e):e.flags&1||(Pt.push(e),e.flags|=1),wi()}function or(e,t,n=Ve+1){for(;nXt(n)-Xt(s));if(Pt.length=0,tt){tt.push(...t);return}for(tt=t,At=0;Ate.id==null?e.flags&2?-1:1/0:e.id;function Si(e){try{for(Ve=0;Ve{s._d&&On(-1);const i=An(t);let l;try{l=e(...r)}finally{An(i),s._d&&On(1)}return l};return s._n=!0,s._c=!0,s._d=!0,s}function We(e,t,n,s){const r=e.dirs,i=t&&t.dirs;for(let l=0;le.__isTeleport,qe=Symbol("_leaveCb"),an=Symbol("_enterCb");function Ml(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return Nt(()=>{e.isMounted=!0}),Li(()=>{e.isUnmounting=!0}),e}const Re=[Function,Array],Ei={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Re,onEnter:Re,onAfterEnter:Re,onEnterCancelled:Re,onBeforeLeave:Re,onLeave:Re,onAfterLeave:Re,onLeaveCancelled:Re,onBeforeAppear:Re,onAppear:Re,onAfterAppear:Re,onAppearCancelled:Re},Ci=e=>{const t=e.subTree;return t.component?Ci(t.component):t},Ol={name:"BaseTransition",props:Ei,setup(e,{slots:t}){const n=xt(),s=Ml();return()=>{const r=t.default&&Mi(t.default(),!0);if(!r||!r.length)return;const i=Ai(r),l=J(e),{mode:o}=l;if(s.isLeaving)return es(i);const c=lr(i);if(!c)return es(i);let f=ws(c,l,s,n,h=>f=h);c.type!==de&&Yt(c,f);let a=n.subTree&&lr(n.subTree);if(a&&a.type!==de&&!ht(a,c)&&Ci(n).type!==de){let h=ws(a,l,s,n);if(Yt(a,h),o==="out-in"&&c.type!==de)return s.isLeaving=!0,h.afterLeave=()=>{s.isLeaving=!1,n.job.flags&8||n.update(),delete h.afterLeave,a=void 0},es(i);o==="in-out"&&c.type!==de?h.delayLeave=(v,y,C)=>{const I=Ri(s,a);I[String(a.key)]=a,v[qe]=()=>{y(),v[qe]=void 0,delete f.delayedLeave,a=void 0},f.delayedLeave=()=>{C(),delete f.delayedLeave,a=void 0}}:a=void 0}else a&&(a=void 0);return i}}};function Ai(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==de){t=n;break}}return t}const Pl=Ol;function Ri(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function ws(e,t,n,s,r){const{appear:i,mode:l,persisted:o=!1,onBeforeEnter:c,onEnter:f,onAfterEnter:a,onEnterCancelled:h,onBeforeLeave:v,onLeave:y,onAfterLeave:C,onLeaveCancelled:I,onBeforeAppear:K,onAppear:H,onAfterAppear:V,onAppearCancelled:p}=t,g=String(e.key),O=Ri(n,e),W=(T,P)=>{T&&De(T,s,9,P)},R=(T,P)=>{const E=P[1];W(T,P),B(T)?T.every(_=>_.length<=1)&&E():T.length<=1&&E()},U={mode:l,persisted:o,beforeEnter(T){let P=c;if(!n.isMounted)if(i)P=K||c;else return;T[qe]&&T[qe](!0);const E=O[g];E&&ht(e,E)&&E.el[qe]&&E.el[qe](),W(P,[T])},enter(T){let P=f,E=a,_=h;if(!n.isMounted)if(i)P=H||f,E=V||a,_=p||h;else return;let N=!1;const Y=T[an]=re=>{N||(N=!0,re?W(_,[T]):W(E,[T]),U.delayedLeave&&U.delayedLeave(),T[an]=void 0)};P?R(P,[T,Y]):Y()},leave(T,P){const E=String(e.key);if(T[an]&&T[an](!0),n.isUnmounting)return P();W(v,[T]);let _=!1;const N=T[qe]=Y=>{_||(_=!0,P(),Y?W(I,[T]):W(C,[T]),T[qe]=void 0,O[E]===e&&delete O[E])};O[E]=e,y?R(y,[T,N]):N()},clone(T){const P=ws(T,t,n,s,r);return r&&r(P),P}};return U}function es(e){if(Vn(e))return e=ot(e),e.children=null,e}function lr(e){if(!Vn(e))return Ti(e.type)&&e.children?Ai(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&G(n.default))return n.default()}}function Yt(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Yt(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Mi(e,t=!1,n){let s=[],r=0;for(let i=0;i1)for(let i=0;iIt(C,t&&(B(t)?t[I]:t),n,s,r));return}if(vt(s)&&!r){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&It(e,t,n,s.component.subTree);return}const i=s.shapeFlag&4?Xs(s.component):s.el,l=r?null:i,{i:o,r:c}=e,f=t&&t.r,a=o.refs===se?o.refs={}:o.refs,h=o.setupState,v=J(h),y=h===se?Xr:C=>Q(v,C);if(f!=null&&f!==c){if(cr(t),le(f))a[f]=null,y(f)&&(h[f]=null);else if(ae(f)){f.value=null;const C=t;C.k&&(a[C.k]=null)}}if(G(c))tn(c,o,12,[l,a]);else{const C=le(c),I=ae(c);if(C||I){const K=()=>{if(e.f){const H=C?y(c)?h[c]:a[c]:c.value;if(r)B(H)&&Ls(H,i);else if(B(H))H.includes(i)||H.push(i);else if(C)a[c]=[i],y(c)&&(h[c]=a[c]);else{const V=[i];c.value=V,e.k&&(a[e.k]=V)}}else C?(a[c]=l,y(c)&&(h[c]=l)):I&&(c.value=l,e.k&&(a[e.k]=l))};if(l){const H=()=>{K(),Rn.delete(e)};H.id=-1,Rn.set(e,H),Ce(H,n)}else cr(e),K()}}}function cr(e){const t=Rn.get(e);t&&(t.flags|=8,Rn.delete(e))}let ar=!1;const Ct=()=>{ar||(console.error("Hydration completed but contains mismatches."),ar=!0)},Il=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",Ll=e=>e.namespaceURI.includes("MathML"),fn=e=>{if(e.nodeType===1){if(Il(e))return"svg";if(Ll(e))return"mathml"}},un=e=>e.nodeType===8;function Nl(e){const{mt:t,p:n,o:{patchProp:s,createText:r,nextSibling:i,parentNode:l,remove:o,insert:c,createComment:f}}=e,a=(p,g)=>{if(!g.hasChildNodes()){n(null,p,g),Cn(),g._vnode=p;return}h(g.firstChild,p,null,null,null),Cn(),g._vnode=p},h=(p,g,O,W,R,U=!1)=>{U=U||!!g.dynamicChildren;const T=un(p)&&p.data==="[",P=()=>I(p,g,O,W,R,T),{type:E,ref:_,shapeFlag:N,patchFlag:Y}=g;let re=p.nodeType;g.el=p,Y===-2&&(U=!1,g.dynamicChildren=null);let $=null;switch(E){case bt:re!==3?g.children===""?(c(g.el=r(""),l(p),p),$=p):$=P():(p.data!==g.children&&(Ct(),p.data=g.children),$=i(p));break;case de:V(p)?($=i(p),H(g.el=p.content.firstChild,p,O)):re!==8||T?$=P():$=i(p);break;case Ut:if(T&&(p=i(p),re=p.nodeType),re===1||re===3){$=p;const X=!g.children.length;for(let D=0;D{U=U||!!g.dynamicChildren;const{type:T,props:P,patchFlag:E,shapeFlag:_,dirs:N,transition:Y}=g,re=T==="input"||T==="option";if(re||E!==-1){N&&We(g,null,O,"created");let $=!1;if(V(p)){$=zi(null,Y)&&O&&O.vnode.props&&O.vnode.props.appear;const D=p.content.firstChild;if($){const oe=D.getAttribute("class");oe&&(D.$cls=oe),Y.beforeEnter(D)}H(D,p,O),g.el=p=D}if(_&16&&!(P&&(P.innerHTML||P.textContent))){let D=y(p.firstChild,g,p,O,W,R,U);for(;D;){dn(p,1)||Ct();const oe=D;D=D.nextSibling,o(oe)}}else if(_&8){let D=g.children;D[0]===` +`&&(p.tagName==="PRE"||p.tagName==="TEXTAREA")&&(D=D.slice(1)),p.textContent!==D&&(dn(p,0)||Ct(),p.textContent=g.children)}if(P){if(re||!U||E&48){const D=p.tagName.includes("-");for(const oe in P)(re&&(oe.endsWith("value")||oe==="indeterminate")||en(oe)&&!Ot(oe)||oe[0]==="."||D)&&s(p,oe,null,P[oe],void 0,O)}else if(P.onClick)s(p,"onClick",null,P.onClick,void 0,O);else if(E&4&>(P.style))for(const D in P.style)P.style[D]}let X;(X=P&&P.onVnodeBeforeMount)&&Me(X,O,g),N&&We(g,null,O,"beforeMount"),((X=P&&P.onVnodeMounted)||N||$)&&ro(()=>{X&&Me(X,O,g),$&&Y.enter(p),N&&We(g,null,O,"mounted")},W)}return p.nextSibling},y=(p,g,O,W,R,U,T)=>{T=T||!!g.dynamicChildren;const P=g.children,E=P.length;for(let _=0;_{const{slotScopeIds:T}=g;T&&(R=R?R.concat(T):T);const P=l(p),E=y(i(p),g,P,O,W,R,U);return E&&un(E)&&E.data==="]"?i(g.anchor=E):(Ct(),c(g.anchor=f("]"),P,E),E)},I=(p,g,O,W,R,U)=>{if(dn(p.parentElement,1)||Ct(),g.el=null,U){const E=K(p);for(;;){const _=i(p);if(_&&_!==E)o(_);else break}}const T=i(p),P=l(p);return o(p),n(null,g,P,T,O,W,fn(P),R),O&&(O.vnode.el=g.el,no(O,g.el)),T},K=(p,g="[",O="]")=>{let W=0;for(;p;)if(p=i(p),p&&un(p)&&(p.data===g&&W++,p.data===O)){if(W===0)return i(p);W--}return p},H=(p,g,O)=>{const W=g.parentNode;W&&W.replaceChild(p,g);let R=O;for(;R;)R.vnode.el===g&&(R.vnode.el=R.subTree.el=p),R=R.parent},V=p=>p.nodeType===1&&p.tagName==="TEMPLATE";return[a,h]}const fr="data-allow-mismatch",Fl={0:"text",1:"children",2:"class",3:"style",4:"attribute"};function dn(e,t){if(t===0||t===1)for(;e&&!e.hasAttribute(fr);)e=e.parentElement;const n=e&&e.getAttribute(fr);if(n==null)return!1;if(n==="")return!0;{const s=n.split(",");return t===0&&s.includes("children")?!0:s.includes(Fl[t])}}Fn().requestIdleCallback;Fn().cancelIdleCallback;const vt=e=>!!e.type.__asyncLoader,Vn=e=>e.type.__isKeepAlive;function Hl(e,t){Ii(e,"a",t)}function Dl(e,t){Ii(e,"da",t)}function Ii(e,t,n=ye){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(Wn(t,s,n),n){let r=n.parent;for(;r&&r.parent;)Vn(r.parent.vnode)&&$l(s,t,n,r),r=r.parent}}function $l(e,t,n,s){const r=Wn(t,e,s,!0);kn(()=>{Ls(s[t],r)},n)}function Wn(e,t,n=ye,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...l)=>{Xe();const o=nn(n),c=De(t,n,e,l);return o(),Ye(),c});return s?r.unshift(i):r.push(i),i}}const Ze=e=>(t,n=ye)=>{(!Qt||e==="sp")&&Wn(e,(...s)=>t(...s),n)},jl=Ze("bm"),Nt=Ze("m"),Vl=Ze("bu"),Wl=Ze("u"),Li=Ze("bum"),kn=Ze("um"),kl=Ze("sp"),Ul=Ze("rtg"),Bl=Ze("rtc");function Kl(e,t=ye){Wn("ec",e,t)}const Ni="components";function pf(e,t){return Hi(Ni,e,!0,t)||e}const Fi=Symbol.for("v-ndc");function gf(e){return le(e)?Hi(Ni,e,!1)||e:e||Fi}function Hi(e,t,n=!0,s=!1){const r=Se||ye;if(r){const i=r.type;{const o=Oc(i,!1);if(o&&(o===t||o===Ne(t)||o===Nn(Ne(t))))return i}const l=ur(r[e]||i[e],t)||ur(r.appContext[e],t);return!l&&s?i:l}}function ur(e,t){return e&&(e[t]||e[Ne(t)]||e[Nn(Ne(t))])}function mf(e,t,n,s){let r;const i=n,l=B(e);if(l||le(e)){const o=l&>(e);let c=!1,f=!1;o&&(c=!Pe(e),f=it(e),e=Dn(e)),r=new Array(e.length);for(let a=0,h=e.length;at(o,c,void 0,i));else{const o=Object.keys(e);r=new Array(o.length);for(let c=0,f=o.length;c0;return t!=="default"&&(n.name=t),Cs(),As(we,null,[he("slot",n,s&&s())],f?-2:64)}let i=e[t];i&&i._c&&(i._d=!1),Cs();const l=i&&Di(i(n)),o=n.key||l&&l.key,c=As(we,{key:(o&&!Qe(o)?o:`_${t}`)+(!l&&s?"_fb":"")},l||(s?s():[]),l&&e._===1?64:-2);return!r&&c.scopeId&&(c.slotScopeIds=[c.scopeId+"-s"]),i&&i._c&&(i._d=!0),c}function Di(e){return e.some(t=>Jt(t)?!(t.type===de||t.type===we&&!Di(t.children)):!0)?e:null}function yf(e,t){const n={};for(const s in e)n[/[A-Z]/.test(s)?`on:${s}`:vn(s)]=e[s];return n}const Ss=e=>e?ao(e)?Xs(e):Ss(e.parent):null,kt=fe(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Ss(e.parent),$root:e=>Ss(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>ji(e),$forceUpdate:e=>e.f||(e.f=()=>{Bs(e.update)}),$nextTick:e=>e.n||(e.n=jn.bind(e.proxy)),$watch:e=>hc.bind(e)}),ts=(e,t)=>e!==se&&!e.__isScriptSetup&&Q(e,t),ql={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:l,type:o,appContext:c}=e;let f;if(t[0]!=="$"){const y=l[t];if(y!==void 0)switch(y){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(ts(s,t))return l[t]=1,s[t];if(r!==se&&Q(r,t))return l[t]=2,r[t];if((f=e.propsOptions[0])&&Q(f,t))return l[t]=3,i[t];if(n!==se&&Q(n,t))return l[t]=4,n[t];xs&&(l[t]=0)}}const a=kt[t];let h,v;if(a)return t==="$attrs"&&ve(e.attrs,"get",""),a(e);if((h=o.__cssModules)&&(h=h[t]))return h;if(n!==se&&Q(n,t))return l[t]=4,n[t];if(v=c.config.globalProperties,Q(v,t))return v[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return ts(r,t)?(r[t]=n,!0):s!==se&&Q(s,t)?(s[t]=n,!0):Q(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,propsOptions:i,type:l}},o){let c,f;return!!(n[o]||e!==se&&o[0]!=="$"&&Q(e,o)||ts(t,o)||(c=i[0])&&Q(c,o)||Q(s,o)||Q(kt,o)||Q(r.config.globalProperties,o)||(f=l.__cssModules)&&f[o])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Q(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function _f(){return Gl().slots}function Gl(e){const t=xt();return t.setupContext||(t.setupContext=uo(t))}function dr(e){return B(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let xs=!0;function Xl(e){const t=ji(e),n=e.proxy,s=e.ctx;xs=!1,t.beforeCreate&&hr(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:l,watch:o,provide:c,inject:f,created:a,beforeMount:h,mounted:v,beforeUpdate:y,updated:C,activated:I,deactivated:K,beforeDestroy:H,beforeUnmount:V,destroyed:p,unmounted:g,render:O,renderTracked:W,renderTriggered:R,errorCaptured:U,serverPrefetch:T,expose:P,inheritAttrs:E,components:_,directives:N,filters:Y}=t;if(f&&Yl(f,s,null),l)for(const X in l){const D=l[X];G(D)&&(s[X]=D.bind(n))}if(r){const X=r.call(n,n);ee(X)&&(e.data=Lt(X))}if(xs=!0,i)for(const X in i){const D=i[X],oe=G(D)?D.bind(n,n):G(D.get)?D.get.bind(n,n):ke,sn=!G(D)&&G(D.set)?D.set.bind(n):ke,ct=ie({get:oe,set:sn});Object.defineProperty(s,X,{enumerable:!0,configurable:!0,get:()=>ct.value,set:$e=>ct.value=$e})}if(o)for(const X in o)$i(o[X],s,n,X);if(c){const X=G(c)?c.call(n):c;Reflect.ownKeys(X).forEach(D=>{tc(D,X[D])})}a&&hr(a,e,"c");function $(X,D){B(D)?D.forEach(oe=>X(oe.bind(n))):D&&X(D.bind(n))}if($(jl,h),$(Nt,v),$(Vl,y),$(Wl,C),$(Hl,I),$(Dl,K),$(Kl,U),$(Bl,W),$(Ul,R),$(Li,V),$(kn,g),$(kl,T),B(P))if(P.length){const X=e.exposed||(e.exposed={});P.forEach(D=>{Object.defineProperty(X,D,{get:()=>n[D],set:oe=>n[D]=oe,enumerable:!0})})}else e.exposed||(e.exposed={});O&&e.render===ke&&(e.render=O),E!=null&&(e.inheritAttrs=E),_&&(e.components=_),N&&(e.directives=N),T&&Pi(e)}function Yl(e,t,n=ke){B(e)&&(e=Ts(e));for(const s in e){const r=e[s];let i;ee(r)?"default"in r?i=_t(r.from||s,r.default,!0):i=_t(r.from||s):i=_t(r),ae(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:l=>i.value=l}):t[s]=i}}function hr(e,t,n){De(B(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function $i(e,t,n,s){let r=s.includes(".")?eo(n,s):()=>n[s];if(le(e)){const i=t[e];G(i)&&Le(r,i)}else if(G(e))Le(r,e.bind(n));else if(ee(e))if(B(e))e.forEach(i=>$i(i,t,n,s));else{const i=G(e.handler)?e.handler.bind(n):t[e.handler];G(i)&&Le(r,i,e)}}function ji(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:l}}=e.appContext,o=i.get(t);let c;return o?c=o:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(f=>Mn(c,f,l,!0)),Mn(c,t,l)),ee(t)&&i.set(t,c),c}function Mn(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&Mn(e,i,n,!0),r&&r.forEach(l=>Mn(e,l,n,!0));for(const l in t)if(!(s&&l==="expose")){const o=zl[l]||n&&n[l];e[l]=o?o(e[l],t[l]):t[l]}return e}const zl={data:pr,props:gr,emits:gr,methods:jt,computed:jt,beforeCreate:_e,created:_e,beforeMount:_e,mounted:_e,beforeUpdate:_e,updated:_e,beforeDestroy:_e,beforeUnmount:_e,destroyed:_e,unmounted:_e,activated:_e,deactivated:_e,errorCaptured:_e,serverPrefetch:_e,components:jt,directives:jt,watch:Ql,provide:pr,inject:Jl};function pr(e,t){return t?e?function(){return fe(G(e)?e.call(this,this):e,G(t)?t.call(this,this):t)}:t:e}function Jl(e,t){return jt(Ts(e),Ts(t))}function Ts(e){if(B(e)){const t={};for(let n=0;n1)return n&&G(t)?t.call(s&&s.proxy):t}}function Wi(){return!!(xt()||yt)}const ki={},Ui=()=>Object.create(ki),Bi=e=>Object.getPrototypeOf(e)===ki;function nc(e,t,n,s=!1){const r={},i=Ui();e.propsDefaults=Object.create(null),Ki(e,t,r,i);for(const l in e.propsOptions[0])l in r||(r[l]=void 0);n?e.props=s?r:ul(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function sc(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:l}}=e,o=J(r),[c]=e.propsOptions;let f=!1;if((s||l>0)&&!(l&16)){if(l&8){const a=e.vnode.dynamicProps;for(let h=0;h{c=!0;const[v,y]=qi(h,t,!0);fe(l,v),y&&o.push(...y)};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}if(!i&&!c)return ee(e)&&s.set(e,Rt),Rt;if(B(i))for(let a=0;ae==="_"||e==="_ctx"||e==="$stable",qs=e=>B(e)?e.map(Oe):[Oe(e)],ic=(e,t,n)=>{if(t._n)return t;const s=Al((...r)=>qs(t(...r)),n);return s._c=!1,s},Gi=(e,t,n)=>{const s=e._ctx;for(const r in e){if(Ks(r))continue;const i=e[r];if(G(i))t[r]=ic(r,i,s);else if(i!=null){const l=qs(i);t[r]=()=>l}}},Xi=(e,t)=>{const n=qs(t);e.slots.default=()=>n},Yi=(e,t,n)=>{for(const s in t)(n||!Ks(s))&&(e[s]=t[s])},oc=(e,t,n)=>{const s=e.slots=Ui();if(e.vnode.shapeFlag&32){const r=t._;r?(Yi(s,t,n),n&&Zr(s,"_",r,!0)):Gi(t,s)}else t&&Xi(e,t)},lc=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,l=se;if(s.shapeFlag&32){const o=t._;o?n&&o===1?i=!1:Yi(r,t,n):(i=!t.$stable,Gi(t,r)),l=t}else t&&(Xi(e,t),l={default:1});if(i)for(const o in r)!Ks(o)&&l[o]==null&&delete r[o]},Ce=ro;function cc(e){return ac(e,Nl)}function ac(e,t){const n=Fn();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:l,createText:o,createComment:c,setText:f,setElementText:a,parentNode:h,nextSibling:v,setScopeId:y=ke,insertStaticContent:C}=e,I=(u,d,m,S=null,b=null,w=null,L=void 0,M=null,A=!!d.dynamicChildren)=>{if(u===d)return;u&&!ht(u,d)&&(S=rn(u),$e(u,b,w,!0),u=null),d.patchFlag===-2&&(A=!1,d.dynamicChildren=null);const{type:x,ref:k,shapeFlag:F}=d;switch(x){case bt:K(u,d,m,S);break;case de:H(u,d,m,S);break;case Ut:u==null&&V(d,m,S,L);break;case we:_(u,d,m,S,b,w,L,M,A);break;default:F&1?O(u,d,m,S,b,w,L,M,A):F&6?N(u,d,m,S,b,w,L,M,A):(F&64||F&128)&&x.process(u,d,m,S,b,w,L,M,A,Tt)}k!=null&&b?It(k,u&&u.ref,w,d||u,!d):k==null&&u&&u.ref!=null&&It(u.ref,null,w,u,!0)},K=(u,d,m,S)=>{if(u==null)s(d.el=o(d.children),m,S);else{const b=d.el=u.el;d.children!==u.children&&f(b,d.children)}},H=(u,d,m,S)=>{u==null?s(d.el=c(d.children||""),m,S):d.el=u.el},V=(u,d,m,S)=>{[u.el,u.anchor]=C(u.children,d,m,S,u.el,u.anchor)},p=({el:u,anchor:d},m,S)=>{let b;for(;u&&u!==d;)b=v(u),s(u,m,S),u=b;s(d,m,S)},g=({el:u,anchor:d})=>{let m;for(;u&&u!==d;)m=v(u),r(u),u=m;r(d)},O=(u,d,m,S,b,w,L,M,A)=>{d.type==="svg"?L="svg":d.type==="math"&&(L="mathml"),u==null?W(d,m,S,b,w,L,M,A):T(u,d,b,w,L,M,A)},W=(u,d,m,S,b,w,L,M)=>{let A,x;const{props:k,shapeFlag:F,transition:j,dirs:q}=u;if(A=u.el=l(u.type,w,k&&k.is,k),F&8?a(A,u.children):F&16&&U(u.children,A,null,S,b,ns(u,w),L,M),q&&We(u,null,S,"created"),R(A,u,u.scopeId,L,S),k){for(const te in k)te!=="value"&&!Ot(te)&&i(A,te,null,k[te],w,S);"value"in k&&i(A,"value",null,k.value,w),(x=k.onVnodeBeforeMount)&&Me(x,S,u)}q&&We(u,null,S,"beforeMount");const z=zi(b,j);z&&j.beforeEnter(A),s(A,d,m),((x=k&&k.onVnodeMounted)||z||q)&&Ce(()=>{x&&Me(x,S,u),z&&j.enter(A),q&&We(u,null,S,"mounted")},b)},R=(u,d,m,S,b)=>{if(m&&y(u,m),S)for(let w=0;w{for(let x=A;x{const M=d.el=u.el;let{patchFlag:A,dynamicChildren:x,dirs:k}=d;A|=u.patchFlag&16;const F=u.props||se,j=d.props||se;let q;if(m&&at(m,!1),(q=j.onVnodeBeforeUpdate)&&Me(q,m,d,u),k&&We(d,u,m,"beforeUpdate"),m&&at(m,!0),(F.innerHTML&&j.innerHTML==null||F.textContent&&j.textContent==null)&&a(M,""),x?P(u.dynamicChildren,x,M,m,S,ns(d,b),w):L||D(u,d,M,null,m,S,ns(d,b),w,!1),A>0){if(A&16)E(M,F,j,m,b);else if(A&2&&F.class!==j.class&&i(M,"class",null,j.class,b),A&4&&i(M,"style",F.style,j.style,b),A&8){const z=d.dynamicProps;for(let te=0;te{q&&Me(q,m,d,u),k&&We(d,u,m,"updated")},S)},P=(u,d,m,S,b,w,L)=>{for(let M=0;M{if(d!==m){if(d!==se)for(const w in d)!Ot(w)&&!(w in m)&&i(u,w,d[w],null,b,S);for(const w in m){if(Ot(w))continue;const L=m[w],M=d[w];L!==M&&w!=="value"&&i(u,w,M,L,b,S)}"value"in m&&i(u,"value",d.value,m.value,b)}},_=(u,d,m,S,b,w,L,M,A)=>{const x=d.el=u?u.el:o(""),k=d.anchor=u?u.anchor:o("");let{patchFlag:F,dynamicChildren:j,slotScopeIds:q}=d;q&&(M=M?M.concat(q):q),u==null?(s(x,m,S),s(k,m,S),U(d.children||[],m,k,b,w,L,M,A)):F>0&&F&64&&j&&u.dynamicChildren?(P(u.dynamicChildren,j,m,b,w,L,M),(d.key!=null||b&&d===b.subTree)&&Ji(u,d,!0)):D(u,d,m,k,b,w,L,M,A)},N=(u,d,m,S,b,w,L,M,A)=>{d.slotScopeIds=M,u==null?d.shapeFlag&512?b.ctx.activate(d,m,S,L,A):Y(d,m,S,b,w,L,A):re(u,d,A)},Y=(u,d,m,S,b,w,L)=>{const M=u.component=Cc(u,S,b);if(Vn(u)&&(M.ctx.renderer=Tt),Ac(M,!1,L),M.asyncDep){if(b&&b.registerDep(M,$,L),!u.el){const A=M.subTree=he(de);H(null,A,d,m),u.placeholder=A.el}}else $(M,u,d,m,b,w,L)},re=(u,d,m)=>{const S=d.component=u.component;if(_c(u,d,m))if(S.asyncDep&&!S.asyncResolved){X(S,d,m);return}else S.next=d,S.update();else d.el=u.el,S.vnode=d},$=(u,d,m,S,b,w,L)=>{const M=()=>{if(u.isMounted){let{next:F,bu:j,u:q,parent:z,vnode:te}=u;{const Te=Qi(u);if(Te){F&&(F.el=te.el,X(u,F,L)),Te.asyncDep.then(()=>{u.isUnmounted||M()});return}}let Z=F,xe;at(u,!1),F?(F.el=te.el,X(u,F,L)):F=te,j&&Yn(j),(xe=F.props&&F.props.onVnodeBeforeUpdate)&&Me(xe,z,F,te),at(u,!0);const pe=ss(u),Fe=u.subTree;u.subTree=pe,I(Fe,pe,h(Fe.el),rn(Fe),u,b,w),F.el=pe.el,Z===null&&no(u,pe.el),q&&Ce(q,b),(xe=F.props&&F.props.onVnodeUpdated)&&Ce(()=>Me(xe,z,F,te),b)}else{let F;const{el:j,props:q}=d,{bm:z,m:te,parent:Z,root:xe,type:pe}=u,Fe=vt(d);if(at(u,!1),z&&Yn(z),!Fe&&(F=q&&q.onVnodeBeforeMount)&&Me(F,Z,d),at(u,!0),j&&Xn){const Te=()=>{u.subTree=ss(u),Xn(j,u.subTree,u,b,null)};Fe&&pe.__asyncHydrate?pe.__asyncHydrate(j,u,Te):Te()}else{xe.ce&&xe.ce._def.shadowRoot!==!1&&xe.ce._injectChildStyle(pe);const Te=u.subTree=ss(u);I(null,Te,m,S,u,b,w),d.el=Te.el}if(te&&Ce(te,b),!Fe&&(F=q&&q.onVnodeMounted)){const Te=d;Ce(()=>Me(F,Z,Te),b)}(d.shapeFlag&256||Z&&vt(Z.vnode)&&Z.vnode.shapeFlag&256)&&u.a&&Ce(u.a,b),u.isMounted=!0,d=m=S=null}};u.scope.on();const A=u.effect=new ri(M);u.scope.off();const x=u.update=A.run.bind(A),k=u.job=A.runIfDirty.bind(A);k.i=u,k.id=u.uid,A.scheduler=()=>Bs(k),at(u,!0),x()},X=(u,d,m)=>{d.component=u;const S=u.vnode.props;u.vnode=d,u.next=null,sc(u,d.props,S,m),lc(u,d.children,m),Xe(),or(u),Ye()},D=(u,d,m,S,b,w,L,M,A=!1)=>{const x=u&&u.children,k=u?u.shapeFlag:0,F=d.children,{patchFlag:j,shapeFlag:q}=d;if(j>0){if(j&128){sn(x,F,m,S,b,w,L,M,A);return}else if(j&256){oe(x,F,m,S,b,w,L,M,A);return}}q&8?(k&16&&Ft(x,b,w),F!==x&&a(m,F)):k&16?q&16?sn(x,F,m,S,b,w,L,M,A):Ft(x,b,w,!0):(k&8&&a(m,""),q&16&&U(F,m,S,b,w,L,M,A))},oe=(u,d,m,S,b,w,L,M,A)=>{u=u||Rt,d=d||Rt;const x=u.length,k=d.length,F=Math.min(x,k);let j;for(j=0;jk?Ft(u,b,w,!0,!1,F):U(d,m,S,b,w,L,M,A,F)},sn=(u,d,m,S,b,w,L,M,A)=>{let x=0;const k=d.length;let F=u.length-1,j=k-1;for(;x<=F&&x<=j;){const q=u[x],z=d[x]=A?nt(d[x]):Oe(d[x]);if(ht(q,z))I(q,z,m,null,b,w,L,M,A);else break;x++}for(;x<=F&&x<=j;){const q=u[F],z=d[j]=A?nt(d[j]):Oe(d[j]);if(ht(q,z))I(q,z,m,null,b,w,L,M,A);else break;F--,j--}if(x>F){if(x<=j){const q=j+1,z=qj)for(;x<=F;)$e(u[x],b,w,!0),x++;else{const q=x,z=x,te=new Map;for(x=z;x<=j;x++){const Ee=d[x]=A?nt(d[x]):Oe(d[x]);Ee.key!=null&&te.set(Ee.key,x)}let Z,xe=0;const pe=j-z+1;let Fe=!1,Te=0;const Ht=new Array(pe);for(x=0;x=pe){$e(Ee,b,w,!0);continue}let je;if(Ee.key!=null)je=te.get(Ee.key);else for(Z=z;Z<=j;Z++)if(Ht[Z-z]===0&&ht(Ee,d[Z])){je=Z;break}je===void 0?$e(Ee,b,w,!0):(Ht[je-z]=x+1,je>=Te?Te=je:Fe=!0,I(Ee,d[je],m,null,b,w,L,M,A),xe++)}const er=Fe?fc(Ht):Rt;for(Z=er.length-1,x=pe-1;x>=0;x--){const Ee=z+x,je=d[Ee],tr=d[Ee+1],nr=Ee+1{const{el:w,type:L,transition:M,children:A,shapeFlag:x}=u;if(x&6){ct(u.component.subTree,d,m,S);return}if(x&128){u.suspense.move(d,m,S);return}if(x&64){L.move(u,d,m,Tt);return}if(L===we){s(w,d,m);for(let F=0;FM.enter(w),b);else{const{leave:F,delayLeave:j,afterLeave:q}=M,z=()=>{u.ctx.isUnmounted?r(w):s(w,d,m)},te=()=>{w._isLeaving&&w[qe](!0),F(w,()=>{z(),q&&q()})};j?j(w,z,te):te()}else s(w,d,m)},$e=(u,d,m,S=!1,b=!1)=>{const{type:w,props:L,ref:M,children:A,dynamicChildren:x,shapeFlag:k,patchFlag:F,dirs:j,cacheIndex:q}=u;if(F===-2&&(b=!1),M!=null&&(Xe(),It(M,null,m,u,!0),Ye()),q!=null&&(d.renderCache[q]=void 0),k&256){d.ctx.deactivate(u);return}const z=k&1&&j,te=!vt(u);let Z;if(te&&(Z=L&&L.onVnodeBeforeUnmount)&&Me(Z,d,u),k&6)Oo(u.component,m,S);else{if(k&128){u.suspense.unmount(m,S);return}z&&We(u,null,d,"beforeUnmount"),k&64?u.type.remove(u,d,m,Tt,S):x&&!x.hasOnce&&(w!==we||F>0&&F&64)?Ft(x,d,m,!1,!0):(w===we&&F&384||!b&&k&16)&&Ft(A,d,m),S&&Qs(u)}(te&&(Z=L&&L.onVnodeUnmounted)||z)&&Ce(()=>{Z&&Me(Z,d,u),z&&We(u,null,d,"unmounted")},m)},Qs=u=>{const{type:d,el:m,anchor:S,transition:b}=u;if(d===we){Mo(m,S);return}if(d===Ut){g(u);return}const w=()=>{r(m),b&&!b.persisted&&b.afterLeave&&b.afterLeave()};if(u.shapeFlag&1&&b&&!b.persisted){const{leave:L,delayLeave:M}=b,A=()=>L(m,w);M?M(u.el,w,A):A()}else w()},Mo=(u,d)=>{let m;for(;u!==d;)m=v(u),r(u),u=m;r(d)},Oo=(u,d,m)=>{const{bum:S,scope:b,job:w,subTree:L,um:M,m:A,a:x}=u;vr(A),vr(x),S&&Yn(S),b.stop(),w&&(w.flags|=8,$e(L,u,d,m)),M&&Ce(M,d),Ce(()=>{u.isUnmounted=!0},d)},Ft=(u,d,m,S=!1,b=!1,w=0)=>{for(let L=w;L{if(u.shapeFlag&6)return rn(u.component.subTree);if(u.shapeFlag&128)return u.suspense.next();const d=v(u.anchor||u.el),m=d&&d[Rl];return m?v(m):d};let qn=!1;const Zs=(u,d,m)=>{u==null?d._vnode&&$e(d._vnode,null,null,!0):I(d._vnode||null,u,d,null,null,null,m),d._vnode=u,qn||(qn=!0,or(),Cn(),qn=!1)},Tt={p:I,um:$e,m:ct,r:Qs,mt:Y,mc:U,pc:D,pbc:P,n:rn,o:e};let Gn,Xn;return t&&([Gn,Xn]=t(Tt)),{render:Zs,hydrate:Gn,createApp:ec(Zs,Gn)}}function ns({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function at({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function zi(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Ji(e,t,n=!1){const s=e.children,r=t.children;if(B(s)&&B(r))for(let i=0;i>1,e[n[o]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,l=n[i-1];i-- >0;)n[i]=l,l=t[l];return n}function Qi(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Qi(t)}function vr(e){if(e)for(let t=0;t_t(uc);function Zi(e,t){return Un(e,null,t)}function bf(e,t){return Un(e,null,{flush:"post"})}function Le(e,t,n){return Un(e,t,n)}function Un(e,t,n=se){const{immediate:s,deep:r,flush:i,once:l}=n,o=fe({},n),c=t&&s||!t&&i!=="post";let f;if(Qt){if(i==="sync"){const y=dc();f=y.__watcherHandles||(y.__watcherHandles=[])}else if(!c){const y=()=>{};return y.stop=ke,y.resume=ke,y.pause=ke,y}}const a=ye;o.call=(y,C,I)=>De(y,a,C,I);let h=!1;i==="post"?o.scheduler=y=>{Ce(y,a&&a.suspense)}:i!=="sync"&&(h=!0,o.scheduler=(y,C)=>{C?y():Bs(y)}),o.augmentJob=y=>{t&&(y.flags|=4),h&&(y.flags|=2,a&&(y.id=a.uid,y.i=a))};const v=xl(e,t,o);return Qt&&(f?f.push(v):c&&v()),v}function hc(e,t,n){const s=this.proxy,r=le(e)?e.includes(".")?eo(s,e):()=>s[e]:e.bind(s,s);let i;G(t)?i=t:(i=t.handler,n=t);const l=nn(this),o=Un(r,i.bind(s),n);return l(),o}function eo(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;rt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ne(t)}Modifiers`]||e[`${lt(t)}Modifiers`];function gc(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||se;let r=n;const i=t.startsWith("update:"),l=i&&pc(s,t.slice(7));l&&(l.trim&&(r=n.map(a=>le(a)?a.trim():a)),l.number&&(r=n.map(Fo)));let o,c=s[o=vn(t)]||s[o=vn(Ne(t))];!c&&i&&(c=s[o=vn(lt(t))]),c&&De(c,e,6,r);const f=s[o+"Once"];if(f){if(!e.emitted)e.emitted={};else if(e.emitted[o])return;e.emitted[o]=!0,De(f,e,6,r)}}const mc=new WeakMap;function to(e,t,n=!1){const s=n?mc:t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let l={},o=!1;if(!G(e)){const c=f=>{const a=to(f,t,!0);a&&(o=!0,fe(l,a))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!o?(ee(e)&&s.set(e,null),null):(B(i)?i.forEach(c=>l[c]=null):fe(l,i),ee(e)&&s.set(e,l),l)}function Bn(e,t){return!e||!en(t)?!1:(t=t.slice(2).replace(/Once$/,""),Q(e,t[0].toLowerCase()+t.slice(1))||Q(e,lt(t))||Q(e,t))}function ss(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[i],slots:l,attrs:o,emit:c,render:f,renderCache:a,props:h,data:v,setupState:y,ctx:C,inheritAttrs:I}=e,K=An(e);let H,V;try{if(n.shapeFlag&4){const g=r||s,O=g;H=Oe(f.call(O,g,a,h,y,v,C)),V=o}else{const g=t;H=Oe(g.length>1?g(h,{attrs:o,slots:l,emit:c}):g(h,null)),V=t.props?o:vc(o)}}catch(g){Bt.length=0,$n(g,e,1),H=he(de)}let p=H;if(V&&I!==!1){const g=Object.keys(V),{shapeFlag:O}=p;g.length&&O&7&&(i&&g.some(Is)&&(V=yc(V,i)),p=ot(p,V,!1,!0))}return n.dirs&&(p=ot(p,null,!1,!0),p.dirs=p.dirs?p.dirs.concat(n.dirs):n.dirs),n.transition&&Yt(p,n.transition),H=p,An(K),H}const vc=e=>{let t;for(const n in e)(n==="class"||n==="style"||en(n))&&((t||(t={}))[n]=e[n]);return t},yc=(e,t)=>{const n={};for(const s in e)(!Is(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function _c(e,t,n){const{props:s,children:r,component:i}=e,{props:l,children:o,patchFlag:c}=t,f=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?yr(s,l,f):!!l;if(c&8){const a=t.dynamicProps;for(let h=0;he.__isSuspense;function ro(e,t){t&&t.pendingBranch?B(e)?t.effects.push(...e):t.effects.push(e):Cl(e)}const we=Symbol.for("v-fgt"),bt=Symbol.for("v-txt"),de=Symbol.for("v-cmt"),Ut=Symbol.for("v-stc"),Bt=[];let Ae=null;function Cs(e=!1){Bt.push(Ae=e?null:[])}function bc(){Bt.pop(),Ae=Bt[Bt.length-1]||null}let zt=1;function On(e,t=!1){zt+=e,e<0&&Ae&&t&&(Ae.hasOnce=!0)}function io(e){return e.dynamicChildren=zt>0?Ae||Rt:null,bc(),zt>0&&Ae&&Ae.push(e),e}function wf(e,t,n,s,r,i){return io(lo(e,t,n,s,r,i,!0))}function As(e,t,n,s,r){return io(he(e,t,n,s,r,!0))}function Jt(e){return e?e.__v_isVNode===!0:!1}function ht(e,t){return e.type===t.type&&e.key===t.key}const oo=({key:e})=>e??null,_n=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?le(e)||ae(e)||G(e)?{i:Se,r:e,k:t,f:!!n}:e:null);function lo(e,t=null,n=null,s=0,r=null,i=e===we?0:1,l=!1,o=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&oo(t),ref:t&&_n(t),scopeId:xi,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:Se};return o?(Gs(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=le(n)?8:16),zt>0&&!l&&Ae&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Ae.push(c),c}const he=wc;function wc(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===Fi)&&(e=de),Jt(e)){const o=ot(e,t,!0);return n&&Gs(o,n),zt>0&&!i&&Ae&&(o.shapeFlag&6?Ae[Ae.indexOf(e)]=o:Ae.push(o)),o.patchFlag=-2,o}if(Pc(e)&&(e=e.__vccOpts),t){t=Sc(t);let{class:o,style:c}=t;o&&!le(o)&&(t.class=Hs(o)),ee(c)&&(ks(c)&&!B(c)&&(c=fe({},c)),t.style=Fs(c))}const l=le(e)?1:so(e)?128:Ti(e)?64:ee(e)?4:G(e)?2:0;return lo(e,t,n,s,r,l,i,!0)}function Sc(e){return e?ks(e)||Bi(e)?fe({},e):e:null}function ot(e,t,n=!1,s=!1){const{props:r,ref:i,patchFlag:l,children:o,transition:c}=e,f=t?xc(r||{},t):r,a={__v_isVNode:!0,__v_skip:!0,type:e.type,props:f,key:f&&oo(f),ref:t&&t.ref?n&&i?B(i)?i.concat(_n(t)):[i,_n(t)]:_n(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:o,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==we?l===-1?16:l|16:l,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&ot(e.ssContent),ssFallback:e.ssFallback&&ot(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&s&&Yt(a,c.clone(a)),a}function co(e=" ",t=0){return he(bt,null,e,t)}function Sf(e,t){const n=he(Ut,null,e);return n.staticCount=t,n}function xf(e="",t=!1){return t?(Cs(),As(de,null,e)):he(de,null,e)}function Oe(e){return e==null||typeof e=="boolean"?he(de):B(e)?he(we,null,e.slice()):Jt(e)?nt(e):he(bt,null,String(e))}function nt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:ot(e)}function Gs(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(B(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),Gs(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!Bi(t)?t._ctx=Se:r===3&&Se&&(Se.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else G(t)?(t={default:t,_ctx:Se},n=32):(t=String(t),s&64?(n=16,t=[co(t)]):n=8);e.children=t,e.shapeFlag|=n}function xc(...e){const t={};for(let n=0;nye||Se;let Pn,Rs;{const e=Fn(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(l=>l(i)):r[0](i)}};Pn=t("__VUE_INSTANCE_SETTERS__",n=>ye=n),Rs=t("__VUE_SSR_SETTERS__",n=>Qt=n)}const nn=e=>{const t=ye;return Pn(e),e.scope.on(),()=>{e.scope.off(),Pn(t)}},_r=()=>{ye&&ye.scope.off(),Pn(null)};function ao(e){return e.vnode.shapeFlag&4}let Qt=!1;function Ac(e,t=!1,n=!1){t&&Rs(t);const{props:s,children:r}=e.vnode,i=ao(e);nc(e,s,i,t),oc(e,r,n||t);const l=i?Rc(e,t):void 0;return t&&Rs(!1),l}function Rc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,ql);const{setup:s}=n;if(s){Xe();const r=e.setupContext=s.length>1?uo(e):null,i=nn(e),l=tn(s,e,0,[e.props,r]),o=zr(l);if(Ye(),i(),(o||e.sp)&&!vt(e)&&Pi(e),o){if(l.then(_r,_r),t)return l.then(c=>{br(e,c)}).catch(c=>{$n(c,e,0)});e.asyncDep=l}else br(e,l)}else fo(e)}function br(e,t,n){G(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ee(t)&&(e.setupState=_i(t)),fo(e)}function fo(e,t,n){const s=e.type;e.render||(e.render=s.render||ke);{const r=nn(e);Xe();try{Xl(e)}finally{Ye(),r()}}}const Mc={get(e,t){return ve(e,"get",""),e[t]}};function uo(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Mc),slots:e.slots,emit:e.emit,expose:t}}function Xs(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(_i(yn(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in kt)return kt[n](e)},has(t,n){return n in t||n in kt}})):e.proxy}function Oc(e,t=!0){return G(e)?e.displayName||e.name:e.name||t&&e.__name}function Pc(e){return G(e)&&"__vccOpts"in e}const ie=(e,t)=>wl(e,t,Qt);function Ms(e,t,n){try{On(-1);const s=arguments.length;return s===2?ee(t)&&!B(t)?Jt(t)?he(e,null,[t]):he(e,t):he(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&Jt(n)&&(n=[n]),he(e,t,n))}finally{On(1)}}const Ic="3.5.22";/** +* @vue/runtime-dom v3.5.22 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let Os;const wr=typeof window<"u"&&window.trustedTypes;if(wr)try{Os=wr.createPolicy("vue",{createHTML:e=>e})}catch{}const ho=Os?e=>Os.createHTML(e):e=>e,Lc="http://www.w3.org/2000/svg",Nc="http://www.w3.org/1998/Math/MathML",Ke=typeof document<"u"?document:null,Sr=Ke&&Ke.createElement("template"),Fc={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?Ke.createElementNS(Lc,e):t==="mathml"?Ke.createElementNS(Nc,e):n?Ke.createElement(e,{is:n}):Ke.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>Ke.createTextNode(e),createComment:e=>Ke.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Ke.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const l=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{Sr.innerHTML=ho(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const o=Sr.content;if(s==="svg"||s==="mathml"){const c=o.firstChild;for(;c.firstChild;)o.appendChild(c.firstChild);o.removeChild(c)}t.insertBefore(o,n)}return[l?l.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},et="transition",$t="animation",Zt=Symbol("_vtc"),po={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},Hc=fe({},Ei,po),Dc=e=>(e.displayName="Transition",e.props=Hc,e),Tf=Dc((e,{slots:t})=>Ms(Pl,$c(e),t)),ft=(e,t=[])=>{B(e)?e.forEach(n=>n(...t)):e&&e(...t)},xr=e=>e?B(e)?e.some(t=>t.length>1):e.length>1:!1;function $c(e){const t={};for(const _ in e)_ in po||(t[_]=e[_]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:i=`${n}-enter-from`,enterActiveClass:l=`${n}-enter-active`,enterToClass:o=`${n}-enter-to`,appearFromClass:c=i,appearActiveClass:f=l,appearToClass:a=o,leaveFromClass:h=`${n}-leave-from`,leaveActiveClass:v=`${n}-leave-active`,leaveToClass:y=`${n}-leave-to`}=e,C=jc(r),I=C&&C[0],K=C&&C[1],{onBeforeEnter:H,onEnter:V,onEnterCancelled:p,onLeave:g,onLeaveCancelled:O,onBeforeAppear:W=H,onAppear:R=V,onAppearCancelled:U=p}=t,T=(_,N,Y,re)=>{_._enterCancelled=re,ut(_,N?a:o),ut(_,N?f:l),Y&&Y()},P=(_,N)=>{_._isLeaving=!1,ut(_,h),ut(_,y),ut(_,v),N&&N()},E=_=>(N,Y)=>{const re=_?R:V,$=()=>T(N,_,Y);ft(re,[N,$]),Tr(()=>{ut(N,_?c:i),Be(N,_?a:o),xr(re)||Er(N,s,I,$)})};return fe(t,{onBeforeEnter(_){ft(H,[_]),Be(_,i),Be(_,l)},onBeforeAppear(_){ft(W,[_]),Be(_,c),Be(_,f)},onEnter:E(!1),onAppear:E(!0),onLeave(_,N){_._isLeaving=!0;const Y=()=>P(_,N);Be(_,h),_._enterCancelled?(Be(_,v),Rr(_)):(Rr(_),Be(_,v)),Tr(()=>{_._isLeaving&&(ut(_,h),Be(_,y),xr(g)||Er(_,s,K,Y))}),ft(g,[_,Y])},onEnterCancelled(_){T(_,!1,void 0,!0),ft(p,[_])},onAppearCancelled(_){T(_,!0,void 0,!0),ft(U,[_])},onLeaveCancelled(_){P(_),ft(O,[_])}})}function jc(e){if(e==null)return null;if(ee(e))return[rs(e.enter),rs(e.leave)];{const t=rs(e);return[t,t]}}function rs(e){return Ho(e)}function Be(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Zt]||(e[Zt]=new Set)).add(t)}function ut(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[Zt];n&&(n.delete(t),n.size||(e[Zt]=void 0))}function Tr(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Vc=0;function Er(e,t,n,s){const r=e._endId=++Vc,i=()=>{r===e._endId&&s()};if(n!=null)return setTimeout(i,n);const{type:l,timeout:o,propCount:c}=Wc(e,t);if(!l)return s();const f=l+"end";let a=0;const h=()=>{e.removeEventListener(f,v),i()},v=y=>{y.target===e&&++a>=c&&h()};setTimeout(()=>{a(n[C]||"").split(", "),r=s(`${et}Delay`),i=s(`${et}Duration`),l=Cr(r,i),o=s(`${$t}Delay`),c=s(`${$t}Duration`),f=Cr(o,c);let a=null,h=0,v=0;t===et?l>0&&(a=et,h=l,v=i.length):t===$t?f>0&&(a=$t,h=f,v=c.length):(h=Math.max(l,f),a=h>0?l>f?et:$t:null,v=a?a===et?i.length:c.length:0);const y=a===et&&/\b(?:transform|all)(?:,|$)/.test(s(`${et}Property`).toString());return{type:a,timeout:h,propCount:v,hasTransform:y}}function Cr(e,t){for(;e.lengthAr(n)+Ar(e[s])))}function Ar(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function Rr(e){return(e?e.ownerDocument:document).body.offsetHeight}function kc(e,t,n){const s=e[Zt];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Mr=Symbol("_vod"),Uc=Symbol("_vsh"),Bc=Symbol(""),Kc=/(?:^|;)\s*display\s*:/;function qc(e,t,n){const s=e.style,r=le(n);let i=!1;if(n&&!r){if(t)if(le(t))for(const l of t.split(";")){const o=l.slice(0,l.indexOf(":")).trim();n[o]==null&&bn(s,o,"")}else for(const l in t)n[l]==null&&bn(s,l,"");for(const l in n)l==="display"&&(i=!0),bn(s,l,n[l])}else if(r){if(t!==n){const l=s[Bc];l&&(n+=";"+l),s.cssText=n,i=Kc.test(n)}}else t&&e.removeAttribute("style");Mr in e&&(e[Mr]=i?s.display:"",e[Uc]&&(s.display="none"))}const Or=/\s*!important$/;function bn(e,t,n){if(B(n))n.forEach(s=>bn(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=Gc(e,t);Or.test(n)?e.setProperty(lt(s),n.replace(Or,""),"important"):e[s]=n}}const Pr=["Webkit","Moz","ms"],is={};function Gc(e,t){const n=is[t];if(n)return n;let s=Ne(t);if(s!=="filter"&&s in e)return is[t]=s;s=Nn(s);for(let r=0;ros||(Qc.then(()=>os=0),os=Date.now());function ea(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;De(ta(s,n.value),t,5,[s])};return n.value=e,n.attached=Zc(),n}function ta(e,t){if(B(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const Dr=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,na=(e,t,n,s,r,i)=>{const l=r==="svg";t==="class"?kc(e,s,l):t==="style"?qc(e,n,s):en(t)?Is(t)||zc(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):sa(e,t,s,l))?(Nr(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Lr(e,t,s,l,i,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!le(s))?Nr(e,Ne(t),s,i,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Lr(e,t,s,l))};function sa(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&Dr(t)&&G(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return Dr(t)&&le(n)?!1:t in e}const ra=["ctrl","shift","alt","meta"],ia={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>ra.some(n=>e[`${n}Key`]&&!t.includes(n))},Ef=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(r,...i)=>{for(let l=0;l{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=r=>{if(!("key"in r))return;const i=lt(r.key);if(t.some(l=>l===i||oa[l]===i))return e(r)})},la=fe({patchProp:na},Fc);let ls,$r=!1;function ca(){return ls=$r?ls:cc(la),$r=!0,ls}const Af=(...e)=>{const t=ca().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=fa(s);if(r)return n(r,!0,aa(r))},t};function aa(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function fa(e){return le(e)?document.querySelector(e):e}const ua=window.__VP_SITE_DATA__;function go(e){return si()?(Ko(e),!0):!1}const cs=new WeakMap,da=(...e)=>{var t;const n=e[0],s=(t=xt())==null?void 0:t.proxy;if(s==null&&!Wi())throw new Error("injectLocal must be called in setup");return s&&cs.has(s)&&n in cs.get(s)?cs.get(s)[n]:_t(...e)},mo=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const ha=Object.prototype.toString,pa=e=>ha.call(e)==="[object Object]",St=()=>{},jr=ga();function ga(){var e,t;return mo&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function Ys(e,t){function n(...s){return new Promise((r,i)=>{Promise.resolve(e(()=>t.apply(this,s),{fn:t,thisArg:this,args:s})).then(r).catch(i)})}return n}const vo=e=>e();function ma(e,t={}){let n,s,r=St;const i=c=>{clearTimeout(c),r(),r=St};let l;return c=>{const f=ce(e),a=ce(t.maxWait);return n&&i(n),f<=0||a!==void 0&&a<=0?(s&&(i(s),s=null),Promise.resolve(c())):new Promise((h,v)=>{r=t.rejectOnCancel?v:h,l=c,a&&!s&&(s=setTimeout(()=>{n&&i(n),s=null,h(l())},a)),n=setTimeout(()=>{s&&i(s),s=null,h(c())},f)})}}function va(...e){let t=0,n,s=!0,r=St,i,l,o,c,f;!ae(e[0])&&typeof e[0]=="object"?{delay:l,trailing:o=!0,leading:c=!0,rejectOnCancel:f=!1}=e[0]:[l,o=!0,c=!0,f=!1]=e;const a=()=>{n&&(clearTimeout(n),n=void 0,r(),r=St)};return v=>{const y=ce(l),C=Date.now()-t,I=()=>i=v();return a(),y<=0?(t=Date.now(),I()):(C>y&&(c||!s)?(t=Date.now(),I()):o&&(i=new Promise((K,H)=>{r=f?H:K,n=setTimeout(()=>{t=Date.now(),s=!0,K(I()),a()},Math.max(0,y-C))})),!c&&!n&&(n=setTimeout(()=>s=!0,y)),s=!1,i)}}function ya(e=vo,t={}){const{initialState:n="active"}=t,s=zs(n==="active");function r(){s.value=!1}function i(){s.value=!0}const l=(...o)=>{s.value&&e(...o)};return{isActive:Gt(s),pause:r,resume:i,eventFilter:l}}function Vr(e){return e.endsWith("rem")?Number.parseFloat(e)*16:Number.parseFloat(e)}function _a(e){return xt()}function as(e){return Array.isArray(e)?e:[e]}function zs(...e){if(e.length!==1)return yl(...e);const t=e[0];return typeof t=="function"?Gt(gl(()=>({get:t,set:St}))):mt(t)}function ba(e,t=200,n={}){return Ys(ma(t,n),e)}function wa(e,t=200,n=!1,s=!0,r=!1){return Ys(va(t,n,s,r),e)}function Sa(e,t,n={}){const{eventFilter:s=vo,...r}=n;return Le(e,Ys(s,t),r)}function xa(e,t,n={}){const{eventFilter:s,initialState:r="active",...i}=n,{eventFilter:l,pause:o,resume:c,isActive:f}=ya(s,{initialState:r});return{stop:Sa(e,t,{...i,eventFilter:l}),pause:o,resume:c,isActive:f}}function Kn(e,t=!0,n){_a()?Nt(e,n):t?e():jn(e)}function Ta(e,t,n){return Le(e,t,{...n,immediate:!0})}const ze=mo?window:void 0;function Js(e){var t;const n=ce(e);return(t=n==null?void 0:n.$el)!=null?t:n}function Je(...e){const t=[],n=()=>{t.forEach(o=>o()),t.length=0},s=(o,c,f,a)=>(o.addEventListener(c,f,a),()=>o.removeEventListener(c,f,a)),r=ie(()=>{const o=as(ce(e[0])).filter(c=>c!=null);return o.every(c=>typeof c!="string")?o:void 0}),i=Ta(()=>{var o,c;return[(c=(o=r.value)==null?void 0:o.map(f=>Js(f)))!=null?c:[ze].filter(f=>f!=null),as(ce(r.value?e[1]:e[0])),as(Us(r.value?e[2]:e[1])),ce(r.value?e[3]:e[2])]},([o,c,f,a])=>{if(n(),!(o!=null&&o.length)||!(c!=null&&c.length)||!(f!=null&&f.length))return;const h=pa(a)?{...a}:a;t.push(...o.flatMap(v=>c.flatMap(y=>f.map(C=>s(v,y,C,h)))))},{flush:"post"}),l=()=>{i(),n()};return go(n),l}function Ea(){const e=Ie(!1),t=xt();return t&&Nt(()=>{e.value=!0},t),e}function Ca(e){const t=Ea();return ie(()=>(t.value,!!e()))}function Aa(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function Rf(...e){let t,n,s={};e.length===3?(t=e[0],n=e[1],s=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],s=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:r=ze,eventName:i="keydown",passive:l=!1,dedupe:o=!1}=s,c=Aa(t);return Je(r,i,a=>{a.repeat&&ce(o)||c(a)&&n(a)},l)}const Ra=Symbol("vueuse-ssr-width");function Ma(){const e=Wi()?da(Ra,null):null;return typeof e=="number"?e:void 0}function yo(e,t={}){const{window:n=ze,ssrWidth:s=Ma()}=t,r=Ca(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function"),i=Ie(typeof s=="number"),l=Ie(),o=Ie(!1),c=f=>{o.value=f.matches};return Zi(()=>{if(i.value){i.value=!r.value;const f=ce(e).split(",");o.value=f.some(a=>{const h=a.includes("not all"),v=a.match(/\(\s*min-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/),y=a.match(/\(\s*max-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/);let C=!!(v||y);return v&&C&&(C=s>=Vr(v[1])),y&&C&&(C=s<=Vr(y[1])),h?!C:C});return}r.value&&(l.value=n.matchMedia(ce(e)),o.value=l.value.matches)}),Je(l,"change",c,{passive:!0}),ie(()=>o.value)}const hn=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},pn="__vueuse_ssr_handlers__",Oa=Pa();function Pa(){return pn in hn||(hn[pn]=hn[pn]||{}),hn[pn]}function _o(e,t){return Oa[e]||t}function bo(e){return yo("(prefers-color-scheme: dark)",e)}function Ia(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const La={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},Wr="vueuse-storage";function Na(e,t,n,s={}){var r;const{flush:i="pre",deep:l=!0,listenToStorageChanges:o=!0,writeDefaults:c=!0,mergeDefaults:f=!1,shallow:a,window:h=ze,eventFilter:v,onError:y=E=>{console.error(E)},initOnMounted:C}=s,I=(a?Ie:mt)(typeof t=="function"?t():t),K=ie(()=>ce(e));if(!n)try{n=_o("getDefaultStorage",()=>{var E;return(E=ze)==null?void 0:E.localStorage})()}catch(E){y(E)}if(!n)return I;const H=ce(t),V=Ia(H),p=(r=s.serializer)!=null?r:La[V],{pause:g,resume:O}=xa(I,()=>R(I.value),{flush:i,deep:l,eventFilter:v});Le(K,()=>T(),{flush:i}),h&&o&&Kn(()=>{n instanceof Storage?Je(h,"storage",T,{passive:!0}):Je(h,Wr,P),C&&T()}),C||T();function W(E,_){if(h){const N={key:K.value,oldValue:E,newValue:_,storageArea:n};h.dispatchEvent(n instanceof Storage?new StorageEvent("storage",N):new CustomEvent(Wr,{detail:N}))}}function R(E){try{const _=n.getItem(K.value);if(E==null)W(_,null),n.removeItem(K.value);else{const N=p.write(E);_!==N&&(n.setItem(K.value,N),W(_,N))}}catch(_){y(_)}}function U(E){const _=E?E.newValue:n.getItem(K.value);if(_==null)return c&&H!=null&&n.setItem(K.value,p.write(H)),H;if(!E&&f){const N=p.read(_);return typeof f=="function"?f(N,H):V==="object"&&!Array.isArray(N)?{...H,...N}:N}else return typeof _!="string"?_:p.read(_)}function T(E){if(!(E&&E.storageArea!==n)){if(E&&E.key==null){I.value=H;return}if(!(E&&E.key!==K.value)){g();try{(E==null?void 0:E.newValue)!==p.write(I.value)&&(I.value=U(E))}catch(_){y(_)}finally{E?jn(O):O()}}}}function P(E){T(E.detail)}return I}const Fa="*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}";function Ha(e={}){const{selector:t="html",attribute:n="class",initialValue:s="auto",window:r=ze,storage:i,storageKey:l="vueuse-color-scheme",listenToStorageChanges:o=!0,storageRef:c,emitAuto:f,disableTransition:a=!0}=e,h={auto:"",light:"light",dark:"dark",...e.modes||{}},v=bo({window:r}),y=ie(()=>v.value?"dark":"light"),C=c||(l==null?zs(s):Na(l,s,i,{window:r,listenToStorageChanges:o})),I=ie(()=>C.value==="auto"?y.value:C.value),K=_o("updateHTMLAttrs",(g,O,W)=>{const R=typeof g=="string"?r==null?void 0:r.document.querySelector(g):Js(g);if(!R)return;const U=new Set,T=new Set;let P=null;if(O==="class"){const _=W.split(/\s/g);Object.values(h).flatMap(N=>(N||"").split(/\s/g)).filter(Boolean).forEach(N=>{_.includes(N)?U.add(N):T.add(N)})}else P={key:O,value:W};if(U.size===0&&T.size===0&&P===null)return;let E;a&&(E=r.document.createElement("style"),E.appendChild(document.createTextNode(Fa)),r.document.head.appendChild(E));for(const _ of U)R.classList.add(_);for(const _ of T)R.classList.remove(_);P&&R.setAttribute(P.key,P.value),a&&(r.getComputedStyle(E).opacity,document.head.removeChild(E))});function H(g){var O;K(t,n,(O=h[g])!=null?O:g)}function V(g){e.onChanged?e.onChanged(g,H):H(g)}Le(I,V,{flush:"post",immediate:!0}),Kn(()=>V(I.value));const p=ie({get(){return f?C.value:I.value},set(g){C.value=g}});return Object.assign(p,{store:C,system:y,state:I})}function Da(e={}){const{valueDark:t="dark",valueLight:n=""}=e,s=Ha({...e,onChanged:(l,o)=>{var c;e.onChanged?(c=e.onChanged)==null||c.call(e,l==="dark",o,l):o(l)},modes:{dark:t,light:n}}),r=ie(()=>s.system.value);return ie({get(){return s.value==="dark"},set(l){const o=l?"dark":"light";r.value===o?s.value="auto":s.value=o}})}function fs(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}const kr=1;function $a(e,t={}){const{throttle:n=0,idle:s=200,onStop:r=St,onScroll:i=St,offset:l={left:0,right:0,top:0,bottom:0},eventListenerOptions:o={capture:!1,passive:!0},behavior:c="auto",window:f=ze,onError:a=R=>{console.error(R)}}=t,h=Ie(0),v=Ie(0),y=ie({get(){return h.value},set(R){I(R,void 0)}}),C=ie({get(){return v.value},set(R){I(void 0,R)}});function I(R,U){var T,P,E,_;if(!f)return;const N=ce(e);if(!N)return;(E=N instanceof Document?f.document.body:N)==null||E.scrollTo({top:(T=ce(U))!=null?T:C.value,left:(P=ce(R))!=null?P:y.value,behavior:ce(c)});const Y=((_=N==null?void 0:N.document)==null?void 0:_.documentElement)||(N==null?void 0:N.documentElement)||N;y!=null&&(h.value=Y.scrollLeft),C!=null&&(v.value=Y.scrollTop)}const K=Ie(!1),H=Lt({left:!0,right:!1,top:!0,bottom:!1}),V=Lt({left:!1,right:!1,top:!1,bottom:!1}),p=R=>{K.value&&(K.value=!1,V.left=!1,V.right=!1,V.top=!1,V.bottom=!1,r(R))},g=ba(p,n+s),O=R=>{var U;if(!f)return;const T=((U=R==null?void 0:R.document)==null?void 0:U.documentElement)||(R==null?void 0:R.documentElement)||Js(R),{display:P,flexDirection:E,direction:_}=getComputedStyle(T),N=_==="rtl"?-1:1,Y=T.scrollLeft;V.left=Yh.value;const re=Math.abs(Y*N)<=(l.left||0),$=Math.abs(Y*N)+T.clientWidth>=T.scrollWidth-(l.right||0)-kr;P==="flex"&&E==="row-reverse"?(H.left=$,H.right=re):(H.left=re,H.right=$),h.value=Y;let X=T.scrollTop;R===f.document&&!X&&(X=f.document.body.scrollTop),V.top=Xv.value;const D=Math.abs(X)<=(l.top||0),oe=Math.abs(X)+T.clientHeight>=T.scrollHeight-(l.bottom||0)-kr;P==="flex"&&E==="column-reverse"?(H.top=oe,H.bottom=D):(H.top=D,H.bottom=oe),v.value=X},W=R=>{var U;if(!f)return;const T=(U=R.target.documentElement)!=null?U:R.target;O(T),K.value=!0,g(R),i(R)};return Je(e,"scroll",n?wa(W,n,!0,!1):W,o),Kn(()=>{try{const R=ce(e);if(!R)return;O(R)}catch(R){a(R)}}),Je(e,"scrollend",p,o),{x:y,y:C,isScrolling:K,arrivedState:H,directions:V,measure(){const R=ce(e);f&&R&&O(R)}}}function wo(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const us=new WeakMap;function Mf(e,t=!1){const n=Ie(t);let s=null,r="";Le(zs(e),o=>{const c=fs(ce(o));if(c){const f=c;if(us.get(f)||us.set(f,f.style.overflow),f.style.overflow!=="hidden"&&(r=f.style.overflow),f.style.overflow==="hidden")return n.value=!0;if(n.value)return f.style.overflow="hidden"}},{immediate:!0});const i=()=>{const o=fs(ce(e));!o||n.value||(jr&&(s=Je(o,"touchmove",c=>{ja(c)},{passive:!1})),o.style.overflow="hidden",n.value=!0)},l=()=>{const o=fs(ce(e));!o||!n.value||(jr&&(s==null||s()),o.style.overflow=r,us.delete(o),n.value=!1)};return go(l),ie({get(){return n.value},set(o){o?i():l()}})}function Of(e={}){const{window:t=ze,...n}=e;return $a(t,n)}function Pf(e={}){const{window:t=ze,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:s=Number.POSITIVE_INFINITY,listenOrientation:r=!0,includeScrollbar:i=!0,type:l="inner"}=e,o=Ie(n),c=Ie(s),f=()=>{if(t)if(l==="outer")o.value=t.outerWidth,c.value=t.outerHeight;else if(l==="visual"&&t.visualViewport){const{width:h,height:v,scale:y}=t.visualViewport;o.value=Math.round(h*y),c.value=Math.round(v*y)}else i?(o.value=t.innerWidth,c.value=t.innerHeight):(o.value=t.document.documentElement.clientWidth,c.value=t.document.documentElement.clientHeight)};f(),Kn(f);const a={passive:!0};if(Je("resize",f,a),t&&l==="visual"&&t.visualViewport&&Je(t.visualViewport,"resize",f,a),r){const h=yo("(orientation: portrait)");Le(h,()=>f())}return{width:o,height:c}}const ds={};var hs={};const So=/^(?:[a-z]+:|\/\/)/i,Va="vitepress-theme-appearance",Wa=/#.*$/,ka=/[?#].*$/,Ua=/(?:(^|\/)index)?\.(?:md|html)$/,me=typeof document<"u",xo={relativePath:"404.md",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function Ba(e,t,n=!1){if(t===void 0)return!1;if(e=Ur(`/${e}`),n)return new RegExp(t).test(e);if(Ur(t)!==e)return!1;const s=t.match(Wa);return s?(me?location.hash:"")===s[0]:!0}function Ur(e){return decodeURI(e).replace(ka,"").replace(Ua,"$1")}function Ka(e){return So.test(e)}function qa(e,t){return Object.keys((e==null?void 0:e.locales)||{}).find(n=>n!=="root"&&!Ka(n)&&Ba(t,`/${n}/`,!0))||"root"}function Ga(e,t){var s,r,i,l,o,c,f;const n=qa(e,t);return Object.assign({},e,{localeIndex:n,lang:((s=e.locales[n])==null?void 0:s.lang)??e.lang,dir:((r=e.locales[n])==null?void 0:r.dir)??e.dir,title:((i=e.locales[n])==null?void 0:i.title)??e.title,titleTemplate:((l=e.locales[n])==null?void 0:l.titleTemplate)??e.titleTemplate,description:((o=e.locales[n])==null?void 0:o.description)??e.description,head:Eo(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(f=e.locales[n])==null?void 0:f.themeConfig}})}function To(e,t){const n=t.title||e.title,s=t.titleTemplate??e.titleTemplate;if(typeof s=="string"&&s.includes(":title"))return s.replace(/:title/g,n);const r=Xa(e.title,s);return n===r.slice(3)?n:`${n}${r}`}function Xa(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function Ya(e,t){const[n,s]=t;if(n!=="meta")return!1;const r=Object.entries(s)[0];return r==null?!1:e.some(([i,l])=>i===n&&l[r[0]]===r[1])}function Eo(e,t){return[...e.filter(n=>!Ya(t,n)),...t]}const za=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,Ja=/^[a-z]:/i;function Br(e){const t=Ja.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(za,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const ps=new Set;function Qa(e){if(ps.size===0){const n=typeof process=="object"&&(hs==null?void 0:hs.VITE_EXTRA_EXTENSIONS)||(ds==null?void 0:ds.VITE_EXTRA_EXTENSIONS)||"";("3g2,3gp,aac,ai,apng,au,avif,bin,bmp,cer,class,conf,crl,css,csv,dll,doc,eps,epub,exe,gif,gz,ics,ief,jar,jpe,jpeg,jpg,js,json,jsonld,m4a,man,mid,midi,mjs,mov,mp2,mp3,mp4,mpe,mpeg,mpg,mpp,oga,ogg,ogv,ogx,opus,otf,p10,p7c,p7m,p7s,pdf,png,ps,qt,roff,rtf,rtx,ser,svg,t,tif,tiff,tr,ts,tsv,ttf,txt,vtt,wav,weba,webm,webp,woff,woff2,xhtml,xml,yaml,yml,zip"+(n&&typeof n=="string"?","+n:"")).split(",").forEach(s=>ps.add(s))}const t=e.split(".").pop();return t==null||!ps.has(t.toLowerCase())}const Za=Symbol(),wt=Ie(ua);function If(e){const t=ie(()=>Ga(wt.value,e.data.relativePath)),n=t.value.appearance,s=n==="force-dark"?mt(!0):n==="force-auto"?bo():n?Da({storageKey:Va,initialValue:()=>n==="dark"?"dark":"auto",...typeof n=="object"?n:{}}):mt(!1),r=mt(me?location.hash:"");return me&&window.addEventListener("hashchange",()=>{r.value=location.hash}),Le(()=>e.data,()=>{r.value=me?location.hash:""}),{site:t,theme:ie(()=>t.value.themeConfig),page:ie(()=>e.data),frontmatter:ie(()=>e.data.frontmatter),params:ie(()=>e.data.params),lang:ie(()=>t.value.lang),dir:ie(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:ie(()=>t.value.localeIndex||"root"),title:ie(()=>To(t.value,e.data)),description:ie(()=>e.data.description||t.value.description),isDark:s,hash:ie(()=>r.value)}}function ef(){const e=_t(Za);if(!e)throw new Error("vitepress data not properly injected in app");return e}function tf(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function Kr(e){return So.test(e)||!e.startsWith("/")?e:tf(wt.value.base,e)}function nf(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),me){const n="/";t=Br(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let s=__VP_HASH_MAP__[t.toLowerCase()];if(s||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",s=__VP_HASH_MAP__[t.toLowerCase()]),!s)return null;t=`${n}assets/${t}.${s}.js`}else t=`./${Br(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let wn=[];function Lf(e){wn.push(e),kn(()=>{wn=wn.filter(t=>t!==e)})}function sf(){let e=wt.value.scrollOffset,t=0,n=24;if(typeof e=="object"&&"padding"in e&&(n=e.padding,e=e.selector),typeof e=="number")t=e;else if(typeof e=="string")t=qr(e,n);else if(Array.isArray(e))for(const s of e){const r=qr(s,n);if(r){t=r;break}}return t}function qr(e,t){const n=document.querySelector(e);if(!n)return 0;const s=n.getBoundingClientRect().bottom;return s<0?0:s+t}const rf=Symbol(),Co="http://a.com",of=()=>({path:"/",component:null,data:xo});function Nf(e,t){const n=Lt(of()),s={route:n,go:r};async function r(o=me?location.href:"/"){var c,f;o=gs(o),await((c=s.onBeforeRouteChange)==null?void 0:c.call(s,o))!==!1&&(me&&o!==gs(location.href)&&(history.replaceState({scrollPosition:window.scrollY},""),history.pushState({},"",o)),await l(o),await((f=s.onAfterRouteChange??s.onAfterRouteChanged)==null?void 0:f(o)))}let i=null;async function l(o,c=0,f=!1){var v,y;if(await((v=s.onBeforePageLoad)==null?void 0:v.call(s,o))===!1)return;const a=new URL(o,Co),h=i=a.pathname;try{let C=await e(h);if(!C)throw new Error(`Page not found: ${h}`);if(i===h){i=null;const{default:I,__pageData:K}=C;if(!I)throw new Error(`Invalid route component: ${I}`);await((y=s.onAfterPageLoad)==null?void 0:y.call(s,o)),n.path=me?h:Kr(h),n.component=yn(I),n.data=yn(K),me&&jn(()=>{let H=wt.value.base+K.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!wt.value.cleanUrls&&!H.endsWith("/")&&(H+=".html"),H!==a.pathname&&(a.pathname=H,o=H+a.search+a.hash,history.replaceState({},"",o)),a.hash&&!c){let V=null;try{V=document.getElementById(decodeURIComponent(a.hash).slice(1))}catch(p){console.warn(p)}if(V){Gr(V,a.hash);return}}window.scrollTo(0,c)})}}catch(C){if(!/fetch|Page not found/.test(C.message)&&!/^\/404(\.html|\/)?$/.test(o)&&console.error(C),!f)try{const I=await fetch(wt.value.base+"hashmap.json");window.__VP_HASH_MAP__=await I.json(),await l(o,c,!0);return}catch{}if(i===h){i=null,n.path=me?h:Kr(h),n.component=t?yn(t):null;const I=me?h.replace(/(^|\/)$/,"$1index").replace(/(\.html)?$/,".md").replace(/^\//,""):"404.md";n.data={...xo,relativePath:I}}}}return me&&(history.state===null&&history.replaceState({},""),window.addEventListener("click",o=>{if(o.defaultPrevented||!(o.target instanceof Element)||o.target.closest("button")||o.button!==0||o.ctrlKey||o.shiftKey||o.altKey||o.metaKey)return;const c=o.target.closest("a");if(!c||c.closest(".vp-raw")||c.hasAttribute("download")||c.hasAttribute("target"))return;const f=c.getAttribute("href")??(c instanceof SVGAElement?c.getAttribute("xlink:href"):null);if(f==null)return;const{href:a,origin:h,pathname:v,hash:y,search:C}=new URL(f,c.baseURI),I=new URL(location.href);h===I.origin&&Qa(v)&&(o.preventDefault(),v===I.pathname&&C===I.search?(y!==I.hash&&(history.pushState({},"",a),window.dispatchEvent(new HashChangeEvent("hashchange",{oldURL:I.href,newURL:a}))),y?Gr(c,y,c.classList.contains("header-anchor")):window.scrollTo(0,0)):r(a))},{capture:!0}),window.addEventListener("popstate",async o=>{var f;if(o.state===null)return;const c=gs(location.href);await l(c,o.state&&o.state.scrollPosition||0),await((f=s.onAfterRouteChange??s.onAfterRouteChanged)==null?void 0:f(c))}),window.addEventListener("hashchange",o=>{o.preventDefault()})),s}function lf(){const e=_t(rf);if(!e)throw new Error("useRouter() is called without provider.");return e}function Ao(){return lf().route}function Gr(e,t,n=!1){let s=null;try{s=e.classList.contains("header-anchor")?e:document.getElementById(decodeURIComponent(t).slice(1))}catch(r){console.warn(r)}if(s){let r=function(){!n||Math.abs(l-window.scrollY)>window.innerHeight?window.scrollTo(0,l):window.scrollTo({left:0,top:l,behavior:"smooth"})};const i=parseInt(window.getComputedStyle(s).paddingTop,10),l=window.scrollY+s.getBoundingClientRect().top-sf()+i;requestAnimationFrame(r)}}function gs(e){const t=new URL(e,Co);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),wt.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash}const gn=()=>wn.forEach(e=>e()),Ff=Oi({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=Ao(),{frontmatter:n,site:s}=ef();return Le(n,gn,{deep:!0,flush:"post"}),()=>Ms(e.as,s.value.contentProps??{style:{position:"relative"}},[t.component?Ms(t.component,{onVnodeMounted:gn,onVnodeUpdated:gn,onVnodeUnmounted:gn}):"404 Page Not Found"])}}),Hf=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},Df=Oi({setup(e,{slots:t}){const n=mt(!1);return Nt(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function $f(){me&&window.addEventListener("click",e=>{var n;const t=e.target;if(t.matches(".vp-code-group input")){const s=(n=t.parentElement)==null?void 0:n.parentElement;if(!s)return;const r=Array.from(s.querySelectorAll("input")).indexOf(t);if(r<0)return;const i=s.querySelector(".blocks");if(!i)return;const l=Array.from(i.children).find(f=>f.classList.contains("active"));if(!l)return;const o=i.children[r];if(!o||l===o)return;l.classList.remove("active"),o.classList.add("active");const c=s==null?void 0:s.querySelector(`label[for="${t.id}"]`);c==null||c.scrollIntoView({block:"nearest"})}})}function jf(){if(me){const e=new WeakMap;window.addEventListener("click",t=>{var s;const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const r=n.parentElement,i=(s=n.nextElementSibling)==null?void 0:s.nextElementSibling;if(!r||!i)return;const l=/language-(shellscript|shell|bash|sh|zsh)/.test(r.className),o=[".vp-copy-ignore",".diff.remove"],c=i.cloneNode(!0);c.querySelectorAll(o.join(",")).forEach(a=>a.remove());let f=c.textContent||"";l&&(f=f.replace(/^ *(\$|>) /gm,"").trim()),cf(f).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const a=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,a)})}})}}async function cf(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const s=document.getSelection(),r=s?s.rangeCount>0&&s.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),r&&(s.removeAllRanges(),s.addRange(r)),n&&n.focus()}}function Vf(e,t){let n=!0,s=[];const r=i=>{if(n){n=!1,i.forEach(o=>{const c=ms(o);for(const f of document.head.children)if(f.isEqualNode(c)){s.push(f);return}});return}const l=i.map(ms);s.forEach((o,c)=>{const f=l.findIndex(a=>a==null?void 0:a.isEqualNode(o??null));f!==-1?delete l[f]:(o==null||o.remove(),delete s[c])}),l.forEach(o=>o&&document.head.appendChild(o)),s=[...s,...l].filter(Boolean)};Zi(()=>{const i=e.data,l=t.value,o=i&&i.description,c=i&&i.frontmatter.head||[],f=To(l,i);f!==document.title&&(document.title=f);const a=o||l.description;let h=document.querySelector("meta[name=description]");h?h.getAttribute("content")!==a&&h.setAttribute("content",a):ms(["meta",{name:"description",content:a}]),r(Eo(l.head,ff(c)))})}function ms([e,t,n]){const s=document.createElement(e);for(const r in t)s.setAttribute(r,t[r]);return n&&(s.innerHTML=n),e==="script"&&t.async==null&&(s.async=!1),s}function af(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function ff(e){return e.filter(t=>!af(t))}const vs=new Set,Ro=()=>document.createElement("link"),uf=e=>{const t=Ro();t.rel="prefetch",t.href=e,document.head.appendChild(t)},df=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let mn;const hf=me&&(mn=Ro())&&mn.relList&&mn.relList.supports&&mn.relList.supports("prefetch")?uf:df;function Wf(){if(!me||!window.IntersectionObserver)return;let e;if((e=navigator.connection)&&(e.saveData||/2g/.test(e.effectiveType)))return;const t=window.requestIdleCallback||setTimeout;let n=null;const s=()=>{n&&n.disconnect(),n=new IntersectionObserver(i=>{i.forEach(l=>{if(l.isIntersecting){const o=l.target;n.unobserve(o);const{pathname:c}=o;if(!vs.has(c)){vs.add(c);const f=nf(c);f&&hf(f)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(i=>{const{hostname:l,pathname:o}=new URL(i.href instanceof SVGAnimatedString?i.href.animVal:i.href,i.baseURI),c=o.match(/\.\w+$/);c&&c[0]!==".html"||i.target!=="_blank"&&l===location.hostname&&(o!==location.pathname?n.observe(i):vs.add(o))})})};Nt(s);const r=Ao();Le(()=>r.path,s),kn(()=>{n&&n.disconnect()})}export{_f as $,sf as A,mf as B,pf as C,Ie as D,Lf as E,we as F,he as G,gf as H,So as I,Ao as J,xc as K,_t as L,Pf as M,Fs as N,Rf as O,jn as P,Of as Q,me as R,Gt as S,Tf as T,Mf as U,tc as V,yf as W,Cf as X,Li as Y,Ef as Z,Hf as _,co as a,Vf as a0,rf as a1,If as a2,Za as a3,Ff as a4,Df as a5,wt as a6,Nf as a7,nf as a8,Af as a9,Wf as aa,jf as ab,$f as ac,Ms as ad,Sf as ae,As as b,wf as c,Oi as d,xf as e,Qa as f,Kr as g,ie as h,Ka as i,lo as j,Us as k,Ba as l,yo as m,Hs as n,Cs as o,mt as p,Le as q,vf as r,Zi as s,Uo as t,ef as u,Nt as v,Al as w,kn as x,bf as y,Wl as z}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/chunks/theme.CWt1tcxf.js b/packages/documentation/docs/.vitepress/dist/assets/chunks/theme.CWt1tcxf.js new file mode 100644 index 0000000000..dc123cc1c8 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/chunks/theme.CWt1tcxf.js @@ -0,0 +1 @@ +import{d as p,c as u,r as c,n as T,o as s,a as j,t as N,b as _,w as h,T as ce,e as m,_ as b,u as He,i as Ae,f as Be,g as ue,h as g,j as v,k as i,l as z,m as se,p as S,q as F,s as Y,v as U,x as de,y as ve,z as Ce,A as Ee,F as x,B as H,C as W,D as ge,E as Q,G as k,H as C,I as $e,J as X,K as G,L as Z,M as Fe,N as ye,O as De,P as Pe,Q as Le,R as ee,S as Oe,U as Ve,V as Se,W as Ge,X as Ue,Y as je,Z as ze,$ as We}from"./framework.CBTkueSR.js";const qe=p({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(e){return(t,n)=>(s(),u("span",{class:T(["VPBadge",e.type])},[c(t.$slots,"default",{},()=>[j(N(e.text),1)])],2))}}),Ke={key:0,class:"VPBackdrop"},Re=p({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(e){return(t,n)=>(s(),_(ce,{name:"fade"},{default:h(()=>[e.show?(s(),u("div",Ke)):m("",!0)]),_:1}))}}),Je=b(Re,[["__scopeId","data-v-c79a1216"]]),P=He;function Ye(e,t){let n,a=!1;return()=>{n&&clearTimeout(n),a?n=setTimeout(e,t):(e(),(a=!0)&&setTimeout(()=>a=!1,t))}}function ie(e){return e.startsWith("/")?e:`/${e}`}function fe(e){const{pathname:t,search:n,hash:a,protocol:o}=new URL(e,"http://a.com");if(Ae(e)||e.startsWith("#")||!o.startsWith("http")||!Be(t))return e;const{site:r}=P(),l=t.endsWith("/")||t.endsWith(".html")?e:e.replace(/(?:(^\.+)\/)?.*$/,`$1${t.replace(/(\.md)?$/,r.value.cleanUrls?"":".html")}${n}${a}`);return ue(l)}function K({correspondingLink:e=!1}={}){const{site:t,localeIndex:n,page:a,theme:o,hash:r}=P(),l=g(()=>{var d,y;return{label:(d=t.value.locales[n.value])==null?void 0:d.label,link:((y=t.value.locales[n.value])==null?void 0:y.link)||(n.value==="root"?"/":`/${n.value}/`)}});return{localeLinks:g(()=>Object.entries(t.value.locales).flatMap(([d,y])=>l.value.label===y.label?[]:{text:y.label,link:Qe(y.link||(d==="root"?"/":`/${d}/`),o.value.i18nRouting!==!1&&e,a.value.relativePath.slice(l.value.link.length-1),!t.value.cleanUrls)+r.value})),currentLang:l}}function Qe(e,t,n,a){return t?e.replace(/\/$/,"")+ie(n.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,a?".html":"")):e}const Xe={class:"NotFound"},Ze={class:"code"},et={class:"title"},tt={class:"quote"},nt={class:"action"},at=["href","aria-label"],ot=p({__name:"NotFound",setup(e){const{theme:t}=P(),{currentLang:n}=K();return(a,o)=>{var r,l,f,d,y;return s(),u("div",Xe,[v("p",Ze,N(((r=i(t).notFound)==null?void 0:r.code)??"404"),1),v("h1",et,N(((l=i(t).notFound)==null?void 0:l.title)??"PAGE NOT FOUND"),1),o[0]||(o[0]=v("div",{class:"divider"},null,-1)),v("blockquote",tt,N(((f=i(t).notFound)==null?void 0:f.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),v("div",nt,[v("a",{class:"link",href:i(ue)(i(n).link),"aria-label":((d=i(t).notFound)==null?void 0:d.linkLabel)??"go to home"},N(((y=i(t).notFound)==null?void 0:y.linkText)??"Take me home"),9,at)])])}}}),st=b(ot,[["__scopeId","data-v-d6be1790"]]);function Te(e,t){if(Array.isArray(e))return R(e);if(e==null)return[];t=ie(t);const n=Object.keys(e).sort((o,r)=>r.split("/").length-o.split("/").length).find(o=>t.startsWith(ie(o))),a=n?e[n]:[];return Array.isArray(a)?R(a):R(a.items,a.base)}function it(e){const t=[];let n=0;for(const a in e){const o=e[a];if(o.items){n=t.push(o);continue}t[n]||t.push({items:[]}),t[n].items.push(o)}return t}function rt(e){const t=[];function n(a){for(const o of a)o.text&&o.link&&t.push({text:o.text,link:o.link,docFooterText:o.docFooterText}),o.items&&n(o.items)}return n(e),t}function re(e,t){return Array.isArray(t)?t.some(n=>re(e,n)):z(e,t.link)?!0:t.items?re(e,t.items):!1}function R(e,t){return[...e].map(n=>{const a={...n},o=a.base||t;return o&&a.link&&(a.link=o+a.link),a.items&&(a.items=R(a.items,o)),a})}function D(){const{frontmatter:e,page:t,theme:n}=P(),a=se("(min-width: 960px)"),o=S(!1),r=g(()=>{const w=n.value.sidebar,A=t.value.relativePath;return w?Te(w,A):[]}),l=S(r.value);F(r,(w,A)=>{JSON.stringify(w)!==JSON.stringify(A)&&(l.value=r.value)});const f=g(()=>e.value.sidebar!==!1&&l.value.length>0&&e.value.layout!=="home"),d=g(()=>y?e.value.aside==null?n.value.aside==="left":e.value.aside==="left":!1),y=g(()=>e.value.layout==="home"?!1:e.value.aside!=null?!!e.value.aside:n.value.aside!==!1),L=g(()=>f.value&&a.value),$=g(()=>f.value?it(l.value):[]);function V(){o.value=!0}function M(){o.value=!1}function I(){o.value?M():V()}return{isOpen:o,sidebar:l,sidebarGroups:$,hasSidebar:f,hasAside:y,leftAside:d,isSidebarEnabled:L,open:V,close:M,toggle:I}}function lt(e,t){let n;Y(()=>{n=e.value?document.activeElement:void 0}),U(()=>{window.addEventListener("keyup",a)}),de(()=>{window.removeEventListener("keyup",a)});function a(o){o.key==="Escape"&&e.value&&(t(),n==null||n.focus())}}function ct(e){const{page:t,hash:n}=P(),a=S(!1),o=g(()=>e.value.collapsed!=null),r=g(()=>!!e.value.link),l=S(!1),f=()=>{l.value=z(t.value.relativePath,e.value.link)};F([t,e,n],f),U(f);const d=g(()=>l.value?!0:e.value.items?re(t.value.relativePath,e.value.items):!1),y=g(()=>!!(e.value.items&&e.value.items.length));Y(()=>{a.value=!!(o.value&&e.value.collapsed)}),ve(()=>{(l.value||d.value)&&(a.value=!1)});function L(){o.value&&(a.value=!a.value)}return{collapsed:a,collapsible:o,isLink:r,isActiveLink:l,hasActiveLink:d,hasChildren:y,toggle:L}}function ut(){const{hasSidebar:e}=D(),t=se("(min-width: 960px)"),n=se("(min-width: 1280px)");return{isAsideEnabled:g(()=>!n.value&&!t.value?!1:e.value?n.value:t.value)}}const dt=/\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\b/,le=[];function Ne(e){return typeof e.outline=="object"&&!Array.isArray(e.outline)&&e.outline.label||e.outlineTitle||"On this page"}function he(e){const t=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(n=>n.id&&n.hasChildNodes()).map(n=>{const a=Number(n.tagName[1]);return{element:n,title:vt(n),link:"#"+n.id,level:a}});return ft(t,e)}function vt(e){let t="";for(const n of e.childNodes)if(n.nodeType===1){if(dt.test(n.className))continue;t+=n.textContent}else n.nodeType===3&&(t+=n.textContent);return t.trim()}function ft(e,t){if(t===!1)return[];const n=(typeof t=="object"&&!Array.isArray(t)?t.level:t)||2,[a,o]=typeof n=="number"?[n,n]:n==="deep"?[2,6]:n;return pt(e,a,o)}function ht(e,t){const{isAsideEnabled:n}=ut(),a=Ye(r,100);let o=null;U(()=>{requestAnimationFrame(r),window.addEventListener("scroll",a)}),Ce(()=>{l(location.hash)}),de(()=>{window.removeEventListener("scroll",a)});function r(){if(!n.value)return;const f=window.scrollY,d=window.innerHeight,y=document.body.offsetHeight,L=Math.abs(f+d-y)<1,$=le.map(({element:M,link:I})=>({link:I,top:mt(M)})).filter(({top:M})=>!Number.isNaN(M)).sort((M,I)=>M.top-I.top);if(!$.length){l(null);return}if(f<1){l(null);return}if(L){l($[$.length-1].link);return}let V=null;for(const{link:M,top:I}of $){if(I>f+Ee()+4)break;V=M}l(V)}function l(f){o&&o.classList.remove("active"),f==null?o=null:o=e.value.querySelector(`a[href="${decodeURIComponent(f)}"]`);const d=o;d?(d.classList.add("active"),t.value.style.top=d.offsetTop+39+"px",t.value.style.opacity="1"):(t.value.style.top="33px",t.value.style.opacity="0")}}function mt(e){let t=0;for(;e!==document.body;){if(e===null)return NaN;t+=e.offsetTop,e=e.offsetParent}return t}function pt(e,t,n){le.length=0;const a=[],o=[];return e.forEach(r=>{const l={...r,children:[]};let f=o[o.length-1];for(;f&&f.level>=l.level;)o.pop(),f=o[o.length-1];if(l.element.classList.contains("ignore-header")||f&&"shouldIgnore"in f){o.push({level:l.level,shouldIgnore:!0});return}l.level>n||l.level{const o=W("VPDocOutlineItem",!0);return s(),u("ul",{class:T(["VPDocOutlineItem",e.root?"root":"nested"])},[(s(!0),u(x,null,H(e.headers,({children:r,link:l,title:f})=>(s(),u("li",null,[v("a",{class:"outline-link",href:l,onClick:t,title:f},N(f),9,kt),r!=null&&r.length?(s(),_(o,{key:0,headers:r},null,8,["headers"])):m("",!0)]))),256))],2)}}}),Me=b(_t,[["__scopeId","data-v-b933a997"]]),bt={class:"content"},gt={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},$t=p({__name:"VPDocAsideOutline",setup(e){const{frontmatter:t,theme:n}=P(),a=ge([]);Q(()=>{a.value=he(t.value.outline??n.value.outline)});const o=S(),r=S();return ht(o,r),(l,f)=>(s(),u("nav",{"aria-labelledby":"doc-outline-aria-label",class:T(["VPDocAsideOutline",{"has-outline":a.value.length>0}]),ref_key:"container",ref:o},[v("div",bt,[v("div",{class:"outline-marker",ref_key:"marker",ref:r},null,512),v("div",gt,N(i(Ne)(i(n))),1),k(Me,{headers:a.value,root:!0},null,8,["headers"])])],2))}}),yt=b($t,[["__scopeId","data-v-a5bbad30"]]),Pt={class:"VPDocAsideCarbonAds"},Lt=p({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(e){const t=()=>null;return(n,a)=>(s(),u("div",Pt,[k(i(t),{"carbon-ads":e.carbonAds},null,8,["carbon-ads"])]))}}),Vt={class:"VPDocAside"},St=p({__name:"VPDocAside",setup(e){const{theme:t}=P();return(n,a)=>(s(),u("div",Vt,[c(n.$slots,"aside-top",{},void 0,!0),c(n.$slots,"aside-outline-before",{},void 0,!0),k(yt),c(n.$slots,"aside-outline-after",{},void 0,!0),a[0]||(a[0]=v("div",{class:"spacer"},null,-1)),c(n.$slots,"aside-ads-before",{},void 0,!0),i(t).carbonAds?(s(),_(Lt,{key:0,"carbon-ads":i(t).carbonAds},null,8,["carbon-ads"])):m("",!0),c(n.$slots,"aside-ads-after",{},void 0,!0),c(n.$slots,"aside-bottom",{},void 0,!0)]))}}),Tt=b(St,[["__scopeId","data-v-3f215769"]]);function Nt(){const{theme:e,page:t}=P();return g(()=>{const{text:n="Edit this page",pattern:a=""}=e.value.editLink||{};let o;return typeof a=="function"?o=a(t.value):o=a.replace(/:path/g,t.value.filePath),{url:o,text:n}})}function Mt(){const{page:e,theme:t,frontmatter:n}=P();return g(()=>{var y,L,$,V,M,I,w,A;const a=Te(t.value.sidebar,e.value.relativePath),o=rt(a),r=xt(o,B=>B.link.replace(/[?#].*$/,"")),l=r.findIndex(B=>z(e.value.relativePath,B.link)),f=((y=t.value.docFooter)==null?void 0:y.prev)===!1&&!n.value.prev||n.value.prev===!1,d=((L=t.value.docFooter)==null?void 0:L.next)===!1&&!n.value.next||n.value.next===!1;return{prev:f?void 0:{text:(typeof n.value.prev=="string"?n.value.prev:typeof n.value.prev=="object"?n.value.prev.text:void 0)??(($=r[l-1])==null?void 0:$.docFooterText)??((V=r[l-1])==null?void 0:V.text),link:(typeof n.value.prev=="object"?n.value.prev.link:void 0)??((M=r[l-1])==null?void 0:M.link)},next:d?void 0:{text:(typeof n.value.next=="string"?n.value.next:typeof n.value.next=="object"?n.value.next.text:void 0)??((I=r[l+1])==null?void 0:I.docFooterText)??((w=r[l+1])==null?void 0:w.text),link:(typeof n.value.next=="object"?n.value.next.link:void 0)??((A=r[l+1])==null?void 0:A.link)}}})}function xt(e,t){const n=new Set;return e.filter(a=>{const o=t(a);return n.has(o)?!1:n.add(o)})}const E=p({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(e){const t=e,n=g(()=>t.tag??(t.href?"a":"span")),a=g(()=>t.href&&$e.test(t.href)||t.target==="_blank");return(o,r)=>(s(),_(C(n.value),{class:T(["VPLink",{link:e.href,"vp-external-link-icon":a.value,"no-icon":e.noIcon}]),href:e.href?i(fe)(e.href):void 0,target:e.target??(a.value?"_blank":void 0),rel:e.rel??(a.value?"noreferrer":void 0)},{default:h(()=>[c(o.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),It={class:"VPLastUpdated"},wt=["datetime"],Ht=p({__name:"VPDocFooterLastUpdated",setup(e){const{theme:t,page:n,lang:a}=P(),o=g(()=>new Date(n.value.lastUpdated)),r=g(()=>o.value.toISOString()),l=S("");return U(()=>{Y(()=>{var f,d,y;l.value=new Intl.DateTimeFormat((d=(f=t.value.lastUpdated)==null?void 0:f.formatOptions)!=null&&d.forceLocale?a.value:void 0,((y=t.value.lastUpdated)==null?void 0:y.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(o.value)})}),(f,d)=>{var y;return s(),u("p",It,[j(N(((y=i(t).lastUpdated)==null?void 0:y.text)||i(t).lastUpdatedText||"Last updated")+": ",1),v("time",{datetime:r.value},N(l.value),9,wt)])}}}),At=b(Ht,[["__scopeId","data-v-e98dd255"]]),Bt={key:0,class:"VPDocFooter"},Ct={key:0,class:"edit-info"},Et={key:0,class:"edit-link"},Ft={key:1,class:"last-updated"},Dt={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},Ot={class:"pager"},Gt=["innerHTML"],Ut=["innerHTML"],jt={class:"pager"},zt=["innerHTML"],Wt=["innerHTML"],qt=p({__name:"VPDocFooter",setup(e){const{theme:t,page:n,frontmatter:a}=P(),o=Nt(),r=Mt(),l=g(()=>t.value.editLink&&a.value.editLink!==!1),f=g(()=>n.value.lastUpdated),d=g(()=>l.value||f.value||r.value.prev||r.value.next);return(y,L)=>{var $,V,M,I;return d.value?(s(),u("footer",Bt,[c(y.$slots,"doc-footer-before",{},void 0,!0),l.value||f.value?(s(),u("div",Ct,[l.value?(s(),u("div",Et,[k(E,{class:"edit-link-button",href:i(o).url,"no-icon":!0},{default:h(()=>[L[0]||(L[0]=v("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),j(" "+N(i(o).text),1)]),_:1},8,["href"])])):m("",!0),f.value?(s(),u("div",Ft,[k(At)])):m("",!0)])):m("",!0),($=i(r).prev)!=null&&$.link||(V=i(r).next)!=null&&V.link?(s(),u("nav",Dt,[L[1]||(L[1]=v("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),v("div",Ot,[(M=i(r).prev)!=null&&M.link?(s(),_(E,{key:0,class:"pager-link prev",href:i(r).prev.link},{default:h(()=>{var w;return[v("span",{class:"desc",innerHTML:((w=i(t).docFooter)==null?void 0:w.prev)||"Previous page"},null,8,Gt),v("span",{class:"title",innerHTML:i(r).prev.text},null,8,Ut)]}),_:1},8,["href"])):m("",!0)]),v("div",jt,[(I=i(r).next)!=null&&I.link?(s(),_(E,{key:0,class:"pager-link next",href:i(r).next.link},{default:h(()=>{var w;return[v("span",{class:"desc",innerHTML:((w=i(t).docFooter)==null?void 0:w.next)||"Next page"},null,8,zt),v("span",{class:"title",innerHTML:i(r).next.text},null,8,Wt)]}),_:1},8,["href"])):m("",!0)])])):m("",!0)])):m("",!0)}}}),Kt=b(qt,[["__scopeId","data-v-e257564d"]]),Rt={class:"container"},Jt={class:"aside-container"},Yt={class:"aside-content"},Qt={class:"content"},Xt={class:"content-container"},Zt={class:"main"},en=p({__name:"VPDoc",setup(e){const{theme:t}=P(),n=X(),{hasSidebar:a,hasAside:o,leftAside:r}=D(),l=g(()=>n.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(f,d)=>{const y=W("Content");return s(),u("div",{class:T(["VPDoc",{"has-sidebar":i(a),"has-aside":i(o)}])},[c(f.$slots,"doc-top",{},void 0,!0),v("div",Rt,[i(o)?(s(),u("div",{key:0,class:T(["aside",{"left-aside":i(r)}])},[d[0]||(d[0]=v("div",{class:"aside-curtain"},null,-1)),v("div",Jt,[v("div",Yt,[k(Tt,null,{"aside-top":h(()=>[c(f.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":h(()=>[c(f.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":h(()=>[c(f.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":h(()=>[c(f.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":h(()=>[c(f.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":h(()=>[c(f.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):m("",!0),v("div",Qt,[v("div",Xt,[c(f.$slots,"doc-before",{},void 0,!0),v("main",Zt,[k(y,{class:T(["vp-doc",[l.value,i(t).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),k(Kt,null,{"doc-footer-before":h(()=>[c(f.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),c(f.$slots,"doc-after",{},void 0,!0)])])]),c(f.$slots,"doc-bottom",{},void 0,!0)],2)}}}),tn=b(en,[["__scopeId","data-v-39a288b8"]]),nn=p({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(e){const t=e,n=g(()=>t.href&&$e.test(t.href)),a=g(()=>t.tag||(t.href?"a":"button"));return(o,r)=>(s(),_(C(a.value),{class:T(["VPButton",[e.size,e.theme]]),href:e.href?i(fe)(e.href):void 0,target:t.target??(n.value?"_blank":void 0),rel:t.rel??(n.value?"noreferrer":void 0)},{default:h(()=>[j(N(e.text),1)]),_:1},8,["class","href","target","rel"]))}}),an=b(nn,[["__scopeId","data-v-fa7799d5"]]),on=["src","alt"],sn=p({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(e){return(t,n)=>{const a=W("VPImage",!0);return e.image?(s(),u(x,{key:0},[typeof e.image=="string"||"src"in e.image?(s(),u("img",G({key:0,class:"VPImage"},typeof e.image=="string"?t.$attrs:{...e.image,...t.$attrs},{src:i(ue)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,on)):(s(),u(x,{key:1},[k(a,G({class:"dark",image:e.image.dark,alt:e.image.alt},t.$attrs),null,16,["image","alt"]),k(a,G({class:"light",image:e.image.light,alt:e.image.alt},t.$attrs),null,16,["image","alt"])],64))],64)):m("",!0)}}}),J=b(sn,[["__scopeId","data-v-8426fc1a"]]),rn={class:"container"},ln={class:"main"},cn={class:"heading"},un=["innerHTML"],dn=["innerHTML"],vn=["innerHTML"],fn={key:0,class:"actions"},hn={key:0,class:"image"},mn={class:"image-container"},pn=p({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(e){const t=Z("hero-image-slot-exists");return(n,a)=>(s(),u("div",{class:T(["VPHero",{"has-image":e.image||i(t)}])},[v("div",rn,[v("div",ln,[c(n.$slots,"home-hero-info-before",{},void 0,!0),c(n.$slots,"home-hero-info",{},()=>[v("h1",cn,[e.name?(s(),u("span",{key:0,innerHTML:e.name,class:"name clip"},null,8,un)):m("",!0),e.text?(s(),u("span",{key:1,innerHTML:e.text,class:"text"},null,8,dn)):m("",!0)]),e.tagline?(s(),u("p",{key:0,innerHTML:e.tagline,class:"tagline"},null,8,vn)):m("",!0)],!0),c(n.$slots,"home-hero-info-after",{},void 0,!0),e.actions?(s(),u("div",fn,[(s(!0),u(x,null,H(e.actions,o=>(s(),u("div",{key:o.link,class:"action"},[k(an,{tag:"a",size:"medium",theme:o.theme,text:o.text,href:o.link,target:o.target,rel:o.rel},null,8,["theme","text","href","target","rel"])]))),128))])):m("",!0),c(n.$slots,"home-hero-actions-after",{},void 0,!0)]),e.image||i(t)?(s(),u("div",hn,[v("div",mn,[a[0]||(a[0]=v("div",{class:"image-bg"},null,-1)),c(n.$slots,"home-hero-image",{},()=>[e.image?(s(),_(J,{key:0,class:"image-src",image:e.image},null,8,["image"])):m("",!0)],!0)])])):m("",!0)])],2))}}),kn=b(pn,[["__scopeId","data-v-4f9c455b"]]),_n=p({__name:"VPHomeHero",setup(e){const{frontmatter:t}=P();return(n,a)=>i(t).hero?(s(),_(kn,{key:0,class:"VPHomeHero",name:i(t).hero.name,text:i(t).hero.text,tagline:i(t).hero.tagline,image:i(t).hero.image,actions:i(t).hero.actions},{"home-hero-info-before":h(()=>[c(n.$slots,"home-hero-info-before")]),"home-hero-info":h(()=>[c(n.$slots,"home-hero-info")]),"home-hero-info-after":h(()=>[c(n.$slots,"home-hero-info-after")]),"home-hero-actions-after":h(()=>[c(n.$slots,"home-hero-actions-after")]),"home-hero-image":h(()=>[c(n.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):m("",!0)}}),bn={class:"box"},gn={key:0,class:"icon"},$n=["innerHTML"],yn=["innerHTML"],Pn=["innerHTML"],Ln={key:4,class:"link-text"},Vn={class:"link-text-value"},Sn=p({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(e){return(t,n)=>(s(),_(E,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:h(()=>[v("article",bn,[typeof e.icon=="object"&&e.icon.wrap?(s(),u("div",gn,[k(J,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(s(),_(J,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(s(),u("div",{key:2,class:"icon",innerHTML:e.icon},null,8,$n)):m("",!0),v("h2",{class:"title",innerHTML:e.title},null,8,yn),e.details?(s(),u("p",{key:3,class:"details",innerHTML:e.details},null,8,Pn)):m("",!0),e.linkText?(s(),u("div",Ln,[v("p",Vn,[j(N(e.linkText)+" ",1),n[0]||(n[0]=v("span",{class:"vpi-arrow-right link-text-icon"},null,-1))])])):m("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),Tn=b(Sn,[["__scopeId","data-v-a3976bdc"]]),Nn={key:0,class:"VPFeatures"},Mn={class:"container"},xn={class:"items"},In=p({__name:"VPFeatures",props:{features:{}},setup(e){const t=e,n=g(()=>{const a=t.features.length;if(a){if(a===2)return"grid-2";if(a===3)return"grid-3";if(a%3===0)return"grid-6";if(a>3)return"grid-4"}else return});return(a,o)=>e.features?(s(),u("div",Nn,[v("div",Mn,[v("div",xn,[(s(!0),u(x,null,H(e.features,r=>(s(),u("div",{key:r.title,class:T(["item",[n.value]])},[k(Tn,{icon:r.icon,title:r.title,details:r.details,link:r.link,"link-text":r.linkText,rel:r.rel,target:r.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):m("",!0)}}),wn=b(In,[["__scopeId","data-v-a6181336"]]),Hn=p({__name:"VPHomeFeatures",setup(e){const{frontmatter:t}=P();return(n,a)=>i(t).features?(s(),_(wn,{key:0,class:"VPHomeFeatures",features:i(t).features},null,8,["features"])):m("",!0)}}),An=p({__name:"VPHomeContent",setup(e){const{width:t}=Fe({initialWidth:0,includeScrollbar:!1});return(n,a)=>(s(),u("div",{class:"vp-doc container",style:ye(i(t)?{"--vp-offset":`calc(50% - ${i(t)/2}px)`}:{})},[c(n.$slots,"default",{},void 0,!0)],4))}}),Bn=b(An,[["__scopeId","data-v-8e2d4988"]]),Cn=p({__name:"VPHome",setup(e){const{frontmatter:t,theme:n}=P();return(a,o)=>{const r=W("Content");return s(),u("div",{class:T(["VPHome",{"external-link-icon-enabled":i(n).externalLinkIcon}])},[c(a.$slots,"home-hero-before",{},void 0,!0),k(_n,null,{"home-hero-info-before":h(()=>[c(a.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":h(()=>[c(a.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":h(()=>[c(a.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":h(()=>[c(a.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":h(()=>[c(a.$slots,"home-hero-image",{},void 0,!0)]),_:3}),c(a.$slots,"home-hero-after",{},void 0,!0),c(a.$slots,"home-features-before",{},void 0,!0),k(Hn),c(a.$slots,"home-features-after",{},void 0,!0),i(t).markdownStyles!==!1?(s(),_(Bn,{key:0},{default:h(()=>[k(r)]),_:1})):(s(),_(r,{key:1}))],2)}}}),En=b(Cn,[["__scopeId","data-v-8b561e3d"]]),Fn={},Dn={class:"VPPage"};function On(e,t){const n=W("Content");return s(),u("div",Dn,[c(e.$slots,"page-top"),k(n),c(e.$slots,"page-bottom")])}const Gn=b(Fn,[["render",On]]),Un=p({__name:"VPContent",setup(e){const{page:t,frontmatter:n}=P(),{hasSidebar:a}=D();return(o,r)=>(s(),u("div",{class:T(["VPContent",{"has-sidebar":i(a),"is-home":i(n).layout==="home"}]),id:"VPContent"},[i(t).isNotFound?c(o.$slots,"not-found",{key:0},()=>[k(st)],!0):i(n).layout==="page"?(s(),_(Gn,{key:1},{"page-top":h(()=>[c(o.$slots,"page-top",{},void 0,!0)]),"page-bottom":h(()=>[c(o.$slots,"page-bottom",{},void 0,!0)]),_:3})):i(n).layout==="home"?(s(),_(En,{key:2},{"home-hero-before":h(()=>[c(o.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":h(()=>[c(o.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":h(()=>[c(o.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":h(()=>[c(o.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":h(()=>[c(o.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":h(()=>[c(o.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":h(()=>[c(o.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":h(()=>[c(o.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":h(()=>[c(o.$slots,"home-features-after",{},void 0,!0)]),_:3})):i(n).layout&&i(n).layout!=="doc"?(s(),_(C(i(n).layout),{key:3})):(s(),_(tn,{key:4},{"doc-top":h(()=>[c(o.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":h(()=>[c(o.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":h(()=>[c(o.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":h(()=>[c(o.$slots,"doc-before",{},void 0,!0)]),"doc-after":h(()=>[c(o.$slots,"doc-after",{},void 0,!0)]),"aside-top":h(()=>[c(o.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":h(()=>[c(o.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":h(()=>[c(o.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":h(()=>[c(o.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":h(()=>[c(o.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":h(()=>[c(o.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),jn=b(Un,[["__scopeId","data-v-1428d186"]]),zn={class:"container"},Wn=["innerHTML"],qn=["innerHTML"],Kn=p({__name:"VPFooter",setup(e){const{theme:t,frontmatter:n}=P(),{hasSidebar:a}=D();return(o,r)=>i(t).footer&&i(n).footer!==!1?(s(),u("footer",{key:0,class:T(["VPFooter",{"has-sidebar":i(a)}])},[v("div",zn,[i(t).footer.message?(s(),u("p",{key:0,class:"message",innerHTML:i(t).footer.message},null,8,Wn)):m("",!0),i(t).footer.copyright?(s(),u("p",{key:1,class:"copyright",innerHTML:i(t).footer.copyright},null,8,qn)):m("",!0)])],2)):m("",!0)}}),Rn=b(Kn,[["__scopeId","data-v-e315a0ad"]]);function Jn(){const{theme:e,frontmatter:t}=P(),n=ge([]),a=g(()=>n.value.length>0);return Q(()=>{n.value=he(t.value.outline??e.value.outline)}),{headers:n,hasLocalNav:a}}const Yn={class:"menu-text"},Qn={class:"header"},Xn={class:"outline"},Zn=p({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(e){const t=e,{theme:n}=P(),a=S(!1),o=S(0),r=S(),l=S();function f($){var V;(V=r.value)!=null&&V.contains($.target)||(a.value=!1)}F(a,$=>{if($){document.addEventListener("click",f);return}document.removeEventListener("click",f)}),De("Escape",()=>{a.value=!1}),Q(()=>{a.value=!1});function d(){a.value=!a.value,o.value=window.innerHeight+Math.min(window.scrollY-t.navHeight,0)}function y($){$.target.classList.contains("outline-link")&&(l.value&&(l.value.style.transition="none"),Pe(()=>{a.value=!1}))}function L(){a.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return($,V)=>(s(),u("div",{class:"VPLocalNavOutlineDropdown",style:ye({"--vp-vh":o.value+"px"}),ref_key:"main",ref:r},[e.headers.length>0?(s(),u("button",{key:0,onClick:d,class:T({open:a.value})},[v("span",Yn,N(i(Ne)(i(n))),1),V[0]||(V[0]=v("span",{class:"vpi-chevron-right icon"},null,-1))],2)):(s(),u("button",{key:1,onClick:L},N(i(n).returnToTopLabel||"Return to top"),1)),k(ce,{name:"flyout"},{default:h(()=>[a.value?(s(),u("div",{key:0,ref_key:"items",ref:l,class:"items",onClick:y},[v("div",Qn,[v("a",{class:"top-link",href:"#",onClick:L},N(i(n).returnToTopLabel||"Return to top"),1)]),v("div",Xn,[k(Me,{headers:e.headers},null,8,["headers"])])],512)):m("",!0)]),_:1})],4))}}),ea=b(Zn,[["__scopeId","data-v-8a42e2b4"]]),ta={class:"container"},na=["aria-expanded"],aa={class:"menu-text"},oa=p({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(e){const{theme:t,frontmatter:n}=P(),{hasSidebar:a}=D(),{headers:o}=Jn(),{y:r}=Le(),l=S(0);U(()=>{l.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),Q(()=>{o.value=he(n.value.outline??t.value.outline)});const f=g(()=>o.value.length===0),d=g(()=>f.value&&!a.value),y=g(()=>({VPLocalNav:!0,"has-sidebar":a.value,empty:f.value,fixed:d.value}));return(L,$)=>i(n).layout!=="home"&&(!d.value||i(r)>=l.value)?(s(),u("div",{key:0,class:T(y.value)},[v("div",ta,[i(a)?(s(),u("button",{key:0,class:"menu","aria-expanded":e.open,"aria-controls":"VPSidebarNav",onClick:$[0]||($[0]=V=>L.$emit("open-menu"))},[$[1]||($[1]=v("span",{class:"vpi-align-left menu-icon"},null,-1)),v("span",aa,N(i(t).sidebarMenuLabel||"Menu"),1)],8,na)):m("",!0),k(ea,{headers:i(o),navHeight:l.value},null,8,["headers","navHeight"])])],2)):m("",!0)}}),sa=b(oa,[["__scopeId","data-v-a6f0e41e"]]);function ia(){const e=S(!1);function t(){e.value=!0,window.addEventListener("resize",o)}function n(){e.value=!1,window.removeEventListener("resize",o)}function a(){e.value?n():t()}function o(){window.outerWidth>=768&&n()}const r=X();return F(()=>r.path,n),{isScreenOpen:e,openScreen:t,closeScreen:n,toggleScreen:a}}const ra={},la={class:"VPSwitch",type:"button",role:"switch"},ca={class:"check"},ua={key:0,class:"icon"};function da(e,t){return s(),u("button",la,[v("span",ca,[e.$slots.default?(s(),u("span",ua,[c(e.$slots,"default",{},void 0,!0)])):m("",!0)])])}const va=b(ra,[["render",da],["__scopeId","data-v-1d5665e3"]]),fa=p({__name:"VPSwitchAppearance",setup(e){const{isDark:t,theme:n}=P(),a=Z("toggle-appearance",()=>{t.value=!t.value}),o=S("");return ve(()=>{o.value=t.value?n.value.lightModeSwitchTitle||"Switch to light theme":n.value.darkModeSwitchTitle||"Switch to dark theme"}),(r,l)=>(s(),_(va,{title:o.value,class:"VPSwitchAppearance","aria-checked":i(t),onClick:i(a)},{default:h(()=>[...l[0]||(l[0]=[v("span",{class:"vpi-sun sun"},null,-1),v("span",{class:"vpi-moon moon"},null,-1)])]),_:1},8,["title","aria-checked","onClick"]))}}),me=b(fa,[["__scopeId","data-v-5337faa4"]]),ha={key:0,class:"VPNavBarAppearance"},ma=p({__name:"VPNavBarAppearance",setup(e){const{site:t}=P();return(n,a)=>i(t).appearance&&i(t).appearance!=="force-dark"&&i(t).appearance!=="force-auto"?(s(),u("div",ha,[k(me)])):m("",!0)}}),pa=b(ma,[["__scopeId","data-v-6c893767"]]),pe=S();let xe=!1,oe=0;function ka(e){const t=S(!1);if(ee){!xe&&_a(),oe++;const n=F(pe,a=>{var o,r,l;a===e.el.value||(o=e.el.value)!=null&&o.contains(a)?(t.value=!0,(r=e.onFocus)==null||r.call(e)):(t.value=!1,(l=e.onBlur)==null||l.call(e))});de(()=>{n(),oe--,oe||ba()})}return Oe(t)}function _a(){document.addEventListener("focusin",Ie),xe=!0,pe.value=document.activeElement}function ba(){document.removeEventListener("focusin",Ie)}function Ie(){pe.value=document.activeElement}const ga={class:"VPMenuLink"},$a=["innerHTML"],ya=p({__name:"VPMenuLink",props:{item:{}},setup(e){const{page:t}=P();return(n,a)=>(s(),u("div",ga,[k(E,{class:T({active:i(z)(i(t).relativePath,e.item.activeMatch||e.item.link,!!e.item.activeMatch)}),href:e.item.link,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon},{default:h(()=>[v("span",{innerHTML:e.item.text},null,8,$a)]),_:1},8,["class","href","target","rel","no-icon"])]))}}),te=b(ya,[["__scopeId","data-v-35975db6"]]),Pa={class:"VPMenuGroup"},La={key:0,class:"title"},Va=p({__name:"VPMenuGroup",props:{text:{},items:{}},setup(e){return(t,n)=>(s(),u("div",Pa,[e.text?(s(),u("p",La,N(e.text),1)):m("",!0),(s(!0),u(x,null,H(e.items,a=>(s(),u(x,null,["link"in a?(s(),_(te,{key:0,item:a},null,8,["item"])):m("",!0)],64))),256))]))}}),Sa=b(Va,[["__scopeId","data-v-69e747b5"]]),Ta={class:"VPMenu"},Na={key:0,class:"items"},Ma=p({__name:"VPMenu",props:{items:{}},setup(e){return(t,n)=>(s(),u("div",Ta,[e.items?(s(),u("div",Na,[(s(!0),u(x,null,H(e.items,a=>(s(),u(x,{key:JSON.stringify(a)},["link"in a?(s(),_(te,{key:0,item:a},null,8,["item"])):"component"in a?(s(),_(C(a.component),G({key:1,ref_for:!0},a.props),null,16)):(s(),_(Sa,{key:2,text:a.text,items:a.items},null,8,["text","items"]))],64))),128))])):m("",!0),c(t.$slots,"default",{},void 0,!0)]))}}),xa=b(Ma,[["__scopeId","data-v-b98bc113"]]),Ia=["aria-expanded","aria-label"],wa={key:0,class:"text"},Ha=["innerHTML"],Aa={key:1,class:"vpi-more-horizontal icon"},Ba={class:"menu"},Ca=p({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(e){const t=S(!1),n=S();ka({el:n,onBlur:a});function a(){t.value=!1}return(o,r)=>(s(),u("div",{class:"VPFlyout",ref_key:"el",ref:n,onMouseenter:r[1]||(r[1]=l=>t.value=!0),onMouseleave:r[2]||(r[2]=l=>t.value=!1)},[v("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":t.value,"aria-label":e.label,onClick:r[0]||(r[0]=l=>t.value=!t.value)},[e.button||e.icon?(s(),u("span",wa,[e.icon?(s(),u("span",{key:0,class:T([e.icon,"option-icon"])},null,2)):m("",!0),e.button?(s(),u("span",{key:1,innerHTML:e.button},null,8,Ha)):m("",!0),r[3]||(r[3]=v("span",{class:"vpi-chevron-down text-icon"},null,-1))])):(s(),u("span",Aa))],8,Ia),v("div",Ba,[k(xa,{items:e.items},{default:h(()=>[c(o.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),ke=b(Ca,[["__scopeId","data-v-cf11d7a2"]]),Ea=["href","aria-label","innerHTML"],Fa=p({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(e){const t=e,n=S();U(async()=>{var r;await Pe();const o=(r=n.value)==null?void 0:r.children[0];o instanceof HTMLElement&&o.className.startsWith("vpi-social-")&&(getComputedStyle(o).maskImage||getComputedStyle(o).webkitMaskImage)==="none"&&o.style.setProperty("--icon",`url('https://api.iconify.design/simple-icons/${t.icon}.svg')`)});const a=g(()=>typeof t.icon=="object"?t.icon.svg:``);return(o,r)=>(s(),u("a",{ref_key:"el",ref:n,class:"VPSocialLink no-icon",href:e.link,"aria-label":e.ariaLabel??(typeof e.icon=="string"?e.icon:""),target:"_blank",rel:"noopener",innerHTML:a.value},null,8,Ea))}}),Da=b(Fa,[["__scopeId","data-v-bd121fe5"]]),Oa={class:"VPSocialLinks"},Ga=p({__name:"VPSocialLinks",props:{links:{}},setup(e){return(t,n)=>(s(),u("div",Oa,[(s(!0),u(x,null,H(e.links,({link:a,icon:o,ariaLabel:r})=>(s(),_(Da,{key:a,icon:o,link:a,ariaLabel:r},null,8,["icon","link","ariaLabel"]))),128))]))}}),_e=b(Ga,[["__scopeId","data-v-7bc22406"]]),Ua={key:0,class:"group translations"},ja={class:"trans-title"},za={key:1,class:"group"},Wa={class:"item appearance"},qa={class:"label"},Ka={class:"appearance-action"},Ra={key:2,class:"group"},Ja={class:"item social-links"},Ya=p({__name:"VPNavBarExtra",setup(e){const{site:t,theme:n}=P(),{localeLinks:a,currentLang:o}=K({correspondingLink:!0}),r=g(()=>a.value.length&&o.value.label||t.value.appearance||n.value.socialLinks);return(l,f)=>r.value?(s(),_(ke,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:h(()=>[i(a).length&&i(o).label?(s(),u("div",Ua,[v("p",ja,N(i(o).label),1),(s(!0),u(x,null,H(i(a),d=>(s(),_(te,{key:d.link,item:d},null,8,["item"]))),128))])):m("",!0),i(t).appearance&&i(t).appearance!=="force-dark"&&i(t).appearance!=="force-auto"?(s(),u("div",za,[v("div",Wa,[v("p",qa,N(i(n).darkModeSwitchLabel||"Appearance"),1),v("div",Ka,[k(me)])])])):m("",!0),i(n).socialLinks?(s(),u("div",Ra,[v("div",Ja,[k(_e,{class:"social-links-list",links:i(n).socialLinks},null,8,["links"])])])):m("",!0)]),_:1})):m("",!0)}}),Qa=b(Ya,[["__scopeId","data-v-bb2aa2f0"]]),Xa=["aria-expanded"],Za=p({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(e){return(t,n)=>(s(),u("button",{type:"button",class:T(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:n[0]||(n[0]=a=>t.$emit("click"))},[...n[1]||(n[1]=[v("span",{class:"container"},[v("span",{class:"top"}),v("span",{class:"middle"}),v("span",{class:"bottom"})],-1)])],10,Xa))}}),eo=b(Za,[["__scopeId","data-v-e5dd9c1c"]]),to=["innerHTML"],no=p({__name:"VPNavBarMenuLink",props:{item:{}},setup(e){const{page:t}=P();return(n,a)=>(s(),_(E,{class:T({VPNavBarMenuLink:!0,active:i(z)(i(t).relativePath,e.item.activeMatch||e.item.link,!!e.item.activeMatch)}),href:e.item.link,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,tabindex:"0"},{default:h(()=>[v("span",{innerHTML:e.item.text},null,8,to)]),_:1},8,["class","href","target","rel","no-icon"]))}}),ao=b(no,[["__scopeId","data-v-e56f3d57"]]),oo=p({__name:"VPNavBarMenuGroup",props:{item:{}},setup(e){const t=e,{page:n}=P(),a=r=>"component"in r?!1:"link"in r?z(n.value.relativePath,r.link,!!t.item.activeMatch):r.items.some(a),o=g(()=>a(t.item));return(r,l)=>(s(),_(ke,{class:T({VPNavBarMenuGroup:!0,active:i(z)(i(n).relativePath,e.item.activeMatch,!!e.item.activeMatch)||o.value}),button:e.item.text,items:e.item.items},null,8,["class","button","items"]))}}),so={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},io=p({__name:"VPNavBarMenu",setup(e){const{theme:t}=P();return(n,a)=>i(t).nav?(s(),u("nav",so,[a[0]||(a[0]=v("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),(s(!0),u(x,null,H(i(t).nav,o=>(s(),u(x,{key:JSON.stringify(o)},["link"in o?(s(),_(ao,{key:0,item:o},null,8,["item"])):"component"in o?(s(),_(C(o.component),G({key:1,ref_for:!0},o.props),null,16)):(s(),_(oo,{key:2,item:o},null,8,["item"]))],64))),128))])):m("",!0)}}),ro=b(io,[["__scopeId","data-v-dc692963"]]);function lo(e){const{localeIndex:t,theme:n}=P();function a(o){var I,w,A;const r=o.split("."),l=(I=n.value.search)==null?void 0:I.options,f=l&&typeof l=="object",d=f&&((A=(w=l.locales)==null?void 0:w[t.value])==null?void 0:A.translations)||null,y=f&&l.translations||null;let L=d,$=y,V=e;const M=r.pop();for(const B of r){let O=null;const q=V==null?void 0:V[B];q&&(O=V=q);const ne=$==null?void 0:$[B];ne&&(O=$=ne);const ae=L==null?void 0:L[B];ae&&(O=L=ae),q||(V=O),ne||($=O),ae||(L=O)}return(L==null?void 0:L[M])??($==null?void 0:$[M])??(V==null?void 0:V[M])??""}return a}const co=["aria-label"],uo={class:"DocSearch-Button-Container"},vo={class:"DocSearch-Button-Placeholder"},be=p({__name:"VPNavBarSearchButton",setup(e){const n=lo({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(a,o)=>(s(),u("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":i(n)("button.buttonAriaLabel")},[v("span",uo,[o[0]||(o[0]=v("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1)),v("span",vo,N(i(n)("button.buttonText")),1)]),o[1]||(o[1]=v("span",{class:"DocSearch-Button-Keys"},[v("kbd",{class:"DocSearch-Button-Key"}),v("kbd",{class:"DocSearch-Button-Key"},"K")],-1))],8,co))}}),fo={class:"VPNavBarSearch"},ho={id:"local-search"},mo={key:1,id:"docsearch"},po=p({__name:"VPNavBarSearch",setup(e){const t=()=>null,n=()=>null,{theme:a}=P(),o=S(!1),r=S(!1);U(()=>{});function l(){o.value||(o.value=!0,setTimeout(f,16))}function f(){const L=new Event("keydown");L.key="k",L.metaKey=!0,window.dispatchEvent(L),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||f()},16)}const d=S(!1),y="";return(L,$)=>{var V;return s(),u("div",fo,[i(y)==="local"?(s(),u(x,{key:0},[d.value?(s(),_(i(t),{key:0,onClose:$[0]||($[0]=M=>d.value=!1)})):m("",!0),v("div",ho,[k(be,{onClick:$[1]||($[1]=M=>d.value=!0)})])],64)):i(y)==="algolia"?(s(),u(x,{key:1},[o.value?(s(),_(i(n),{key:0,algolia:((V=i(a).search)==null?void 0:V.options)??i(a).algolia,onVnodeBeforeMount:$[2]||($[2]=M=>r.value=!0)},null,8,["algolia"])):m("",!0),r.value?m("",!0):(s(),u("div",mo,[k(be,{onClick:l})]))],64)):m("",!0)])}}}),ko=p({__name:"VPNavBarSocialLinks",setup(e){const{theme:t}=P();return(n,a)=>i(t).socialLinks?(s(),_(_e,{key:0,class:"VPNavBarSocialLinks",links:i(t).socialLinks},null,8,["links"])):m("",!0)}}),_o=b(ko,[["__scopeId","data-v-0394ad82"]]),bo=["href","rel","target"],go=["innerHTML"],$o={key:2},yo=p({__name:"VPNavBarTitle",setup(e){const{site:t,theme:n}=P(),{hasSidebar:a}=D(),{currentLang:o}=K(),r=g(()=>{var d;return typeof n.value.logoLink=="string"?n.value.logoLink:(d=n.value.logoLink)==null?void 0:d.link}),l=g(()=>{var d;return typeof n.value.logoLink=="string"||(d=n.value.logoLink)==null?void 0:d.rel}),f=g(()=>{var d;return typeof n.value.logoLink=="string"||(d=n.value.logoLink)==null?void 0:d.target});return(d,y)=>(s(),u("div",{class:T(["VPNavBarTitle",{"has-sidebar":i(a)}])},[v("a",{class:"title",href:r.value??i(fe)(i(o).link),rel:l.value,target:f.value},[c(d.$slots,"nav-bar-title-before",{},void 0,!0),i(n).logo?(s(),_(J,{key:0,class:"logo",image:i(n).logo},null,8,["image"])):m("",!0),i(n).siteTitle?(s(),u("span",{key:1,innerHTML:i(n).siteTitle},null,8,go)):i(n).siteTitle===void 0?(s(),u("span",$o,N(i(t).title),1)):m("",!0),c(d.$slots,"nav-bar-title-after",{},void 0,!0)],8,bo)],2))}}),Po=b(yo,[["__scopeId","data-v-1168a8e4"]]),Lo={class:"items"},Vo={class:"title"},So=p({__name:"VPNavBarTranslations",setup(e){const{theme:t}=P(),{localeLinks:n,currentLang:a}=K({correspondingLink:!0});return(o,r)=>i(n).length&&i(a).label?(s(),_(ke,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:i(t).langMenuLabel||"Change language"},{default:h(()=>[v("div",Lo,[v("p",Vo,N(i(a).label),1),(s(!0),u(x,null,H(i(n),l=>(s(),_(te,{key:l.link,item:l},null,8,["item"]))),128))])]),_:1},8,["label"])):m("",!0)}}),To=b(So,[["__scopeId","data-v-88af2de4"]]),No={class:"wrapper"},Mo={class:"container"},xo={class:"title"},Io={class:"content"},wo={class:"content-body"},Ho=p({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(e){const t=e,{y:n}=Le(),{hasSidebar:a}=D(),{frontmatter:o}=P(),r=S({});return ve(()=>{r.value={"has-sidebar":a.value,home:o.value.layout==="home",top:n.value===0,"screen-open":t.isScreenOpen}}),(l,f)=>(s(),u("div",{class:T(["VPNavBar",r.value])},[v("div",No,[v("div",Mo,[v("div",xo,[k(Po,null,{"nav-bar-title-before":h(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":h(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),v("div",Io,[v("div",wo,[c(l.$slots,"nav-bar-content-before",{},void 0,!0),k(po,{class:"search"}),k(ro,{class:"menu"}),k(To,{class:"translations"}),k(pa,{class:"appearance"}),k(_o,{class:"social-links"}),k(Qa,{class:"extra"}),c(l.$slots,"nav-bar-content-after",{},void 0,!0),k(eo,{class:"hamburger",active:e.isScreenOpen,onClick:f[0]||(f[0]=d=>l.$emit("toggle-screen"))},null,8,["active"])])])])]),f[1]||(f[1]=v("div",{class:"divider"},[v("div",{class:"divider-line"})],-1))],2))}}),Ao=b(Ho,[["__scopeId","data-v-6aa21345"]]),Bo={key:0,class:"VPNavScreenAppearance"},Co={class:"text"},Eo=p({__name:"VPNavScreenAppearance",setup(e){const{site:t,theme:n}=P();return(a,o)=>i(t).appearance&&i(t).appearance!=="force-dark"&&i(t).appearance!=="force-auto"?(s(),u("div",Bo,[v("p",Co,N(i(n).darkModeSwitchLabel||"Appearance"),1),k(me)])):m("",!0)}}),Fo=b(Eo,[["__scopeId","data-v-b44890b2"]]),Do=["innerHTML"],Oo=p({__name:"VPNavScreenMenuLink",props:{item:{}},setup(e){const t=Z("close-screen");return(n,a)=>(s(),_(E,{class:"VPNavScreenMenuLink",href:e.item.link,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,onClick:i(t)},{default:h(()=>[v("span",{innerHTML:e.item.text},null,8,Do)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),Go=b(Oo,[["__scopeId","data-v-df37e6dd"]]),Uo=["innerHTML"],jo=p({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(e){const t=Z("close-screen");return(n,a)=>(s(),_(E,{class:"VPNavScreenMenuGroupLink",href:e.item.link,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,onClick:i(t)},{default:h(()=>[v("span",{innerHTML:e.item.text},null,8,Uo)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),we=b(jo,[["__scopeId","data-v-3e9c20e4"]]),zo={class:"VPNavScreenMenuGroupSection"},Wo={key:0,class:"title"},qo=p({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(e){return(t,n)=>(s(),u("div",zo,[e.text?(s(),u("p",Wo,N(e.text),1)):m("",!0),(s(!0),u(x,null,H(e.items,a=>(s(),_(we,{key:a.text,item:a},null,8,["item"]))),128))]))}}),Ko=b(qo,[["__scopeId","data-v-8133b170"]]),Ro=["aria-controls","aria-expanded"],Jo=["innerHTML"],Yo=["id"],Qo={key:0,class:"item"},Xo={key:1,class:"item"},Zo={key:2,class:"group"},es=p({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(e){const t=e,n=S(!1),a=g(()=>`NavScreenGroup-${t.text.replace(" ","-").toLowerCase()}`);function o(){n.value=!n.value}return(r,l)=>(s(),u("div",{class:T(["VPNavScreenMenuGroup",{open:n.value}])},[v("button",{class:"button","aria-controls":a.value,"aria-expanded":n.value,onClick:o},[v("span",{class:"button-text",innerHTML:e.text},null,8,Jo),l[0]||(l[0]=v("span",{class:"vpi-plus button-icon"},null,-1))],8,Ro),v("div",{id:a.value,class:"items"},[(s(!0),u(x,null,H(e.items,f=>(s(),u(x,{key:JSON.stringify(f)},["link"in f?(s(),u("div",Qo,[k(we,{item:f},null,8,["item"])])):"component"in f?(s(),u("div",Xo,[(s(),_(C(f.component),G({ref_for:!0},f.props,{"screen-menu":""}),null,16))])):(s(),u("div",Zo,[k(Ko,{text:f.text,items:f.items},null,8,["text","items"])]))],64))),128))],8,Yo)],2))}}),ts=b(es,[["__scopeId","data-v-b9ab8c58"]]),ns={key:0,class:"VPNavScreenMenu"},as=p({__name:"VPNavScreenMenu",setup(e){const{theme:t}=P();return(n,a)=>i(t).nav?(s(),u("nav",ns,[(s(!0),u(x,null,H(i(t).nav,o=>(s(),u(x,{key:JSON.stringify(o)},["link"in o?(s(),_(Go,{key:0,item:o},null,8,["item"])):"component"in o?(s(),_(C(o.component),G({key:1,ref_for:!0},o.props,{"screen-menu":""}),null,16)):(s(),_(ts,{key:2,text:o.text||"",items:o.items},null,8,["text","items"]))],64))),128))])):m("",!0)}}),os=p({__name:"VPNavScreenSocialLinks",setup(e){const{theme:t}=P();return(n,a)=>i(t).socialLinks?(s(),_(_e,{key:0,class:"VPNavScreenSocialLinks",links:i(t).socialLinks},null,8,["links"])):m("",!0)}}),ss={class:"list"},is=p({__name:"VPNavScreenTranslations",setup(e){const{localeLinks:t,currentLang:n}=K({correspondingLink:!0}),a=S(!1);function o(){a.value=!a.value}return(r,l)=>i(t).length&&i(n).label?(s(),u("div",{key:0,class:T(["VPNavScreenTranslations",{open:a.value}])},[v("button",{class:"title",onClick:o},[l[0]||(l[0]=v("span",{class:"vpi-languages icon lang"},null,-1)),j(" "+N(i(n).label)+" ",1),l[1]||(l[1]=v("span",{class:"vpi-chevron-down icon chevron"},null,-1))]),v("ul",ss,[(s(!0),u(x,null,H(i(t),f=>(s(),u("li",{key:f.link,class:"item"},[k(E,{class:"link",href:f.link},{default:h(()=>[j(N(f.text),1)]),_:2},1032,["href"])]))),128))])],2)):m("",!0)}}),rs=b(is,[["__scopeId","data-v-858fe1a4"]]),ls={class:"container"},cs=p({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(e){const t=S(null),n=Ve(ee?document.body:null);return(a,o)=>(s(),_(ce,{name:"fade",onEnter:o[0]||(o[0]=r=>n.value=!0),onAfterLeave:o[1]||(o[1]=r=>n.value=!1)},{default:h(()=>[e.open?(s(),u("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:t,id:"VPNavScreen"},[v("div",ls,[c(a.$slots,"nav-screen-content-before",{},void 0,!0),k(as,{class:"menu"}),k(rs,{class:"translations"}),k(Fo,{class:"appearance"}),k(os,{class:"social-links"}),c(a.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):m("",!0)]),_:3}))}}),us=b(cs,[["__scopeId","data-v-f2779853"]]),ds={key:0,class:"VPNav"},vs=p({__name:"VPNav",setup(e){const{isScreenOpen:t,closeScreen:n,toggleScreen:a}=ia(),{frontmatter:o}=P(),r=g(()=>o.value.navbar!==!1);return Se("close-screen",n),Y(()=>{ee&&document.documentElement.classList.toggle("hide-nav",!r.value)}),(l,f)=>r.value?(s(),u("header",ds,[k(Ao,{"is-screen-open":i(t),onToggleScreen:i(a)},{"nav-bar-title-before":h(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":h(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":h(()=>[c(l.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":h(()=>[c(l.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),k(us,{open:i(t)},{"nav-screen-content-before":h(()=>[c(l.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":h(()=>[c(l.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):m("",!0)}}),fs=b(vs,[["__scopeId","data-v-ae24b3ad"]]),hs=["role","tabindex"],ms={key:1,class:"items"},ps=p({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(e){const t=e,{collapsed:n,collapsible:a,isLink:o,isActiveLink:r,hasActiveLink:l,hasChildren:f,toggle:d}=ct(g(()=>t.item)),y=g(()=>f.value?"section":"div"),L=g(()=>o.value?"a":"div"),$=g(()=>f.value?t.depth+2===7?"p":`h${t.depth+2}`:"p"),V=g(()=>o.value?void 0:"button"),M=g(()=>[[`level-${t.depth}`],{collapsible:a.value},{collapsed:n.value},{"is-link":o.value},{"is-active":r.value},{"has-active":l.value}]);function I(A){"key"in A&&A.key!=="Enter"||!t.item.link&&d()}function w(){t.item.link&&d()}return(A,B)=>{const O=W("VPSidebarItem",!0);return s(),_(C(y.value),{class:T(["VPSidebarItem",M.value])},{default:h(()=>[e.item.text?(s(),u("div",G({key:0,class:"item",role:V.value},Ge(e.item.items?{click:I,keydown:I}:{},!0),{tabindex:e.item.items&&0}),[B[1]||(B[1]=v("div",{class:"indicator"},null,-1)),e.item.link?(s(),_(E,{key:0,tag:L.value,class:"link",href:e.item.link,rel:e.item.rel,target:e.item.target},{default:h(()=>[(s(),_(C($.value),{class:"text",innerHTML:e.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(s(),_(C($.value),{key:1,class:"text",innerHTML:e.item.text},null,8,["innerHTML"])),e.item.collapsed!=null&&e.item.items&&e.item.items.length?(s(),u("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:w,onKeydown:Ue(w,["enter"]),tabindex:"0"},[...B[0]||(B[0]=[v("span",{class:"vpi-chevron-right caret-icon"},null,-1)])],32)):m("",!0)],16,hs)):m("",!0),e.item.items&&e.item.items.length?(s(),u("div",ms,[e.depth<5?(s(!0),u(x,{key:0},H(e.item.items,q=>(s(),_(O,{key:q.text,item:q,depth:e.depth+1},null,8,["item","depth"]))),128)):m("",!0)])):m("",!0)]),_:1},8,["class"])}}}),ks=b(ps,[["__scopeId","data-v-b3fd67f8"]]),_s=p({__name:"VPSidebarGroup",props:{items:{}},setup(e){const t=S(!0);let n=null;return U(()=>{n=setTimeout(()=>{n=null,t.value=!1},300)}),je(()=>{n!=null&&(clearTimeout(n),n=null)}),(a,o)=>(s(!0),u(x,null,H(e.items,r=>(s(),u("div",{key:r.text,class:T(["group",{"no-transition":t.value}])},[k(ks,{item:r,depth:0},null,8,["item"])],2))),128))}}),bs=b(_s,[["__scopeId","data-v-c40bc020"]]),gs={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},$s=p({__name:"VPSidebar",props:{open:{type:Boolean}},setup(e){const{sidebarGroups:t,hasSidebar:n}=D(),a=e,o=S(null),r=Ve(ee?document.body:null);F([a,o],()=>{var f;a.open?(r.value=!0,(f=o.value)==null||f.focus()):r.value=!1},{immediate:!0,flush:"post"});const l=S(0);return F(t,()=>{l.value+=1},{deep:!0}),(f,d)=>i(n)?(s(),u("aside",{key:0,class:T(["VPSidebar",{open:e.open}]),ref_key:"navEl",ref:o,onClick:d[0]||(d[0]=ze(()=>{},["stop"]))},[d[2]||(d[2]=v("div",{class:"curtain"},null,-1)),v("nav",gs,[d[1]||(d[1]=v("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),c(f.$slots,"sidebar-nav-before",{},void 0,!0),(s(),_(bs,{items:i(t),key:l.value},null,8,["items"])),c(f.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):m("",!0)}}),ys=b($s,[["__scopeId","data-v-319d5ca6"]]),Ps=p({__name:"VPSkipLink",setup(e){const{theme:t}=P(),n=X(),a=S();F(()=>n.path,()=>a.value.focus());function o({target:r}){const l=document.getElementById(decodeURIComponent(r.hash).slice(1));if(l){const f=()=>{l.removeAttribute("tabindex"),l.removeEventListener("blur",f)};l.setAttribute("tabindex","-1"),l.addEventListener("blur",f),l.focus(),window.scrollTo(0,0)}}return(r,l)=>(s(),u(x,null,[v("span",{ref_key:"backToTop",ref:a,tabindex:"-1"},null,512),v("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:o},N(i(t).skipToContentLabel||"Skip to content"),1)],64))}}),Ls=b(Ps,[["__scopeId","data-v-0b0ada53"]]),Vs=p({__name:"Layout",setup(e){const{isOpen:t,open:n,close:a}=D(),o=X();F(()=>o.path,a),lt(t,a);const{frontmatter:r}=P(),l=We(),f=g(()=>!!l["home-hero-image"]);return Se("hero-image-slot-exists",f),(d,y)=>{const L=W("Content");return i(r).layout!==!1?(s(),u("div",{key:0,class:T(["Layout",i(r).pageClass])},[c(d.$slots,"layout-top",{},void 0,!0),k(Ls),k(Je,{class:"backdrop",show:i(t),onClick:i(a)},null,8,["show","onClick"]),k(fs,null,{"nav-bar-title-before":h(()=>[c(d.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":h(()=>[c(d.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":h(()=>[c(d.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":h(()=>[c(d.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":h(()=>[c(d.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":h(()=>[c(d.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),k(sa,{open:i(t),onOpenMenu:i(n)},null,8,["open","onOpenMenu"]),k(ys,{open:i(t)},{"sidebar-nav-before":h(()=>[c(d.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":h(()=>[c(d.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),k(jn,null,{"page-top":h(()=>[c(d.$slots,"page-top",{},void 0,!0)]),"page-bottom":h(()=>[c(d.$slots,"page-bottom",{},void 0,!0)]),"not-found":h(()=>[c(d.$slots,"not-found",{},void 0,!0)]),"home-hero-before":h(()=>[c(d.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":h(()=>[c(d.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":h(()=>[c(d.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":h(()=>[c(d.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":h(()=>[c(d.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":h(()=>[c(d.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":h(()=>[c(d.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":h(()=>[c(d.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":h(()=>[c(d.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":h(()=>[c(d.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":h(()=>[c(d.$slots,"doc-before",{},void 0,!0)]),"doc-after":h(()=>[c(d.$slots,"doc-after",{},void 0,!0)]),"doc-top":h(()=>[c(d.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":h(()=>[c(d.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":h(()=>[c(d.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":h(()=>[c(d.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":h(()=>[c(d.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":h(()=>[c(d.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":h(()=>[c(d.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":h(()=>[c(d.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),k(Rn),c(d.$slots,"layout-bottom",{},void 0,!0)],2)):(s(),_(L,{key:1}))}}}),Ss=b(Vs,[["__scopeId","data-v-5d98c3a5"]]),Ns={Layout:Ss,enhanceApp:({app:e})=>{e.component("Badge",qe)}};export{Ns as t}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/extensibility_CustomServerMiddleware.md.x59WjcrL.js b/packages/documentation/docs/.vitepress/dist/assets/extensibility_CustomServerMiddleware.md.x59WjcrL.js new file mode 100644 index 0000000000..cad1d89f9a --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/extensibility_CustomServerMiddleware.md.x59WjcrL.js @@ -0,0 +1,153 @@ +import{_ as i,c as a,o as n,ae as e}from"./chunks/framework.CBTkueSR.js";const o=JSON.parse('{"title":"Custom UI5 Server Middleware","description":"","frontmatter":{},"headers":[],"relativePath":"extensibility/CustomServerMiddleware.md","filePath":"extensibility/CustomServerMiddleware.md"}'),t={name:"extensibility/CustomServerMiddleware.md"};function l(h,s,p,k,r,d){return n(),a("div",null,[...s[0]||(s[0]=[e(`

Custom UI5 Server Middleware

The UI5 Server Extensibility enables you to enhance the functionality of the UI5 Server. You may want to handle requests differently. For example add various headers to a response or parse data of a POST request in a specific way. For this you can plug custom middleware implementations into the internal express server of the UI5 Server module.

The UI5 community already created many custom middleware packages which you can integrate into your project. They are often prefixed by ui5-middleware- to make them easily searchable in the npm registry.

Please note that custom middleware packages from third parties can not only modify how your project is served but also execute arbitrary code on your system. In fact, this is the case for all npm packages you install. Always act with the according care and follow best practices.

Configuration

In a projects ui5.yaml file, you can define additional server middleware modules that will be executed when the request is received by the server. This configuration exclusively affects the server started in this project. Custom middleware configurations defined in any dependencies are ignored.

A middleware may be executed before or after any other middleware. This can either be a standard middleware or another custom middleware.

Example: Basic configuration

yaml
# In this example configuration, two custom tasks are defined: 'babel' and 'render-markdown-files'.
+specVersion: "4.0"
+type: application
+metadata:
+  name: my.application
+server:
+  customMiddleware:
+    - name: myCustomMiddleware
+      mountPath: /myapp
+      afterMiddleware: compression
+      configuration:
+        debug: true

In the above example the middleware compression is already included as a standard middleware by the UI5 Server. When serving the application my.application, the server will call the custom middleware myCustomMiddleware after compression.

There can be optional configuration parameters which are passed directly to the custom middleware implementation (see below).

An optional mountPath for which the middleware function is invoked can be provided. It will be passed to the app.use call (see express API reference).

Execution order

Note that middleware configurations are applied in the order they are defined. When referencing another custom middleware, it has to be defined before that reference.

Custom Middleware Extension

A custom middleware extension consists of a ui5.yaml and a custom middleware implementation. It can be a standalone module or part of an existing UI5 project.

Example: ui5.yaml

yaml
specVersion: "4.0"
+kind: extension
+type: server-middleware
+metadata:
+  name: markdownHandler
+middleware:
+  path: lib/middleware/markdownHandler.js

Custom middleware extensions can be standalone modules which are handled as dependencies.

Alternatively you can implement a custom middleware extension as part of your UI5 project. In that case, the configuration of the extension is part of your project configuration inside the ui5.yaml as shown below.

The UI5 Server will detect the custom middleware configuration of the project and use the middleware on startup.

Example: Custom Middleware Extension defined in UI5 project

yaml
# Project configuration for the above example
+specVersion: "4.0"
+kind: project
+type: application
+metadata:
+  name: my.application
+server:
+  customMiddleware:
+    - name: markdownHandler
+      beforeMiddleware: serveResources
+---
+# Custom middleware extension as part of your project
+specVersion: "4.0"
+kind: extension
+type: server-middleware
+metadata:
+  name: markdownHandler
+middleware:
+  path: lib/middleware/markdownHandler.js

Custom Middleware Implementation

A custom middleware implementation needs to return a function with the following signature:

js
/**
+ * Custom UI5 Server middleware API
+ * 
+ * @param {object} parameters Parameters
+ * @param {@ui5/logger/Logger} parameters.log
+ *      Logger instance for use in the custom middleware.
+ *      This parameter is only provided to custom middleware
+ *      extensions defining Specification Version 3.0 and later.
+ * @param {@ui5/server.middleware.MiddlewareUtil} parameters.middlewareUtil
+ *      Specification version-dependent interface to a
+ *      MiddlewareUtil instance. See the corresponding API reference for details:
+ *      https://sap.github.io/ui5-tooling/v4/api/@ui5_server_middleware_MiddlewareUtil.html
+ * @param {object} parameters.options Options
+ * @param {string} parameters.options.configuration
+ *      Custom middleware configuration, as defined in the project's ui5.yaml
+ * @param {string} parameters.options.middlewareName
+ *      Name of the custom middleware.
+ *      This parameter is only provided to custom middleware extensions
+ *      defining Specification Version 3.0 and later
+ * @param {object} parameters.resources Readers for accessing resources
+ * @param {module:@ui5/fs.AbstractReader} parameters.resources.all
+ *      Reader to access resources of the root project and its dependencies
+ * @param {module:@ui5/fs.AbstractReader} parameters.resources.rootProject
+ *      Reader to access resources of the root project
+ * @param {module:@ui5/fs.AbstractReader} parameters.resources.dependencies
+ *      Reader to access resources of the project's dependencies.
+ * @returns {function} Middleware function to use
+ */
+export default function({log, middlewareUtil, options, resources}) {
+    return async function (req, res, next) {
+        // [...]
+    }
+};
js
/**
+ * Custom UI5 Server middleware API
+ * 
+ * @param {object} parameters Parameters
+ * @param {@ui5/logger/Logger} parameters.log
+ *      Logger instance for use in the custom middleware.
+ *      This parameter is only provided to custom middleware
+ *      extensions defining Specification Version 3.0 and later.
+ * @param {@ui5/server.middleware.MiddlewareUtil} parameters.middlewareUtil
+ *      Specification version-dependent interface to a
+ *      MiddlewareUtil instance. See the corresponding API reference for details:
+ *      https://sap.github.io/ui5-tooling/v4/api/@ui5_server_middleware_MiddlewareUtil.html
+ * @param {object} parameters.options Options
+ * @param {string} parameters.options.configuration
+ *      Custom middleware configuration, as defined in the project's ui5.yaml
+ * @param {string} parameters.options.middlewareName
+ *      Name of the custom middleware.
+ *      This parameter is only provided to custom middleware extensions
+ *      defining Specification Version 3.0 and later
+ * @param {object} parameters.resources Readers for accessing resources
+ * @param {module:@ui5/fs.AbstractReader} parameters.resources.all
+ *      Reader to access resources of the root project and its dependencies
+ * @param {module:@ui5/fs.AbstractReader} parameters.resources.rootProject
+ *      Reader to access resources of the root project
+ * @param {module:@ui5/fs.AbstractReader} parameters.resources.dependencies
+ *      Reader to access resources of the project's dependencies.
+ * @returns {function} Middleware function to use
+ */
+module.exports = function({log, middlewareUtil, options, resources}) {
+    return async function (req, res, next) {
+        // [...]
+    }
+};

Example: lib/middleware/markdownHandler.(m)js

js

+   
+import MarkdownIt from "markdown-it";export default async function({log, middlewareUtil, options, resources}) {
+    const md = new MarkdownIt();
+    return function (req, res, next) {
+        if (!req.path || !req.path.endsWith(".html")) {
+            // Do not handle non-HTML requests
+            next();
+            return;
+        }
+        // Try to read a corresponding markdown file
+        resources.rootProject.byPath(req.path.replace(".html", ".md")).then(async (resource) => {
+            if (!resource) {
+                // No file found, hand over to next middleware
+                next();
+                return;
+            }
+            log.info(\`Rendering markdown for \${resource.getPath()}\`);
+            const markdown = await resource.getBuffer();
+            // Generate HTML from markdown string
+            const html = md.render(markdown.toString());
+            res.type('.html');
+            res.end(html);
+        }).catch((err) => {
+            next(err);
+        });
+   }
+ };
js
module.exports = async function({log, middlewareUtil, options, resources}) {
+    const MarkdownIt = require("markdown-it");
+    const md = new MarkdownIt();
+    return function (req, res, next) {
+        if (!req.path || !req.path.endsWith(".html")) {
+            // Do not handle non-HTML requests
+            next();
+            return;
+        }
+        // Try to read a corresponding markdown file
+        resources.rootProject.byPath(req.path.replace(".html", ".md")).then(async (resource) => {
+            if (!resource) {
+                // No file found, hand over to next middleware
+                next();
+                return;
+            }
+            log.info(\`Rendering markdown for \${resource.getPath()}\`);
+            const markdown = await resource.getBuffer();
+            // Generate HTML from markdown string
+            const html = md.render(markdown.toString());
+            res.type('.html');
+            res.end(html);
+        }).catch((err) => {
+            next(err);
+        });
+    }
+};

Helper Class MiddlewareUtil

Custom middleware defining Specification Version 2.0 or higher have access to an interface of a MiddlewareUtil instance.

In this case, a middlewareUtil object is provided as a part of the custom middleware's parameters. Depending on the specification version of the custom middleware, a set of helper functions is available to the implementation. The lowest required specification version for every function is listed in the MiddlewareUtil API reference.

Integration with karma-ui5

WARNING

The Karma project has been deprecated as of 2023

karma-ui5 is a plugin for the popular Karma test runner. Based on your configuration, it can fetch resources from a dedicated server or start an internal server using parts of UI5 Tooling.

In the latter case, any custom middleware configured in the default ui5.yaml of the project will be used automatically.

However, since Karma uses the connect framework, as opposed to UI5 Tooling's express, custom middleware might not always work as expected. Compared to connect, the express framework provides a more versatile API to middleware.

Therefore, if you plan to use custom middleware in an integrated scenario with karma-ui5, you must restrict the middleware to using the connect API only to ensure compatibility.

Alternatively, you can start a server with the usual ui5 serve command and configure the corresponding URL for use by karma-ui5.

`,33)])])}const g=i(t,[["render",l]]);export{o as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/extensibility_CustomServerMiddleware.md.x59WjcrL.lean.js b/packages/documentation/docs/.vitepress/dist/assets/extensibility_CustomServerMiddleware.md.x59WjcrL.lean.js new file mode 100644 index 0000000000..a1eea7368c --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/extensibility_CustomServerMiddleware.md.x59WjcrL.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,ae as e}from"./chunks/framework.CBTkueSR.js";const o=JSON.parse('{"title":"Custom UI5 Server Middleware","description":"","frontmatter":{},"headers":[],"relativePath":"extensibility/CustomServerMiddleware.md","filePath":"extensibility/CustomServerMiddleware.md"}'),t={name:"extensibility/CustomServerMiddleware.md"};function l(h,s,p,k,r,d){return n(),a("div",null,[...s[0]||(s[0]=[e("",33)])])}const g=i(t,[["render",l]]);export{o as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/extensibility_CustomTasks.md.iHprFA7D.js b/packages/documentation/docs/.vitepress/dist/assets/extensibility_CustomTasks.md.iHprFA7D.js new file mode 100644 index 0000000000..9c0f881275 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/extensibility_CustomTasks.md.iHprFA7D.js @@ -0,0 +1,307 @@ +import{_ as i,c as a,o as n,ae as t}from"./chunks/framework.CBTkueSR.js";const g=JSON.parse('{"title":"Custom UI5 Builder Tasks","description":"","frontmatter":{},"headers":[],"relativePath":"extensibility/CustomTasks.md","filePath":"extensibility/CustomTasks.md"}'),e={name:"extensibility/CustomTasks.md"};function h(l,s,p,k,r,d){return n(),a("div",null,[...s[0]||(s[0]=[t(`

Custom UI5 Builder Tasks

The UI5 Build Extensibility enables you to enhance the build process of any UI5 project. In addition to the standard tasks, custom tasks can be created.

The UI5 community already created many custom tasks which you can integrate into your project. They are often prefixed by ui5-task- to make them easily searchable in the npm registry.

Please note that custom tasks from third parties can not only modify your project but also execute arbitrary code on your system. In fact, this is the case for all npm packages you install. Always act with the according care and follow best practices.

Configuration

You can configure your build process with additional build task. These custom tasks are defined in the project configuration.

To hook your custom tasks into the different build phases of a project, they need to reference other tasks to be executed before or after. This can be a standard task or another custom task. Standard tasks that are disabled, even though they are not executed, can still be referenced by custom tasks, which will be performed in their designated position.

In the below example, when building the library my.library the custom babel task will be executed before the standard task generateComponentPreload.
Another custom task called render-markdown-files is then executed immediately after the standard task minify.

Example: Basic configuration

yaml
# In this example configuration, two custom tasks are defined: 'babel' and 'render-markdown-files'.
+specVersion: "4.0"
+type: library
+metadata:
+  name: my.library
+builder:
+  customTasks:
+    - name: babel
+      beforeTask: generateComponentPreload
+    - name: render-markdown-files
+      afterTask: minify
+      configuration:
+        markdownStyle:
+            firstH1IsTitle: true

Example: Connect multiple custom tasks

You can also connect multiple custom tasks with each other. The order in the configuration is important in this case. You have to make sure that a task is defined before you reference it via beforeTask or afterTask.

yaml
# In this example, 'my-custom-task-2' gets executed after 'my-custom-task-1'.
+specVersion: "4.0"
+type: library
+metadata:
+  name: my.library
+builder:
+  customTasks:
+    - name: my-custom-task-1
+      beforeTask: generateComponentPreload
+    - name: my-custom-task-2
+      afterTask: my-custom-task-1

Custom Task Extension

A custom task extension consists of a ui5.yaml and a task implementation. It can be a standalone module or part of an existing UI5 project.

Example: ui5.yaml

yaml
specVersion: "4.0"
+kind: extension
+type: task
+metadata:
+  name: render-markdown-files
+task:
+  path: lib/tasks/renderMarkdownFiles.js

Task extensions can be standalone modules which are handled as dependencies.

Alternatively you can implement a task extension as part of your UI5 project. In that case, the configuration of the extension is part of your project configuration inside the ui5.yaml as shown below.

The task extension will then be automatically collected and processed during the processing of the project.

Example: Custom Task Extension defined in UI5 project

yaml
# Project configuration for the above example
+specVersion: "4.0"
+kind: project
+type: library
+metadata:
+  name: my.library
+builder:
+  customTasks:
+    - name: render-markdown-files
+      afterTask: minify
+      configuration:
+        markdownStyle:
+            firstH1IsTitle: true
+---
+# Task extension as part of your project
+specVersion: "4.0"
+kind: extension
+type: task
+metadata:
+  name: render-markdown-files
+task:
+  path: lib/tasks/renderMarkdownFiles.js

Task Implementation

A custom task implementation needs to return a function with the following signature:

js
/**
+ * Custom task API
+ *
+ * @param {object} parameters
+ * 
+ * @param {module:@ui5/fs.AbstractReader} parameters.dependencies
+ *      Reader to access resources of the project's dependencies
+ * @param {@ui5/logger/Logger} parameters.log
+ *      Logger instance for use in the custom task.
+ *      This parameter is only available to custom task extensions
+ *      defining Specification Version 3.0 and later.
+ * @param {object} parameters.options Options
+ * @param {string} parameters.options.projectName
+ *      Name of the project currently being built
+ * @param {string} parameters.options.projectNamespace
+ *      Namespace of the project currently being built
+ * @param {string} parameters.options.configuration
+ *      Custom task configuration, as defined in the project's ui5.yaml
+ * @param {string} parameters.options.taskName
+ *      Name of the custom task.
+ *      This parameter is only provided to custom task extensions
+ *      defining Specification Version 3.0 and later.
+ * @param {@ui5/builder.tasks.TaskUtil} parameters.taskUtil
+ *      Specification Version-dependent interface to a TaskUtil instance.
+ *      See the corresponding API reference for details:
+ *      https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html
+ * @param {module:@ui5/fs.DuplexCollection} parameters.workspace
+ *      Reader/Writer to access and modify resources of the
+ *      project currently being built
+ * @returns {Promise<undefined>}
+ *      Promise resolving once the task has finished
+ */
+export default async function({dependencies, log, options, taskUtil,workspace}) {
+    // [...]
+};
js
/**
+ * Custom task API
+ *
+ * @param {object} parameters
+ * 
+ * @param {module:@ui5/fs.AbstractReader} parameters.dependencies
+ *      Reader to access resources of the project's dependencies
+ * @param {@ui5/logger/Logger} parameters.log
+ *      Logger instance for use in the custom task.
+ *      This parameter is only available to custom task extensions
+ *      defining Specification Version 3.0 and later.
+ * @param {object} parameters.options Options
+ * @param {string} parameters.options.projectName
+ *      Name of the project currently being built
+ * @param {string} parameters.options.projectNamespace
+ *      Namespace of the project currently being built
+ * @param {string} parameters.options.configuration
+ *      Custom task configuration, as defined in the project's ui5.yaml
+ * @param {string} parameters.options.taskName
+ *      Name of the custom task.
+ *      This parameter is only provided to custom task extensions
+ *      defining Specification Version 3.0 and later.
+ * @param {@ui5/builder.tasks.TaskUtil} parameters.taskUtil
+ *      Specification Version-dependent interface to a TaskUtil instance.
+ *      See the corresponding API reference for details:
+ *      https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html
+ * @param {module:@ui5/fs.DuplexCollection} parameters.workspace
+ *      Reader/Writer to access and modify resources of the
+ *      project currently being built
+ * @returns {Promise<undefined>}
+ *      Promise resolving once the task has finished
+ */
+module.exports = async function({dependencies, log, options, taskUtil,workspace}) {
+    // [...]
+};

Required Dependencies

Info

This functionality has been added with UI5 CLI v3.0.0

Custom tasks can export an optional callback function determineRequiredDependencies to control which dependency-resources are made available through the dependencies-reader that is provided to the task. By reducing the amount of required dependencies or by not requiring any, UI5 Tooling might be able to build a project faster.

Before executing a task, UI5 Tooling will ensure that all required dependencies have been built.

If this callback is not provided, UI5 Tooling will make an assumption as to whether the custom task requires access to any resources of dependencies based on the defined Specification Version of the custom task extension:

  • Specification Version 3.0 and later: If no callback is provided, UI5 Tooling assumes that no dependencies are required. In this case, the dependencies parameter will be omitted.
  • Specification Versions before 3.0: If no callback is provided, UI5 Tooling assumes that all dependencies are required.

For more details, see also RFC 0012 UI5 Tooling Extension API v3

js
/**
+ * Callback function to define the list of required dependencies
+ *
+ * @param {object} parameters
+ * @param {Set} parameters.availableDependencies
+ *      Set containing the names of all direct dependencies of
+ *      the project currently being built.
+ * @param {function} parameters.getDependencies
+ *      Identical to TaskUtil#getDependencies
+ *         (see https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html).
+ *      Creates a list of names of all direct dependencies
+ *      of a given project.
+ * @param {function} parameters.getProject
+ *      Identical to TaskUtil#getProject
+ *         (see https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html).
+ *      Retrieves a Project-instance for a given project name.
+ * @param {object} parameters.options
+ *      Identical to the options given to the standard task function.
+ * @returns {Promise<Set>}
+ *      Promise resolving with a Set containing all dependencies
+ *      that should be made available to the task.
+ *      UI5 Tooling will ensure that those dependencies have been
+ *      built before executing the task.
+ */
+export async function determineRequiredDependencie({availableDependencies, getDependencies, getProject, options}) {
+    // "availableDependencies" could look like this: Set(3) { "sap.ui.core", "sap.m", "my.lib" }
+    // Reduce list of required dependencies: Do not require any UI5 framework projects
+    availableDependencies.forEach((depName) => {
+        if (getProject(depName).isFrameworkProject()) {
+            availableDependencies.delete(depName)
+        }
+    });
+    // => Only resources of project "my.lib" will be available to the task
+    return availableDependencies;
+}
js
/**
+ * Callback function to define the list of required dependencies
+ *
+ * @param {object} parameters
+ * @param {Set} parameters.availableDependencies
+ *      Set containing the names of all direct dependencies of
+ *      the project currently being built.
+ * @param {function} parameters.getDependencies
+ *      Identical to TaskUtil#getDependencies
+ *         (see https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html).
+ *      Creates a list of names of all direct dependencies
+ *      of a given project.
+ * @param {function} parameters.getProject
+ *      Identical to TaskUtil#getProject
+ *         (see https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html).
+ *      Retrieves a Project-instance for a given project name.
+ * @param {object} parameters.options
+ *      Identical to the options given to the standard task function.
+ * @returns {Promise<Set>}
+ *      Promise resolving with a Set containing all dependencies
+ *      that should be made available to the task.
+ *      UI5 Tooling will ensure that those dependencies have been
+ *      built before executing the task.
+ */
+module.exports.determineRequiredDependencies = async functio({availableDependencies, getDependencies, getProject, options}) {
+    // "availableDependencies" could look like this: Set(3) { "sap.ui.core", "sap.m", "my.lib" }
+    // Reduce list of required dependencies: Do not require any UI5 framework projects
+    availableDependencies.forEach((depName) => {
+        if (getProject(depName).isFrameworkProject()) {
+            availableDependencies.delete(depName)
+        }
+    });
+    // => Only resources of project "my.lib" will be available to the task
+    return availableDependencies;
+}

Examples

The following code snippets show examples for custom task implementations.

Example: lib/tasks/renderMarkdownFiles.js

This example is making use of the resourceFactory TaskUtil API to create new resources based on the output of a third-party module for rendering Markdown files. The created resources are added to the build result by writing them into the provided workspace.

js
import path from "node:path";
+import renderMarkdown from "./renderMarkdown.js";
+/*
+* Render all .md (Markdown) files in the project to HTML
+*/
+export default async function({dependencies, log, options, taskUtil,workspace}) {
+    const {createResource} = taskUtil.resourceFactory;
+    const textResources = await workspace.byGlob("**/*.md");
+    await Promise.all(textResources.map(async (resource) => {
+        const markdownResourcePath = resource.getPath();
+        log.info(\`Rendering markdown file \${markdownResourcePath}...\`);
+        const htmlString = await renderMarkdown(await resource.getString(), options.configuration);
+        // Note: @ui5/fs virtual paths are always (on *all* platforms) POSIX. Therefore using path.posix here
+        const newResourceName = path.posix.basename(markdownResourcePath, ".md") + ".html";
+        const newResourcePath = path.posix.join(path.posix.dirname(markdownResourcePath), newResourceName);
+        const markdownResource = createResource({
+            path: newResourcePath,
+            string: htmlString
+        });
+        await workspace.write(markdownResource);
+    }));
+};
js
const path = require("node:path");
+const renderMarkdown = require("./renderMarkdown.js");
+/*
+* Render all .md (Markdown) files in the project to HTML
+*/
+module.exports = async function({dependencies, log, options, taskUtil,workspace}) {
+    const {createResource} = taskUtil.resourceFactory;
+    const textResources = await workspace.byGlob("**/*.md");
+    await Promise.all(textResources.map(async (resource) => {
+        const markdownResourcePath = resource.getPath();
+        log.info(\`Rendering markdown file \${markdownResourcePath}...\`);
+        const htmlString = await renderMarkdown(await resource.getString(), options.configuration);
+        // Note: @ui5/fs virtual paths are always (on *all* platforms) POSIX. Therefore using path.posix here
+        const newResourceName = path.posix.basename(markdownResourcePath, ".md") + ".html";
+        const newResourcePath = path.posix.join(path.posix.dirname(markdownResourcePath), newResourceName);
+        const markdownResource = createResource({
+            path: newResourcePath,
+            string: htmlString
+        });
+        await workspace.write(markdownResource);
+    }));
+};

WARNING

Depending on your project setup, UI5 Tooling tends to open many files simultaneously during a build. To prevent errors like EMFILE: too many open files, we urge custom task implementations to use the graceful-fs module as a drop-in replacement for the native fs module in case it is used.

Tasks should ideally use the reader/writer APIs provided by UI5 Tooling for working with project resources.

Example: lib/tasks/compileLicenseSummary.js

This example is making use of multiple TaskUtil APIs to retrieve additional information about the project currently being built (taskUtil.getProject()) and its direct dependencies (taskUtil.getDependencies()). Project configuration files like package.json can be accessed directly using project.getRootReader().

js
import path from "node:path";
+/*
+* Compile a list of all licenses of the project's dependencies
+* and write it to "dependency-license-summary.json"
+*/
+export default async function({dependencies, log, options, taskUtil,workspace}) {
+    const {createResource} = taskUtil.resourceFactory;
+    const licenses = new Map();
+    const projectsVisited = new Set();
+    async function processProject(project) {
+        return Promise.all(taskUtil.getDependencies().map(async (projectName) => {
+            if (projectsVisited.has(projectName)) {
+                return;
+            }
+            projectsVisited.add(projectName);
+            const project = taskUtil.getProject(projectName);
+            const pkgResource = await project.getRootReader().byPath("/package.json");
+            if (pkgResource) {
+                const pkg = JSON.parse(await pkgResource.getString())
+                // Add project to list of licenses
+                if (licenses.has(pkg.license)) {
+                    licenses.get(pkg.license).push(project.getName());
+                } else {
+                    // License not yet in map. Define it
+                    licenses.set(pkg.license, [project.getName()]);
+                }
+            } else {
+                log.info(\`Could not find package.json file in project \${project.getName()}\`);
+            }
+            return processProject(project);
+        }));
+    }
+    // Start processing dependencies of the root project
+    await processProject(taskUtil.getProject());
+    const summaryResource = createResource({
+        path: "/dependency-license-summary.json",
+        string: JSON.stringify(Object.fromEntries(licenses), null, "\\t")
+    });
+    await workspace.write(summaryResource);
+};
js
const path = require("node:path");
+/*
+* Compile a list of all licenses of the project's dependencies
+* and write it to "dependency-license-summary.json"
+*/
+module.exports = async function({dependencies, log, options, taskUtil,workspace}) {
+    const {createResource} = taskUtil.resourceFactory;
+    const licenses = new Map();
+    const projectsVisited = new Set();
+    async function processProject(project) {
+        return Promise.all(taskUtil.getDependencies().map(async (projectName) => {
+            if (projectsVisited.has(projectName)) {
+                return;
+            }
+            projectsVisited.add(projectName);
+            const project = taskUtil.getProject(projectName);
+            const pkgResource = await project.getRootReader().byPath("/package.json");
+            if (pkgResource) {
+                const pkg = JSON.parse(await pkgResource.getString())
+                // Add project to list of licenses
+                if (licenses.has(pkg.license)) {
+                    licenses.get(pkg.license).push(project.getName());
+                } else {
+                    // License not yet in map. Define it
+                    licenses.set(pkg.license, [project.getName()]);
+                }
+            } else {
+                log.info(\`Could not find package.json file in project \${project.getName()}\`);
+            }
+            return processProject(project);
+        }));
+    }
+    // Start processing dependencies of the root project
+    await processProject(taskUtil.getProject());
+    const summaryResource = createResource({
+        path: "/dependency-license-summary.json",
+        string: JSON.stringify(Object.fromEntries(licenses), null, "\\t")
+    });
+    await workspace.write(summaryResource);
+};

Helper Class TaskUtil

Custom tasks defining Specification Version 2.2 or higher have access to an interface of a TaskUtil instance.

In this case, a taskUtil object is provided as a part of the custom task's parameters. Depending on the specification version of the custom task, a set of helper functions is available to the implementation. The lowest required specification version for every function is listed in the TaskUtil API reference.

`,45)])])}const o=i(e,[["render",h]]);export{g as __pageData,o as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/extensibility_CustomTasks.md.iHprFA7D.lean.js b/packages/documentation/docs/.vitepress/dist/assets/extensibility_CustomTasks.md.iHprFA7D.lean.js new file mode 100644 index 0000000000..ed8909c64a --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/extensibility_CustomTasks.md.iHprFA7D.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,ae as t}from"./chunks/framework.CBTkueSR.js";const g=JSON.parse('{"title":"Custom UI5 Builder Tasks","description":"","frontmatter":{},"headers":[],"relativePath":"extensibility/CustomTasks.md","filePath":"extensibility/CustomTasks.md"}'),e={name:"extensibility/CustomTasks.md"};function h(l,s,p,k,r,d){return n(),a("div",null,[...s[0]||(s[0]=[t("",45)])])}const o=i(e,[["render",h]]);export{g as __pageData,o as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/extensibility_ProjectShims.md.BoGGAAX7.js b/packages/documentation/docs/.vitepress/dist/assets/extensibility_ProjectShims.md.BoGGAAX7.js new file mode 100644 index 0000000000..f957f91025 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/extensibility_ProjectShims.md.BoGGAAX7.js @@ -0,0 +1,112 @@ +import{_ as i,c as a,o as n,ae as e}from"./chunks/framework.CBTkueSR.js";const E=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"extensibility/ProjectShims.md","filePath":"extensibility/ProjectShims.md"}'),l={name:"extensibility/ProjectShims.md"};function t(p,s,h,k,r,d){return n(),a("div",null,[...s[0]||(s[0]=[e(`

Project Shims

A project shim extension can be used to define or extend a project configuration of a module. The most popular use case is probably to add UI5 project configuration to a third party module that otherwise could not be used with the UI5 CLI.

Also see RFC 0002 Project Shims.

Structure

yaml
specVersion: "4.0"
+kind: extension
+type: project-shim
+metadata:
+  name: <name of project shim extension>
+shims:
+  configurations:
+    <module name (id)>:
+      specVersion: "4.0"
+      type: <project type>
+      metadata:
+        name: <project name>
+    <module name (id)>:
+      specVersion: "4.0"
+      type: <project type>
+      metadata:
+        name: <project name>
+  dependencies:
+    <module name (id)>:
+      - <module name (id)>
+      - <module name (id)>
+      - <module name (id)>
+  collections:
+    <module name>:
+      modules:
+        <id>: <relative path>
+        <id>: <relative path>
+        <id>: <relative path>

"module name" refers to the name of the module as identified by the used translator. E.g. when using the npm translator, the name declared in the modules package.json is used here. In most cases, the module name also becomes the internal ID of the project.

Properties

configurations (optional)

Used to add configuration to any module.

Map of module names. The values represent the configuration that should be applied to the module.

Note: Configuration is applied to the module using Object.assign(). This means that existing configuration properties will be overwritten.

dependencies (optional)

Used to add dependencies to any module.

Map of module names. The value is an array of module names that this module depends on. Note that the other modules need to be part of the dependency tree of the root project (not as direct children, just somewhere).

collections (optional)

Used when a dependency contains multiple modules. Also referred to as a Monorepo.

Map of module names. The values are objects with collection-specific configuration:

  • modules: Map of project IDs and their relative file system paths inside the collection module. The project ID does not have to match the actual module name (as for instance defined in the modules package.json). UI5 Project will use it in place of a module name.

Example A:

An application "my-application" defines a npm dependency to lodash in its package.json and configures it by using a project-shim extension added to its ui5.yaml.

ui5.yaml

yaml
specVersion: "4.0"
+type: application
+metadata:
+  name: my.application
+--- # Everything below this line could also be put into the ui5.yaml of a standalone extension module
+specVersion: "4.0"
+kind: extension
+type: project-shim
+metadata:
+  name: my.application.thirdparty
+shims:
+  configurations:
+    lodash: # name as defined in package.json
+      specVersion: "4.0"
+      type: module # Use module type
+      metadata:
+        name: lodash
+      resources:
+        configuration:
+          paths:
+            /resources/my/application/thirdparty/: "" # map root directory of lodash module

Example B:

An application "application.a" depends on a library "legacy.library.a" which does not contain a ui5.yaml or package.json yet (nor do its dependencies).

Structure of the legacy library directories (two repositories)
legacy-libs/
+    \\_ src/
+        \\_ library.a/
+            \\_ src/
+            \\_ test/
+        \\_ library.b/
+            \\_ src/
+            \\_ test/
+legacy-library-x/
+    \\_ src/
+    \\_ test/
Dependencies between the legacy libraries
legacy.library.a depends on legacy.library.b
+legacy.library.a depends on legacy.library.x
+
+legacy.library.b depends on legacy.library.x
application.a

Directory structure

application-a/
+    \\_ node_modules/
+        \\_ legacy-libs/
+        \\_ legacy-library-x/
+    \\_ webapp/
+    \\_ ui5.yaml
+    \\_ package.json

package.json (extract)
napa can install git repositories that are lacking a package.json with npm. Within ui5-project, the npm translator already detects dependencies defined in the napa section of a package.json and tries to resolve them.

json
{
+    "scripts": {
+        "install": "napa"
+    },
+    "napa": {
+        "legacy-libs": "<git-repository-url>",
+        "legacy-library-x": "<git-repository-url>"
+    }
+}

ui5.yaml
The shim defined in the application configures the legacy libraries and defines their dependencies. This shim might as well be a standalone module that is added to the applications dependencies. That would be the typical reuse scenario for shims.

yaml
specVersion: "4.0"
+type: application
+metadata:
+  name: application.a
+----
+specVersion: "4.0"
+kind: extension
+type: project-shim
+metadata:
+  name: legacy-lib-shims
+shims:
+  configurations:
+    legacy-library-a:
+      specVersion: "4.0"
+      type: library
+      metadata:
+        name: legacy.library.a
+    legacy-library-b:
+      specVersion: "4.0"
+      type: library
+      metadata:
+        name: legacy.library.b
+    legacy-library-x:
+      specVersion: "4.0"
+      type: library
+      metadata:
+        name: legacy.library.x
+  dependencies:
+    legacy-library-a:
+      - legacy-library-b
+      - legacy-library-x
+    legacy-library-b:
+      - legacy-library-x
+  collections:
+    legacy-libs:
+      modules:
+        legacy-library-a: src/library.a
+        legacy-library-b: src/library.b
`,35)])])}const c=i(l,[["render",t]]);export{E as __pageData,c as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/extensibility_ProjectShims.md.BoGGAAX7.lean.js b/packages/documentation/docs/.vitepress/dist/assets/extensibility_ProjectShims.md.BoGGAAX7.lean.js new file mode 100644 index 0000000000..99ac12eaca --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/extensibility_ProjectShims.md.BoGGAAX7.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,ae as e}from"./chunks/framework.CBTkueSR.js";const E=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"extensibility/ProjectShims.md","filePath":"extensibility/ProjectShims.md"}'),l={name:"extensibility/ProjectShims.md"};function t(p,s,h,k,r,d){return n(),a("div",null,[...s[0]||(s[0]=[e("",35)])])}const c=i(l,[["render",t]]);export{E as __pageData,c as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/index.md.Bk6Xmwmv.js b/packages/documentation/docs/.vitepress/dist/assets/index.md.Bk6Xmwmv.js new file mode 100644 index 0000000000..307ac9c634 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/index.md.Bk6Xmwmv.js @@ -0,0 +1,56 @@ +import{_ as i,c as a,o as n,ae as t}from"./chunks/framework.CBTkueSR.js";const F=JSON.parse('{"title":"UI5 CLI","description":"","frontmatter":{"layout":"home"},"headers":[],"relativePath":"index.md","filePath":"index.md"}'),e={name:"index.md"};function p(l,s,h,k,r,d){return n(),a("div",null,[...s[0]||(s[0]=[t(`

UI5 CLI

Project Rename

UI5 Tooling has been renamed to UI5 CLI 🚨

Read the announcement blog post: SAP Community: Goodbye UI5 Tooling - Hello UI5 CLI!

New Release

UI5 CLI V4 is here 🎉

Read the announcement blog post: SAP Community: UI5 CLI 4.0

And checkout the Migrate to v4 documentation.

Get Started

Main Features

💻 UI5 CLI

Also see the UI5 CLI Documentation

sh
# Global
+npm install --global @ui5/cli
+
+# In your project
+npm install --save-dev @ui5/cli

⚙️ Project Setup

Configure your project for use with UI5 CLI.
Also see the Configuration Documentation

❯ ui5 init
+Wrote ui5.yaml:
+
+specVersion: "4.0"
+metadata:
+  name: my-app
+type: application

🚚 Dependency Management

UI5 framework dependencies are managed by UI5 CLI. All other dependencies are managed by your favorite node package manager.

❯ ui5 use SAPUI5@1.117.0
+Updated configuration written to ui5.yaml
+This project is now using SAPUI5 version 1.117.0
+
+❯ ui5 add sap.ui.core sap.m themelib_sap_fiori_3
+Updated configuration written to ui5.yaml
+Added framework libraries sap.ui.core sap.m themelib_sap_fiori_3 as dependencies

🏄 Development Server

Start a local development server to work on your project.
Also see the Server Documentation

❯ ui5 serve
+Server started
+URL: http://localhost:8080

🛠 Build for Production

Build an optimized version of your project.
Also see the Builder Documentation

bash
 ui5 build
+info graph:helpers:ui5Framework Using OpenUI5 version: 1.117.0
+info ProjectBuilder Preparing build for project my-app
+info ProjectBuilder   Target directory: ./dist
+info ProjectBuilder Cleaning target directory...
+info Project 1 of 1: Building application project my-app...
+info my-app Running task escapeNonAsciiCharacters...
+info my-app Running task replaceCopyright...
+info my-app Running task replaceVersion...
+info my-app Running task minify...
+info my-app Running task generateFlexChangesBundle...
+info my-app Running task generateComponentPreload...
+info ProjectBuilder Build succeeded in 296 ms
+info ProjectBuilder Executing cleanup tasks...

🧪 Node.js API

Most UI5 CLI modules provide JavaScript APIs for direct consumption in other Node.js projects. This allows you to rely on UI5 CLI for UI5-specific build functionality and project handling, while creating your own tools to perfectly match the needs of your project.

All available APIs are documented in the UI5 CLI API Reference.

js
import {graphFromPackageDependencies} from "@ui5/project/graph";
+
+async function buildApp(projectPath, destinationPath) {
+    const graph = await graphFromPackageDependencies({
+        cwd: projectPath
+    });
+    await graph.build({
+        destPath: destinationPath,
+        selfContained: true,
+        excludedTasks: ["transformBootstrapHtml"],
+        includedDependencies: ["*"]
+    });
+}
js
async function buildApp(projectPath, destinationPath) {
+    const {graphFromPackageDependencies} = 
+        await import("@ui5/project/graph");
+    const graph = await graphFromPackageDependencies({
+        cwd: projectPath
+    });
+    await graph.build({
+        destPath: destinationPath,
+        selfContained: true,
+        excludedTasks: ["transformBootstrapHtml"],
+        includedDependencies: ["*"]
+    });
+}
`,24)])])}const g=i(e,[["render",p]]);export{F as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/index.md.Bk6Xmwmv.lean.js b/packages/documentation/docs/.vitepress/dist/assets/index.md.Bk6Xmwmv.lean.js new file mode 100644 index 0000000000..214b97fa61 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/index.md.Bk6Xmwmv.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,o as n,ae as t}from"./chunks/framework.CBTkueSR.js";const F=JSON.parse('{"title":"UI5 CLI","description":"","frontmatter":{"layout":"home"},"headers":[],"relativePath":"index.md","filePath":"index.md"}'),e={name:"index.md"};function p(l,s,h,k,r,d){return n(),a("div",null,[...s[0]||(s[0]=[t("",24)])])}const g=i(e,[["render",p]]);export{F as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/indexJsdoc.md.DfRJIwTb.js b/packages/documentation/docs/.vitepress/dist/assets/indexJsdoc.md.DfRJIwTb.js new file mode 100644 index 0000000000..0648788657 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/indexJsdoc.md.DfRJIwTb.js @@ -0,0 +1 @@ +import{_ as a,c as r,o as t,ae as n}from"./chunks/framework.CBTkueSR.js";const u=JSON.parse('{"title":"UI5 CLI API Reference","description":"","frontmatter":{},"headers":[],"relativePath":"indexJsdoc.md","filePath":"indexJsdoc.md"}'),o={name:"indexJsdoc.md"};function i(s,e,c,l,h,p){return t(),r("div",null,[...e[0]||(e[0]=[n('

UI5 CLI API Reference

Support

Please follow our Contribution Guidelines on how to report an issue. Or chat with us in the #tooling channel of the OpenUI5 Community Slack

License

This project is licensed under the Apache Software License, Version 2.0 except as noted otherwise in the LICENSE file.

',5)])])}const f=a(o,[["render",i]]);export{u as __pageData,f as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/indexJsdoc.md.DfRJIwTb.lean.js b/packages/documentation/docs/.vitepress/dist/assets/indexJsdoc.md.DfRJIwTb.lean.js new file mode 100644 index 0000000000..938803b179 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/indexJsdoc.md.DfRJIwTb.lean.js @@ -0,0 +1 @@ +import{_ as a,c as r,o as t,ae as n}from"./chunks/framework.CBTkueSR.js";const u=JSON.parse('{"title":"UI5 CLI API Reference","description":"","frontmatter":{},"headers":[],"relativePath":"indexJsdoc.md","filePath":"indexJsdoc.md"}'),o={name:"indexJsdoc.md"};function i(s,e,c,l,h,p){return t(),r("div",null,[...e[0]||(e[0]=[n("",5)])])}const f=a(o,[["render",i]]);export{u as __pageData,f as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 b/packages/documentation/docs/.vitepress/dist/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..b6b603d596933f026dfecf98550bbe4d0876276b GIT binary patch literal 43112 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 literal 0 HcmV?d00001 diff --git a/packages/documentation/docs/.vitepress/dist/assets/inter-italic-cyrillic.By2_1cv3.woff2 b/packages/documentation/docs/.vitepress/dist/assets/inter-italic-cyrillic.By2_1cv3.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..def40a4f658cf8a9f7029c98931f5c9ff5a00910 GIT binary patch literal 31300 zcmV(?K-a%_Pew8T0RR910D43K6951J0MIl50C~{>1ONa400000000000000000000 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 literal 0 HcmV?d00001 diff --git a/packages/documentation/docs/.vitepress/dist/assets/inter-italic-greek.DJ8dCoTZ.woff2 b/packages/documentation/docs/.vitepress/dist/assets/inter-italic-greek.DJ8dCoTZ.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..a3c16ca40b2a8f454c34cfa91996ec99ae2e4aa0 GIT binary patch literal 32564 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 b6r&82^QQ+ZZ1?Zre-i}g|91_a`#}W>14e7b literal 0 HcmV?d00001 diff --git a/packages/documentation/docs/.vitepress/dist/assets/inter-italic-latin-ext.CN1xVJS-.woff2 b/packages/documentation/docs/.vitepress/dist/assets/inter-italic-latin-ext.CN1xVJS-.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..2210a899edaeb06655f7bc50e7f94444da140b94 GIT binary patch literal 120840 zcmV)DK*7IvPew8T0RR910oVut6951J1HHHa0oRcL1ONa400000000000000000000 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̍l;7$I!f#g9v^e>1P}fUKe#ag~o(lLI!lKh0Jb=5b zQrf0HcUfP#>CS4yi*@i6?FDcxpq@?2th5m9hU@P*?~!PjinRJrW|~@;L}u8m2K0E; zjiV}&()zAz4Be3v4VY{{B6Qm24quW>(g&r|HN#Xwy4?|<6jIymWiWDDxj`_qA1sD7 za%`*H*B)jXYtKpq^Qa2jx{0|W50_3v-wn(tO5btjQLbsmd3Ks!osd=tOGc^d`kIYS zCnZ!ZB}EU#TB%A7mKU9Dur7c#vOqwD%wZVcuhm0~br_cnPYuVDtOZ%np%ckaufFDC zbPG7|R*y)q7wo!pH`X<$ZR-nr%b4v%MH5n9G``_}lYy2Fsbdf7!H%2AZ$b6nXRPwV z8`N<$h9ObdV5KUZ*ot+?D@Aivf{WvbXIojFZMBus&$^h`UCb2mXf zm@_naJY^RRgD4g1E<6Jtn8CXfl_MFv=S`G>1dD0e<*4tVS?Ir!Ij&KMRsRI%KmLw? zQs1m>{zl}uMGxovwZGuQ@0#7N%huxGDw-n4;q$vhKKq2^Q-n!3%CkR#=+R)`7N@+O z^Pw*%qGvBb7D>qHA#hece5_Px+nB1qTlJSuT6pJPY(_X%+DS;e{};gflSj=9rEoUQ zhY>7A+A4+h+DLb!RMIQnz+JmC1*N6U(X2os0=U~X?Kk(v2r#qB_6LKuTrh>0Szzn6 zePu(__NMjvk$P}sy_B)|X!TBN=Kn_~bZUQ4HkQ&GEz zCmAt#qmB8(VZ?EK;>DL|Yq;7N3J+sxEs=k4;r=L3TBDBJ-W=P3C%9a3J~LzXx4T z=X7IxgL(cK&W2EhUW;)vkNLp!L6zGEB;0ZnLa_Y9%eE!iwk6c)hSKj8fmeAkOC>?% zi|4FcI_`f=Y|}1E6|z_Zz3O_IxNEMd z603JBhIPhLMg#DpWrx@4EY;?sp1) z1y}4^$qt#~rZ!p?ln7^p78k}bxZOl~HG;c=HVwY>g@04?r4r#qlx{3SC$AqFS7+CY zofa{(zysCuIJ02YQh#L^nV>R8anr|=a&&Myf)!tVkW^CXG+oK>N=R43>2O+bQDJ-< z{a}<*Wtn`&UO&G4O;$tuxnlN)b)IeA(WNqXr*unwX3!u~imE!Y`LYNwf*nS}br7BR zFAQ((4yRJg>`HKq6i$KJ242DcMG8v|A@N?#+GCc~}W@3~#C2tD<|V?tfs z#jM;FGu?Sec4>{e^iosPKQ62A2yD5aC6H!(r%v&?eYai5$kSh`{j;K@0?i;&iWG+r zR0$W1mrRk0Yb`kldPG?R{^LznYm%fCMuX9U3k%{{tkwgPLU<}XC0J9G2som;%UQW= zW@Q)mC`*i5&1Pfszb@GiXRp7fuL@1}$X>L1cf85d5kS-Yns5+USuoW&2n~7WU7h z&!{m8Y0XePjYE%9ge36~H@arw3j^`{OmUB{zDkm-MnZ-xCCH58o_Thmc1VO9L`p2M zcy)FL)}Q%l4k5D~Mun0>@`__w;&tjsThV13-Gcpq{IaSD_Nf!&85QV`*y%;~nAzKo zWB?LRTWl@e<#1k&|8#)D8*AheLlcO+iYyKl_~ybmuhuNKmUeq?N8=eoEfRWk436G1 zBxZnuD;S3s`alUk#W&ffxC+6CkwTPN(Zo1ih$zQ~z3EunzVxoNtl_khvtpw`RW!}z zA0T@RDG|9y0p{4f7#yRyMZ$=Q!7^H!#SCzy5@X-O7%1VT`2AU@h7$K@E29a04mBOi zrx?#Nl7pHOe`f ztZFG|;sjemweLoo_E^R3k6B%kej0fd9JDW8nhMH9p&RXcc2c6*;S)6gSO?T)wl(`*S^}j~;+UuHvGM%QKw7$0zm>}C8A``c zRRLsN#UU>e!7{xy*vYmoMPL8Zip$3O-VN|=epQbrk%*AC?02!Pp_SDGhrz{RE+ve4Ra(lbK}n8{*7F%M8{3wGjrbm)?0YnyX7TgQ>WB9aG_E{Na&j25%8hy=TOTgcrxf_cr0jq+ z9nI7=9x=v#Y1fHvX@77hq&%~l>;Xk|pDgMf4wB%h@+{o@n4`8ef#0{D{kd>q&NcV5 zTZwKir(I5mIFD^Xvd=S*xHNeDVAJvPpx2ZGgQ94pv&L-nD7|NML5wJ^fy3)W@GR5q zr!wT=Bkwoc>8;i&#VBS#>O2tNGitqSJMF8Wa%>VaG*ue{M!ou`tm#zb*EcLY4bL`D zek-f4x|QC3BIX&osdm!z_0?D3$>c{w$CEqiGmaxO?2POOOSR?YPih9X(MEI~>%n53 zKMJX+{^_1qHEOzQ=3YnT@jJ=y*T}hW$D`8hvzu#M_3?Y)%&bF*>d)CW2v}!U9jU$J zVlZ?5q~_E~=ildd%$~e?gRW;_vwt3iHUA0nN8fXrIY=3RyY>WN8P|T^F;j>!jGMFp zjQ%jzk`{5|kfq2{P|!Ba;)<#_j{EXE~t zi(SjXi=Ss6Jd2rB3apimlgp3?nDZ^V)y@Sid)Bg-HO@WyV0`agbYthG&y|1DTY!f0~TwbFvZW3(;t-yf7f`Q({S%IOv$x;E+Rr@OX7(s*%BqCu|PRbat}2!Hwsap%Q4 zNqV`?TT#}Zg1?`+%(Onn60BEsDcHFVYJR4;6_z`l=5DYLKzTauJa-Z^2jZ>N{;$s0 z6sV7L;Z}M1)d$x0<<|hp_88{mDYUMZlZfNxh7SI=FEW{4#OD*~Z+tdfu!2$^IWj7l zJzAPZ2DL=Y@g*9I*rx05ka|_Wo~wBc{xW7$l{3&qNTrn|l1QID(oW)w;QXUj6{_AY zJUyidPr!eM+v{^cz_QE$k)d&cmZOdnMDhZlVrFKc07vsZX4TWHtZJ5B>o5qN0Wv*j zVYUIQ_lcZYX~K4N^PPw9+<+H}6#=6~y!$vocl!qM)Zy1QQLn*!#e{h8Q=zp%J!UiM)zrV-4M_T**lz%)B|A#s2Iq@Q@b@@(P;d?nP)Ytt9XD2vkiDR#0 zTbAD&F1({`rN8KpKMQ`}D6qHkAba`I4v&!7d_S)nNa2({HdwC6ur8)v`QzW${M*R? zcjuMLZSlmUc)OxPv^_ETKwMc7dnP$^=i?H~J0+8Z%1Xkdq^kVp&7jKhXq}K&mEF2Y z0xsX7%KNvT5X*oHO#Mo9*i61`MpMcJ$!++|G8i3-_pivJQn;Y^w@%b$XL-}%4WSB@ zft7!AwkRz}c2%rAreQEsj$=oyU%dCxjZep|;^hx$|3dAL=~rispV-!*Dx$ZWCbvYD zr=>SeUKfE_&iNkuOhxn4=1hWpxX4~EurFD1y=mWNJbazrLU3ka9N=L}NFNf5hotG^ zVbjxxw`e$BDmpwQk`6?$Lqj>?5zWC4iwNh2hH=#l<4D&6zdl(kXAkz*SOPoDa2#os zd8zTBsl6TD8Xnth#-*-?fgdudC~YrKj4LPzi1QVCU?UvLK5vlamK9Z5Dv|kT45tCy z+ZIN*&MBTcDb7DSdmGpiTD_7c|G*wFOv|0!?11ro*)C2tbo|GO5Kc@cEU!xY?V_~q+pro@YE(x%2%)c{lgSCDvIHl4eT zLPA}UcywZV;gyWl^=3)rso&QW7;k(heb1(uyxc>#?s>Gei0Ri5NkgULkqQj8q z2FIbN)c`u&fT}XUd6ZZky@{PjO3q4bnzhl~YdthH(P)*!a>3(M^b$$jsp8!mcJ08; zydrZjHZ|9Rv>YuDqcRE;>eTWCX)3BJm0lcQQj;1(Bo{<=9*2_(@{Y#IdWRd4awtJB z=0JB1hAR~CR4B2yU_KsjCP2_lZ(J)}ucR-Jd2VAJE%FS;@B+(ZV`NLTiwTkJX_dub`EUc2^M6447>Oo4y==kjsQ zDT`a-b{%J{z%F4S#Ss&adz+yDDvZ{pQ)*=>o(dbXcrEo<`%GNmBkKn+gjiS zVHiTmG6;5Re`;{_0YPHl@l(bq zFV19@V&e+TapRVn{VeriyLJd-I+dJRcF3j>!4lVYklE$&xjZO-F+qs;PxT8Y$I4>) zz~SbJ-5s{o;pqC?b6`J2&=!}hnt)MiGz>W8bF*wX(MmX1S;nf0#b%5^iMd%=#P0TR zp$c0owQb0~FWG&WvkdP3C|pv`YU@leuEB;C8^bE#L&)<1yK*#XqMzik9=>(9Hr-W7R)n1KiOUH*^XVFMxA?p}C@Lw};2cS!1NB$-;K z&qvs|j+k%HRolo_#o%pR#~&SX?VArO?y^hR`P6yj2_AwA@!R1vv%@b9!nAD3aAr|? zY$p57(g%UWY|Ru<{9R<)%|CK~&;PRA8rT)I6o9oeHbwx3uKw0mHF{sRlX$n!G=u<` znYtd?m6`G{&wGI9kD;UM5YLhW@qcnW{;YgNMaetr+>(-`#nY^PE}%Amzz`J;UWN4) z03}qzHf>~B5_h*I&%FyIPVLIO+g_XKkn!x1hnizN*88Bj4gW&cuDp2$sNHsh8oVxg zdse&+EU!-U`YPTBk!{7fO@Rpd$DE=u7E{q5oKC=rxEO8_5V9+`rorn{HjknX>-{Gg zv0@oqY0F>nD*+JRefn(RWli^b7p%OK)|H3ldxb2+{n6pt(V|`4?h_l+8lKKMfY_bv zJm|wsvu)S%&}?V+_bE{#sUj;=`p)ZZ8t$p?;eQ>klGhinjS5eMDNkQ-y1`Czc1!kKr~`==JCC>KDrR=ihVC}gzdib^9LSH z+$~1`&jW~ne6oG5>S`tKYJ;QC@!Bu0f>YaOVIF_^P{YjMBC81xu0LZux(__3rzF^$ z{7?OB>%Q~-h?j>`(6iJ3tMkN8EIHus)W?W{(`O}3u>|M*7OO0b?;2*b#n`$La<+#r&#)N~hCP0^UtA3z~ZFmcb|0(i1srMg+~==XLZKksZD_ z-jH9AQ14G+w#6BkwQ&S?RoJcYCbHitc5YfrTn)1(j!dWx10VnWt`qBYLoh9$nSqba z`uRB_qlBoS3t68V{Zc^u2ag;ax;bwbo@Z2KKbIXl33eWlLluZgq56X0QdUD^(+ie zIGEGlA&-CKbE%=N^+!Fk8d8Wd}vtkKkfAoh|n_J z%3Zb6x{TkMc-ho6=uzw+wiBwR#}mT(jCz&&#>PL^^x}T7^ghd7`FZzQ!062h>A86L1om%lfysP>{72E});Pt9_P_fEOI)h5+vZObx0{6fjXnxi<dc^ zds(lXiQr=L8dQn*cl~spff;t5^>%(R0gVbQL_XTt`DdQbHj_OKvI^=;Mnpq0NyVUK zqH5a6P8C`n=t3(1R%1OXOEnDmosF&-iq##AQ8#ZO!-$cRQN(1$#Gq5Qk*;@Ln5(+E z@NIID!&!3~Owvg4w62?}j!*7QRJ4@5oFnU)c}=+j0P^;F#H;@EU%%61w^RGT5qG?nZpi$BXquZ&KJ3EZXPex>Fh`4S# zfb%i9bn`@+LN`z*)hhs~f|-1y^8ZF!z(Q&v@CIs7xxCJ zvc|z`Hf_sFhe}^Lwvx3=L&bGmXCQj<~|(+2MULCKKGnoTAf8I(mwZm~9_b-l2ONfSdT845W|jxu)# z#nrc)<}`6S%f~POMP*@4BC@JK;!WF&(DB%s!)&B;k{(M0SCI_&t|XJCE6GR80Hyvn)BEgShkx(Q2Uv1?b2VQ6=^5&8=6}hfhNp=;`rb+2azRpL zt2A%mLt~4nKZ$EV%>U=lYB>umATDG}A$JgrE+9d3gjTSStvBmc!?>%XumVnd)OnZ zybuogPLEb?d_}N&Hc_N)pBC;R2Bsuk!&wC>e}xc}pZgCGFMj0F_ikK(}Dzr?(BF8t{veo%uhz!rQZKOdm&)F8#c zD+Zq<1Q!jadrOp}nR2`R%Y3I4fssja7Ui3CR8UT-E!^iNV=YE~RCB{fi^iWK(KEq9 zFxqq!VCev$;Q#--Z-~~O0l8M|!|Zg&xgg zsr(VYOfhteM~P#|EPX)}N%%j=T^HKVFLR0%VS={o8@MjGk^Z2!bQ8wnL|t4V_{OYW z%UiHXhEd&w64=C}skEM@dV&|x7rnV>F#>`tmy}dRqX+;=Z`&*xAt_oPYjfHadciH> zD`9YiK2#WXgWJ3xgA$2q2s+(YP2#oKf`L*LpNJkzw-iy#_0d$@#0SxcOFj>lm`9qW z(I&p5tQ`?`yZ{^3%UKk?APW1saME7&CPpWF>gFPp zBy2pHJq3H)b}59O!c(L!6j1SqZ}U1Cf83wGZsdAokS0!>ylV3Ix_-mRjVQJ4#`&ABx%H>`bMY%T zM_Au9!gfuaKQ$Qqeeh;*=e8ZU&E0b$=gvKMy*rKNdd~H+>uW6=w-7gmd*nXd zzFv?}+bN z-^ac$^q%_P4oC~E3Th6<1jhy63;urpt^MDI>tfDki+KIILY&&)wJD)ww zzQz87W5wy3|CFI*!7{2WTV{}r$66(A%)Sb{>*8_csUZ?-Ej8;}!Hd=PALSOA%w^nzr?z?(Wf1>_c{U`Om8>|fe2EL)e zuxJc0VvRgwzR_gtHjbXzb>n^GGvl8fZMbY|Ha%`kYW#ojax=79-~453WLtYXru|e$ zZf9^Oxl`6z+1b;1vh!-^lg{6|_H?;)g?FWNWp%Z69jD(A4xZ{Z?@sBy+5IC&^$+6j znLjK&ul*T0Utbb>?KiJ|_4l7&|L`CEr#Juf`)}A~AN~8sH>WFv)Yi(>U;Oj!nyN#; zod2)CzFS*;>A&e~msOF;h^B**I}MdvHaHx1ZMb9gqBC2slpohd@}#jcWm8U0wFwxy zgRiLUBH|7-h{rhU&J$nlvxgfXI}sOe--Xy+fWe+%*0^|=28&bHMGe)5SD2b|Qo380 z9|ac^G0npXc)q^0(C`))v$yCE?@+&eOst=ONX3P1!JaSWn|mlg&eX=e8a{O|EhiYN z9RM{?B-B%f9jO-M#zTs(*B><)njv|Wny&b>AUn>?qPOY*-Rq-n7$M>sI@n9(JAEKh z{!1)newKGh2ey1Q*I@W|0SC~jPf`?n=f{t+l**j?Jv{Ki1J9D|4hhH4l4)Q=`v5K` zpON4via+xL4kJUz2Hay@1ft1kD3?^By{wy8mFly;<%QN}NX;G4Tnr;A({;R}<8G53 zhG|wP&j|=gsVaFUH#8%fLwb2X<$8FgV=WKFo%i}i7trNsJ@zMEpKQ9T&s0cMiJ(PI zevvJ?V`$0wfu+n8kU$arNFZ@kQF=Gd=Ct4n1QjYYvy(A~;1TdsECp9Y)~;#S5}9h|AxooVm<5@M*VSA9D(i#ISZb06T-^H z4zu&;FH6t4o^P*fUq-b^UU~*}4v<^&G}5xT@|ZKB=I8eY(lh0mB4T)WYKB4~PiZj` z2(oJR%{LixN+-o1e)6+@h;Gy8|D%s4RgQD`XYXQ@uEln-GchE5P8&v=&rBf`+r>u7 zVEZ%3{pI{f>vfZ3=y*FwAc;gtk3M!~CBJn!jys8mLgRq9iB!^qAb(*yiUL^n!Dno@ zSr?rzG)c=heO0SC@}8Tg&Q4`SsDjyP~h&imEMevM!wa4nT*TMRU{V;&>M*`$sCYnGgc6@=0+-m zQo_K8praNnm&VDsZ5md+r4EEQ_Wl`}X>IF=LGKzRrlCj%3#Pdf&Gj2%S+WbodgjNc1L-Dug&VwIQx8P044l$TPC&YoR?}<^|mfEz@ zmB5z1jH9COW^s4OBaaT`NxlUViU~%Txt_O}_zy^*t_WpFH%-og8ZKIbaiOG`Ze}I| zBu?)o%@9HFzid@J8{9J%j$qz9vV`T#Q?0j8fDyR!jF{#d%ho#iHSm&%a8BuI;eY5@ z{>a~i3E{^>Y4Pa!dbmbf#bPNFYXirLp56-tZbr@Y5r1Qr{*xJU?P&t+9pfJ+J>#y(YZ^}zU^u=_aEgf~M`h81 ziJ~C-J)G||VZhN3Q>->-{5={$fPe@D2!{*C{9XDs>vnO6aVrl#7c{_HrLye3GxvnT zTk_@VnTxNLOg{!1#Yyd7P2X|!7b9YN?@!LSgh0|38*d^o_0=4+{n#0aVkZjnUsf+1fPJ6K2~$ae`(!lVScuZYiNDKjZZnN?9nV4#5kvnqj@ zuLu4T-@@)TL2fJwSNm!tGNer?eCk}RTUK9h#qd$tf!#^C8{4>X*j~u%bQ2f65=6ocvs~N{>UVM5=hg@zVd5*aaWD@URw&}sAlyhwMeI*H zXH2d{7F|Xi#=gRC(_ywYgx#P!u2p`bRPrs_Z(XXR!}UJ9oDc7cuzqWC>!i@q$&GAd zO?Q1A114LtiO1IOGB)V!tI}9F$M2i*_|w5%KBT7$OYMhBdmw!kt#hcGyBBxsuEwP4$xXZ0k%oY+G}=z?Fl-dAg0`d8E6yYBbeVLYUoOm0f^ z5cyGgaqZv6#go6k{&glpy(rEKUX*?(rXLR`ROuk_jF)jg096e|8MXNu0@RG0>JRl< zd!GqdqFm39VP*Tu%YFCLQ|!c$}h`~rnSES zDh0JZbRSqzUn7CPYa>-~MFs+R33r}Q6!!+YFd}Dcx*{mTWWul1$ z3h1U$k5Ue93ASJu;uYNPkO zvm%K%)x{y`;NFVMsU^#r+HSs4D7OW?LE6VNC1RpX=daek2AH%-TV^7C^S#Y+Qv$zA zX-PN$*ZBJ(BUvn_lDX2kG?doG)Y6$j5=acWxjr;#oJaD1n;`q9{FHZF&)9I-2}wm@ z&#M#c*`>G&C8TjI(-a8{hI^ujfdYPGk+2+U8c#8-8q#zYss%Ewb9FQ&RM3SKQe90~ z`kqU1pz9{*hHje%)@2R+7bYqxcl0H}*i0}ZsR@n;@<3VCEPPM9v{d5Abf%~C?ryAY zY5C&AjP!|&2Kg%aeJjjo3LC6V#+i`p@W<4+`dyDfM|LZ3#qXHPhZ?TZw~r~7hnCPt zb@lJZ8aT2Vs)9KNq1=6Np?uyMc@(n@r7HGQ8wLrzw=zCw*$`7RiUNef$O}Rmb!*TG z6I;T0CTc>4slei?B9R^+d#q&J9*>J6i=u+4@&YLe5`dB3d?&SMIb2_lOhh9PARvGM zsoN8C)0i00U=hO3lnI6VN;XVjeZT(MLasLLYRy@xTQV0>N`lbk;CIoNluJO8=7c18~!oS9gZA8P=vIQu8TA|XC%kSwh?8FfV5az zmz(UJ)iZ*9PPe2ckq=fCY+~bNe67tYoie61>@fo$L&}mNLw;{^z<{>f zi;sUky*IkJWMkihVs0B$?3tu=ZYbXx^{V+)k|2J?-(wx~DDmkQ7A02jq#ZYZv#wJ! zjn3(RMgJm62F3vXS#24TI2Nd9f%dXnmhHfa$x=b+V`SR~V8v3u{xfsd z5+_-kkZM3Ze#9O}mFy1JT*v9Wp*%au7l^0h;V?mH{rCR^^3Ll%9-O)Spe(kwqqD4UJAe#nCw>`mg@HoRvv00*zTJB%bBbY>+vxZrd)`1WBkS#qWRbd{PpG{PmY=^iR& zSn?6(gSKq+`OBrX*XhU7`AOW zE2?EXt2C;OQf5a{5@k`WWUgpSZ)rivPb*9}oZ=nOe$2uvrp9awZ;w1sv1__F7Lxm9@WN^zR$WlS-Ro)}($KRAuynwbT3RmqSvAW7s zolx-D6k*6s_u}Ua2ZwsQph-TgxIJ*hWA-ynpYH?~AE`pw_b@Fm#ewuPT@{fU(My@q z$%oW53bg`r_@X;Zn%^2T?{;y|9kAB)y?K}FIcEoc{*WY5NTw>AE|rNPF1t?OPf>&` zdS-F)$HRhc%o9jmJbC>4ik)9z+wz06cX=MR-8wL0ea9X*l-AEZy@0Os-Z4^X(2dOZ zPaD)y#yeob35?A%1Ip@NHOAj9J$>3P20E4;i??r8Rs}jRJ|MLRe}|sPfGdWfD@)S= z9GWt3Z^43rLQn>lj24<=@Y{zKlpwJ9@#2Bo)NLlg#Wm;L|ES@zmS7%mD@o=&;&j{ZuGZBkP>4YKi>7k@MfbzxpX<4P@aWCxfewtCS&pUhoX!47D~gkC&P#f%bvfi6jCb6qWqbb5J?XtS_t%cRj#a3b zx_0NQEKHRm`7#l|&;NX(O@$Y>$9h?-%FG0BErNjalri7myA!c9IFp4==-mPTatFjN9Qs+k%afiNfwu+6tRMCtGcT z`N?(2K9j+z$Z_Me!I`)iKgO9@(Uv>;9lRlsOemaOD7nx2SD?T3_1jC+rW2D~THhdw z(KPD9PWh9w`4U5YG{2+)pPlJRObKjm`gF3r7>f|*b_8R~3xYzO#Vb0EkX zNRe_{5h_@O3M#DyqFneQs8*vU zg4Wts(WeW;2Mi4jjZMp1e=RW%0yhdl$NjB8zVuhykT1co?s80R-Te_)jv8gMjNFg`AA1PhWM7Jtv+TGv{+oC3ZYTGh!yo+SnV7Pg zm8d%BR#s<%h(Y~?yZhF2)^+-VX&61i4=!EJC}3Vwhc26xq?Vc7l{;?v84BU@Jm_B7 zdR~@&sA){l64I#YyMme-7=Ox(08KWD4aU-KNLLo!p&D{dlea-Y85Uy%hIc+sqBPQ_ z)qFh|HJmeh;RSYjLs8q36}Vd4;#~?!)k@=~nR)(>0az;YQv&7hdtu(*F@SA4jbaPWB6#~J%=c|~Pi6#48!V2^*VRm)Ee;nA>8`fG=p zwD!=8VID*bmqKJsJK9s)NXgaw*)~<*FwX=t?4&psy5m#pAu{M58zi#ouh&V7I@YJ0 z?1lL3t|rl+os0cY`HS{LWef_C{J70|ut+18lWYkXTaEEJJ&P(CzV+wy zmT?bTWt(K%#MVy#1YbDw3~q-BTirO=;a;#DZ`Rt+%sY7rHk#6$JXE&0n8-LcZ5vxQdaWA%#0=NGsOd_o5xeromK?Y2ar~bgIYH2og2Ixr*#8iD%YWep!A+1^Mc7CH8CIp)!<(Jg226|0V43iCF z_LJ&QeIy9tN;(-4b`aC4QP4DR;vmuM#>11LMO97V8qP8rla7JWFsg5_I2vnhWVdlS zXPuspb#UWTIjw6i)Mb`8=5QF7Qnbyv5V9)EDqjjP%JMDCnG|GAwmOWcBry>YkU_Jp z2VIQI4-}sHt&@RIT{3v@DnP@L^?``q8*XtUpFv-YB~AQ}pYMDE1Ed3dc|5>0!pVt; z_LmnrbdGFBujP?@P?wf{;L@;^jWQ&JAp#QIuVDDMSrb-CRBS=hC0kcPO)N#uVJl{~ zTfdLnTq@NpjfWxCTiOd=kC=a=m108#?Obe9z*oJ|gksKt0WfrwRY63e;0VSWxmlcpgsK zM8Evi8?CKAr%R*&JwU?0KNb|&zznbUS1*h3`ktw9H zUXibl=J>5yl82e8yvle)*iuq0TEw~+2|C;#XKWWJwg1b2ZX?Gpf!K2H#;Bkz!e~y$ zgJasB4ujuanl@cUJ74+ph0R+3jdM=uRd~tWT3{N-8}@@&kI%`IJ;sRW5rTO{l%hv% zF+_z(g-|B;V1z(uv{XT?d(Oi!FHY<#8)aOMpQmkUx1+lIjD<1V;f!dLBf1d*HcDXV zy6XM`?5;+auIh;g3?pm}LzNBA_-rkM+V8IKb#FYpcCM4PvHB(Q68sFmz-ojIgD3TY zL3AM&tI&lx%_w6^8HO!|^1vOalip3+GB^o6+nn<)!Pc|_k8(m5wa+@q-EI=(d0P(9 zu5=j-Z5Q5DtNww5bz^9n>Vf@eyY8*-;o;fw*ht+0YDIxTcfR$rAC*SqO6Jzs`q^Yg zz+t34dzL|ApjFgIqYY*G&1<$2ox@xW>LZDU!agb9KBp_qX3#Db0`6rA2PhQXu{$*j*1I)8 zv~C>yE>Z=KBP4Jo!Uy7{0g$7+3j-GNFkmc-MV#rjfql>MsArh5z99&xso8Mop3eJ< zRHEjf$}^Y9)!GgQ$Axuw8T|2IYE}S&6!L3@0d&n~UYPBWU#|$9x$nRSq%+pBIsv!G za~q#LOhw*o+>72Pm_nZKN~M@hr9SMcW2nc1McH)5$Aja=24V09`BVW`^1<4qBluL* z>BpE-Ot>;yw z&4=xH3D>-+m5cO2AQiZY2*vC-TxhX&}DKvefyzkaAcy3JvcBsJvvcYIWl(gXzwV={^6-( zV~bzgkcprhXK)eMz!u7Z3kWH*?TV6Z{*3X=aVI5m+_@gVfjU>m&XsRZrI_i&q{Cy} zk**dA>b9IBn(sSoZ&F_OY!{QoxpVu6-K`jPwL5FtzAu$~zKW8530w&nUocX*Eq)%$ z`+jOq2v7Bv_pHlJqG~}q&O;G2)*~XSQ0TVz?i!?Q(yA(R*xfeYluG<%^#mPJsF<%| z9ASuM4sS=RoVUXVryFjf+xn~wFv)t2$2kvHrsR7)ZD1+x%D~lG29)R_aIM?*F>wXC zKzGzq$!q5N#52fe`cU}zAOY~4P9Fpo{%qr;4~usQd4SeOPB+a2qlme7j-&Mz{>DRm zg>OWgV%L}P|4A}+S! z+gi%R)3poJbn|S-o;{Vpmffb)rS^%GESHvM7OhyT<%UMnl+(eHe~}&P8Cjape72g) zR~t1e8Z*E7FQwQ!o7~xJJ!tWf58qZQ*T^8ZRB~JC#c09Wb4;{BY%yDC%J5LtT!vUn z$NKv;6cfR1`-BUW!tP~K_?cakJ#eM0m`x`am|%r*AxCx5f|Cu8d|!X* ze;cECiZ#@M>~^mjRy3YW?Sz)0;gh9vtU~Wr@?s0Pmk7CF!V=RLt*I%Ry@`O;c8Pp@ck(1iudD- zmXJ@m`8bYJ2QAAhz-dwW5os21Nle~#buIgBXShrtAAgQLfAP{4LMV+k@ddVIv#3$$ zYWJaw*e+b*solki)NEE-eRJBB2M6baW#3t;ScnIeJ7I6{joV3^YaO>bUQKKcWm08 ztl(rc_my6)7hm$w4bpi)_pWn=RXe;PTpUHw8=a@R9AzfsxBUI;O?&<8fFGE`Glv() zDbLF;wvk{#<`ClXHvMf|b)iuXX@seI>>*`b9hn=B;4)er=e~CJLLsa?97KaSr0ilE zWNNlkUGvR$zABe&M+Y;YGf!63ykKZPCARI;oy5wm#Y+fMZ;0DKBXK&S&BQK&#((Yok1?N@~iG$F2{LLVh5 zcksem6qMYN^@fP+eu7bX{JtTRBoK%JET4D1B-Xwc^Y(g8GZ-_ZlDW9}b|tr!$VMjwXmcnc3n^`FR2_oggc4(ks}dyC31xb_+&Py4iF~zU6NAcs6rM z6gcJNviDDz{dPO^6xDa>!TO8?r{AuI(@pSdZx@%P=FAZ#*qU~MbWRs?$rXCfHlR(3 z#CxJ)XvF(_e_HELyv%}#1>c$F(5%8Xt8)`^Z=d>ja3Lf#gt}amU)r_HeLa~^RlDAw z_0{gW&hxUW%Mvt%r_0cv(kcj;IxS5eddmhNi^T9_FN(8r#Q{f|pm72ORhYv}6QhpS z^NMM8{3VsE2!0{TkkC6W@Nu)lCT9~Nz)!qmx1>moa{1PzNoHS&C~tOuUMF%pvot|y z@r^k(cyN%L@A3E%SkD}WUR)Ts<9I`sn(}v_E0tsDDqh?h)2M0TCwdJ2%YM7In);&8 z@;l`8vJ}}5Nqdq^PPLvZbFZPz^nXo$>8E&`_-^Q9T}xE#$(h``MkVqC6~k8#&gHLS zVNp0~@AbplO?pJ!j{WB>aGmZu%{YvLaW@jF0G~+)@%eMyI>rc@mbE}R*ZaaT;{pa! ztK(-6N7`*U{+Mz$2UR&E1P2q}cQ?(>2@Z$XCr+=J(2mn*3v&O2&F?Fese>{E&hYGm zE88vc?l{Ul;lwL7H&*P&?CF+Enu&Ff$J)K@3gOv0cK%?1BvAPg^)Thrg`|lBg<`ZI zF@&1KaF$mzh1N7C7@!4(L?203`ewNXyaMp(6ujC6p@ zVR!J%G=p3q=@Exl4GzLAXxSr{552%pPKk!JX88$6u~n>RbG4$LdCE6ktAw~-9Q8J5 z9bnFDoSV9ZR?l;B#*N)4$g97*-4w)r6?-nSbmK|*CHz4i3OZtA14^OeYEd4B z9WmojeA^`DAl;9iujA=v`jh`M1RuHj@yf(LBZnT@);sA()dsu$RyW-asmyFNm|x%e zQ;oP;VLL3_b^){5XYcACu)rlId1wXtNAjF>E^KDghu)5(L1KL>sDF3m#+#=MQa8_Z z*W4n8jtJ>eMfUjhkwm5zl%k81+%3h7n8C$Ap}lcoSw=p*^@(>9EqqRo$R+w(k*8bOJrS89-T52*6UEVEA|bsU9%Y=%%1C# za#Jym)mV#*unMau5_dFG8eFJXtF?wpm8wER$W$4l);4VDuU#rO8>MQ?1g5~Op{`6E zlroxCtX0e9x*)`VZFip=i}v_DL?`H}=d__6y-Oq~mI&@tesQF%yhV+_4q8kN`AIGAFp5`&CMh9( zeg;g*FiN+C&V_^hRmR1$)4MUWW6+Q-$rw`8@&YAM#dcfPZHEyBL9%d@#P6&G!N2Q- zeSvG4mj0&go?G8hlkH@V_}4}k5DIhH{gQPGEcE?6(7&$??eMcNrsH_GxTot{NJ>NJ zplz2ASs|rqk%%Us?sM_XTq`L_phLddeNot_m;LZ!t0ozxlrw277AnMUS5~DD2>U_3 zJ@)d}JmpI)-@Pr26$xpD7nJvaX@BY@ z=`#qY*L@@%?UV?SG6aCLvoiMjG;aShf^VPIqA7~(gBtzIzzee>m*$Q}vm4S{Ec^3w z&&H{cj85Llf=MIM(eM;Gz0}gS+8n=jO_>7EAALB}(N zGejB8e>&waQAPw3w$D$HvN)cD@!&5qfXTIUn09MN50~c$gL?LJtrLxRgbSfvvVH2!_Wt4}&Y+|h&azq;nxdBW>Qf7&})5^~{lQ-6?LFrB4 zhxjFK!i|0#%9vr#O$74;D2ch&6|?hLO|tQ4NcGZ-R{xZeO%9V!L z@-ToYPqN2F;oPeaST1%%e63u`>MUlqE>?>oI6Qe$$Yk#9@QuHnY*fnCCioZLs#I#F zp8hz^2Et>mlGB=1r*Xe`D3sT>0iTJ@|D104!X|9Rh zo+onVC>w%f=z}4N>u$C-f1 zrhl;)S4{vjV$egV0m(+A{aSk)*3aonYOun+Q%`sk3ep&g~tX@$3UD{;Rh>z#76_m)Mj7Mjb; z24&u+n-}l3CQF2Kil&Tmy}lj~>@+g7zH)i6x=Pj*MnpRh;g_g5vf{H%EIp6SUz^Z~weP(KqfOL}6v?ZweuW}Hioh`|3M z-=}+#itNLeA_c&j6MMlv6i`4P3Mi}&_srznY;ULHG#!lPG8MU2ZwX>s0(gMR*6_Aj z$Q8ks${TerTlJzWr&eWMAo(L050y-3bLB?q+vkVZylvrC;Qn#)?Sfo^z;24T^T1$T z)YA5pjB6aia`{vGO&A&AJ|i%^Ceh1Y%{RQ%%e&pJo7eBXf>(01n#2JR_E{roZ9!%70Q%6)>%=b2)Oy&q#@t~ohKt=>I zTl8g(|sF6QlrUST^P@VG5qh#sn)Ou5DQW0(h+2LJqo@ET$NdjceHcV zZS``2!d*Cc;HNtlZIAoovnK`c&+BsnZG2isw60pDskgR<ACf4E*~P2)aRZ!dI=_@Al&Xmsa3KYYsH>V(W}lm(H_N51ncs?92Zf ze*a`_5Y^kz0-01v6Nx=4SE##L?j#rl&C+Ly4L-+mAVrAU&7P$8FvDjvtz?-rbc;Xu zC`QD?^r|BGCj_0?_10W>D_6q}iON%P_OnYcw55uXegwKS;##0O3Rs)ZFO32K8$fUn zunw#78=L@wQ`dsgF(6VfMw{pFIU7O=huq+DS}D0z>Id%~sHhPdHkNm<*L|<{7gkgB zIEdYPKH!7;{ozUYJS0M54g0a5{!M;|)@hmJ1Y4;E-}^keB-ElxB?VAiM9Q%h7$bpC4jX6~7w+ z9U%oR10#fi6+z7*D#|A=BPA<$*e46oE!+DBH1tedOG~|cuwT54hMEz+f(XOu)V70J zi^*r64PV@sTKzb?raOa2k|wyY*Q{~DfU55uHeR+Ve;&!s7_Zkq-Sh2sZz*eh|F}Qq zNZEcIH)-j2ISu3GR_~+&$3ApS>M$KqR>(l!^^)EhF~wnN+x$0|Fk2RI&L^1$Tjgl3 zAt5*fZL@Tru=Gt=B&s`g4<%cAkMhx0vpvMs>}VjQ`- zi}e*v_9-I0C2ge>F@Gex(@51?vk`6s$K#VmO{OUnz>ktz`PjbI|3OcjER;*dYP0+u zufIuAc!T64C0$z5UD`JK_5f+>@RF7E;_0y0ZxDL03!4jO0rC4I< z#l<{WWVXurtK*8vxec*i%xBr{`LZCZin|T|4Nq^4ThA1$w1}wV&K!upY(+4)rT$75 z`gB%hvor0>Ql56t?-Vu#yWGan$z&(H zt=|*_qWROoty{g{S3*jBG!R0%X=9G4huQ^-{0exO9Z1hx5zgz z5Uz}@!#PdK6>(>7D{DKWSiFfdxT%w4!`Arb6J|cpYqdDL(g(KS^QA)r4+wg7Gc|5}icZNB2C~Mv&U1r3=&qG8>FMP2M&EA?6swxP$fie% zRaeaFs$a5`jG0vNYzexH9(`M%gN=+=T907m7Z3Ldw z@s0t#i3D^9y2FI6RAI=#wrUB4zpn)+@Kg;#2?ejKg?l(uL&b{$2S$MhxsIMub1_3U zukfOuVIK}1bW%pJ&oac!VI74rk#>noT(h?^9YUvz1;E`Y4sd1YP@psb&HyXG55P(= zuy{1mMODCu^U}SeYtJ{&lr*D?Zxpmilj$3oe0VgRzb}s$Fk^Vg0~!TB7av{8C_Xm^x=7@FsB_Ddlj@lw8ptZGB&XkgY- zxyQtQtj$>**o-~IBW~r*6Hhe!lOmhk4UPt;2BgS*&J#3}YcU}{R19o^sMK~z1!MQ4 z6@?m$-eB4tdmqN9MTUh@4RE@ivrr03!hVbbO(OkxgrjhjoU7u)=~#)2&Nw}C4{@zt zQZr9ev$9zM@B~@Mgu>3nqW>biaWIkFJnW#>e!RoQU&BnM@c&Thsq4cUj8V<)>E|b~ z8=Rj0#_m|1`5D1} z#0$L4)@>w_MhD`EuaJt2Mx(I%B8+Avn$D_(zer!`V&EaTUu~WD>hB zt_%4}B^z9J<|Ku_aA(=%`f{V<)I?Y<~s4;#+Z7E(eh!vN6BLRUo#oPFF z&yiD7HFuTv%+F?Ful^UO$BNm%)v@QA#%oroRP!gPyS}1<4h+Xh7zQE9x{E{R^HP<@ zx+@fna8AU2G!l7UlxwFP9dR>0Jz1UW4UP?P>b$j?P4PT2E6x+km{c2}r!JwbKp}_x z&~LZnZrtDT{Aq2{USmaQpP z^Q*c>rt=xd^7PuOHMTWb@eU={bl7u+gfXS zxpG67U}yy~2C5nu#i<=x9*%h#Jnzbny0fl_Y!~|ljr((ur_0H$+5f9~d^<6*IdYn} zi=bYIa5s$OBDTbAc#kyS5aq)~zrN~MrW=5Or~#*AyFH7M?QnCD`3+R%+; zAla(VT_v}P$=;?Ot{bfD_kyquMN=+kRMk$-IV{5ES!D0%sfrr!QQ!;qogKQDh!LXi zq($r3?ks+sBueTByG0M^?_y}f`{(DeWqs}fwC zmK7)2i0db?wOi-jnQV>j4#TSB@od|uHc_y8YbI6FM##ELrz!+1@pjtz?;n1{kZy?) zoKR3Pzj$VYUH!Vyj)2ieajV;$gILM;wQ{*od;}aNMmjf`ubflGhl^GAnP94HeZz}BusgOA~X9(dK5dNx~ zpTniFvcn!_Gw+whk?@Y@9IZXU?YIQ1sUcBNQ|cg-Rz;wPZzv|GwL##T>yq?)Jj9XY z6q;|S0wbI$VBE%O=)<+>Ltka2UKeytYRSh`P}(jO%jHs86ds}+YDu!CsQTWR4j4%y zcM!cb%lNpY_F9#xoOaO@RcQSz)!({Hqs5Qn`Td=YRt6bAg;ofNtvkg6=rpg`a5nf{_KmBsI+YWF2 zsr9w6?)F6{JbJJ=iQjd0t>Jcwz|A6+;!BC5|7ar43P?sm^i3Jn-)*G;iqqz`ZUI zoNyn(%dQ+OCXHZqpgTSi29E)sQF<}bg>U)Ur9NEEkAonkbw+mFArB!)^WrTmoBLDT z7VDDaId23evidFTeM<`+&u8*gs+OVW>Pk z%xC4#orO9kW1fL>f*ndeXj) zcQ4rO(VNG9-iGS}+9Sn7$(Yi}1NH%P`lw+vd&4me7vYj^y$Y^YiJPg+)>t`nIT5pB zIN=G9sNG`lQ2~E2Kt-5rK3@f3x{zfzqqjQmequt`zX!(+!A3*3Yvtbzj_YkZ&o?jz z^>D!D&Pw_MH)tMFdP-(Ucg6E3gfrcKDzYi2hrcWRPnE`YYw{`#`!xf zv5TIJdad_GKsZ{Pu)WC)t5VBz0E6cq)?E5`E-Bh?=*5xHU$QX9BIAuBB9HDbggj1G zm-BTC_AB6S*+JR134p%hlwA=eci#MT8i(|{e$+>z1@jnL6+BOV_ahC z2P8Cw8fl|vxOW_xMq|a|$P}zlu2iVf#4?3Q#^W-X6e1ZLpGd&R* zqg8IVZHvijqb+IN@f{>90yF^?sI3lVG8Jdq2Xm*A$$0Jtd-QfOmn*{20k>@qmJcY& zgP(Aa&ijYC_$Azr5{J77bN7L&JUW}y2s99@=94h{a{S8h;^YbfvnGAN!QSJZhIg+F zw9e_L_QmP5;K#(cBrZoAbGsgaf*IpJHs7()N)5OvD}iGL;RIqW`8Ce|n!oGrZ!fZ) zktcsp$xht&nbS{y!du54TRXDvVU%Ywj``111nGVr3H1hke|Q}r0|D$A+b6KXI5=Sp zvMjdLU-;Lolh8wz^Xr(+5+*`t9c17?^vnFr^gFK(}&I>U2tBS$7u$D3wbMcb;m8k@)0rtU1{ zh2}9QEx+ft%Pg^l0due=Z2TW9d18z8!$JKg>!fAX9vg4WWxptnqSLjL%CLHq~GhQz41gaXcl`L zjLB%kvx%zge*5fc+*MrP_WH!{!mosVtTHfM+C)zb{qWHH(#B7|`1;UdH>m9%U-=&- zJ8!r3xqm*QrF7fn|8Ov>m)xfRD_hYqD{r%J1W+qb#dZwAu@|>5j?7rF)g2$Yac4HzC zWtBhHJEON|H>|94naxmcTuJ=j@`otZ7LxHD&%#D+|M6XQm9rK44l{|Uxhr?yrW9}E z-_CzLJvMr&1*TyXJMPhv5@(S7ml^`PP{7F!Bji8RhM$q-dwjspZaE!rF#%LrKM~GXtBTu`yZ30?qcD> z(x;0zyPnKADLrZ6(PKLl2JTKI2_dazv0{|tJJT8xM48Y@rU~VYQw$M;u^r67#-uSU zL1s}(20g?h9L%JVg^x7SWsA$>l1dF*YZ!+ck9vml<^H%n?&sV!q0Mb9{aHPIjBW7V z1q(r5j-p@*2!e$96hpw|IXp(Il);3pM~s2UeT!l6Rn|z9Rab5X@6$x@W3d zWv`IFU&^54duYL2_GWiPAUKO#lF)DdTP+E{1D3NZsBhvnVCi6l&gH+DR+MYM;&-ZU zm9EarnZSP_3*Nr2=hBwCG`#A)`K*i!T)ZQ~-p|%Lc^557EY)D{6)MI!`s2f(Na(yj z|GckxQjO?Jz6W3Rx+52^dFB=d2s0aPi$@RZ`~Et6H(={LIhlv5<7B0a3+nc~aQC_c z%^BS!Y}bT?f4*L8ao_$oe#*z?_*w$~w&w_=X-bYUrDEnZ&2GD{^)@*FALTrG&gY?= z`flUUkGIGDd7l&<>`~SS0x-tZ-Q<)QXZ|Q+B4w=>nEHYkVefq75up&G$yBZ%V2qjq zjPg9gR}lqkymi@t2`PwR1jU#od#a|4HVQ;|EP3yvA{dj2#5%Uw7|r`RCzfOvfUr1& zAUZeT7W^4E;Cid_v~^%VAU8eQ50R_9LvMNvZFBT|rhwq|Xg{RbiS9vhdd$~{8%74n z$zbn)f1^1)2A&!lJy=I{dbA(H5DQeN$3Q;sazBgg^cYF%ykqTNbSJFAnz`3uJXaj) zf~p!v>0{Aj?N%Y_%xRY0A~d5BWyLtMoh*0C~4Gi1@tmSJD}ZafYg z2ML7F+nJJau{M>M3?tXJ4a=nvatcvM%aSXDF)xvuez4b!GbcJm zd@-la*jk*svClq(a%_Bm5a_v?|Ev)*d*0UeyjxY3n+Xf9$g=nTb!bh=#epU?YwPP$ z`sN);%K1CM%4pb8_c721t>A{#uMRq}hql`vgsJttr4SLnkDe7FNU3FTAKRc3Mi~(p zfHK9Zlp}{9`vL0YF@l07EYG4C&A|DX!(oV6s*@P(rlE!P7{a=qb<5>$C-GdyXwTIu zoX8UbEt~P#&d7P26V3}0LIdA*-yTCH%2_Qc2xp1;+$)>(7*!-^YonAgNee~uY8GOQ z)Ybd!;7-%mmjw{h|+K@k+y@iOu6_HlY#R+h~}_A8-EuF zB9lk#5uK5Bw3fY5B+b~r-mF}($pC>u?vvT0if&X-_@sJ2x0#Aa)(_XCo42%HG$erL z)5x704_w1S&nST*J6U*d8t?DUW6OM)Q4W^Ff`?oDm2pTg49ceM@LB9{Tw8F?-5fXG zP<3kP7LYSJfYzWlyr%w+uKlsai!2%m@wihnSY7-6EgMrikGPcVe9HYW7!v*pxD>xG zeWAaFCUO}IFEWlp7u)s|DUihO3X@jVx|n8>lk-n^laG|lhJmh2rNis>Ed=L0m0TBw zZYnntXnpQ_|6Q4XBQP&HMz5L)=7LGO5kDWi*lq5xJ8Wd{or zZ85x7;mWYqIf66N*0({Kr}ifK=;o(RM}}{!q(bcQQzl(n)DO9B_!&0c8J!w~JqI9F zeO`vB!4s|JVfy`B8HZl`EU`T@H}if!TnEQac5gm@s#;~vL{5OQUsKpDZdwl7GGIGd z`&IOzhSDkyUIvYd)F=IY+lOmOGQHg4_fYc`#aivYfFDPI3|R*DML@pt7zu0$*o#{} zb>-msw{Qr0O09V&&6(;MO+|}}133fV4$=;!HiXEr9b}p|51r|B>)0dwom&!1Xwhyl zPy+xi01F5_(waGgr2~ZaCxuKE!SpteCR$NQP#nr1Ato46l_seXlr+X`yl|%oa=&9h z_o~OGO72LrNj#pT8?&(r-I(2+^1Em~&Z41I9tdk0*F~1)VkH|#^96ANnoR4kr+|nH zVjTvuQ_6)vq@kVI6R@eO{FCnPj@JHBNYu;|N~Ow{$w{-Z7^Y`J<#ml*qzM3?6u5+;sbtLh0y zm(%EvDWvlqOdq-NL(ZJ&y4%X2j0fOC`Q06>*xo8!y$(Z9COq z^KI{_zxaY`wph(^_R8;rIHS_cLDSiUm80A&7GW{gVG+995I&zeO@b)yF4l7SqKgPc z6ZwY5JVp@i%O8%N)(eFN>v_*gji%xrm|)k}^Lcr|J5J{Za=FTvM`r6;v=8ZdX=_Wh zT_?KvlRH=Ydt*VI7cbIuu3^)M;zLU3`rriAel>RSIIrZ^bo6yEdXUcx?r9@;HypCk z`OKg|z*|<0ufJQ~WTF#vKJLyQ|4egWX*GKt0|hCGk#;O{(4ksyy9(|jUV*R6K=jKu z4-c0v+2PhVT{Gy)?&zbLPHp5?c{>v5Ll1!{{3)Vfr_0K9(fj*L8-sljL@3o%E=K%&{~xb8wDCgWKtH&15!K+lk(y zF&y)RCs%9BBmp{MUgd5IykwxDiPKw=0DFp5B%e8QK;};=Q3VJ>|^Alv)ZmyuHJVZQ-!NKiGJPgn>kc zaK^P`+Z*}3JS;kA3>qMN921a;)$wASDj%%2|6aSh%)!<ljn{bnDMLF3 z*+SEm_*^rjw@_!w zRVd|mv*~SSqR|pXp$yD9fE6EaV^|(Yu@j6D0%IT<0}zsx?BL#W=Vn1CPy$6LfX>ri zb;6rccMu=#b?6fh7Q1fWNeqfF5GL!(6(>`ST}zt~>4{6a8MYgONjQaLd4^c;+pK4; zRZ1JbFI#5=6e4QpS5~XcnFWBG45if$qX`upGz20X8oZ8HA=|oJI#`9RUn$?XeD)~s zIERX`VseA^-nx~`HGuN?pR;|5mIDV5{Yu!I0)wF`iQPUNHML+#4!HDo1Pf&WPIe{3jLnUk-3tNt7}pUdwsbmIjE5&X4T zj37~l1p+Moc(5MhJ2Z^|*5P-b;n}Gm?oXLLbh>Jj6$farU|$y3N6t$?_&bI?u)Ozj ztZcpc!>ey+H{-`>)H@S06!dHVZ?%n_*8fqj3=|pneBbN0pb6Y5h*m1X6bvwZKITQc zpOL}MxcXydf21`banzd~)M~`8$qvBOkNvr?GA<~=zczL=mmYV$GfZ>g5uHOV92Sa^ z5P%2n%&?kY{c{-NRDaYa6^)7TV6(wtQ?PJ%2Nx#J#Nv&SrrM?tzt$21U)*XvF?StJ z{W(6@`R_(hspE0iZnwcBiU-LfC?vq%p5Rfqh;Gm?rf9@0>_^}H@X6e5t2k#cRCz-3 zYM~O(g{kOzI>m)e*88~k;(}zTrcDv+Rkd6zB{N%qgWlfbD*uMTClC-Fu7V|vof2Lw z@?+}9wo-FZAI@rcqmjV=s772KkDD`deshYj2-Z(!q28TI^VdqZCLI1O_pv8bjlKU| zFK;PoJr8!YHH;0!cw(kMRt0Uc_q=8W=h$%#80h4wJGhaEl2I4J4>Pa^qcCE18)WWm zJt{Jy3KDU-W4UoxM5+a)YE3q=W15C$Am+N9L(^ILv$u|UwhHL%Cl?pv%5;zV!WkhL zGoFp6;Jri5-A$?55@|315bcsi^jgTukr$Z<>$;#P<)X0jAHAuO8y;>gpV-DEP+#PR zKg$Xort8m;GF9qZusK|y<8^47=~v~wM@{t0u)z}oq=D-kW$a|`^5VJ8AY<&=9~jHM z^XGh-E8~$D?PMR$zT8%X^DAY&nVH@@mB$7J+@|kWW?;MBG)I&801ZBbYN~hnP5ZC0 z!-|B{({b>L2q3wPlAdi29eVcF7Q1FwM~#I}Py~Z$hw(po9dAEwu^uw3>B?QAmHlx} z%Ie$k_s6Y3DbKf5C_(5nvR}k+6Jy((y}LrEmZ|hb1fmT(AoZRU>jD||s!LnRqVL4( zeNd|iiqqKx$)Jd(BAFRUvcz}{KhYH(vH_UPHHFs4hIeXAMk_I7kmvphn=T#{$YOXD zStCNwc^;gVoH5oLm+35Tbd~3Z2^ES^AWB;Ve$|sb!kOGtyV`85tv8z0FhFgE3*Pw@ zU%;*hWeT;Oc`VMVNc&@*~1B~3Wp0Kz#$mUAYm>T<#O|wU^h^ZLIDbr!?6~o zm=UR6Ym~u-Fu}2d@4`wo@X~xY_R{WO*P}9z^;n4^_zIu1$_dp}aQUZf1nw0vFq7Q* z7ll?n;UYJ!;phtuX%M00@IC+F;tm&b$TH)gha%l!7`w->@eAC8Ut=iWT7~)Lmqv$_ z%jW{Yj%|dyDyf=o=%#7eh{Q@rw5gt zOy&}4v$;Z%7?Z3>{;eRxYXbcG3!-5GTCfNAE)m@ZY}UJ|l1m*`HDD%iGt%=q8n&j$ z20k*|g^o+qpNzvG6(t70dZp`hu(;af9?Fz2JvTg_BPZp|>b73AqfG@q&ZRoO-5Rgg zYsQfC<4U!LPoL6$8dF3QoPN7C zZz?TkHPm`N12qFHMN7b2@@BeGyf?;4j;vQ&pPFgTRpSx+)=9W_b$o^r+|0IX!{hz` z^B9>XBn0zfAg|9LU%h7@y>bpQB^|w>DMmOv{uxUwhA^&N6eT%hax%4D+a$XK4Ghtb z-qvXC+8DF}PAQS5E?{5(W+w13d0NYVKhM+@LqXIdxr<|jjF`>TCggfMubC8$h#iTL zOb~(`r!|X)Z0dc4UQ=B*1A?^C&U01GVo8><;M^6q^fG#{Y|dJv_3SLP;4FGVXg)}6 zFA4Ep)|KjO;=a`BFgp15WTkbMf)>_lE$9Kz8<4V9o z7Ymi}#w~rP9MsJEh}s~8=UdrL+x2ZGTo_LZmore(F%q}+_>VG)SDHGQJOj7o7^6p@UekE|MTF~l!8^zgJOg?dX{gj~jUo(=SXU*x-Ig^16fSP-ix^KmHgJJ;|-Yj$)0_#X=`R^YPQK(MWD#R4%7@()t+r_j%itL*H^lB z2{s5YU1XwV5u6FU+-MC>GNCM1vPnS)Np;pN*tf1EJGC2m_>38FHsh5y1@<`O(q&?e z)yvGi+h5tP-eLNH{j>QwhNI`QX{_H@6qD_plq9?;5s3ss1(?xk{ARjDBD-dJn19A- zGCPd?3vVc-LbO7sDHfA|AQ`BRwSk`nUT*F1@>?M$v2=u?+Zs%b9VQdmIGYW3@SeO* zCldZX9z!#h$(ziwEhL`2Dc75$QY9Z5T)JmN@FnS?l}vM_sM5Ag-sa{x)ar1rEc6Ew z;iD9R;#TvU$1L4~gG$TyI0d^$a&jdGDpoF4NI425kPCACCfY+@g_Dagp z9kiBQ%ZFZ;^d~p*aas(c$r)YRSl;rAC0>>Xn!{c^zLUNjpn_BLQPa&F^zhZ#%tTy! z+XRAwnJ@e6v8uC}Y~}VW2lAT_9!Wp8aE@gjf^JW#R~&~$?w*F<&wJQ1S>XHR@|l~e z=}ykK+H%`pKxcKk-}LD2@*VKgtTdJ+x;!RM7pkwnBXl)e%%m*$pg#YyVcdH7G%#dA zkH(?7w;yWtoDPd~l+JAO(p*-TH>ZKH?dWQg=Z8XtlG!{GJ3FaxfumVT;!TU;P&8&> z6iJY@$Wv7i3=@XrSQZv|*{mXXd~9$L^O1zKd&R@F-V0H4{UwSHZEIe>9?+k+=|L$| zPZrqWY?vn2hPrFU7|==P2TE<29;n~jdiEd~*#H=D(7=GKiKkLB%{Bx@VYIrG$(%=G z2+?$0m@vSBkpsO~Q1d=JY!fMUHKYj(g^bIS3Kpcy7|cHsq+_GX)#?z7sp{&I0=(T$ z*jyDX#F2vuvw&VKU38@;iiO>+6dehN;sBUdg+I+tKAlyx_IX8gy60GVLTbOzdHrN1 zmz=gPNEDg^I1^wxweMG*zw`XC9((JPCN{rXXQAiUa7mEsfTEkAzt z?lUX1FNw~c1=16~(F<(H%Wa4&FN@W{<(@l-fdErLtiKQmW2xN$NvC==qj|ZsAdvK> zb5$MN2)M4G`HZ8eIIEMmcP5oq3c6B{?Fdd$uO-jH;Pe+hw1u=-Zr5s6rIsxei)nyJ z$@$4-lg^#ayR(hb%;|HXK0P4qj-TuZ$?T*ifP|B^D`JAnCp`dkI1iU$1J1*Fg7lC= zGE=FXrZ2|jU@_ySZh0(RVtFl*NLz{^8nLi$C6fs=tZ+OZ0vtOH_pg~5_%n<>7sMXc zw$qdGs<$*|?DfJ-?ipEhig!zOP4`@3k;Aj7U(ikCxS zy7)4IdxF^2wRFrlT6vx$5RZdYx`^+dxZn-9!hCjBO_!OUbmVh2b>l;+vO#kEUz^9Ss*BVz^p^}r5fYNes^9l1WOSg~< zLU)yg9wWp{%br{fMdB1%EQb1v!@{d9F>Sb+udL+V!`sG)JSLokgYg5{*yv0tYitI0 z7g6e_8$%PLeSPJ8s=86LU+2TD6)350mTt zgdIiH=^DVb7ke(>Mr{+bi#n}Wvq3PYH?Os!cKP{4o$mBaS`c~jyKNCbE@UHBpaTv! zG5xiQgWNHs1gf+Ti;)_HLgTBP>h{i(-@s(3-kNg+zn-zlsOB`M zQoqRt$w{}-UXxv^oxO+JTCxAvt=5kAj>9MKd_6lY9v$SfX2<*cdxnn8Opgstj1Bko z^^Z;*IX*i(39cMr`?pAh{O<>?3E5fC@T%q<8Y{we!s# z9W941J^BCeyOayp?vEv_Gc6bj15!U-V$8jn|F$~L9PYPgj4pUDn?x^s7T4HQLI2O+ zL|`Z8#!P6a5wU99mu75Ny4b}WKELXehHEmlA3D-{tFNmQmhTid-9~X~SA2MPy;pWMUKJDk4gt80zqvXOCPMoml$9 zt}&3Iubga^PNIjx7>&K-LIn8y`G3v&6Scb|VCTJ6qL_)j=6ct5nAVc6qAPmRrY7^@ z%t`#jGUK;_Zjy-7oh-`i{E3$cq+ z#*XCNd!$@}=Nxx;|1!~s%oTN>%kZQ^jK!Yb->|@C{CCzhNslrLbP>v##JOPnN&Ozh zlD=J++O0}uH=Efhf_51lQNCR8asMMmSuyj)>R0Q7B1?2qoV|4R{62Z}?SE&HIL2~C z>ofcM;^wtqL=(eZ!X`J`-S=meqe24y9Lw%J)c+0;aHK+4c+kK@{+av zB}a`bNIT=4Nyn7C^m^CyHn{NHnq1KY8J`nAW{7_I^@OR`5MFDJd`8v&)Qg?|CF6@9 z@KV;~GVb9lk-u}n&f<|wp|+KIV02IVZ_hRMh1NWX&{)=GIl`!_Q*Ef5I;aqIOCd4m zD~hHO*wsp0E06*VA;Gfm+|0X)gJcU#Q_ohKUUjxhZpR|k717a8s3x$|&R((HOsn^{l2ps>zDi$0f z!-Sw^d*)Z#F<>{OtEv9L~1btE<1lDz^RkW;!HL4B*3#&I9uxgjJYt>p^RE=i6 zl*^{`O(OC;has1Ry>*@#Gr_VW+;6;rEVNsaVkG{kLnRaqY2AP+?Y)AsKT^=qC~A4v zE_ZjURDIPOMy=k2MG6n2Avf3#b{Z5QniY72_MynZJw5d@7RT)D$#%c-_7B$HS=of6 zRmi!-1<>nuX-Jb=+A}Y2G%y((CSC7Tn5lF+71PvMGFNVBD#gHBy}T;|g$#OSV-VOfSB$5ne=ncbdneiQByHRr7^3Z*N}&7KsYN5NHgIp?v6mhh6KN=^h2dz zaK%jT4|}gAu=cGIcEjnQx5FtJ+^q)r4DPqpk28S07K~G4LK&a;AS7frz(_TDK{Fti*c|wD*Wkz?!}~T%>G*Nr)CGDN(JffbO=6zUvZrBeuc4l=P;Rh;nlBYL%9tk<8oRX*UoIa2{`RV4&>N&0b`6u$wN-8K=a?zr5b?8VN9E2-~HT47EJ=<&f zFuz|;Kz-IH^1z;PlB3>e>u9)l(ms#7OEkaa#cy3hX*^c+jPK3*?K5CIdm8bsq(5J8 zmy49saJk&leLSXS*WC4Na`}FbwXB)g`?C(2a($(V5Y}EBTFjU&#mOj!NP3UB^gGiO zV~AQ`xujZF2x0F*xzw_2>!QdF*NZ{x+G{v{KVVfhZBxw>gcmcAM&llTMP}3M7 z+?L;6rIYlD_@3p0IL_m)T+#L1)(6MQTaoHj{M8i^jPDQkvRr{F17mMRm- zW7JvnWsZa?=bQt|1dnOe`u+l4APEv67Q9LBCnQ8*6Ud4(sgg7+ZhUsLeaJ$=befuN z)hty!9mz`|g(BZqhEL}dEY-6YD z_9m@&+8#Zc?7<@v`CvHlB1v+U5H7R`tlC*L%U;G~GFs@pIqp7S1YI*MUz&Y?#%)Ig zCDX+;Be5S!K=At74u*JVjl*FmWbo(Dl=VN|XD-h;4>)7>h8VA)mD%>AVaaa4{l6FU z+$bfNHV6!n^5`_R9S)pYlW zsK#Ft+y2!Wg0G3&&YTM zkFuZK*)09|a@&i?a!*;cis`E>$FmpC8Ry|kQM8d$y+ltE*4k|d-IAU^c~mSHTfQyn zlppx6tF`U1^mZ!8=g{$;R=KHbrCh0PvLem8{oZQpvt2xklKniFzi;V%li8X?>V%9U+m_+MTS=6k8Ne=U0rsBR|KPd8P^bRV*$s!;#ZHX4m^<%?X;MyR=__U)GpQlM7QPeGgbb zsuIyTj&wU|_Y}(6AmMJ3OI#ziOs4N^!8ZYg{{&Lw2qPj;fCJN8^zGSjX}vkGmGyti z0s`u4Qz!K1cU^J9v$(`{Zr8!Pxax^aySVC!OtZM5tCuuXnYr(*H|>t>y$??1`LrSH zr0?@ygKZu%YPIR7IP^3)!{1_0bs!*201yJG5ej0~D#lEJU#bnTN3Wg9Zi679#v(u* zb`tx7SuYX>7Lj|lo_oD!WiMEnUBDP!03XDbqZ6+p-_i0X)sr)F{A|%n)~DnUY?spb zPivo&CVpIbK(wX(Wb$Jxr|)l4ewxXp6$a1*DgWUM{#+{@wZEi-v^e(+7_@dM;i~C@ z3Y=rlSwH%L^tr>7_U?teAs@5Oosb(0NCX1s;|I79SK<6zsgBT_S`R@jy;boTlepO* z|F8i&r;|G5e3KiW(~OS{e3LGw?bK4u4ckrg4A%aAktB?E;(g892>HB12EUX=QCB3n`I7fxhzx)QonNg{w~!ET z2gr_xPv7?TefS2v9wB_kkDS3qI!p6fBu9~N?j&Gq$SlUJLm#{Axh^Bfbh~nKs2(csa9r2?D&l(mge@vnmc_s zmJCADw4+Eqq$zUMu%zmm7YGyy`N*H6F@DjhUZeg-&opFk1D#?Dh_KPhbn5fi?xTAn z-K)#Q`$cR}iU(Afl!3gfxKZ!-foBGZ{oI>v5dTHg2N;8@VNZs@1Il&gg6ymKrTB9a zPP>e$H1mxNR8rdkJt4Bei&M!s6oxoRNRU8+T&gcJEpFN_1GyoPB?3Hveoh@y{S)3% zi(U_?Qr|Ds(4qX?%YP0osZGAxp{9&(iaI)#P`Mueyy^}g`7T1BI#YlqyQmtYME4yb1i1_g{Gc}F9jx{*fvA@H4Bu~7|ZN1THy#u1f8kcf=|0|rck9&piB z2^~~nBy4kCCnaSqy$1tdJxP^cYJH#a$M-M5t=#!f=Mp9<690a9yMZ#xQ%R*gj$$AL z#SvBG@u|T=B`8icIx=&ht^qxaSHOG`?0JN2qWy>Z?M?z4P*^nR*$o2-4wEt7Qj0ITfD95J=!vJtPkE_xt$78u18ZUzkgPWe33&WE-^%AOs9o z9nz9egc&e1rzYpvxv*O)<+It$HYC}h_lRYf#G_g=l%n=h0_W*#VoSxTdDuC5qVkX3 zRpt6|qGvOv#JhOhNC_{x7cfWm;`Y`T@6Nk+q{UQ z(a&%$S_KzwD$;#${J@v4=Ck?Te0pC#c0ep`wsQ5+W76K@Mm^olm%N?7pN4k?vx}_AObMJf$)0j1!khZqr}v z{C?t3H@?B}#2lvKA4*shI9%Lz?Q1u+*b}eSKU{abp>qQBzYc|m@E$GKR3M>7OHKKc zIZ%U(xPghkQ%c2xzqhC1kvgBSRn>k;W30`r7DDHpEUl*Ky(F3O#k8w&zGA-ZJ z8Q-TbYO#t3VH83NG!zL`M%#Ie<49XA9=REUB9VLu!uEV1^=|2nOM8ps9e|B+5J8A> zXx265-AAw+g_dGo5f7jiYhlt41(=-uekj<7x=At*oqwmQ&Wz+GQ4KqVbL-wQ0J~A& zhiCi8dw7PrNJ*AsS}OYnxg^U4dgS{LJd#dp1%Nq&1%#YheI z&}<{bJK7L+FJGI&Rq$UKM?Mk*9l8emiRsvUya#H%7Z=qI@bTZOjecCEzDh^eKVI#^ z$;kc6XCZV{^^FeOW>u##I6B#VqLFdhTRz-1oZcUKQV7b z(*&8i4F|R=^W!{`W{`}(*2hEsnv)kgz~J;G5qR^$e6IPwL2W!g!~OM#;Y1yY)B@K} zh63z_X6qNj=2{i`1e`yf2iOjX!h(N@|9HXtA8w?&lmb13eKkraQK)qa{unsV6ju}U zYhe5OzU9}FgJG*dLS{%MRqNbCfUPmImp zPe~>B*I+E30aXZS#XLo+;`BcatnWZUNpU2=vgA>Xl(Jqc3z@mI)OWvT4abTKrVs~B z%4kEfxo?9PKb$0=} zfB}do03{+jx#2PYsL|hetR|W+BbAb2U&R>?>wTs}@V*aOcK~iv&@5Cv*#nT(8-@2m zJOepRR((dL4@8nZXKmAW_?bVk_{KD?5ueq$QZ+s@&H9l0kT&IjKZR*2Zq4mJr}OO z*|qZ~&V%|{Y*Pw+X!3|)kTH756bDGLEvdbFu{YbEATP&T+AtBE+~wO zwOAys_&;lCsQUNr0uif4qy0mYe*6P1g6~G4lB5%Xi0evSpBm{n)(w#)8QgZw6~DFJ z0Kwfm#6PU~y+90^{Nzn3trb%qxW4C7P=QMJc}EaY#!6$_JRf2tj=^AT93~g)5HVk7 zo1`js6lxHrHZ3oAuF^8@N~{kAgM#jMXd%9{XO()QV{ge?QM-w~dGR~7?--LZbQa=e$DdvJvo!UR zrZP&~F#X#DkNwZ%o#8gi-wz!>zv@Y81FViXFJL6k0RsgNDy{O3y$o+@2wm}-L&Ob@-mN$34xFL86|G4mh`7b&EO40nS;`>TJmHKz1 zIaN#{_NC#bpb8#CPxS8~FCSA#L6N|)E zcj*5@pvtZL_tH;2F?tt4P!Xfsu97p0p}>Io2;z`%zLs%vp&Nyg$z&u5v&l7y=vQM= zh;B9%8ry8W_cQdlx?ukBPtSy=Ilr*K!*+M5Adf#+f#0GY$=+1sU~03WTM*LVDw&K? zLOB>D!U&uu1%7x#0?>{{ScG=8hm=ZdG1+zqb^S2J$Tnr|Y9e=fz6TKl`}Z2l)D^td z22)SAj@M37b7|wXO*BvK@_*;=3M}tyH}Zom@9S_&;pF4s5g3cu;ltsm87qZ{_Ri;18%Mx1b1 zc>T74=1GMEX#A45eDnQ>noeq`li{^|EW~+XvFNaGG)Kbpx5Uzknc$RC>0cyGTA0JofGy!r@(N7} z0%TmspRBDg-x^FZkZ|3nxej5UQJ-B)422>Pr!-{9bHj2-I#^%CU=q8exy1l2)4;|P znEnT3E@0*MME?6+D*B%%le_M3h8At!f7iZl>9PI;+dJg?(mut%pLkdAH#6_if2Ru& zvFA5xpFCQZ$9*t9TU+iQyW1V^BI(PqT^CfK!6K3-jlh}5xK$HiG=-rQjU!XW*b@@u zqRI=L0B}^=CB@7OJU?-)q=Zof4b802qc&kGL!dB8=8pHx;3JG4jSvjY6|Jy05MoVA zA_UE;n3pnjE4U{7NbAH6maK#=dd7aE8(Naa#xJ+Gw{>4)HnffM))&$Jg2>zt?(hO0 zuct7WE=N^OBb@B?n2yw2DNS&4b#V3}kkVwC0Bdx*`sp67q>PN>A|^v7Bm8|sYCN~N znm>D$t0$FGOjUq}t{V-nhF$(spgi#XoTOYLo7CLHB}_@d8c&s6DPn>W)u>uHIop|M zJ_~usYRTj&ninhHHQ`~BpebO;jR%BEPMFSE=7RAqihWkR1PY0kfDj2P=mQn-*}rZ+ zNUo8{^iOw>^?`cR0{mLU7O-vE`A6?S0V`<=*oPYSeG~u$4^UejnTzDtfB-LelAvU$ z{Jsi7**i*DrKmleqOE|@n1&CE=arf~Ui@YbAX3#U{m0Myx0GUxa9mYEMKZOA7cBH- zc|HXOLiF5ziD=7rB8VV@2$s4sOi7r_abd^<={3H=2A{vV?C+in-{^)n@C}*gPHYZ9 zDJBKAx)8?F2nNGa4fr8?S>$pXqNN)s2?L6Rg0tavNUxUW7bY*>75vix5F3}({H*n0 zUD#{)(<(YlOXqsSl!^@#g@)I}Ns+Ax>5q#&;$1M=bYKZsWdBa95f2#+8HPV~BkPh?LqQ7@)*R%_?eRLmO>p%d?=cJ+zvu@LoX zUKwCtz4w*)1%hc$(8h#u_nFZ;l?&5_hF23#RPpT_-g{;a4ZLc5I*`-ZJViy&nZ|rj zMJ7=lMPJ^z`V~U`Zaff&xG3zUu1Wh%_&%_WO?`i{|I*lQgAs$arIZSmbDnTyw;;`f z!pO??BLNFkMA?B<^Tx#Pdf*KuLoC0~?EX1aX|>9cr4^o!Uu{3S&fP9N%O0Hlu;Qln11C;oj|14+98XObG{YN<<-zqPOeOU zFSxNSgYr~!Gw_o=ukYE8XB&h-!Xe}ln)5&d+dJvfs`d}b1b(Kw3yOdXwB}11sw$w* z!a(?s2=p)lrw4w55}MJB5=#F7jAv3mwmoJpkTJFf8eZvIP7Y7&)(jzY<83((~EL z?b`QfrEFFzpZ-q!UHXF?q>)M>$>27c+d~o~LXdz-rG}Y;5h%m9fyFRSG4J~9)Qs(l z=CaFU%JrgBl{Fq`&Q$JrdnT~$jv(RTmUGz$Ig_|&6N}+uw;!HlbTaIB-=_4i*wWi6 zJmO-k!}Yir7w*zpgE2x&-7yv>d?oO5qE0GO(zi>e_msO>ZdaJ3!pkL*>Y9$Jt89Kx zI++Xw&yE@|R}a>(*tVSc`%}FP6M%kQp_7GbYmJ)x zIO_+WE&tVvl}?LBBHUdteCPEh31cs(EFFr#?i^CZj*V2`ga<7!3g!;qo_%OD0xol7 z)+)y?0rsD7w)677HqJI4^VO}nTaE8PYjEdSKwLcH4y6=|VQ0mGNDt919Luswjx`Ul4!_RojRS=Z=lqt&_e0+fJ;t# zuq7qn)6$wtmR1ncDhu9s2S)Vs-bei8R@M2F9Zw!ytOeiKviG)q2utIAK#YV-POtzQ zZ@SS7>$`md_^?}A44i%Wf9((>X0PN_ztg>F+20HO4?WK#8m&SeD>MtYu3fnt~GM> zV(+^n1~b2_`4nr?n{y?U^{Bk71@h!;&zwDZqICF)(bh9(6syggO& zA6h;B@-owvPG@#$S_m1YAp~j}RX+EUW=YMNpu$Diy*y)?LoUAj*hy8Z8Go|3{mMDb z@qu1?$6+qLsq|+AA_^6+hj4@YcR1&8Ch(XXhorB~0hX>v-;A7{i-^uCq8@D!fY5Mwcuiu%3_x zpQBAN2tvsR$F&$MSpMgLO8`)Y1ji~}8j|rfn>K#G_b0;y43cfjgg09YEl9CL3A71D zkWG2YIVqlaGqYgd3&=-vG0wfUB@DeKX#GHx^{L#~eZs=A015@-LGRQ&4e( zpoAh+5u;fO3$97i<2y`INJ-*IUXj4CW5GfP?e?_WqXQkQ6FSyEeU%P(c10m@e$>9w zyOI~6+YLFR)ymN-IZzzwEy|&TJ*E(2Nu^a3YN6%SL>mWyEo@>DrY>WXmeHt?VCQa+ zI75>?cyeNiF65M!w?B}Y7oKa!d-%M`iKQQ9Cqr+j#re|%D=Y{GB0GL^8SGt5j7BwoL~HKh_)D=-}qxj2hhwL9i#6<=8>CW!V@+HrH1b z#hfp}OOj6PacpYfz9y8+TaC`>T^!S2_pEBniV&NSvspf%f*-l0q8P<~H09iuD4*_1n@wI6k~m+x63PN#;hp^K|8LiVLlfXHWWqDBrwPc5I-Ox_2v& zc23x}t@+RDWzDjj>WfgNmdcfw3$qzLOnwGfhbC|a3~zlj>Z1-9{;#(7{JHv%o6m{x zPj|{wxgU8?zM-yarAio%eLvTGp89!g>nxWaNc}X=L#n;Du4_pMP_SxJYZ4X6)n2!Z z5z&&Mk+heI=YW6!?A4(LBeU$QE(u%A(mx9;tbF8EKAWGWa^M25;WK} zTPHIh))+u%5-5J}s24+#KADN4SlvMrLmK`Vf-5vdpfYAYLQThJ@eD$6ig+^$pSTSH zn7|5?Y7p& zhVIzhMe?wcCdtw4+`zRvjA(XVdBvbI;!G%_3;!(Msi_Tp4ca^n<J7BfM8RYS|rlOITKi26AtY= zo@)C5dWdiwVl&6^?~~iT;iVe>2zeK_xxI`-pIZh{04jc)^ zKm?>HWGx}^6DUeiG)XY9G=<_QLEbU&uCv`MO=(n6p+cR7KT;$~Q5AdPhAfFKkP*U= zGx77rv)6v4xfXbF~q-L-w}+$X6Bn7~4vS=4#0^g<{#8#nPIs)T?`;Ru`i!-zz3LmZfp#HKsnUFwaW@NZ7*$e-MTO1xgyP zVfiFVNcch-9|ai&BdJCZZpiOkFV>R3fR&xa0%Q(GpH?$d~ z;5x`QPik-w*_eU+BtyuwCq=5Ag}DYu12m7KcHEYkYA`gg`}AUnspisM9u^2=hAL~9 z&-@T3rS1+U1T1X&R(%7(%2oMw+@xdi<#~Ovzps1xHtv5dRLe&f=a!dG^cf7RPqL1r zhI?%>prAjM1y5c39iKODzFvd)=}T5ax)MruNzxWU5q`Z8w=?hC%5C}A=DJsL+;RLv zW24Iv@OjowES}MhX5$*TfBx9Tj^51XOv1w@9G!HXDW9z~JN5coV!auZT|2)0@TnUs z)i`6y3-e*uPf^#jlmDWzy}epxQN%IK{m8$}I#ItVLV4MP278P0wPw3fNak`q8bT6K z?Wyq)3m}CQO~`W3qmmW__BYqRMu;D?U%b!Yq?#}_49r)J#O84}*9f^%#lJ0onM{y! zn7%%ytvqw%5*9fy7(V5=KX~>!^hHIOzWPjG-`ZDTyOg*4r=P4dXLWEn4l+WE`V=A! zoj)DwVjnVux#Kfp7t<)@=DmE>?XllsIsC)@19O+iOOQ#M8iT}mf30|~?%SWjyFx+8 zB!ZhpZoHXjEz-zD81#I3PCk*_x4ET4MxA8HdDUGdU<4x1>lNe3MW&4q;+`K9hfoal zj)$zOXiB1}nI7TWE4;B-U^dQP{EUz^?y;dUcT5{h>D-1?stym1rF}RO59H&;Qd@{Z z$~YPL)QCuAwAK`I*+ctPbaf{gd1vjB7fz=*hHzeIU#wQzb7uw`+v?I*x>KY|GRC3P zLS7w?L9PYEQab4j)=q$L5usx?h&bY{M#n{9oMq03tRRd@l~!r-YzeJTMmbLqh>)q` z7{V80f}Csv?12oKpjjYATrZ*+VU5^hN$li%XOm0969I{aj8 z{yJPBBH#iU(bGUE%^KV+BU%%brmOX)sz@M9n#InIF>4K=hE8;%hFUA-Vy%?f*)0^> zlGqYtttIX5Y|V^KKeha&_+k&vCpj0HN?SviBe&A&c6fwbqgiRkNA~!>mkP$<`Q(~u zTG$LpZ{0rXyPJEuv#WdbLWuY4nF=;RH_5)2cEe*N7imRSaeRVza<=7%N}}-8$cTS3 zs4edy>pJug(UZC@A7sF_AQ}n<#Z~tkKwRo89Ox&x{K$&vDtw7mbCU5u9aIgwHRaUQ z$u~SR`E@00dZCPUA*!vOvoPs9DnCKP^6E%4F|<0@o3xJNaM(1tXAE14J8EpV-Znk1U69kcnqO!px0H|-=fWN$k`9bQyu+o0x^P1u z^uf#Mv-0}*qTcD{oFl6_etD^=H#XQBAueRjLvJY?n3q2e`ZPn*l8NV>GY(@~ZR&XkS?u)lrZQ!d`x8JgNT1^ss6#;63Q zuRb@uI_#iVFN|9(1W6)Vo!(OcXR^bG2Mnou@^zDDibs3MMyZcpeKNDp;fNydmN6`7 zV_2z4s3u3cRbQq4tG`OzA3R!cuYaNk{e*q87##}@tO)!jK|B4`b0X<13Pr9|X0oGz zCx^@Be5cPUbV>5>gmf~JE*NEtIaNyLNVV2ZRS!8Z!_lf-rCN^2hl9#c80#(XTEWM$ zF`N=(l=*^rA2PTr2jc*Zz+j){h>Mp)sAnRHT|;RG$vZ7&KSdgqEbn-`XF&?+u}aZt zGj-&;6>-cM)r$SfgGS){-k{z@W4&=hUs7d-khUm@Dgx)Tqf${VrG9APm@{%h@d*oPJK$sG z&U2}0F!ncQp#jC&q$2Tp>ko{%NKee&V%h@|rl=5r4_*Wi*y+5S&gYw4ItrOc{>dqv zpKP4YBQ2-^l3%XoHJ0HUd-?D7*At+?Vr7~6$(|h6V=jn%HGzS8K#8Iuo zvf5m(He*tdq;&|+KXIudYX@VJ7-_ztQfu(>3O?fV^IPSot;QJO%}TgtR!EWv2c22^ zpZzC8@Pu0Co>yPtuJ(i|6K5l}U?5=INpf>@J>JdsIXwgeawm^h*;XbI4V{FU1Jhx9 zQw=UASFer}gPlvByQ-|}6uZ8>RP=I$6dGJWjMwDSBT{joxey#6DyJY5XRMQEkgBY^ z8{c!IPLgy1WOM_eRLz*Y@NqE3ED}VSVn`cb+SZ;B%S2i*TM{4wqFFa-=yebAdVd;{ zv2!k+`hR8JL@MC_VNZK|)$QL}DK%F37U!BM2;Lwba)V*rp1BBMnEMI;2;--cL#QIF zH}qn1z&Aj@J)4SsS#5(>%$hsBlE0N6AL5w|LmLLxX32thmNCI87FQOn?Nd>oK{G7T zc1TUgd(q|7O2t`iPx@iMWgUr5E#X1%0J7TJQB;kzA2n+qi&L}qJ5y7$n{?4dx%Vhl zh+qhocx6dXMsBc&yl}j`(e^=x9S4`;j|~q;Qki6RW8cjdJS>-QO-%XC1+;i21q98G^8jF;W-YWhn@Kwm^tuK+0Qg%eLgk zp_!oXXe?$vghk@_rrVSb&@Osc1XfgWhuvKDV!4<1ZP>I-M3!+$J=Pj&tTaTp5PX&! z#)X72935ULT%o4kgruyAB$L3NYi4mwqrF08GABrzC1xGXEW(9Iqt>g@3I*FnWVp%O zv7@U-G)XResT8)nnFaanbS~czg#496s`wVbCR*ENOX(voNyVMy6!{Ga4josEE= zSTsG-yJhGi-fLI6R`@tWK6gr|!2cg9$x&W&tw@@S0Gc|mbgJ zB;~2!gM?H_Jw_yDi~y4FsbQr>UNbF)P-V_G#`+uvGKV&8JM=1~hyx-~@_lB${jPv^ zATo1L zl>@q}y#lx;D1a&TuF-|L*t&brgRV}5e{@{O)^yfYl(DqhFI2WhUvUeX#MBn-waFM- zkg3=khC<|R4h91#lovN%wpGut&US!wW2`dMaIvNTZNu=Yvq*7UX%u&kx&BSx>RZv7 z-l~e4nz}LMgs0RZ&YSN@y5S$(B@*SCR_ng-{DHWo4sh0=WsZfM7v=|Tv_^Arx}1o{ zGvod5GwQi~zB?Fjd)*v*NQcmEheFXNNgB2=EW+~Os=NbsI?JLu!3Y6tG94oNl!&{q zr-Z41JY!qg7@FbTOghK*(=6-mmd9ZbWGz4ajz_8=jF1XMt> zP)ERq&O2Bbb4@^9J%y)FndqlK{eLvbBxO;w+PxoKddp?jd0%=Fz{Ip;d{_2Afi%lM z+p7`>yjTI(x&~N|5tCebRvjHAn2o{4!`0Z%D*!4IAo6Q7iU|adB6@E;ri|5@sWYRS zVbsnem$xW?Ft?LQze-VbSsCogA?LdO6l%$7(TytwF#OY3J?;`H z)}#?_=y_C==wI z1M4k0-6TUPJ8f9oW!i<{Lqw&(NN%iX2SQjGRB1D~Q*n)i6)RZjfT_m>F~yRTMnvs( z$`S#)$E+$J3uYQyrj9$4LNUYcS!P>;tJ+^J z><-eTJ^TYDRz0F%kV(KiB z15b^Wte&fIL@8Y871>G)6#{0*lEs;98CUMXfyjWwY=~UnGHrXlHq;XAU1s^52<$Kt zM##9b5j!R&?}L%ef%GBp$#%F@DytN=*Nk&R7RpMx91EdLV6cz?tRqBmjjVAV&eDWO zd6{j(o_A8Q%vEkY_2Q;YmMZ;8*@h@80@xBEMFc#;)N=7&6E~5&BDeQf7BD1?N#py?t%SydM6q)c?cZddSG)LOiMVbOy5v-db9s$8=wKj_3PH{;ZLgf z)xj#K9|-O1K92()6y5E@0rYNtXG&_Ym9=t5B#lA@dK-crxW2NFEnJvd!YC+`sEi_0 z+PK*VTO{p$;ZGP(W={ebl47fQ&o0fDVS@6$l;hp7oUV`dG8#hLV&-7ZiwzV-0TGE3 zAqW!hiQd}va16C_@PA~&6S>Rz^oF1oe?IfI{XiT*QVe`NbF_UU^^L9GfVQri3CdBx zpwtP*Jij0bEwkGNI&6b-ZmXtRO=>t=NCt*9W~M5Rb%IbWQ^~|Q)dZ7`FUSPfe^Ff8 z)Y4K{dg>F_7(5h@m}Yq1n`UEzrr~VD)P2fiSPe)b!%!xt`}$M|M8b%I7?j;b7cH(^ z8^qjIzMa-M8p=6^mh2=c>a4Ajv)|$r~dctSSAcyAYI$M7n1T~re9aU?l z+yYPYUAlh_5V%WMu%Ku@@M^1;X!OeDV8efZ5wjc?^swA}`FH~$ILQda_Hu^8_1|CF z4ZwIuek6hI|KIdo(6fHs!sb^hP$T^k08}v>S=hh~^f=Xo>&n{P(V6kd`HhX0vsW+Q zyk57ovaofFFW|iRJ~}o%`6_H=F{;r?%ZW*7&^|=FnO#J7Uam#o534m=#z)|Bur-<* zj>>Y^yN(Qm8($@EL+N6{eEesbnYyeieLcr04WDzCb~`q0tg5QKzkR7{ zsEfbow%R;;fA`iHvi9QE_ABC@=~&*6 zrDb}wUXBLMNh6tT?Bb;qU8UtDqaGe*mn|D()am~DC4k#`G8_LTlG3Xtt#(}YAflrv zA#GOwaI5##-TQb1r+T-!x!L28K+v$^`?dac6uq9#6JyP{KqVw`9SBQzj5Fs=lw$IN>o! z#cs?|N0rgjO*}t^w^goNT-kcv8qBoeTRpQ)THx(n<~vrj;6=nhttiLMCnAC%Qelb+ zeaOpdmzL6)&bv*ExU4~ns>MGp(A(eF*T>B(6i+3R$rL&zl1?R&u=FSoPd~pP*Yey< zl~S1{RTS0HLDT<#Or@qU+00aq zNFd-bXbfs9BiyM>0f)_Iu`<9R^!rRZI?d!k^kM*|-5A6eMlg98J?Mhoxli`kdS?tH z`T$5@rKna{R|70~A%~$sW~GS6&8=oxuZFr#%4n#Kn@7qWi~_gx)WjA3=8x(lycR^|-=-|`*a0ph(cIFcJw-u9Nk>c1Ct=JYv0{=vsUhd@=PkqrHCT2c z(2yUMnGIZ`j=9-fB2uTn;d0ML8TWy_=oCwV$;<39)N{gy_^}cf3HCB~_Mxt4)xmg{wBO zO$agG#Wa$#dizrUudCf=#wxFCsH3qMNkdB{;>4JQw4FlB5YRzv#S;aI?78@YL}Fl^ zG{ct6C_))*G8L1UYd?1{x@Zy{7P1HhZo#R9 z6qj3>qfUvXNjNd%Rs}=Nhf$AHr>xO_Ogj^vzkCSnO*t6CsKP=_hKLr6rD-Qm&R040 z+S9SQpzsJCoW3Dj)K^l(2!fcZw;tsprfe16cm(O5jnZq{nj8zQu#7~V3JE(gL_!3k z9qn{~6I(soEDX<)mzI3>;$#_G{m{Z`O+y_$ieL2O0-k&}7sB*pWFtWu4K>J_3vk!+ zHj?7eK&#;%9VnlM$6#9Z70rIjP}hf1F)b4>zzomxHe^JM^D!$C=rRZ~!Z;vk&oP^z z7)Xc@n>$1l)>o{h1trEMs9n1h{n112$X)4rv>*3)Ud{RRfy#AaiZx%4M2AALeYH^K z`annRPD#t>ZJ96LQqmghKS0E7vN6VqPrulE-c!y{jU*^W8JB`!@?EFZ>g6mAw`gmi z>L8MfziOo>+3jiSsyNj39W|E4r^L>354q;C2VS^oY2ek(>~rw9{|0}qS(^fl3^D#Q zg}?rnn$nRipHMrY5k~-hSm*E8W~Q+N)*FG|!C3< zvb}ZHIc-MBPQl9nBpvK-Y02eHPfv^ze(6umnh0_r8_c$WaFbZHNhI%HaY-6jvK>mQ zkFIt-0K2t8)i`WR#|MT6h1uidqqadKPCik|xi=rreBsi^-T&y20zPkiK$>2ywn|Dx z2}ypYZXDd_`yuuOEqY#t;f8GxXv9jG&Sq!+N2;pmx@EMQJUGRceCDH4saVXJe0~=# z$(PGO_Muj{Kgg zx!nBAlIvX(ywX!cyCS8o2c`?66G`Tk%Bg%PCK6teY<9Ac@)(<>6GeVFYF%>*-c5W6 zS(Y;;hN6f;KEL*_pR*KE9yQH!5mQ6Hq3F9vIV5 zkD#~}JKDPI_HcW=k8vrn-DtPxkMlMx(4Zb?c7vKHvS=GN^|+0P1W`%$)pJ;OU-mNh zjgylNMr%8oIEL>BOuV_31$Lhu4ShF^-GsGUt~cd47Q%#df!q9JpR*RIgo}@RyN%;u zP>PiRqtM>+5zKp%D>}MfC}FV43d|W25A~v06h~4f8QS=<@|bCEdCZ*k6|3|6=9Ba& zKrz{Us-Bj+S@`~)N|w%n+c%5Drcafet0(aiBO$*iZ#{)bdftuPgSBiovI%Y&1qmIF zw`j$m6o>40TUzl^LHUm}A(fP#3xl?}b$RM#h{j1gYQzaszkU92tlZ(`FDKSot@(h@ z#vV(hn*Nx9rTpdTr;#HFyz~yG>2yUS)B$R&1YB@1Xg^-p-)aVkwT&E0_;`U+L01}CU8y6?C5tAstklvHt zFD8F+RuOFKH%=B>G*R^H@5m24yuTxjTr#@>{YR^`KG}Wx+8V|j(pDrBt?KAg|DO=K z{gt0cd_3jxdF3eyFoYy@+FcuN;sw-rf}2!C+Eu?oRbJx>I3Msh22^-&W#0e|56Ka$ zuo}&1wxq}pg;Cj_$CzsXch|^OgBQ|x`&}?FS3!-Th8SJ)V!G(cu3_; zMx=s1nTC-f$|lX1^1Tj*bgJiM!DldA>f{5r2VUMgm2T)JZYRXAOf57+-YKid)=;0L zlfHOXjxYTlac;pvhGu0&`gq*PCcqG#xdCKSfoPSYCkdV_n z?5jPO619)F3Ri-J>(|EOjFMxYy@@gCNEG!pv?c#`57yL_iG-nmBhQ z>aT)~@A{3ZGabi(zn9_-ewl0Ceb_s-hkH(N_bD26qLby$t3nJYc_R3ej3#R1N6{!k z3P+fbv!MU(W%il&ADQRpg@JQ4#VN-?);blFyJAb!EhVJ>rsA_*od)e6l9SzKPJuy`Z)w2Id|~@if+wQ zr#6}YeBbG}vtKWOHmk^;Um6|NDr#nK7oD4 zJxdEFFQ~!)OwO$#KG$oY|JV0te+#S_XYWGGQXb`h@=eM7*;&Ql&0b9r#BB89r|d^? zzvn2=g8GJG8OVXQmebsWFTgg=yadnQXbl9~;uvfTjOBo$gImxzZr#TKz2E!EhWZ}_ z^nrfv2h|JzX#FRj1czc9n;JEh51f9t=nIc5>=YOpGK(%ls?#CUt64xBCB+E7a zD2)3-Hm8PRaLT;S=9|^@4$%&g%6K+)t?`nxI%pP%@3L9HdU%0~bA20%FlTY{;8`{? zbx$s7$SL9;sW;@M$YUY+fzm?2ScKa#_c`k3_q-K{t_z3uVcrqlBL)-ZBy3Qs+71KpY@+2>x)*3J2OhMB? zq9x5J^>$|$8c%23&$FIy`$ltbv?osZyWNvNXOiqJ`9M4M_B@capH(B_oK=G7@2WL zP5$N)#iD)rp!8Ce(vu6wn4f>|wy0YM%AQk83QE?9p1SNUlYahDF*>@iQ)Jbt+XVe; zL{Dks;@Pn*7?NzPvBV5g;pC?I*K$dD zQ(-lMb~Jzed;L!=`B!}H`puUAV&9mT-47(rpb>#KrE#O*wX7d_P<4*v7?lcQM4(lO z^Hqs;Lnrn}HAF7$z4D3Jnf9tn3_64F`wV0(=zM;2@g3=C8rHZ2|y5qVnD{8Vd0bN0U;-T;ct{sWii;Wl( zaZlHINwF|^S8mP20Bsp~)x7$e=7vTvO>b|t^-e7l?HBs!!K0C}{3{v8-VXg8)dqbj z@I-kMfMc5_af{A67wYM=<@iH!x&J~{)3{s6`w(86r?Gg+j*y2(rr*e7p~TqHWtrSa z1!Sgx;ZCC*-L0Vf#+ne1PnM@s?SCR! z9}1O>vLL|SHNK5@mF>DvuC`1I+71W8=-9HCBlNb4*#F9MCpn{jMP3x6`p5#qJD3c? zl>`w^MRCe`vz$3)X-q`^*Nqd&Xr`ihHN1RtzE;UZ6VxfOaOwRZ$=KiUfw(gO*6&ZJ z@WT&3{O}KS4E4fc*d*;*0^clTv~Q&zoK1TB^i}YHz;~~M0NLF@&8L@Bexj~Ltq9F9 zXpJ%@G{RhB*MOQR_QZa{6}{)AvsK;N*&N$)9IF(OW!rGIV3`P+Xpoczs}TfzDKjll z9HnJ>mS8eA9ZbI9l>qCC=9X0stHJD>mp&T()Z_>4JJq_;%Awxp24DAH8+=*1u)2Mv zeBlayv-Mf@T<25OmnLyNiko=QJ41}bDNWzG9#Q{(eg-=l?vAfbYz~ZvdHYP>$$`;q zf0VEYjV>y13dvz`W0U1k?%6fo-c=PLIE^?vg|DH8m3O^OBO;pZL_3LPU_mn}0$4E2 z_dFib_5I=5E>{!G)8*L@Mzy^Ins7bM4wz@dLOCpQxDqyq3528+5y9A5Ef9(jMRQ0I zry4=Pmui%NG88Iil&J8?Xb2`&0#w|d^r9G!A{Bw;gOV&dD~yJU0g0j{iDD@N>qk&f z(G2f$K=XPxGeui9ge3;Dbk#7_Huz85z}#qX*_-Kk?Ohed#qX`O8KvtMyjV{^O?gG(auU`PgC(@zc3pcu+rm!P~ejtD3pZV}VvSJMq z=koc^hhLqA(jrs4Tx3JX)t+}000qZ5;Fg3zJFPU;9^MeUM+_SglzC=QO`Wa9N!*LCr8a>SOG^XS@MpC4>ryPhn`lDcIY~Qs;0pq$~urKcHV0PA^5I1t(HPc zFy@_DyJCWawuz^O8AGJTTquu#%-l63;MkHx6=OTacxgvOE~Od_HORVx_aQ~nSZohR zNUOo*GW&@D1m(v~3sLZIhZyL{ne45LrshK3%Z2 zj$zuB)gxz--fTQl_X3}gCF5jeEIBiL?$7vm?c*+*N8 zu~H{jCf>Xkn%aqx?hgieRHq zcG==uyNxzND+Bf8M-yxoxY|ljS!ABxlJw%1-Q?S2g`&Vo!AOr=AVr%Wgf)oPxMsKO z@K(I<>zelTni0RA*}9av_^)?JowfTyUyGn(H&R&d%OPmOQhD>euDG}&S7sfCq3WLB z3zM-0&I?^0L=ZWQ`CdRNb8xzT6h~3udGEx{hn+YXlCkFZ3wJsLS+FJ!!HUsg8e5Vq z%PArM796IOM$_40sx7#XLev0C^KN^Xfc%E4Axg6XL-Qiy@lq7W@+3)N#mR7@B#J!C zz7xhSD3Z)`OycR=Dn-#kdRUf(lm>DK+y)&fnh*-Z!%aKv>51%%@k}&) zDDr$`SCob4KwFNSX+h6c`%#nMZyJIJ1oQQg+B2m03Mi&}a?|^ThrnRRU7l@wMo%uU z5nx+02W%h|9sU4j*I_GP=K~0g8EE{n9t{Htb1#fT%!SI(`_B=CX}LC)J^O<|LBDN~J1mI>tl=$+U6(mCzp2J*6on&e>5w zk(-+uAd!ie{Y%zH@LV=@wAUJ%0itOH$T-1VI9*a7FWR(p-MBxlerTXgrw)rt)3(EB z!U+(mqsy32H~&k2N?6o(xwsZ?d9U}=RO94~O%3wL?Qrz=E=Plb)Gw~O(s!|V6R&JF zQh}&+G=$40GzTuG|}42`4MX=2eVXAg*> zK-9^;>ud!|dZ@rsK(pQxVY=SWKU24dVDV9!=;h4(Z)m3L<{%^eXxvnnIWhp?f(h-5 zy%)9q#aQp{jrU(lpuarw!E4hI@m+uB8`ST^z9RX*0S|>U;2eI^{aZ?@4$=YqB)8-CS>egFI*6w3)c#MqnSt9J+ zsu(3y=Jps_$?|1tBh)d|wC7=DnX%v0q4S>4Lswdotwn*x@@yN z#m*w9j|kObp|n!~Y4J+mWO65>wa0b2*KJiNWVTu&TF>+26qbh=dc>zQ!4SJ?3h-9Y z-x|FnS7_}OQgt6d@x#bJ{5#aI$1@6?pr*dxs2XjDhc?*ZZSyor@jQ$Ojs4~XRWOgu z8cX7(m?AA1xM#19uUpnFk-{S`Pt2#R&r|onOpLeLEH-$g~7uQU3)FV+;c4*pM)- zqrnt&`2N}X({Bu!BLPB3a^S~s7k5h-vxQg!?A%Uy4}6Rp1inWgCCHRP3RK5SAWn`V zI&0Vh7{l`%OCUqSoX9<{Koo{sdZTSfR~7w6v8!cg5R*f5eYLULZ$WxIbkT=VuZz{l ztVVnps>|>A8)Y?``q8xYG;V9ICG=Af1OFuSl(;`S+ld;rdUO9-BKqLG=jdUD8{Fv- zw9E6ZOoCpa^)u{Gp(zp1N|_$gBMLxI!O_LLiWz#Q5h1ha%dHPzU{&^Hq;`J=_kIEW zsBe3mUVnMZHOqV|a)ukn8?+H~8R`t-10I{t*)liXaH)q&9I?iiL@`~&SWOWrhC&q` z6dddp!vel_zQ2jeXBfB^Uf^1n4UBUoZ*7^fIi7ECJ$~0-@cG16I zT_Hee&&x3CpSF&v}>1~gEc0vhl^#)1gn4n zY5<((2VxtNa_3P3U5i3A8Tv77HWw{e2Z%t$#uDIG99#g0LuEDnK=IkL^^&fS=vk@z zY>3E__!w*vau4@#^hZlVfjahvxa;y#79sz#G3t(?=i(iD+H&1BU%RwF19L>+W|*w! zdI~h;&O2KPtbm)U)-4aDtCYdH@P6CpsJ>LqQ3cotzpYCl?fGgrdNApqUDsxN`Q8xT zog&*^jg33q!9z9u_*_4(ztdPK5C6hy+%!*n0@+F#@Qv@wNPgru=Gv&}H|6}p6usR$ zE$`{>cUxk;R`yRP1DaFDi@CBuQz<5>P#@;xaFEl z5=<+cdUkQ8MLB8)U%^j@t?4?XERG|VBK9zqQG9TWq0%_CiD@V(RS_|Y1)oaEri0*n zkF0hb6JyJ$ym7VQ{eLG32u?w6ZAKD_$f&136|pB){e^hzyWP!07%d_~_|&BN6&D&d zJq0ChAr!nU&7{O}tozBKxrMlx^hV zmyVK(R3_UV}Dp>zn9U=+rTsZ>*qqZqTu%pepHg+W#hLSJHu99xnI zW7DLicb`I>e=(E5vPmcEWy|ET|jyoDqP11(B1 z2||LoHNr@Uzo*k$zTWAJ8#PLw8?7p-s;+I{**Copk;ovsQuiJL3||*r^7c=qby>RW zF1hH!>h{nDH&v=iMKxYcYE_|A*3Q$!Q4I4IeBhn6e zN&vA3w1_~K#AVdlU4@M&Y8f1QO9p2 za?drjACz-7)0QNowP%tvB3U8TO*tST1tWzIr(A$y1c4G6o;v`v&2a+ZrKFz|P^ZMN z9)?@lCL>UiWF}HEm|QbW3PkT|rcUVZ+Vq5Qz+Q*4m4HZlR2z1K{dwxh+vE6_TA~l_iSFa*pHg=H z8vDfv-UpybEs#px8yTsDCED2{O7>hM81X`g;L4hI9L`i8_oLQp{PUm>casSuY+CU1 zIw)fRLU*T5-7Np#{$K#Z9X6|taE@Yj3`}|N^{l#af}!Jy*Ju_0)QDI#d|hc|?qa3h zdqX)T5a*VE+nZy=tyUTNcYpk^M`vR|S3Bo>9;sIpbAMd?FQ-pwNZ&o>ey2ADYDtr) z*4b1JNPgY=$mh3rrBdA8w-*zjQ!15)Y&ugY7E+01HkZBbWww;a-x9_t87~3=skbaj z$WR(%D??%hx{yqyk1tkktyY_w!3vYiBdOHIjC>&^Hp2aVDM_q|NEOu7eW6SRvb_V@K$RQQ$bxIvB&i}8 z_%srxN{AS#ZSp%avs1B&sfByF{B9<-#!1?@Cb0TNxh{)qnysYg6by|$qWUputw_;_ zkdeh=A$#03gGx?G;hWdf;^0l<=xXoultDC+5!@|F5to{&J-&sI(|Q={2Y8*Zc1wz} z4bXG^>h=_ojok#8!}EFe)|YABY-MwbUEe`f+F;ZZ;+)k!yC>L(lz{9QRNhIMl+>)? zY@wd+Op;^{h5PX+v9wSA7kMNVF+a2%~{mDf>cgHR8jfbAwQ&no6lx_PIUt z(F{Fv>B{98^ujghi{mLsy!v<(<|S!fzI^xje&b33ID_8BNG=fu<|LSE7o+YB&jUvB zA=te{00BS%RDb=U@z})WyKATc0O0cay%*BfZr}Xm+DF`0ZA<{-2?ziY@vj_)89IJL z$G&@LE(O#4J&1NleH0B2069+$UpDE>*CHFp~L>}1E)Un@t>*BR=bNmQVQ$A!k5awiX$0s4Lk@#0<>I& zqmqMwZive90at_(_VWnr#whNMrF|v}znyDYj%9dFDxMV*ylFN&ErX+;(bLusb}Pz{ zM^Vm^8z@z3E?~FMXlnE7Ba&D|WXj~q5|GsIs4u8od~2l(_vq68T?YXpc|m~o{ePw2b?Vjhi`v!kHcHqOsK~67lFjugLGiI>65NW5w?F@?Z97;dp>DcD!(Z~0X5-!v= zEO#;NPN1R7sY=uZ%E90+FTLsy=nYtnVXw#d*DOx;0^2$Oee7}R3duBQnS|`+-eo)E z8fM@$_FyKa;sVYg5)+YvYE{Y;u=+rhE z26kK+!5-iV^rsnFxq*@ONQ#MeA-fO**BX38mue%cgCR6}sg&O!LpvZP(rc`80jL9Y zU=5bRGLYu}fmgMd+GT?b769Z&{CrPuW`D6Omnirx#O}9CvG?fQ&7{gDYITV%91yaX zHtbHCMa=q)m*&SV9o~fWBYvN=o`y=rXo|?3X}?%%HnW0;4L}KCAc^C&%q=d0V z)@3k`yc&W5V(SGMPkwy|6Yw_-6Uk~FCK2eBFqy)>0j3b%kHJ)O`aP1iN}h!27{h`Y zxJEdrlbizU;u|Sg4|B96^|Q&HVJ4389L&NR7r|_dF#+b_9Y4AJT+Fc&BmM$B6bSEM zK8UpB$daw$NqSDeOYFc85hPGaN$36DG0r29Z-L~*XJ%HV?*|E`ZgYyaxg!W~fmi@x zP7kNmmv!bF8w_Sij_9msIPCT`J1SDkt2)5xOqrx&n$4`(qxbu!gI!y$VK+UserNE}dLUmda#AZ!A z!$u(S<&j1c2LrymA^)8pJlSL!C@KtGLW*2U91I8{Yzz-~Cmbu^n#nzYBT7h&qi|n9 jsLv1EY{}J$;l+`{8CF{AO(zc2Ot{(e+ARcoyhF~?l^_vY3PAmhJdH z{#SlBA};q1TvOPJoxyIS`ZVMyaD6KO9-*;Ma-o-WPtMayUVjP^Q^g$+RCkA7XY7`Z$*c#dq6e}v)qludGYFe|Wncht8zG11)~QWFkmpu`rcPiFDpF!8SPc+#rMoS z1p^Begn0Xt_9e+w^rKgxR6H-R9sK{h-{-zJG>B@xDv{H5BIjj5&GJg_l02{AK!I=!S#pFkJ{k@o7Hx=C2%%|RyY1}G zm5a8v|Nm>L-TQB*lL;@C_?JMq0NN6{$ofrq_GQilc#{&~#8sAUPi-{-xSo18lE~NC z8dY8Y`L%v^@61`d|6>>3g@>g_n-ISZc+*IUW`p=*;uoA1SCG%<2 zPwUiQGa*N;Y?<9X2-)`_N*rsej22XWCHck7RLg>CMNU&1Mn@|!jKGWx^O&psb(>Aa z4hFi`tJh~^wk2<&tkD&L!_eW=>(VvLwNFm@Dm0RAre9= z5h7U{gp3lRh#I0w4Md$LIL(?NrkDa}8q>f*Ab=JGi8}QfG@4=>2w*LAfU^KD1-K62 zPJo91o&)$0;5UGYfaV0WG@w0!au86?1A_>xMFiSgVFlHFG&gqgYz7 z;@t6-bN8O&%P?JBxpH(|+oN9Wc)SO|@!zk$dT;;~01!Q20|0&d{!x*D2WI}VHU6`O zKWt3+q11YT|6%b+;+dandr!N5nLVD^^ULDV)~?Sdj?iZR{+|DM`kxP;*Cqcod#p0? zuf-#gHMn#vmH4+KvGeacd$A*j9`D<~W#lU@JP!=5898!iZ+zCj_iwA-{o(OV?!AJ4 zd*fDdvF6Lh6Y~`xkGVA7^kdy=|G?oDr;`JRR-F0n4YTrWbm;Ia=kG7&d*`1m`?U1Z z_{FUGY5vUn?Jm!seZTGKSBJ#c3Hz4|O}FDqV`g;xI<9?Lz7ViueoioW!#~;CMtyk! z=~K&jA+DRJx9?H5iKSt7prXUexeGgXDc3IS-laS|$aiQ3dTZ~@TTeFsw(@rS4|vuc z6b%;M38KSSj+g9HbNQInHvWcZ-bVv6@4g>~d(@SGuV+4Fey`|L^X&Fr>Su3HIz1A8 z%^1S|!1+kDd+Yu#_io+0iTP`R#u|U&)s^-i0`6(&FKpGlL-$zA`{RUbYt`F_-5(^| z{<|@BtotdQ z-#Ag+Zmj93j9AGH)a6scv&OOBxZ5GiCcayDIWpz?Vya*NFKy;c6WaOt%EecF*cDFH zV14WX27(CodUQ>8TzmH`33N>yxjp;=BxvN7mF_<}ClnAsA6qf7^)`?u0sXMOHRV8u z06FCT)C*})+fWiilEFxV^Cp0A!yI5>s??uwjhI` z!QHynY7km)C!}dFhC#m&cw0ps8j?k83hBx~1~G!sl!^SU)cS?AK-EYPz;k&hz#Oxk z!j(#JmIiTkU_j&t4l0(}GFc;7>D|O}+PMMWJIgR_YgJZ+0K|CHhRfT0r7xh`F+~uT z0LzYh#}Z!Qe}_)O?OQs+B7??QgqV&6xt8-`HH`y(@5HL|smVzxLU7=Ua3ml#wL#%{ul{q41GK$R!jxPRCNnK6bETGo`#DqIm(CbG~&XhcHHgx8dE z_y-4MhOdupppWwGW(ok{MCgo8N|=_GSrwKxNe+)LFVoVZmRoc(0VcIfrY4`+%ttM< zVnv_qkfy?$*dtZJ-LyH40aVC(Zr|R7ZEa)_ub4KXf&u1!EuC?c$+rx0y(t0=ODy-l zFA7|go6lMuTuf^%N2uP_L0=6}Gu0e~*r>B_kn}XzD4m zt~MI8Ejumr+J-*>%4)G4ODr!?g8|+`Ab$P=-^7I052|vQdW4|T`c+Z1CDu?1i%be# zgc=6AVH_)3Zi*h|yjXo1_l8qofW3!$sen4AH~^I6;u2it4Os=eB3$Sh;c8ccrep{$ zJlvqUXeZnwyPZhq-hW6<#YNe?WsC^q~X|4uri8A8&h!+$IsT zU=gf>O|Z+#L*U#ktbZ;tSe^b*D2{fbNgyJT`EaI?2f$Mni7JGiO05GbdV3mt-eMHM zWnI@qGSs9d3&{{sKirdirsRyBEFQ1}33ud9 zwpS@hi^nbj(*z5obPTox0>F;|$|g4gD=wA*t!=FALk!$!QzHyIOx5>Wob<-{fcDCR z^9<&^;g{8|aLfe%1YPue;y+U5s;uNbNelOE4qdP%=2cGdu?ib%AB2~EcA z*6~KFDCM7mVp}f{t^E+xpcp07J;{%7jch+O#Y(wWc?85+9M1*i?-7?Rl(;4{TdW;YLP-BF)!vN)aei-$tDj%_<$(*6$wDnzxNM_4g%r|bc?km&_x&o zX8Q8(1lR-c5ujt__FtH+Kmm5+&tmO6jG^Qj^4_1;YfUG_!y z1N!GbQK4^t_5YN>aL;=?dDQ28>P@!hi$A(u2>}H$$C=S}tZFwHA z%DX(EdrksJ_r3U)n*brKG!G&W%lf50MNfar)YT=reGo8+-&Ss)3)t*LNsimx(TOn4 zFy5o}=zkADrl0eH`r>=U7{FXFQVr?B;Q-U20W1bP@~G-YWDA`56lstl=x;=ILL4wy zFUW`IFIpe441qTGqUDnNcbtS?sKqb5g=tDHmm2m2*?UotmdAUaEQ1@KFN+Oa%jji2}XVFwkj&xhA9O z+AaqLpe1Ns=b-6jG%n}1n^7zV?^e$&_E0TWGpjgoRn6?;!kFqg#T#ln)yyqEyjDH0 ztcI4kYUY;!&hsw_pvzjpRa;Z&dK{Cw#tT4Mj&74#o-6|)O?kj=XeKT&WzP=OWXI9| z-Y^$+szfAC+4P(lJi1i zrQ=*r9csIy(Lcz_Kx6t1W>FSm^bA#1(&N1Eq$mvKyE{bzIf_67sWH{}tEAE94$VXc z64#Mm=-mwd!*D74EX_6T%?^}5h875#&};1mbBJOjPUM;i1DZjQY+Yq9vK2YhDeuUU zRaI?Q2uZU_XuDaiF)Ku_{3xg~oc~zNrz@gkVN-)=Ui1lMXV*eIe`;KiAD<_!8clT4@!;L`F4_maAX2%H^eJ0oE< zc2lkC+LAk#I~t^dmx4E!uZ!HS|9ou6nz6$n1*xI1+jRJH?2G=e>w$#t8(zb}kIi#& zU~&C_b317Vx0gw;Xj%5|UjMrgwGZxCpvz=_&*rV&_gi~z#!tl^h4v^7Z_DY{VElU{G>IHULPx07v#YsP1m70QUYh2+4fcNIH9YwI@DeE zK$o*)xAvm!t)`m{rzU51g}MwW`$`HA88k7QZ1*)Pl_f*v1^XFQ42{i^CN;d(?7i`6 zG*bFs`uVZ{�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

l(X_I+GK&R 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 H00000K--!s literal 0 HcmV?d00001 diff --git a/packages/documentation/docs/.vitepress/dist/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 b/packages/documentation/docs/.vitepress/dist/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..36d67487dcf5fbe3dc6d0a6b01cf4d29dc997765 GIT binary patch literal 16272 zcmV;BKX1TyPew8T0RR9106&lb6951J0Hgo_06!c61ONa400000000000000000000 z0000Qf?^woR2(WlNLE2oiv~YURzXsMCE=$kZP2AkJ^U{nMHwYsLGphn z;KmUA!0KX1l(C7g+Ovt$#$yTSR_jHKiCWO14R(YAiZBF9k_2uHMQ6KJl<7SFUn??K zROfmv1Je_=5pjvAqzzAANaZTehgNO8Zdg)$h5~8LOUW#y7ot?goxsa7>Bgt83~BZi4~N@ z31%Hev7gtOzHGR z0WbUiH&^~-bAV{e9?11om^zW%oiG)SgsLKWm!2x!Fs5-z3 zh}Pb;c~{hTMMVtG9UBBDWi1cUw*F^f*?N@>AJ?DrM)qF-d{tCHj5Rb3V5l~<{r z)mLfNHxdtNxBoxFIT9%w8cRaIR|gVd2nZ%H^Aoem)XMFg9uSSy;4OnVB_;y&Zmn}6 zP6}5jQ^`g(c*DVf0zBZvfYc{|lfX&f^b9~Ah!a}96u|Ock*|a_rQyE!@!lJr3jgCR z>rDHl;n{C^?|&_w-Q@4m_9%4~O}YFz1?tb>O!#-1M=3?2#9e5&p{w8$ClChfTfRoC zr>p#1dbsD?*%6qU9o&ZIL{}mJ=uxLWiVhzC-7XptP1P>k%y!b;1 z6b>OuHiTSt5E^WS&|*J?eghDOT!V1KJcOs-LO=i-5&(Mv4gs7D_zK`>fd4@u0YhA{ z&T>Css0L*7GM0b=NCLO7KLsQ(h5!38`Q_flJoxz^TX@T4s?*=PA9nwKn4u!frAEFdb*cY}o0G*~}QLqru+!_$=r27@D;q5MK)?r=ja_sxh8%7(@!Tp4*-6 zi?~e0VZm{DB14;$f0xAGUOiddjAjHFSsxezrc z_v6^yhc8JRg^jiqPPMTxoMKZX#~>l6RVXCZE@q%DkilA@fDbqT4JIH6>d!tLfUYBe zV<7R&EeIs*dXF3iewI1!L<}sk5U z2KyR`Bd-j4$R*N$cH-S}k#S+>L;B*(zwJ2V9A#&v+=Eh;zdLe94=}$J^@R5U`7d4Q ze++kjy?;alrWZj5BtDrtdyC4U=fC)my@)JaAHTXvuKZ&b1=c!& z9KPa-Jo?PkP0xeLZ%Zr_yEE{UzE>WPq2Dg+iPgn^u2D(69M?ZrJ@2Kl^&&Zp-*59} zj0rD~#>bg*R56G9Qxz{voL8{zKn^`ci&0|*{rj&gRt~z@rBV0oj%V45RYRNp-KNU? zPTbgUrI-_IxV!bd?!%-0?u!k=1kavJo>4Fv+x^30lWDEA?z&uT8!~t|F~$0d$km(g zUH@O6eQ>zD(VXt1p?uN3A{AET@tqpIdj#5f`SXcz5FtQ6c*gj4Fn_* z`RB4!*eiM$&Yv9E_|CwiaBiDmjBn^g=-+VZYql2b{S;*%vP{r;TDXQXw;`?JiqkA) ztXxCjt_!$}J5QM0Tq(T&8b%Kx}SDfvS zrMY=JAt5+CFy?@Lj5u+2&1JXTR%K(fcxe6}Gh)b5wW}_=?gm0FLxy29$pT-rJ4W4g zkA-$-v?Qo;$xRz1h&`L4{kzU#Yyub0hztI8g^b~0b;SYJ^ih($917b;%Mr}_HZraV7aI@SL?Mq{YKC|F2Zqziq%{tt{iV0B?sLc~ou* zVhEi0BN;wZIG=iij7>3}+>02CNdirqOFs0|-*^728=vNk0u z=YXjuYioVip}N2OOOy@B9zKI#g>^WFwxfNCtxZ$Q- zZoA{Id+v)CBUYSv2@)kK_0(3+?DpJoFNAw##A^?{#XuSvvgF8PQn1Hfe`~i-hfZCL znJ{I>oCQl(#*CXVY05*>W~5jzRho1eGG*DM4iy@7q)_z1JMaDGx}`_2KKp6VWXOoM zPg*)&I_Z>`P8+bwYHM(P*47nq#i%!ioN?7PK79G{=i!^aAtm!%xk(l!+b?wk0CSDrEyMTD@GV0lmFzrPT4YuGP}Sv#T3v z1#G9TwWWjqtbV=p0;%bGqx3Pl`J4G7Bm^I1dyD*H*sL>v8jU;0Vt(6XoPBT8dY$He zhsgCVrtmZ4HTxuY2GL*poNtGej2yj0qG`;>bZLRj#_4oiW-d#nwox=PQ&UlrVaizT z_u*#ANk6XG(hN>VE`&_}9PoGF;8a>MwPa!_LOfPJDf?78=HFWd%J1wQ^$Hzf<-58awSx>M@ zHqnZHvNY)wTEh5v0JVFWpd?xmo?bUW#U{0JjIl{=f{kUaAI}sg5Yiy8Q?#EGsv*wo0u@7;)njq6lTniHpU>2AcH04I_gWil~}tjTT)qR1|dF8mPW>ERZti$xD*&j zX6W|yH?l`q9EWaQyJZe*zHB8Jk*9vkumoEEQc6YilsgEKrzIk(WmF+ldM2-e@bXm+ zx5tR1hSFTg;&wNA)&R*GxISUA)S#%(`Qg-1T6~fkrB@?MBk9*SiH?;@Pt!I}hSv6p zdp%TE*!XL1qcwhiR@?dhRr$+#YCfKecICRZ=e@rxFPFE@bN;*MPY;}cbibkR_VYb` zdlo0}{^+c8)r{(M!}1$ zYbI(dB+gwZQbRShlN&RbIu_!UTAwymVh0ab;u31z`K&2)_+TaW z;kCABH|IJJXJk5`YtGBgYRYpyo0ZY~@S1WVT)t^EA?b3%@QLG*%gYN^hlDgKg~;P4 zhZ_cR_~AiCZ>oENR%eIb>&BhYOGgL)PuR9irB=i&?QHaa-O(|A@9wF+ER!zd)8reS z`7g)Inzo3P|Cj8%eu~^}VgkNOTjsWv;rsh5u!XH#vv&*P2>ZWid`D7UpXGs#mLq1H z1XV;pRP2^`uOU&T$54GjR76!!P_0$t$s)@Gt(K%}2Wh8OZAlyV27@oNA)`&DsPTP9PtFoZi zF{P9h+;67nl^dLzRU75yRNz-wn+-mD_MV9R2N=p$ZNo%m_JQ!oq0PxBLx|eud_kqN zTMe|<6=k)>i6@qMc{`{-xU93Iz?lMjet!2z2{Ko|W5--w33BvEA!)3sK9z8F4mV@0 zvo}g<$Xt7_FxP3QEg>Cl2PWf7-vp<74Jw$Lp*4g-5*}Z|N@? z$VyE=(7AYcu`}*KdS2;3e~aLG;i2=_%`^MGKJPlX{^^;V;yA*^qfBm{wyfW}Qi2bw zx>*)ZP8Mh;GQIcX16q0)6ZF9R*@MkSo57&Q{z|l#HSa2~La0@sA>R1{eMjXjZpzBr z-AmC3-)wMv=NA+icCKUCFiurkc3;w$FQEKiNV!T`>*#8lS?i_h73O<*3G&zdteyPW zi-Ll60zi@EOiM`(7ylyzI>d?LsmuADES zvSxO5lj@RTh;)$4pWF^4$$U=UhlG7g4c|k2n)%9+C(r*-?6yLsb)$Yq*AM zxQ1))H45hx28E)GQJO|m8h?+OTA~FE6+h==Ocn74#)|kU=8AY}1d13t5&#*r8gC@G zax1rTE4OlM)tXLgZ86xf)`ySH);bhMin3I5Yqwoww$d({U^h=SP`nFC;G(@?9H1uh zkbW$sozd=PstWRJg&qr^>|97jHvVemG20bhNp^+jc9Y$|IMA)x722u%=*fwSc0kCg zewP8yWXQkO$UYcnA-y)wy~J%5UnQMl`I3~vOXjDbR2Nc^izv#*=Q>slfWmO{(n!12yGVn zCH#K6PkD@1mAiGPT1T{6ac`J+e@%~h7Y13?voheQ3~8=Lb{~$_hlh@J)*%+Ua#W9|4 zg#(qyiW;V?I=B0xoi?}^8`sK!IT>=6M?97_Wyrd+WTL-9o2ecNzaRGy8owba?vzF6 z*<)M2TE3K3dsPN1k)gI!Bgtb~Gm)&DBqa8MPFLfPGJyq*05B^84BMb{vU(#tUYNIN-&p$-#I{=sUFX8Xzi3zlZhN#@6zbZfi)F z&M2Vz2L-?i5I&N1jSEnE2}MfWe>R?rey7=5;+(Filr<$pixx5F7pg~$I=QM}FC^9* z{2yL*&;M|-*kbEiDJt3CtJ$FzHLsUDD`blu0c9mVzm!3-6%-T{6tqJFh&uIu^4O%sb6wXsEQ~kC}@Y03n8b)5L5Eto2R7Xqr&k& zERdWKYp4rC_Kl6_F4;t(*u*APK`*`l`zn6jri<5#nCGyW7H`wgL`|s}>>Nkp>dYc` z1btRf>2k9Kf*U55!5^H!ahTzOl0{*B_bEt!g5}iJ#y*oT4G|dIRDnJ#p6F9D41N%Z zxEI=!bs0Cku(LNHUN?@Q$DPP8lGNmIw+aci*jM9iR!KY{@qnb)+^~*r2_7jK_{O=#(Um}D>eg+2Flp4nLQG`+Hk+id z)hRQzrP1^}Yh~A*mRs{k{!o+)ucVdkaS0iJ=sL21HE@qwvqy@B}@wSd~rY@N1&b&=IOov=3&uhAQcW5nGV zZ%fs)gM(Vm3Pu5AFQ<~zJqvh7+^N}8WHh-{CP}77X0J@OtU%6HE=O*sT!q}Qyu2V= z@UDEbe2IKFlPpXSzRcXrEN6}@D2i+fk&4-hO^QbqTNPg^NlFZoT%~BG3Z=i5s+1O3 zs8laqz)E1%vWi$WtS8EdOeeD`$EY-@6st6;JXggOT1AdR<$qn=XdU&fw5qGVx>9O< zna-1h)TTFAWA)Tt)^D%xjlCb+>8H?k$K6w#8MAEONuJu_Qdh*T(b}U`rgdNIn@&NO ztb0^DQ@c_7uy(Wd3muZ)pwHEb(ka*N(XH2gs)rf1Mw?!=UZvh%y>h*74r0=q7IKm} zb(|xdE1Zv!(vgXg59?>^-_!qOPBGYEu+N~@V8K9axXO}cdDgJV@R?Dt(GBC}(ak3Q zCXY?i%p%Oa%@3P5Tl83TSbR-nB)(<2%hC&A7XYtb!LyG_Xd4E)D=ZD4l`9YHD|JtA;~4Xkf% zOnS9_ob?>iJ%qTySUtY7mm3w5kh{bc-2(TBYiL0TZ&aKHynJvH3Kg#=-0fi}ZfQ;U z5#rW?1@6G83dZs*%d?xh;-S+lKsZhzX&OH;{#b=PkN{?~W}7wZhp~@)V4oL)$POdF zh5ehMBOU603S90^U0XXWaE=j3IE7yg8mE(l^E&0KeCdds4#*)?wYLP-$gcCp>UM&A z(LMtPu@=m!bSvE>cZIj^0ynVxqq(6kHL#8SD)?q%tbC5*=(URQVfG_yc^3O2)%Xc^B3U_`0iv0m z{b6brSUZ{4p=Toy-cw^8x>SQbG1OtNh9wBbXOFxtU+@-qJA}3mfsr{ZsC^Dkc85KJ zHH^vPkm*AOlMMwEN>d*xf`nhZLb5@jxnZZTEri&xi^{Hkx~_HIncItfGyK7I1a#!FbwI>&L|VuaawArr zr-tnHH^XL)c3M7v$kziI;iTRaZAy6jS-OUQt|i7%pVsURPG5ui^_y10zH_jp6A+`< zmyUz%Fd7?C6QM8(P4taIW4n-pD%$}FuUawNhb*IRoEo_8kzV8OMSIW;Fq~O=I5JKyUHN5jJTf9!6UW$@je8p@`DR(Ar zD%r+O(O@5>pLW=UJG2V(7WlfM7`V6-5a)uE9mdqa-d5yU8`uzyn!Go4$BFeX)?xeQ zhmj#y;D(3V#LoFBTE^rCY!Br6-XU;gE~tn2y=^JPAnL6UgdIlt%!}OrwaKp@7ebB0 zLk>rVi0rr5zBGjhju5PJP8{0WqAA+(y+9{Gu*`3AWA05>ArJ%@^;s+e8Z^$0%-(;_ zAH?T@H7-Ovf)QoV6#irWO#gg5V=Oz`B-*Is2D8C15l7F3?%@tD)hiGV9-E-xwMjK2JNglD2d~O2I2`y@Ed@6v0pMW! z|7e`9m^W~9UZlw6la=9FO(b60_sR%3K4)kDc*?jf&cB9%o8uyws_WN2`2BD))Qq#e z=E?aMc3Bs$!xBULZwiqsBTx3(Aza1D*Vv@VX(7MTHN0{ex%m@EU3>$+8bTGhG1U~h znbCcCC4#hQ;pA{Z)m+wAC^#J4n4my7IN>P}^%1+v#DuE5tbL_GIJhuEfpFl_ih{#E zjf+;l5DyG&C&A=vsRD+u;N9ElFfhKd8Q5$#*)+ujB}s6~*E5QWtX6RE`Y<{TiFScV zN8(nKM(qS&2a|~;L28aYU_`3)+Fgb9c%SL^pj@ z9_TL%tH|!lqwOfO{8sL**gq!zxFa4*vv@sYrH`%}st^6#Dj!|-y#D(y%_)t8>i(y% zpYp)HpJ^2!PCuK5>(2}zbvuO_3%%xu=@Z7p1#b+jm5VR?MPuQ(w%*k@%M~DA$S3&{ zKEV45`h$g}ts|?}HPM3bT-MMXU;$-Sl{eHX%)4eN)We4O#em-=AVpaqKMMv>vYl!& zXum+V)|&j%BL_@Rs$)UG^y=J|D`BPFLy7h9n$A>Dm8%7e5cl|A5Z|TXJQS3R&J$;1ypU7 zJ}VV9;HeX^2Lqj25HSgeo&%Y=91L1d=g#;c5eKrg?`*1RH_I@N!V_ zB$#cHrB)Qg*>DNZGu2k45!Ikwl7fm{9!X9~iJ7^h8f3AHnYEtVbvh}=WCA9< z*@>oTbI~ZkpQm?`A>8M|6G*tqW;Am>o?sCq{xAw@GL>f|FXq)e%d=5tCXHZlj^{X8 zM3g2t<@-$tlp+t-CgX620Jxf_({XI#^|KBhI#=fT*@YbJ`o=%tRF+h*4?B~Dg^Z5MO)y7wN++>{b_R!8Qax@}&VO*S(xuye(Mm+b_taRUdoFkHJ zjqv_S3OP`dzRdKrR~{1gb7USuZbz$4i;c}NYHxyjG^L{+3?%^{0^uT}4@)-rnjPvJ zP9cRSIgu*F;S2b;lPj(kpyX>%cH?~TaB?s`D8K$4muRY)b4?OB)f}WDSAfZfy8`c<9ypbI;@IhAu1xd6k2i%OCI_k7r_^1~!y8-tvFE1RpQl;&@W$S!i{K zDm+tTvuQ?_)f)zWyi_mh^(xNOYPw*!O`br6u@IV|FXsl-PE}e9d{Fy5VZ3jSONL-# z_$r*m6X|CpB4C+t`pf&;@R*nKsS(C_+pR_?Upe1RfzsIgvL_>l1uRqRZskRZ8X>iI zs|E347bTst&7KAumw>rg-LNAfQOI(BH#Cht`9*b!sr!x4$_FMTR4;O&sngDm$kGPc zYS}IfWE)q|6uRN)pX{_C6<+SPc%5Hk0rfS*k;clA=XgEr`OK;DoVpzpa*H)a6&a|E z8fBz)cBE2cNtkNU$V93fEbuC%DYM<^!$7f=Q9Z=%WrtdNr3b7zBZDID;iwEkt6=c8 z$bnUE!%Oi4zrr^E)q3oXj9-=!gB>=vIL$`RZV2smM+6$5QqxiCv{aqJBDpz^bG)Bd za&CM7wR6+`mDC27!E>2BMXXQ)x_ve2p9}^oZNcRQNnQt4-JKVf|J?b9wYQ?4z^<4c-Z3&G#;)42iyr0wSG~1Dw(o8`cJU8h?iYI! z@;xK6#~9^6{`V#yS~%D};y=B)iol|bLc}SVcsfO2X%8^WN(1MlN}Cd9Tm+$A4zhr# z16|qO4up@cm2er-kEFoC+-?p`j@>T9?u$7#o?{3^(+snUd-~WIzI8CdyV4qEmwSuq^HAFCQD5A zz?hOL!8SIpL?g(nJEH<6QqKg7?*tn;-nHb9OiT_5^LDoNGIf4tkQtN2;Q|VqzA*0T z%xv4^+|EHZSn6!~dXXJ&C}i94tZhYGI5LXvnMX(}Nwv0&6jjrWNYkD%LPa4EWmUJF zmG*lRMqMaI(OD5nL+tz+smZtm>%B%4&2umbozWg{W%)-@=p>(trqNFS-t^rE85dF+ zX5787qT^ru_Wgkd?UY^A^=3UP@fHeQ85sWwqRtgVNR#>ajh>|kir3LYLVyHh@_ z>E$WZnl)omI?Uv>nfd-z#VttqGvb)}jR$Y3n~`wyDvktY5VZLU@dt9bIFn8?1FtzM zl}*A&fIpZ1Y`Vuv)f3(61X`eN596_H;cD(9sz++Y?9H~935Z^}lc$U0v05`*WOej` z+0n=n`vHkfL^p8$i6Z`$p78=K`n}_*vxYgp!f8Ivfd2EGZ&I$0<7l>q2A@G|CT@}g z`cS;X1iTnNL3gh{o3i`;bF?Sj;geA34K(1xN7!TR^wGZAmrlmJ+ZY+2UEY~QuL^Bb zzKZzR#kh>0Jiv^2{fVQs%F9jCg5dM!)HkUo-Zx1s)`FyJiAW!odQ@Y3d==X~#LK?+ zHmdP$d;jehX0lJL6*Wgjf>tz}EnH8g_p+Y}5gkdV-x6SyUZo=ra%`k%O(QaaCa3Gz zPM-Vr|}a99{)tnK6ay{F z|CR3SlV)G{pGWXEMm0E;ritrc|L2o4u+Is6$s;1JpsVoVg9uq(>Im&@naBkKHSFo( zriRLRBtO_|%&R*E>QNzt`m*vtoVKC!G(wIWNEW z_WEN#!=L>{Au>o4MYZAXf1dgqK)yR15I(L7Fl#Jrp>vgyBVD{m@9O53Hp#@#d9cT} zcXYlvbA1Fed)x2oe4$G-8Pc^yt1@ILt2kPe-Fh>7v{H7Yt2)y3Xd^a<_5UfH>A}Ggwyp{MO4+g>_%;%M~{=M;&GmUESXTL zja!+VpJRB@#G&ii$N-}PvP-1m26o##E%D!)lxuxk=*y7+>zrUSos>{ZZ-mcQIkO#d z)cL;FFQC*8O{gqgwNgv~HAqbl)ZVa?T?0iX18_pP@UTRJe7OSe#0NHw*yg`l2kA)p z|@1EPggU$a2BsY1Gi9J?$ax)jPM-NI$?gZVA4v%D) z%oX-;2tkI8^_oL3=0i^{KSO1A68pSm9tKWVCa~LBPO8aV<`uoopU6u2PVe%TVt(Y2 zT#vX*nmw-^dvx!zGf0|M`7cvi3^O3Hs8%p2P-5dPevxtk-^h3KEqqg9<8RK~oZoZz zda1eJA8x#vvEKH%4jtRKy?EcQ2^#6|p_9S417)Xn?k_o8QvX1N(WiA#=qaHPLq)#` z^G3Uw1~1}@S;usN9Mu06BASx%R2qEj-qv!P4F%PZP&r`V_hP(Ku`aZdEGxS{dV4eL zeA~BiE#scf$_~lsoKzE=@9xh&Y~3hg&sF_b_UtIVo(8I2r14Mps}=kxJ!7Kg|J~>p zH9ztY!FvMk}FvDDwum$*mGLC z>kCQbOwfxc^9*yd9HEZ2`4;k-m-C=T+2w89hzRg<*9HQCLMK9^A2Y2OE}jf8E7;UkW!`O5%LHv#LZxI=5)cMor#3U zFnUEfg@&T}kj$C^MlBAb)1C3u9M%d4BLT)e?&rNC#E{GxqwCC3+UT6cItu2* z>_ny@NDy#=yOt@DiTQjU@@EiIJ|ijC8|_IYKzYqFn-bd5Y{W8MuPq#)kh#}QRh6|| z1EI{pMTrJ0WgH{~f(t5b^Itu|(9s%T5fEAzmC#9f)plI1&mI%l_#TxoZhU{pjV;)dSy`8q6|*;OF6UW%Zl#qaZMnrl8xwC8yQ|3x!C$U?RCs;xd`F zDf$4*)nPUt>N~r?qM~Xffp(ipiydz|z>M=q*NcdNX`FPx?2t%XRp2G~R!z~fil{06 z4=rrt;57VaiYVq7#}SnqGe042f3*%o~1-09F6^l?8rllmM``JZ_aF7_32sFPm9 zHP|q{B_FKC*-5z{R~^fSng33j>w1kwf`W&YCuxVVbAY9hq(#S5#HD5#S%`e;*cmBM zT%zfCygUxhv0NjMP>ap$PV7T18HH})LLjl=OSuL!G6<@5Z1Z1jfpr+>4xueFn<6>I?7(d+YwyLyDSjl=V73%cj<5C|@&uD+bvpTf*c z`~j+4NpA8iMo+}%Xh!mDuaz=~BIL~N_&oAy57T+*Y+mY_`5%|t`JlHo&l5zA>P_cg z&VCLI=}7g)-yPtWVdU4u ze;fb)BLL(o_+{GF@_*B#Di824zu@Hiqik{e4k|s-XlNCo#W{Rv>|X9Sel@N`^So_m zF4}!spZY6rOjP9;FzHxe*qr6SP3Z~@v0Mqwli4uuVqFV9E|TkrAOgKY^LCW_8yXcT zsthy0cB&LxIBw{eXlO-FD){lCvkBhQzd8YW5hechhWBx`#@^bXuO2xjiwnjZ9Pd4L zAQY299cPz@*3`jq##PRCc*aaSuC|lsCXWeJC)y~x9``!1tC%{>9M+5`{dM-QHiT{O zXlERYO*_vXqd;+ch`%$f6ocen7l{}0Dn8Cv@o_#D&CYBPsC+8y*CXj{ga1fUR6ZU{ zfk?DK7LrC^s~)( z<;<-%muvjTv^fwx7-8Rcr7vxR3oc~NW9HMShHMX35JIu=XG1FVC4=1?I?~m{bmD`MohpgL769K{TEEhWCaG_> zJ=EKv8tP-gZuZnKf2fD_UOYYx+wURK1>Du$=it>VOy86~eH{z?AwV}S#}m1ev4K&9 zLrvCFI+)(qi;yJfVpEL=`r>3Z8*IAftW6PD2J|!_=8Yt1ObVseq#NbTsm6%5RH}=L zGJ=>Gty-}qCCH{dD9t|eQ2InzT?l&^wU@)9f-LUv#wd#UO@^{KN zDh;u&uI>MX^-KGLXrg^m+K0|i+-Ube$xF7S#f z!jnZCf5tyIY}meI%fG2N?mAG>e15R>^r5rB7P;<>c>_P66=B~`88_WlcUD)qgO+k> zY*>QQ!p(@vC~p|7bx@Wd`Q$_n$CoK0bRg!lR;w+cN+LwjuzZw^!+JLotlpe%b=XjEf~O+|tuc-T?HL2piL*XVOC z$F4G)XNjZB<2qySR+$fpOu6vhvb6JQO7##wtu2W+IrZ&gmuXD$bG>Nnl=i|PYr1Uu z#L|i(KU8K>wQrzqc$Q~^fu{FhLucE_<^ds+l3>%(CixB>OTW6b7r8_2il~TNxkF96 z?hDt8jRGl?OJAO!n%x-R3}Jx~Uqd|yZCrKRvDoenTD%7sDxM3-d^ov^S5jOrIH z%=)o-O>mixieKDne^pMq6Wtu-+KL}+l6t_7om6~!Jta1aTJrwGFmD%D|u3s zQZU$@nCNLdKpS^{Yqkx$OtD5E;W)1AWO$@r&L;R4L$YV|27@j_XOO?zXdxzRwR)bl za6w6d56xr}PRJ_QC;x$b!J(8r2i8d&2qgtn%Vw}rA_0=U1Uy^upkkG51z%RMvJZl) zgrGxmK#}YPKMEbn+0$WmZJU3EsN(+>sf%NjDQK0&Fd^%KRY)+LJs0+^^`PSMiUSqQ zOBFg`Sh%R#lrWr@e6U#SYARKCtLcFr&YrRC1a1BWUt^P=#HpuU&I=A_-2reBMhYZc zk>EjKd){5KHXVDRGbaxgA2@OTGF)`&%uIz_tugIC8Znq1bjWm)lf=B}N2Q1h8}wC$ zBWzk$`i2K_?hu3W7^#WRjf^G@p<2hF=cMD~eRpOukbV zB4Oml-GH3^Vzs-#v|}+bDS1SH!D`zMrlv(%Vot_#6fX^C8(zvwhnU}$;*9eKVeQNM z+=uTzuVk=#gr5h`oTL){L)>U`tM$Z#epE{$>uaTyI`-jEJ?dCRo z(Wbq$KtPG-r8%27$*4JR|z`xYkS_tkfM(dZb&Zo(MU21GKCXj@U z{p+8%M($u2$amLZP}L>~ zNqrgn@0KJ+#wSMwy1Eio&QnSG1v$CSP|ffB%ncs!S8L!D({dpcpR zo%aeLzh#oP6|RP>HbR`h{b7iCQb2}PuIJ(G2eDCN2`rOLeK^wuXWX)#TVj}W6Ny+X zQ^-c@nR2;Q?96hEE6wbZY(ip^B8M1B28mO%-%wu;HA|S6Jmt!7eKoxCn&Wcu=a0MT z4u-+IV(P>M@@=x4o|ss=yErlL!>n9HVd-paWK~_3j)_`J`C32JtafU)JOueXsOjOz z)Fcb4%%o13mptX}|4<#0&{<&2^F|D&X~Mf^>%=t<-mwU?9sPtHv3Wv>YAv=SzY#2q zj$M9I{Q@>Y0XK4VW9+avBgp~&p?u=H-kGuk2WT-5u+bn3#bxuo$oCEQ(y|_nrgQ{C zir($wqQo|u?!UW+=?_s7rE)(R!Qxo%cLXqeQV3vTEs$rYuW{JIeGp(^81&89i1I^> zxU3OZHCQRPXJ8^B6tydN3-<7ZBv&L6@D)mhLZwlq@Pc9+^YZy~)r;!GhmIXRdaStk zaNG@O)*SaB)fDF+Ce5j%>UYUz-8r~0tJSmkjrQsPd1JMZrI*L%wC~)?`&YR>8Pr&` z%FbRI7!woh=xEH4RlJd$;&!0}3NuL~!BhblgT9Kxk~vAr`&-pt-_9b%avm0tm!Bfb zBFzS4YEG6Ns#&WgT+Q2H{Rj$D>~5L5hO}fx-YV{LdzSkVv86!wPj>I#vu(?cojbPg z*s*Q%wjJfNE?aOH{()#6RG&RpQCV40b14wSOuAbnzW^s(==qG0jrUDZ$j5f*+f0UW z1Gq&Ar8v(qtrJYjKTloq%_Od;{zJnLG?yt=N(7qNSc};h855ClaL|JuxNsK`?_2PS z_l{k-aPgw^@4CaSOjf&*eKqYWaA{N&f+j&@OCO(RIY~ks3?S@;CMp9^7@rOL;Xm)N z5n`*jc!{RIL{eI#PXdMzFqiyLH3R}CtK$F-f@!W1lbCA6(nbt67aVEmh(OHo;=*=) zf+@u-l^4q{mNRiktRSp3f2j4&|Ge?Tg5Q7Y@L-wfxjVgApI3kuwvyqYC!GDmVlp#% zaFL7j@^v?-v*`FpQm)ZxvBQ<@HS z%`rjS&8Xlkx|!3RgRprm%fn#8+FWo#ceufDkMaU_+Ks6|UJ7@FH(WdkNhPe$M~_an z(SXra15hc9N9e^slAzz9U)r27bp!fND}L4TFx?33orzWcv%9x%2DG6*f*Zkwz2wEY zUt(@#s^b*;DolQ4QFIdf#_ITNd|N$k;RrPxtQEeMS+*u$rE)wcT*X~oXI}3QlX2P#%B23CU=G2JEaX;G60j z#MTaladW-0m@FY|3ZEi&OiY@|37JEB;LK?;PH;JWYMIrknKwWL@8)A%2 zECY`Rs3!=+`1vRBA=r!UpzIY{1xyyn-5PtWm;l!e-koYQ?p%zPjmhOI)niAFAy@>u z2WRmDA3E0pL{0dZl8~}kV^BjnHh{YU`>tNVmq!rpUb7K8StMIT(p24~77Qd)v}-G1 zAgB=-C=AjJjBq85xSK)3&cqfHsDyqoL;+SfFchI{wV?!A?gk6p_!`PEQ(&lIkvc;a zs)h_TI2mbB=XY~NBebCjU9Sx`2Kj1eAyW-Q8Q}=Ea$*?9Fp{ES0zK(|WlW(a3!G%iQY=S`B+2ryS+QWr4x4`$2_LJQ z40#gdU=zrZX}tt-9>2Y#e0h>(%8~1w4-`XP9V1qn1isBmQajCdwhc2DFV>2SmGY)# zs^zwt?2~10Aj0)QgZQ13O&3A&To{$?FB<#Mo?dt7J4D zBq4Q_E~(c$gQ@8jbXFu|JccJly}q@5X8w3hSYACVKJItEbT7B7<#$E;>zXH1ns{GN z_ZbTlW{flTtmR?za)1Bhr23kU-Z}O8!Jp_YzUFgf5nII}gIvj{=qppYPG`WFAJq7z G0RR9|PM1{x literal 0 HcmV?d00001 diff --git a/packages/documentation/docs/.vitepress/dist/assets/inter-roman-greek.BBVDIX6e.woff2 b/packages/documentation/docs/.vitepress/dist/assets/inter-roman-greek.BBVDIX6e.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..2bed1e85e8b20cb3903206a6cace251c52bdd8c3 GIT binary patch literal 29920 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 literal 0 HcmV?d00001 diff --git a/packages/documentation/docs/.vitepress/dist/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 b/packages/documentation/docs/.vitepress/dist/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..9a8d1e2b5ef22b97801781478d477685dd6119f3 GIT binary patch literal 110160 zcmV)XK&`)bPew8T0RR910j^L06951J1C_)80j=5q1ONa400000000000000000000 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 literal 0 HcmV?d00001 diff --git a/packages/documentation/docs/.vitepress/dist/assets/inter-roman-latin.Di8DUHzh.woff2 b/packages/documentation/docs/.vitepress/dist/assets/inter-roman-latin.Di8DUHzh.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..07d3c53aef14e7e3aec6b11684395f2833e0b3d5 GIT binary patch literal 67792 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 IZR%D40KZ@npa1{> literal 0 HcmV?d00001 diff --git a/packages/documentation/docs/.vitepress/dist/assets/inter-roman-vietnamese.BjW4sHH5.woff2 b/packages/documentation/docs/.vitepress/dist/assets/inter-roman-vietnamese.BjW4sHH5.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..57bdc22ae88555c6217307e4064a642f83d642b1 GIT binary patch literal 14072 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 literal 0 HcmV?d00001 diff --git a/packages/documentation/docs/.vitepress/dist/assets/style.DSaPWSqg.css b/packages/documentation/docs/.vitepress/dist/assets/style.DSaPWSqg.css new file mode 100644 index 0000000000..d2fd92870d --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/style.DSaPWSqg.css @@ -0,0 +1 @@ +@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:100 900;src:url(/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c88,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:100 900;src:url(/assets/inter-roman-cyrillic.C5lxZ8CY.woff2) format("woff2");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:100 900;src:url(/assets/inter-roman-greek-ext.CqjqNYQ-.woff2) format("woff2");unicode-range:u+1f??}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:100 900;src:url(/assets/inter-roman-greek.BBVDIX6e.woff2) format("woff2");unicode-range:u+0370-0377,u+037a-037f,u+0384-038a,u+038c,u+038e-03a1,u+03a3-03ff}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:100 900;src:url(/assets/inter-roman-vietnamese.BjW4sHH5.woff2) format("woff2");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:100 900;src:url(/assets/inter-roman-latin-ext.4ZJIpNVo.woff2) format("woff2");unicode-range:u+0100-02af,u+0304,u+0308,u+0329,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:100 900;src:url(/assets/inter-roman-latin.Di8DUHzh.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Inter;font-style:italic;font-weight:100 900;src:url(/assets/inter-italic-cyrillic-ext.r48I6akx.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c88,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-display:swap;font-family:Inter;font-style:italic;font-weight:100 900;src:url(/assets/inter-italic-cyrillic.By2_1cv3.woff2) format("woff2");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-display:swap;font-family:Inter;font-style:italic;font-weight:100 900;src:url(/assets/inter-italic-greek-ext.1u6EdAuj.woff2) format("woff2");unicode-range:u+1f??}@font-face{font-display:swap;font-family:Inter;font-style:italic;font-weight:100 900;src:url(/assets/inter-italic-greek.DJ8dCoTZ.woff2) format("woff2");unicode-range:u+0370-0377,u+037a-037f,u+0384-038a,u+038c,u+038e-03a1,u+03a3-03ff}@font-face{font-display:swap;font-family:Inter;font-style:italic;font-weight:100 900;src:url(/assets/inter-italic-vietnamese.BSbpV94h.woff2) format("woff2");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-display:swap;font-family:Inter;font-style:italic;font-weight:100 900;src:url(/assets/inter-italic-latin-ext.CN1xVJS-.woff2) format("woff2");unicode-range:u+0100-02af,u+0304,u+0308,u+0329,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-display:swap;font-family:Inter;font-style:italic;font-weight:100 900;src:url(/assets/inter-italic-latin.C2AdPX0b.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:Punctuation SC;font-weight:400;src:local("PingFang SC Regular"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:u+201c,u+201d,u+2018,u+2019,u+2e3a,u+2014,u+2013,u+2026,u+00b7,u+007e,u+002f}@font-face{font-family:Punctuation SC;font-weight:500;src:local("PingFang SC Medium"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:u+201c,u+201d,u+2018,u+2019,u+2e3a,u+2014,u+2013,u+2026,u+00b7,u+007e,u+002f}@font-face{font-family:Punctuation SC;font-weight:600;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:u+201c,u+201d,u+2018,u+2019,u+2e3a,u+2014,u+2013,u+2026,u+00b7,u+007e,u+002f}@font-face{font-family:Punctuation SC;font-weight:700;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:u+201c,u+201d,u+2018,u+2019,u+2e3a,u+2014,u+2013,u+2026,u+00b7,u+007e,u+002f}:root{--vp-c-white:#fff;--vp-c-black:#000;--vp-c-neutral:var(--vp-c-black);--vp-c-neutral-inverse:var(--vp-c-white)}.dark{--vp-c-neutral:var(--vp-c-white);--vp-c-neutral-inverse:var(--vp-c-black)}:root{--vp-c-gray-1:#dddde3;--vp-c-gray-2:#e4e4e9;--vp-c-gray-3:#ebebef;--vp-c-gray-soft:rgba(142,150,170,.14);--vp-c-indigo-1:#3451b2;--vp-c-indigo-2:#3a5ccc;--vp-c-indigo-3:#5672cd;--vp-c-indigo-soft:rgba(100,108,255,.14);--vp-c-purple-1:#6f42c1;--vp-c-purple-2:#7e4cc9;--vp-c-purple-3:#8e5cd9;--vp-c-purple-soft:rgba(159,122,234,.14);--vp-c-green-1:#18794e;--vp-c-green-2:#299764;--vp-c-green-3:#30a46c;--vp-c-green-soft:rgba(16,185,129,.14);--vp-c-yellow-1:#915930;--vp-c-yellow-2:#946300;--vp-c-yellow-3:#9f6a00;--vp-c-yellow-soft:rgba(234,179,8,.14);--vp-c-red-1:#b8272c;--vp-c-red-2:#d5393e;--vp-c-red-3:#e0575b;--vp-c-red-soft:rgba(244,63,94,.14);--vp-c-sponsor:#db2777}.dark{--vp-c-gray-1:#515c67;--vp-c-gray-2:#414853;--vp-c-gray-3:#32363f;--vp-c-gray-soft:rgba(101,117,133,.16);--vp-c-indigo-1:#a8b1ff;--vp-c-indigo-2:#5c73e7;--vp-c-indigo-3:#3e63dd;--vp-c-indigo-soft:rgba(100,108,255,.16);--vp-c-purple-1:#c8abfa;--vp-c-purple-2:#a879e6;--vp-c-purple-3:#8e5cd9;--vp-c-purple-soft:rgba(159,122,234,.16);--vp-c-green-1:#3dd68c;--vp-c-green-2:#30a46c;--vp-c-green-3:#298459;--vp-c-green-soft:rgba(16,185,129,.16);--vp-c-yellow-1:#f9b44e;--vp-c-yellow-2:#da8b17;--vp-c-yellow-3:#a46a0a;--vp-c-yellow-soft:rgba(234,179,8,.16);--vp-c-red-1:#f66f81;--vp-c-red-2:#f14158;--vp-c-red-3:#b62a3c;--vp-c-red-soft:rgba(244,63,94,.16)}:root{--vp-c-bg:#fff;--vp-c-bg-alt:#f6f6f7;--vp-c-bg-elv:#fff;--vp-c-bg-soft:#f6f6f7}.dark{--vp-c-bg:#1b1b1f;--vp-c-bg-alt:#161618;--vp-c-bg-elv:#202127;--vp-c-bg-soft:#202127}:root{--vp-c-border:#c2c2c4;--vp-c-divider:#e2e2e3;--vp-c-gutter:#e2e2e3}.dark{--vp-c-border:#3c3f44;--vp-c-divider:#2e2e32;--vp-c-gutter:#000}:root{--vp-c-text-1:#3c3c43;--vp-c-text-2:#67676c;--vp-c-text-3:#929295}.dark{--vp-c-text-1:#dfdfd6;--vp-c-text-2:#98989f;--vp-c-text-3:#6a6a71}:root{--vp-c-default-1:var(--vp-c-gray-1);--vp-c-default-2:var(--vp-c-gray-2);--vp-c-default-3:var(--vp-c-gray-3);--vp-c-default-soft:var(--vp-c-gray-soft);--vp-c-brand-1:var(--vp-c-indigo-1);--vp-c-brand-2:var(--vp-c-indigo-2);--vp-c-brand-3:var(--vp-c-indigo-3);--vp-c-brand-soft:var(--vp-c-indigo-soft);--vp-c-brand:var(--vp-c-brand-1);--vp-c-tip-1:var(--vp-c-brand-1);--vp-c-tip-2:var(--vp-c-brand-2);--vp-c-tip-3:var(--vp-c-brand-3);--vp-c-tip-soft:var(--vp-c-brand-soft);--vp-c-note-1:var(--vp-c-brand-1);--vp-c-note-2:var(--vp-c-brand-2);--vp-c-note-3:var(--vp-c-brand-3);--vp-c-note-soft:var(--vp-c-brand-soft);--vp-c-success-1:var(--vp-c-green-1);--vp-c-success-2:var(--vp-c-green-2);--vp-c-success-3:var(--vp-c-green-3);--vp-c-success-soft:var(--vp-c-green-soft);--vp-c-important-1:var(--vp-c-purple-1);--vp-c-important-2:var(--vp-c-purple-2);--vp-c-important-3:var(--vp-c-purple-3);--vp-c-important-soft:var(--vp-c-purple-soft);--vp-c-warning-1:var(--vp-c-yellow-1);--vp-c-warning-2:var(--vp-c-yellow-2);--vp-c-warning-3:var(--vp-c-yellow-3);--vp-c-warning-soft:var(--vp-c-yellow-soft);--vp-c-danger-1:var(--vp-c-red-1);--vp-c-danger-2:var(--vp-c-red-2);--vp-c-danger-3:var(--vp-c-red-3);--vp-c-danger-soft:var(--vp-c-red-soft);--vp-c-caution-1:var(--vp-c-red-1);--vp-c-caution-2:var(--vp-c-red-2);--vp-c-caution-3:var(--vp-c-red-3);--vp-c-caution-soft:var(--vp-c-red-soft);--vp-font-family-base:"Inter",ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--vp-font-family-mono:ui-monospace,"Menlo","Monaco","Consolas","Liberation Mono","Courier New",monospace;font-optical-sizing:auto}:root:where(:lang(zh)){--vp-font-family-base:"Punctuation SC","Inter",ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}:root{--vp-shadow-1:0 1px 2px rgba(0,0,0,.04),0 1px 2px rgba(0,0,0,.06);--vp-shadow-2:0 3px 12px rgba(0,0,0,.07),0 1px 4px rgba(0,0,0,.07);--vp-shadow-3:0 12px 32px rgba(0,0,0,.1),0 2px 6px rgba(0,0,0,.08);--vp-shadow-4:0 14px 44px rgba(0,0,0,.12),0 3px 9px rgba(0,0,0,.12);--vp-shadow-5:0 18px 56px rgba(0,0,0,.16),0 4px 12px rgba(0,0,0,.16);--vp-z-index-footer:10;--vp-z-index-local-nav:20;--vp-z-index-nav:30;--vp-z-index-layout-top:40;--vp-z-index-backdrop:50;--vp-z-index-sidebar:60}@media (min-width:960px){:root{--vp-z-index-sidebar:25}}:root{--vp-layout-max-width:1440px;--vp-header-anchor-symbol:"#";--vp-code-line-height:1.7;--vp-code-font-size:.875em;--vp-code-color:var(--vp-c-brand-1);--vp-code-link-color:var(--vp-c-brand-1);--vp-code-link-hover-color:var(--vp-c-brand-2);--vp-code-bg:var(--vp-c-default-soft);--vp-code-block-color:var(--vp-c-text-2);--vp-code-block-bg:var(--vp-c-bg-alt);--vp-code-block-divider-color:var(--vp-c-gutter);--vp-code-lang-color:var(--vp-c-text-3);--vp-code-line-highlight-color:var(--vp-c-default-soft);--vp-code-line-number-color:var(--vp-c-text-3);--vp-code-line-diff-add-color:var(--vp-c-success-soft);--vp-code-line-diff-add-symbol-color:var(--vp-c-success-1);--vp-code-line-diff-remove-color:var(--vp-c-danger-soft);--vp-code-line-diff-remove-symbol-color:var(--vp-c-danger-1);--vp-code-line-warning-color:var(--vp-c-warning-soft);--vp-code-line-error-color:var(--vp-c-danger-soft);--vp-code-copy-code-border-color:var(--vp-c-divider);--vp-code-copy-code-bg:var(--vp-c-bg-soft);--vp-code-copy-code-hover-border-color:var(--vp-c-divider);--vp-code-copy-code-hover-bg:var(--vp-c-bg);--vp-code-copy-code-active-text:var(--vp-c-text-2);--vp-code-copy-copied-text-content:"Copied";--vp-code-tab-divider:var(--vp-code-block-divider-color);--vp-code-tab-text-color:var(--vp-c-text-2);--vp-code-tab-bg:var(--vp-code-block-bg);--vp-code-tab-hover-text-color:var(--vp-c-text-1);--vp-code-tab-active-text-color:var(--vp-c-text-1);--vp-code-tab-active-bar-color:var(--vp-c-brand-1)}:lang(es),:lang(pt){--vp-code-copy-copied-text-content:"Copiado"}:lang(fa){--vp-code-copy-copied-text-content:"کپی شد"}:lang(ko){--vp-code-copy-copied-text-content:"복사됨"}:lang(ru){--vp-code-copy-copied-text-content:"Скопировано"}:lang(zh){--vp-code-copy-copied-text-content:"已复制"}:root{--vp-button-brand-border:transparent;--vp-button-brand-text:var(--vp-c-white);--vp-button-brand-bg:var(--vp-c-brand-3);--vp-button-brand-hover-border:transparent;--vp-button-brand-hover-text:var(--vp-c-white);--vp-button-brand-hover-bg:var(--vp-c-brand-2);--vp-button-brand-active-border:transparent;--vp-button-brand-active-text:var(--vp-c-white);--vp-button-brand-active-bg:var(--vp-c-brand-1);--vp-button-alt-border:transparent;--vp-button-alt-text:var(--vp-c-text-1);--vp-button-alt-bg:var(--vp-c-default-3);--vp-button-alt-hover-border:transparent;--vp-button-alt-hover-text:var(--vp-c-text-1);--vp-button-alt-hover-bg:var(--vp-c-default-2);--vp-button-alt-active-border:transparent;--vp-button-alt-active-text:var(--vp-c-text-1);--vp-button-alt-active-bg:var(--vp-c-default-1);--vp-button-sponsor-border:var(--vp-c-text-2);--vp-button-sponsor-text:var(--vp-c-text-2);--vp-button-sponsor-bg:transparent;--vp-button-sponsor-hover-border:var(--vp-c-sponsor);--vp-button-sponsor-hover-text:var(--vp-c-sponsor);--vp-button-sponsor-hover-bg:transparent;--vp-button-sponsor-active-border:var(--vp-c-sponsor);--vp-button-sponsor-active-text:var(--vp-c-sponsor);--vp-button-sponsor-active-bg:transparent;--vp-custom-block-font-size:14px;--vp-custom-block-code-font-size:13px;--vp-custom-block-info-border:transparent;--vp-custom-block-info-text:var(--vp-c-text-1);--vp-custom-block-info-bg:var(--vp-c-default-soft);--vp-custom-block-info-code-bg:var(--vp-c-default-soft);--vp-custom-block-note-border:transparent;--vp-custom-block-note-text:var(--vp-c-text-1);--vp-custom-block-note-bg:var(--vp-c-default-soft);--vp-custom-block-note-code-bg:var(--vp-c-default-soft);--vp-custom-block-tip-border:transparent;--vp-custom-block-tip-text:var(--vp-c-text-1);--vp-custom-block-tip-bg:var(--vp-c-tip-soft);--vp-custom-block-tip-code-bg:var(--vp-c-tip-soft);--vp-custom-block-important-border:transparent;--vp-custom-block-important-text:var(--vp-c-text-1);--vp-custom-block-important-bg:var(--vp-c-important-soft);--vp-custom-block-important-code-bg:var(--vp-c-important-soft);--vp-custom-block-warning-border:transparent;--vp-custom-block-warning-text:var(--vp-c-text-1);--vp-custom-block-warning-bg:var(--vp-c-warning-soft);--vp-custom-block-warning-code-bg:var(--vp-c-warning-soft);--vp-custom-block-danger-border:transparent;--vp-custom-block-danger-text:var(--vp-c-text-1);--vp-custom-block-danger-bg:var(--vp-c-danger-soft);--vp-custom-block-danger-code-bg:var(--vp-c-danger-soft);--vp-custom-block-caution-border:transparent;--vp-custom-block-caution-text:var(--vp-c-text-1);--vp-custom-block-caution-bg:var(--vp-c-caution-soft);--vp-custom-block-caution-code-bg:var(--vp-c-caution-soft);--vp-custom-block-details-border:var(--vp-custom-block-info-border);--vp-custom-block-details-text:var(--vp-custom-block-info-text);--vp-custom-block-details-bg:var(--vp-custom-block-info-bg);--vp-custom-block-details-code-bg:var(--vp-custom-block-info-code-bg);--vp-input-border-color:var(--vp-c-border);--vp-input-bg-color:var(--vp-c-bg-alt);--vp-input-switch-bg-color:var(--vp-c-default-soft);--vp-nav-height:64px;--vp-nav-bg-color:var(--vp-c-bg);--vp-nav-screen-bg-color:var(--vp-c-bg);--vp-nav-logo-height:24px}.hide-nav{--vp-nav-height:0px}.hide-nav .VPSidebar{--vp-nav-height:22px}:root{--vp-local-nav-bg-color:var(--vp-c-bg);--vp-sidebar-width:272px;--vp-sidebar-bg-color:var(--vp-c-bg-alt);--vp-backdrop-bg-color:rgba(0,0,0,.6);--vp-home-hero-name-color:var(--vp-c-brand-1);--vp-home-hero-name-background:transparent;--vp-home-hero-image-background-image:none;--vp-home-hero-image-filter:none;--vp-badge-info-border:transparent;--vp-badge-info-text:var(--vp-c-text-2);--vp-badge-info-bg:var(--vp-c-default-soft);--vp-badge-tip-border:transparent;--vp-badge-tip-text:var(--vp-c-tip-1);--vp-badge-tip-bg:var(--vp-c-tip-soft);--vp-badge-warning-border:transparent;--vp-badge-warning-text:var(--vp-c-warning-1);--vp-badge-warning-bg:var(--vp-c-warning-soft);--vp-badge-danger-border:transparent;--vp-badge-danger-text:var(--vp-c-danger-1);--vp-badge-danger-bg:var(--vp-c-danger-soft);--vp-carbon-ads-text-color:var(--vp-c-text-1);--vp-carbon-ads-poweredby-color:var(--vp-c-text-2);--vp-carbon-ads-bg-color:var(--vp-c-bg-soft);--vp-carbon-ads-hover-text-color:var(--vp-c-brand-1);--vp-carbon-ads-hover-poweredby-color:var(--vp-c-text-1);--vp-local-search-bg:var(--vp-c-bg);--vp-local-search-result-bg:var(--vp-c-bg);--vp-local-search-result-border:var(--vp-c-divider);--vp-local-search-result-selected-bg:var(--vp-c-bg);--vp-local-search-result-selected-border:var(--vp-c-brand-1);--vp-local-search-highlight-bg:var(--vp-c-brand-1);--vp-local-search-highlight-text:var(--vp-c-neutral-inverse)}@media (prefers-reduced-motion:reduce){*,:after,:before{animation-delay:-1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important;background-attachment:scroll!important;scroll-behavior:auto!important;transition-delay:0s!important;transition-duration:0s!important}}*,:after,:before{box-sizing:border-box}html{font-size:16px;line-height:1.4;-webkit-text-size-adjust:100%}html.dark{color-scheme:dark}body{background-color:var(--vp-c-bg);color:var(--vp-c-text-1);font-family:var(--vp-font-family-base);font-size:16px;font-synthesis:style;font-weight:400;line-height:24px;margin:0;min-height:100vh;min-width:320px;text-rendering:optimizeLegibility;width:100%;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{display:block}h1,h2,h3,h4,h5,h6{font-size:16px;font-weight:400;line-height:24px;margin:0}p{margin:0}b,strong{font-weight:600}[role=button],a,area,button,input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;padding:0}blockquote,ol,ul{margin:0}code,kbd,pre,samp{font-family:var(--vp-font-family-mono)}audio,canvas,embed,iframe,img,object,svg,video{display:block}figure{margin:0}img,video{height:auto;max-width:100%}button,input,optgroup,select,textarea{border:0;color:inherit;line-height:inherit;padding:0}button{background-color:transparent;background-image:none;font-family:inherit;padding:0}[role=button]:enabled,button:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,select:focus,textarea:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input::-moz-placeholder,textarea::-moz-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-inner-spin-button,input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}mjx-container{overflow-x:auto}mjx-container>svg{display:inline-block;margin:auto}.vp-icon,[class*=" vpi-"],[class^=vpi-]{height:1em;width:1em}.vp-icon.bg,[class*=" vpi-"].bg,[class^=vpi-].bg{background-color:transparent;background-size:100% 100%}.vp-icon:not(.bg),[class*=" vpi-"]:not(.bg),[class^=vpi-]:not(.bg){background-color:currentColor;color:inherit;-webkit-mask:var(--icon) no-repeat;mask:var(--icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%}.vpi-align-left{--icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M21 6H3m12 6H3m14 6H3'/%3E%3C/svg%3E")}.vpi-arrow-down,.vpi-arrow-left,.vpi-arrow-right,.vpi-arrow-up{--icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14m-7-7 7 7-7 7'/%3E%3C/svg%3E")}.vpi-chevron-down,.vpi-chevron-left,.vpi-chevron-right,.vpi-chevron-up{--icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E")}.vpi-arrow-down,.vpi-chevron-down{transform:rotate(90deg)}.vpi-arrow-left,.vpi-chevron-left{transform:rotate(180deg)}.vpi-arrow-up,.vpi-chevron-up{transform:rotate(-90deg)}.vpi-square-pen{--icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'/%3E%3Cpath d='M18.375 2.625a2.121 2.121 0 1 1 3 3L12 15l-4 1 1-4Z'/%3E%3C/svg%3E")}.vpi-plus{--icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14m-7-7v14'/%3E%3C/svg%3E")}.vpi-sun{--icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2m0 16v2M4.93 4.93l1.41 1.41m11.32 11.32 1.41 1.41M2 12h2m16 0h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41'/%3E%3C/svg%3E")}.vpi-moon{--icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9'/%3E%3C/svg%3E")}.vpi-more-horizontal{--icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='1'/%3E%3Ccircle cx='19' cy='12' r='1'/%3E%3Ccircle cx='5' cy='12' r='1'/%3E%3C/svg%3E")}.vpi-languages{--icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m5 8 6 6m-7 0 6-6 2-3M2 5h12M7 2h1m14 20-5-10-5 10m2-4h6'/%3E%3C/svg%3E")}.vpi-heart{--icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z'/%3E%3C/svg%3E")}.vpi-search{--icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E")}.vpi-layout-list{--icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='7' height='7' x='3' y='3' rx='1'/%3E%3Crect width='7' height='7' x='3' y='14' rx='1'/%3E%3Cpath d='M14 4h7m-7 5h7m-7 6h7m-7 5h7'/%3E%3C/svg%3E")}.vpi-delete{--icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 5H9l-7 7 7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-2 4-6 6m0-6 6 6'/%3E%3C/svg%3E")}.vpi-corner-down-left{--icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 10-5 5 5 5'/%3E%3Cpath d='M20 4v7a4 4 0 0 1-4 4H4'/%3E%3C/svg%3E")}:root{--vp-icon-copy:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3C/svg%3E");--vp-icon-copied:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3Cpath d='m9 14 2 2 4-4'/%3E%3C/svg%3E")}.visually-hidden{height:1px;position:absolute;white-space:nowrap;width:1px;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;color:var(--vp-c-text-2);font-size:var(--vp-custom-block-font-size);line-height:24px;padding:16px 16px 8px}.custom-block.info{background-color:var(--vp-custom-block-info-bg);border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text)}.custom-block.info a,.custom-block.info code{color:var(--vp-c-brand-1)}.custom-block.info a:hover,.custom-block.info a:hover>code{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.note{background-color:var(--vp-custom-block-note-bg);border-color:var(--vp-custom-block-note-border);color:var(--vp-custom-block-note-text)}.custom-block.note a,.custom-block.note code{color:var(--vp-c-brand-1)}.custom-block.note a:hover,.custom-block.note a:hover>code{color:var(--vp-c-brand-2)}.custom-block.note code{background-color:var(--vp-custom-block-note-code-bg)}.custom-block.tip{background-color:var(--vp-custom-block-tip-bg);border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text)}.custom-block.tip a,.custom-block.tip code{color:var(--vp-c-tip-1)}.custom-block.tip a:hover,.custom-block.tip a:hover>code{color:var(--vp-c-tip-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.important{background-color:var(--vp-custom-block-important-bg);border-color:var(--vp-custom-block-important-border);color:var(--vp-custom-block-important-text)}.custom-block.important a,.custom-block.important code{color:var(--vp-c-important-1)}.custom-block.important a:hover,.custom-block.important a:hover>code{color:var(--vp-c-important-2)}.custom-block.important code{background-color:var(--vp-custom-block-important-code-bg)}.custom-block.warning{background-color:var(--vp-custom-block-warning-bg);border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text)}.custom-block.warning a,.custom-block.warning code{color:var(--vp-c-warning-1)}.custom-block.warning a:hover,.custom-block.warning a:hover>code{color:var(--vp-c-warning-2)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{background-color:var(--vp-custom-block-danger-bg);border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text)}.custom-block.danger a,.custom-block.danger code{color:var(--vp-c-danger-1)}.custom-block.danger a:hover,.custom-block.danger a:hover>code{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.caution{background-color:var(--vp-custom-block-caution-bg);border-color:var(--vp-custom-block-caution-border);color:var(--vp-custom-block-caution-text)}.custom-block.caution a,.custom-block.caution code{color:var(--vp-c-caution-1)}.custom-block.caution a:hover,.custom-block.caution a:hover>code{color:var(--vp-c-caution-2)}.custom-block.caution code{background-color:var(--vp-custom-block-caution-code-bg)}.custom-block.details{background-color:var(--vp-custom-block-details-bg);border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text)}.custom-block.details a{color:var(--vp-c-brand-1)}.custom-block.details a:hover,.custom-block.details a:hover>code{color:var(--vp-c-brand-2)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{cursor:pointer;font-weight:700;margin:0 0 8px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px;transition:opacity .25s}.custom-block a:hover{opacity:.75}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.custom-block.custom-block blockquote>p,.custom-block.custom-block th{color:inherit;font-size:var(--vp-custom-block-font-size)}.dark .vp-code span{color:var(--shiki-dark,inherit)}html:not(.dark) .vp-code span{color:var(--shiki-light,inherit)}.vp-code-group{margin-top:16px}.vp-code-group .tabs{background-color:var(--vp-code-tab-bg);box-shadow:inset 0 -1px var(--vp-code-tab-divider);display:flex;margin-left:-24px;margin-right:-24px;overflow-x:auto;overflow-y:hidden;padding:0 12px;position:relative}@media (min-width:640px){.vp-code-group .tabs{border-radius:8px 8px 0 0;margin-left:0;margin-right:0}}.vp-code-group .tabs input{opacity:0;pointer-events:none;position:fixed}.vp-code-group .tabs label{border-bottom:1px solid transparent;color:var(--vp-code-tab-text-color);cursor:pointer;display:inline-block;font-size:14px;font-weight:500;line-height:48px;padding:0 12px;position:relative;transition:color .25s;white-space:nowrap}.vp-code-group .tabs label:after{background-color:transparent;border-radius:2px;bottom:-1px;content:"";height:2px;left:8px;position:absolute;right:8px;transition:background-color .25s;z-index:1}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-block,.vp-code-group div[class*=language-]{border-top-left-radius:0!important;border-top-right-radius:0!important;display:none;margin-top:0!important}.vp-block.active,.vp-code-group div[class*=language-].active{display:block}.vp-block{padding:20px 24px}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{font-weight:600;outline:none;position:relative}.vp-doc h1{font-size:28px;letter-spacing:-.02em;line-height:40px}.vp-doc h2{border-top:1px solid var(--vp-c-divider);font-size:24px;letter-spacing:-.02em;line-height:32px;margin:48px 0 16px;padding-top:24px}.vp-doc h3{font-size:20px;letter-spacing:-.01em;line-height:28px;margin:32px 0 0}.vp-doc h4{font-size:18px;letter-spacing:-.01em;line-height:24px;margin:24px 0 0}.vp-doc .header-anchor{font-weight:500;left:0;margin-left:-.87em;opacity:0;position:absolute;text-decoration:none;top:0;transition:color .25s,opacity .25s;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1 .header-anchor:focus,.vp-doc h1:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h6 .header-anchor:focus,.vp-doc h6:hover .header-anchor{opacity:1}@media (min-width:768px){.vp-doc h1{font-size:32px;letter-spacing:-.02em;line-height:40px}}.vp-doc h2 .header-anchor{top:24px}.vp-doc p,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{border-left:2px solid var(--vp-c-divider);color:var(--vp-c-text-2);margin:16px 0;padding-left:16px;transition:border-color .5s}.vp-doc blockquote>p{font-size:16px;margin:0;transition:color .5s}.vp-doc a{color:var(--vp-c-brand-1);font-weight:500;text-decoration:underline;text-underline-offset:2px;transition:color .25s,opacity .25s}.vp-doc a:hover{color:var(--vp-c-brand-2)}.vp-doc strong{font-weight:600}.vp-doc ol,.vp-doc ul{margin:16px 0;padding-left:1.25rem}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{border-collapse:collapse;display:block;margin:20px 0;overflow-x:auto}.vp-doc tr{background-color:var(--vp-c-bg);border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc td,.vp-doc th{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{background-color:var(--vp-c-bg-soft);color:var(--vp-c-text-2);font-weight:600;text-align:left}.vp-doc td,.vp-doc th{font-size:14px}.vp-doc hr{border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block,.vp-doc hr{margin:16px 0}.vp-doc .custom-block p{line-height:24px;margin:8px 0}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block div[class*=language-]{border-radius:8px;margin:8px 0}.vp-doc .custom-block div[class*=language-] code{background-color:transparent;font-weight:400}.vp-doc .custom-block .vp-code-group .tabs{border-radius:8px 8px 0 0;margin:0}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{color:var(--vp-code-color);font-size:var(--vp-code-font-size)}.vp-doc :not(pre)>code{background-color:var(--vp-code-bg);border-radius:4px;padding:3px 6px;transition:color .25s,background-color .5s}.vp-doc a>code{color:var(--vp-code-link-color)}.vp-doc a:hover>code{color:var(--vp-code-link-hover-color)}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code,.vp-doc h4>code{font-size:.9em}.vp-block,.vp-doc div[class*=language-]{background-color:var(--vp-code-block-bg);margin:16px -24px;overflow-x:auto;position:relative;transition:background-color .5s}@media (min-width:640px){.vp-block,.vp-doc div[class*=language-]{border-radius:8px;margin:16px 0}}@media (max-width:639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-],.vp-doc div[class*=language-]+div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] code,.vp-doc [class*=language-] pre{direction:ltr;text-align:left;white-space:pre;word-break:normal;word-spacing:normal;word-wrap:normal;-webkit-hyphens:none;hyphens:none;-moz-tab-size:4;-o-tab-size:4;tab-size:4}.vp-doc [class*=language-] pre{background:transparent;margin:0;overflow-x:auto;padding:20px 0;position:relative;z-index:1}.vp-doc [class*=language-] code{color:var(--vp-code-block-color);display:block;font-size:var(--vp-code-font-size);line-height:var(--vp-code-line-height);min-width:100%;padding:0 24px;transition:color .5s;width:-moz-fit-content;width:fit-content}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);display:inline-block;margin:0 -24px;padding:0 24px;transition:background-color .5s;width:calc(100% + 48px)}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{display:inline-block;margin:0 -24px;padding:0 24px;transition:background-color .5s;width:calc(100% + 48px)}.vp-doc [class*=language-] code .diff:before{left:10px;position:absolute}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{color:var(--vp-code-line-diff-remove-symbol-color);content:"-"}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{color:var(--vp-code-line-diff-add-symbol-color);content:"+"}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{border-right:1px solid var(--vp-code-block-divider-color);bottom:0;color:var(--vp-code-line-number-color);font-family:var(--vp-font-family-mono);font-size:var(--vp-code-font-size);left:0;line-height:var(--vp-code-line-height);padding-top:20px;position:absolute;text-align:center;top:0;transition:border-color .5s,color .5s;width:32px;z-index:3}.vp-doc [class*=language-]>button.copy{background-color:var(--vp-code-copy-code-bg);background-image:var(--vp-icon-copy);background-position:50%;background-repeat:no-repeat;background-size:20px;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;cursor:pointer;direction:ltr;height:40px;opacity:0;position:absolute;right:12px;top:12px;transition:border-color .25s,background-color .25s,opacity .25s;width:40px;z-index:3}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover{background-color:var(--vp-code-copy-code-hover-bg);border-color:var(--vp-code-copy-code-hover-border-color)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied);border-radius:0 4px 4px 0}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{align-items:center;background-color:var(--vp-code-copy-code-hover-bg);border:1px solid var(--vp-code-copy-code-hover-border-color);border-radius:4px 0 0 4px;border-right:0;color:var(--vp-code-copy-code-active-text);content:var(--vp-code-copy-copied-text-content);display:flex;font-size:12px;font-weight:500;height:40px;justify-content:center;padding:0 10px;position:relative;text-align:center;top:-1px;transform:translate(calc(-100% - 1px));white-space:nowrap;width:-moz-fit-content;width:fit-content}.vp-doc [class*=language-]>span.lang{color:var(--vp-code-lang-color);font-size:12px;font-weight:500;position:absolute;right:8px;top:2px;transition:color .4s,opacity .4s;-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:2}.vp-doc [class*=language-]:hover>button.copy+span.lang,.vp-doc [class*=language-]>button.copy:focus+span.lang{opacity:0}.vp-doc .VPTeamMembers{margin-top:24px}.vp-doc .VPTeamMembers.small.count-1 .container{margin:0!important;max-width:calc(50% - 12px)!important}.vp-doc .VPTeamMembers.small.count-2 .container,.vp-doc .VPTeamMembers.small.count-3 .container{max-width:100%!important}.vp-doc .VPTeamMembers.medium.count-1 .container{margin:0!important;max-width:calc(50% - 12px)!important}:is(.vp-external-link-icon,.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(:is(.no-icon,svg a,:has(img,svg))):after{background:currentColor;color:var(--vp-c-text-3);display:inline-block;flex-shrink:0;height:11px;margin-left:4px;margin-top:-1px;width:11px;--icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0z'/%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5z'/%3E%3C/svg%3E");-webkit-mask-image:var(--icon);mask-image:var(--icon)}.vp-external-link-icon:after{content:""}.external-link-icon-enabled :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(:is(.no-icon,svg a,:has(img,svg))):after{color:currentColor;content:""}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{background-color:var(--vp-c-bg-soft);color:var(--vp-c-text-2);font-weight:600;letter-spacing:1px!important;line-height:24px;margin:0 0 4px!important;text-align:center;width:100%}.vp-sponsor.normal .vp-sponsor-tier{font-size:14px;padding:13px 0 11px}.vp-sponsor.aside .vp-sponsor-tier{font-size:12px;padding:9px 0 7px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-height:22px;max-width:64px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-height:24px;max-width:96px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-height:24px;max-width:96px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-height:36px;max-width:120px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-height:56px;max-width:192px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc(50% - 2px)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc(33.33333% - 2.66667px)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc(25% - 3px)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc(20% - 3.2px)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc(16.66667% - 3.33333px)}.vp-sponsor-grid-item{background-color:var(--vp-c-bg-soft);flex-shrink:0;transition:background-color .25s;width:100%}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-default-soft)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{align-items:center;display:flex;justify-content:center;width:100%}.vp-sponsor-grid-image{filter:grayscale(1);max-width:100%;transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge{border:1px solid transparent;border-radius:12px;display:inline-block;font-size:12px;font-weight:500;line-height:22px;margin-left:2px;padding:0 10px;transform:translateY(-2px)}.VPBadge.small{font-size:10px;line-height:18px;padding:0 6px;transform:translateY(-8px)}.VPDocFooter .VPBadge{display:none}.vp-doc h1>.VPBadge{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge{vertical-align:middle}.vp-doc h4>.VPBadge,.vp-doc h5>.VPBadge,.vp-doc h6>.VPBadge{line-height:18px;vertical-align:middle}.VPBadge.info{background-color:var(--vp-badge-info-bg);border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text)}.VPBadge.tip{background-color:var(--vp-badge-tip-bg);border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text)}.VPBadge.warning{background-color:var(--vp-badge-warning-bg);border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text)}.VPBadge.danger{background-color:var(--vp-badge-danger-bg);border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text)}.VPBackdrop[data-v-c79a1216]{background:var(--vp-backdrop-bg-color);bottom:0;left:0;position:fixed;right:0;top:0;transition:opacity .5s;z-index:var(--vp-z-index-backdrop)}.VPBackdrop.fade-enter-from[data-v-c79a1216],.VPBackdrop.fade-leave-to[data-v-c79a1216]{opacity:0}.VPBackdrop.fade-leave-active[data-v-c79a1216]{transition-duration:.25s}@media (min-width:1280px){.VPBackdrop[data-v-c79a1216]{display:none}}.NotFound[data-v-d6be1790]{padding:64px 24px 96px;text-align:center}@media (min-width:768px){.NotFound[data-v-d6be1790]{padding:96px 32px 168px}}.code[data-v-d6be1790]{font-size:64px;font-weight:600;line-height:64px}.title[data-v-d6be1790]{font-size:20px;font-weight:700;letter-spacing:2px;line-height:20px;padding-top:12px}.divider[data-v-d6be1790]{background-color:var(--vp-c-divider);height:1px;margin:24px auto 18px;width:64px}.quote[data-v-d6be1790]{color:var(--vp-c-text-2);font-size:14px;font-weight:500;margin:0 auto;max-width:256px}.action[data-v-d6be1790]{padding-top:20px}.link[data-v-d6be1790]{border:1px solid var(--vp-c-brand-1);border-radius:16px;color:var(--vp-c-brand-1);display:inline-block;font-size:14px;font-weight:500;padding:3px 16px;transition:border-color .25s,color .25s}.link[data-v-d6be1790]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-b933a997]{position:relative;z-index:1}.nested[data-v-b933a997]{padding-left:16px;padding-right:16px}.outline-link[data-v-b933a997]{color:var(--vp-c-text-2);display:block;font-size:14px;font-weight:400;line-height:32px;overflow:hidden;text-overflow:ellipsis;transition:color .5s;white-space:nowrap}.outline-link.active[data-v-b933a997],.outline-link[data-v-b933a997]:hover{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-b933a997]{padding-left:13px}.VPDocAsideOutline[data-v-a5bbad30]{display:none}.VPDocAsideOutline.has-outline[data-v-a5bbad30]{display:block}.content[data-v-a5bbad30]{border-left:1px solid var(--vp-c-divider);font-size:13px;font-weight:500;padding-left:16px;position:relative}.outline-marker[data-v-a5bbad30]{background-color:var(--vp-c-brand-1);border-radius:2px;height:18px;left:-1px;opacity:0;position:absolute;top:32px;transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s;width:2px;z-index:0}.outline-title[data-v-a5bbad30]{font-size:14px;font-weight:600;line-height:32px}.VPDocAside[data-v-3f215769]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-3f215769]{flex-grow:1}.VPDocAside[data-v-3f215769] .spacer+.VPDocAsideCarbonAds,.VPDocAside[data-v-3f215769] .spacer+.VPDocAsideSponsors{margin-top:24px}.VPDocAside[data-v-3f215769] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-e98dd255]{color:var(--vp-c-text-2);font-size:14px;font-weight:500;line-height:24px}@media (min-width:640px){.VPLastUpdated[data-v-e98dd255]{font-size:14px;font-weight:500;line-height:32px}}.VPDocFooter[data-v-e257564d]{margin-top:64px}.edit-info[data-v-e257564d]{padding-bottom:18px}@media (min-width:640px){.edit-info[data-v-e257564d]{align-items:center;display:flex;justify-content:space-between;padding-bottom:14px}}.edit-link-button[data-v-e257564d]{align-items:center;border:0;color:var(--vp-c-brand-1);display:flex;font-size:14px;font-weight:500;line-height:32px;transition:color .25s}.edit-link-button[data-v-e257564d]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-e257564d]{margin-right:8px}.prev-next[data-v-e257564d]{border-top:1px solid var(--vp-c-divider);display:grid;padding-top:24px;grid-row-gap:8px}@media (min-width:640px){.prev-next[data-v-e257564d]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-e257564d]{border:1px solid var(--vp-c-divider);border-radius:8px;display:block;height:100%;padding:11px 16px 13px;transition:border-color .25s;width:100%}.pager-link[data-v-e257564d]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-e257564d]{margin-left:auto;text-align:right}.desc[data-v-e257564d]{color:var(--vp-c-text-2);font-size:12px}.desc[data-v-e257564d],.title[data-v-e257564d]{display:block;font-weight:500;line-height:20px}.title[data-v-e257564d]{color:var(--vp-c-brand-1);font-size:14px;transition:color .25s}.VPDoc[data-v-39a288b8]{padding:32px 24px 96px;width:100%}@media (min-width:768px){.VPDoc[data-v-39a288b8]{padding:48px 32px 128px}}@media (min-width:960px){.VPDoc[data-v-39a288b8]{padding:48px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-39a288b8]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-39a288b8]{max-width:752px}}@media (min-width:1280px){.VPDoc .container[data-v-39a288b8]{display:flex;justify-content:center}.VPDoc .aside[data-v-39a288b8]{display:block}}@media (min-width:1440px){.VPDoc:not(.has-sidebar) .content[data-v-39a288b8]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-39a288b8]{max-width:1104px}}.container[data-v-39a288b8]{margin:0 auto;width:100%}.aside[data-v-39a288b8]{display:none;flex-grow:1;max-width:256px;order:2;padding-left:32px;position:relative;width:100%}.left-aside[data-v-39a288b8]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-39a288b8]{height:100vh;overflow-x:hidden;overflow-y:auto;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 48px);position:fixed;scrollbar-width:none;top:0;width:224px}.aside-container[data-v-39a288b8]::-webkit-scrollbar{display:none}.aside-curtain[data-v-39a288b8]{background:linear-gradient(transparent,var(--vp-c-bg) 70%);bottom:0;height:32px;position:fixed;width:224px;z-index:10}.aside-content[data-v-39a288b8]{display:flex;flex-direction:column;min-height:calc(100vh - var(--vp-nav-height) - var(--vp-layout-top-height, 0px) - 48px);padding-bottom:32px}.content[data-v-39a288b8]{margin:0 auto;position:relative;width:100%}@media (min-width:960px){.content[data-v-39a288b8]{padding:0 32px 128px}}@media (min-width:1280px){.content[data-v-39a288b8]{margin:0;min-width:640px;order:1}}.content-container[data-v-39a288b8]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-39a288b8]{max-width:688px}.VPButton[data-v-fa7799d5]{border:1px solid transparent;display:inline-block;font-weight:600;text-align:center;transition:color .25s,border-color .25s,background-color .25s;white-space:nowrap}.VPButton[data-v-fa7799d5]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-fa7799d5]{border-radius:20px;font-size:14px;line-height:38px;padding:0 20px}.VPButton.big[data-v-fa7799d5]{border-radius:24px;font-size:16px;line-height:46px;padding:0 24px}.VPButton.brand[data-v-fa7799d5]{background-color:var(--vp-button-brand-bg);border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text)}.VPButton.brand[data-v-fa7799d5]:hover{background-color:var(--vp-button-brand-hover-bg);border-color:var(--vp-button-brand-hover-border);color:var(--vp-button-brand-hover-text)}.VPButton.brand[data-v-fa7799d5]:active{background-color:var(--vp-button-brand-active-bg);border-color:var(--vp-button-brand-active-border);color:var(--vp-button-brand-active-text)}.VPButton.alt[data-v-fa7799d5]{background-color:var(--vp-button-alt-bg);border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text)}.VPButton.alt[data-v-fa7799d5]:hover{background-color:var(--vp-button-alt-hover-bg);border-color:var(--vp-button-alt-hover-border);color:var(--vp-button-alt-hover-text)}.VPButton.alt[data-v-fa7799d5]:active{background-color:var(--vp-button-alt-active-bg);border-color:var(--vp-button-alt-active-border);color:var(--vp-button-alt-active-text)}.VPButton.sponsor[data-v-fa7799d5]{background-color:var(--vp-button-sponsor-bg);border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text)}.VPButton.sponsor[data-v-fa7799d5]:hover{background-color:var(--vp-button-sponsor-hover-bg);border-color:var(--vp-button-sponsor-hover-border);color:var(--vp-button-sponsor-hover-text)}.VPButton.sponsor[data-v-fa7799d5]:active{background-color:var(--vp-button-sponsor-active-bg);border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text)}.dark .VPImage.light[data-v-8426fc1a],html:not(.dark) .VPImage.dark[data-v-8426fc1a]{display:none}.VPHero[data-v-4f9c455b]{margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px))*-1);padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px) 24px 48px}@media (min-width:640px){.VPHero[data-v-4f9c455b]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width:960px){.VPHero[data-v-4f9c455b]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-4f9c455b]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width:960px){.container[data-v-4f9c455b]{flex-direction:row}}.main[data-v-4f9c455b]{flex-grow:1;flex-shrink:0;order:2;position:relative;z-index:10}.VPHero.has-image .container[data-v-4f9c455b]{text-align:center}@media (min-width:960px){.VPHero.has-image .container[data-v-4f9c455b]{text-align:left}.main[data-v-4f9c455b]{order:1;width:66.66667%}.VPHero.has-image .main[data-v-4f9c455b]{max-width:592px}}.heading[data-v-4f9c455b]{display:flex;flex-direction:column}.name[data-v-4f9c455b],.text[data-v-4f9c455b]{font-size:32px;font-weight:700;letter-spacing:-.4px;line-height:40px;max-width:392px;white-space:pre-wrap;width:-moz-fit-content;width:fit-content}.VPHero.has-image .name[data-v-4f9c455b],.VPHero.has-image .text[data-v-4f9c455b]{margin:0 auto}.name[data-v-4f9c455b]{color:var(--vp-home-hero-name-color)}.clip[data-v-4f9c455b]{background:var(--vp-home-hero-name-background);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:var(--vp-home-hero-name-color)}@media (min-width:640px){.name[data-v-4f9c455b],.text[data-v-4f9c455b]{font-size:48px;line-height:56px;max-width:576px}}@media (min-width:960px){.name[data-v-4f9c455b],.text[data-v-4f9c455b]{font-size:56px;line-height:64px}.VPHero.has-image .name[data-v-4f9c455b],.VPHero.has-image .text[data-v-4f9c455b]{margin:0}}.tagline[data-v-4f9c455b]{color:var(--vp-c-text-2);font-size:18px;font-weight:500;line-height:28px;max-width:392px;padding-top:8px;white-space:pre-wrap}.VPHero.has-image .tagline[data-v-4f9c455b]{margin:0 auto}@media (min-width:640px){.tagline[data-v-4f9c455b]{font-size:20px;line-height:32px;max-width:576px;padding-top:12px}}@media (min-width:960px){.tagline[data-v-4f9c455b]{font-size:24px;line-height:36px}.VPHero.has-image .tagline[data-v-4f9c455b]{margin:0}}.actions[data-v-4f9c455b]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-4f9c455b]{justify-content:center}@media (min-width:640px){.actions[data-v-4f9c455b]{padding-top:32px}}@media (min-width:960px){.VPHero.has-image .actions[data-v-4f9c455b]{justify-content:flex-start}}.action[data-v-4f9c455b]{flex-shrink:0;padding:6px}.image[data-v-4f9c455b]{margin:-76px -24px -48px;order:1}@media (min-width:640px){.image[data-v-4f9c455b]{margin:-108px -24px -48px}}@media (min-width:960px){.image[data-v-4f9c455b]{flex-grow:1;margin:0;min-height:100%;order:2}}.image-container[data-v-4f9c455b]{height:320px;margin:0 auto;position:relative;width:320px}@media (min-width:640px){.image-container[data-v-4f9c455b]{height:392px;width:392px}}@media (min-width:960px){.image-container[data-v-4f9c455b]{align-items:center;display:flex;height:100%;justify-content:center;transform:translate(-32px,-32px);width:100%}}.image-bg[data-v-4f9c455b]{background-image:var(--vp-home-hero-image-background-image);border-radius:50%;filter:var(--vp-home-hero-image-filter);height:192px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:192px}@media (min-width:640px){.image-bg[data-v-4f9c455b]{height:256px;width:256px}}@media (min-width:960px){.image-bg[data-v-4f9c455b]{height:320px;width:320px}}[data-v-4f9c455b] .image-src{left:50%;max-height:192px;max-width:192px;position:absolute;top:50%;transform:translate(-50%,-50%)}@media (min-width:640px){[data-v-4f9c455b] .image-src{max-height:256px;max-width:256px}}@media (min-width:960px){[data-v-4f9c455b] .image-src{max-height:320px;max-width:320px}}.VPFeature[data-v-a3976bdc]{background-color:var(--vp-c-bg-soft);border:1px solid var(--vp-c-bg-soft);border-radius:12px;display:block;height:100%;transition:border-color .25s,background-color .25s}.VPFeature.link[data-v-a3976bdc]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-a3976bdc]{display:flex;flex-direction:column;height:100%;padding:24px}.box[data-v-a3976bdc]>.VPImage{margin-bottom:20px}.icon[data-v-a3976bdc]{align-items:center;background-color:var(--vp-c-default-soft);border-radius:6px;display:flex;font-size:24px;height:48px;justify-content:center;margin-bottom:20px;transition:background-color .25s;width:48px}.title[data-v-a3976bdc]{font-size:16px;font-weight:600}.details[data-v-a3976bdc],.title[data-v-a3976bdc]{line-height:24px}.details[data-v-a3976bdc]{color:var(--vp-c-text-2);flex-grow:1;font-size:14px;font-weight:500}.details[data-v-a3976bdc],.link-text[data-v-a3976bdc]{padding-top:8px}.link-text-value[data-v-a3976bdc]{align-items:center;color:var(--vp-c-brand-1);display:flex;font-size:14px;font-weight:500}.link-text-icon[data-v-a3976bdc]{margin-left:6px}.VPFeatures[data-v-a6181336]{padding:0 24px;position:relative}@media (min-width:640px){.VPFeatures[data-v-a6181336]{padding:0 48px}}@media (min-width:960px){.VPFeatures[data-v-a6181336]{padding:0 64px}}.container[data-v-a6181336]{margin:0 auto;max-width:1152px}.items[data-v-a6181336]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-a6181336]{padding:8px;width:100%}@media (min-width:640px){.item.grid-2[data-v-a6181336],.item.grid-4[data-v-a6181336],.item.grid-6[data-v-a6181336]{width:50%}}@media (min-width:768px){.item.grid-2[data-v-a6181336],.item.grid-4[data-v-a6181336]{width:50%}.item.grid-3[data-v-a6181336],.item.grid-6[data-v-a6181336]{width:33.33333%}}@media (min-width:960px){.item.grid-4[data-v-a6181336]{width:25%}}.container[data-v-8e2d4988]{margin:auto;max-width:1280px;padding:0 24px;width:100%}@media (min-width:640px){.container[data-v-8e2d4988]{padding:0 48px}}@media (min-width:960px){.container[data-v-8e2d4988]{padding:0 64px;width:100%}}.vp-doc[data-v-8e2d4988] .VPHomeSponsors,.vp-doc[data-v-8e2d4988] .VPTeamPage{margin-left:var(--vp-offset, calc(50% - 50vw) );margin-right:var(--vp-offset, calc(50% - 50vw) )}.vp-doc[data-v-8e2d4988] .VPHomeSponsors h2{border-top:none;letter-spacing:normal}.vp-doc[data-v-8e2d4988] .VPHomeSponsors a,.vp-doc[data-v-8e2d4988] .VPTeamPage a{text-decoration:none}.VPHome[data-v-8b561e3d]{margin-bottom:96px}@media (min-width:768px){.VPHome[data-v-8b561e3d]{margin-bottom:128px}}.VPContent[data-v-1428d186]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height,0) auto 0;width:100%}.VPContent.is-home[data-v-1428d186]{max-width:100%;width:100%}.VPContent.has-sidebar[data-v-1428d186]{margin:0}@media (min-width:960px){.VPContent[data-v-1428d186]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-1428d186]{margin:var(--vp-layout-top-height,0) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width:1440px){.VPContent.has-sidebar[data-v-1428d186]{padding-left:calc((100vw - var(--vp-layout-max-width))/2 + var(--vp-sidebar-width));padding-right:calc((100vw - var(--vp-layout-max-width))/2)}}.VPFooter[data-v-e315a0ad]{background-color:var(--vp-c-bg);border-top:1px solid var(--vp-c-gutter);padding:32px 24px;position:relative;z-index:var(--vp-z-index-footer)}.VPFooter.has-sidebar[data-v-e315a0ad]{display:none}.VPFooter[data-v-e315a0ad] a{text-decoration-line:underline;text-underline-offset:2px;transition:color .25s}.VPFooter[data-v-e315a0ad] a:hover{color:var(--vp-c-text-1)}@media (min-width:768px){.VPFooter[data-v-e315a0ad]{padding:32px}}.container[data-v-e315a0ad]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.copyright[data-v-e315a0ad],.message[data-v-e315a0ad]{color:var(--vp-c-text-2);font-size:14px;font-weight:500;line-height:24px}.VPLocalNavOutlineDropdown[data-v-8a42e2b4]{padding:12px 20px 11px}@media (min-width:960px){.VPLocalNavOutlineDropdown[data-v-8a42e2b4]{padding:12px 36px 11px}}.VPLocalNavOutlineDropdown button[data-v-8a42e2b4]{color:var(--vp-c-text-2);display:block;font-size:12px;font-weight:500;line-height:24px;position:relative;transition:color .5s}.VPLocalNavOutlineDropdown button[data-v-8a42e2b4]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-8a42e2b4]{color:var(--vp-c-text-1)}.icon[data-v-8a42e2b4]{display:inline-block;font-size:14px;margin-left:2px;transform:rotate(0);transition:transform .25s;vertical-align:middle}@media (min-width:960px){.VPLocalNavOutlineDropdown button[data-v-8a42e2b4]{font-size:14px}.icon[data-v-8a42e2b4]{font-size:16px}}.open>.icon[data-v-8a42e2b4]{transform:rotate(90deg)}.items[data-v-8a42e2b4]{background-color:var(--vp-c-gutter);border:1px solid var(--vp-c-border);border-radius:8px;box-shadow:var(--vp-shadow-3);display:grid;gap:1px;left:16px;max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;position:absolute;right:16px;top:40px}@media (min-width:960px){.items[data-v-8a42e2b4]{left:calc(var(--vp-sidebar-width) + 32px);right:auto;width:320px}}.header[data-v-8a42e2b4]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-8a42e2b4]{color:var(--vp-c-brand-1);display:block;font-size:14px;font-weight:500;line-height:48px;padding:0 16px}.outline[data-v-8a42e2b4]{background-color:var(--vp-c-bg-soft);padding:8px 0}.flyout-enter-active[data-v-8a42e2b4]{transition:all .2s ease-out}.flyout-leave-active[data-v-8a42e2b4]{transition:all .15s ease-in}.flyout-enter-from[data-v-8a42e2b4],.flyout-leave-to[data-v-8a42e2b4]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-a6f0e41e]{background-color:var(--vp-local-nav-bg-color);border-bottom:1px solid var(--vp-c-gutter);left:0;padding-top:var(--vp-layout-top-height,0);position:sticky;top:0;width:100%;z-index:var(--vp-z-index-local-nav)}.VPLocalNav.fixed[data-v-a6f0e41e]{position:fixed}@media (min-width:960px){.VPLocalNav[data-v-a6f0e41e]{top:var(--vp-nav-height)}.VPLocalNav.has-sidebar[data-v-a6f0e41e]{padding-left:var(--vp-sidebar-width)}.VPLocalNav.empty[data-v-a6f0e41e]{display:none}}@media (min-width:1280px){.VPLocalNav[data-v-a6f0e41e]{display:none}}@media (min-width:1440px){.VPLocalNav.has-sidebar[data-v-a6f0e41e]{padding-left:calc((100vw - var(--vp-layout-max-width))/2 + var(--vp-sidebar-width))}}.container[data-v-a6f0e41e]{justify-content:space-between}.container[data-v-a6f0e41e],.menu[data-v-a6f0e41e]{align-items:center;display:flex}.menu[data-v-a6f0e41e]{color:var(--vp-c-text-2);font-size:12px;font-weight:500;line-height:24px;padding:12px 24px 11px;transition:color .5s}.menu[data-v-a6f0e41e]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width:768px){.menu[data-v-a6f0e41e]{padding:0 32px}}@media (min-width:960px){.menu[data-v-a6f0e41e]{display:none}}.menu-icon[data-v-a6f0e41e]{font-size:14px;margin-right:8px}.VPOutlineDropdown[data-v-a6f0e41e]{padding:12px 24px 11px}@media (min-width:768px){.VPOutlineDropdown[data-v-a6f0e41e]{padding:12px 32px 11px}}.VPSwitch[data-v-1d5665e3]{background-color:var(--vp-input-switch-bg-color);border:1px solid var(--vp-input-border-color);border-radius:11px;display:block;flex-shrink:0;height:22px;position:relative;transition:border-color .25s!important;width:40px}.VPSwitch[data-v-1d5665e3]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-1d5665e3]{background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);left:1px;position:absolute;top:1px;transition:transform .25s!important}.check[data-v-1d5665e3],.icon[data-v-1d5665e3]{border-radius:50%;height:18px;width:18px}.icon[data-v-1d5665e3]{display:block;overflow:hidden;position:relative}.icon[data-v-1d5665e3] [class^=vpi-]{color:var(--vp-c-text-2);height:12px;left:3px;position:absolute;top:3px;width:12px}.dark .icon[data-v-1d5665e3] [class^=vpi-]{color:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-5337faa4]{opacity:1}.dark .sun[data-v-5337faa4],.moon[data-v-5337faa4]{opacity:0}.dark .moon[data-v-5337faa4]{opacity:1}.dark .VPSwitchAppearance[data-v-5337faa4] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-6c893767]{display:none}@media (min-width:1280px){.VPNavBarAppearance[data-v-6c893767]{align-items:center;display:flex}}.VPMenuGroup+.VPMenuLink[data-v-35975db6]{border-top:1px solid var(--vp-c-divider);margin:12px -12px 0;padding:12px 12px 0}.link[data-v-35975db6]{border-radius:6px;color:var(--vp-c-text-1);display:block;font-size:14px;font-weight:500;line-height:32px;padding:0 12px;transition:background-color .25s,color .25s;white-space:nowrap}.link[data-v-35975db6]:hover{background-color:var(--vp-c-default-soft)}.link.active[data-v-35975db6],.link[data-v-35975db6]:hover{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-69e747b5]{border-top:1px solid var(--vp-c-divider);margin:12px -12px 0;padding:12px 12px 0}.VPMenuGroup[data-v-69e747b5]:first-child{border-top:0;margin-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-69e747b5]{border-top:1px solid var(--vp-c-divider);margin-top:12px}.title[data-v-69e747b5]{color:var(--vp-c-text-2);font-size:14px;font-weight:600;line-height:32px;padding:0 12px;transition:color .25s;white-space:nowrap}.VPMenu[data-v-b98bc113]{background-color:var(--vp-c-bg-elv);border:1px solid var(--vp-c-divider);border-radius:12px;box-shadow:var(--vp-shadow-3);max-height:calc(100vh - var(--vp-nav-height));min-width:128px;overflow-y:auto;padding:12px;transition:background-color .5s}.VPMenu[data-v-b98bc113] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-b98bc113] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-b98bc113] .group:last-child{padding-bottom:0}.VPMenu[data-v-b98bc113] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-b98bc113] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-b98bc113] .label{color:var(--vp-c-text-2);flex-grow:1;font-size:12px;font-weight:500;line-height:28px;transition:color .5s}.VPMenu[data-v-b98bc113] .action{padding-left:24px}.VPFlyout[data-v-cf11d7a2]{position:relative}.VPFlyout[data-v-cf11d7a2]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-cf11d7a2]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-cf11d7a2]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-cf11d7a2]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-cf11d7a2]{color:var(--vp-c-brand-2)}.button[aria-expanded=false]+.menu[data-v-cf11d7a2]{opacity:0;transform:translateY(0);visibility:hidden}.VPFlyout:hover .menu[data-v-cf11d7a2],.button[aria-expanded=true]+.menu[data-v-cf11d7a2]{opacity:1;transform:translateY(0);visibility:visible}.button[data-v-cf11d7a2]{height:var(--vp-nav-height);padding:0 12px;transition:color .5s}.button[data-v-cf11d7a2],.text[data-v-cf11d7a2]{align-items:center;color:var(--vp-c-text-1);display:flex}.text[data-v-cf11d7a2]{font-size:14px;font-weight:500;line-height:var(--vp-nav-height);transition:color .25s}.option-icon[data-v-cf11d7a2]{font-size:16px;margin-right:0}.text-icon[data-v-cf11d7a2]{font-size:14px;margin-left:4px}.icon[data-v-cf11d7a2]{font-size:20px;transition:fill .25s}.menu[data-v-cf11d7a2]{opacity:0;position:absolute;right:0;top:calc(var(--vp-nav-height)/2 + 20px);transition:opacity .25s,visibility .25s,transform .25s;visibility:hidden}.VPSocialLink[data-v-bd121fe5]{align-items:center;color:var(--vp-c-text-2);display:flex;height:36px;justify-content:center;transition:color .5s;width:36px}.VPSocialLink[data-v-bd121fe5]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-bd121fe5]>[class^=vpi-social-],.VPSocialLink[data-v-bd121fe5]>svg{fill:currentColor;height:20px;width:20px}.VPSocialLinks[data-v-7bc22406]{display:flex;justify-content:center}.VPNavBarExtra[data-v-bb2aa2f0]{display:none;margin-right:-12px}@media (min-width:768px){.VPNavBarExtra[data-v-bb2aa2f0]{display:block}}@media (min-width:1280px){.VPNavBarExtra[data-v-bb2aa2f0]{display:none}}.trans-title[data-v-bb2aa2f0]{color:var(--vp-c-text-1);font-size:14px;font-weight:700;line-height:32px;padding:0 24px 0 12px}.item.appearance[data-v-bb2aa2f0],.item.social-links[data-v-bb2aa2f0]{align-items:center;display:flex;padding:0 12px}.item.appearance[data-v-bb2aa2f0]{min-width:176px}.appearance-action[data-v-bb2aa2f0]{margin-right:-2px}.social-links-list[data-v-bb2aa2f0]{margin:-4px -8px}.VPNavBarHamburger[data-v-e5dd9c1c]{align-items:center;display:flex;height:var(--vp-nav-height);justify-content:center;width:48px}@media (min-width:768px){.VPNavBarHamburger[data-v-e5dd9c1c]{display:none}}.container[data-v-e5dd9c1c]{height:14px;overflow:hidden;position:relative;width:16px}.VPNavBarHamburger:hover .top[data-v-e5dd9c1c]{left:0;top:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-e5dd9c1c]{left:0;top:6px;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-e5dd9c1c]{left:0;top:12px;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-e5dd9c1c]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-e5dd9c1c]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-e5dd9c1c]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .bottom[data-v-e5dd9c1c],.VPNavBarHamburger.active:hover .middle[data-v-e5dd9c1c],.VPNavBarHamburger.active:hover .top[data-v-e5dd9c1c]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.bottom[data-v-e5dd9c1c],.middle[data-v-e5dd9c1c],.top[data-v-e5dd9c1c]{background-color:var(--vp-c-text-1);height:2px;position:absolute;transition:top .25s,background-color .5s,transform .25s;width:16px}.top[data-v-e5dd9c1c]{left:0;top:0;transform:translate(0)}.middle[data-v-e5dd9c1c]{left:0;top:6px;transform:translate(8px)}.bottom[data-v-e5dd9c1c]{left:0;top:12px;transform:translate(4px)}.VPNavBarMenuLink[data-v-e56f3d57]{align-items:center;color:var(--vp-c-text-1);display:flex;font-size:14px;font-weight:500;line-height:var(--vp-nav-height);padding:0 12px;transition:color .25s}.VPNavBarMenuLink.active[data-v-e56f3d57],.VPNavBarMenuLink[data-v-e56f3d57]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-dc692963]{display:none}@media (min-width:768px){.VPNavBarMenu[data-v-dc692963]{display:flex}}/*! @docsearch/css 3.8.2 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 1px 0 rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 1px 1px 0 #0304094d;--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border:0;border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 2px;position:relative;top:-1px;width:20px}.DocSearch-Button-Key--pressed{box-shadow:var(--docsearch-key-pressed-shadow);transform:translate3d(0,1px,0)}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::-moz-placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border:0;border-radius:2px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;width:20px}.DocSearch-VisuallyHiddenForAccessibility{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}[class*=DocSearch]{--docsearch-primary-color:var(--vp-c-brand-1);--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-text-color:var(--vp-c-text-1);--docsearch-muted-color:var(--vp-c-text-2);--docsearch-searchbox-shadow:none;--docsearch-searchbox-background:transparent;--docsearch-searchbox-focus-background:transparent;--docsearch-key-gradient:transparent;--docsearch-key-shadow:none;--docsearch-modal-background:var(--vp-c-bg-soft);--docsearch-footer-background:var(--vp-c-bg)}.dark [class*=DocSearch]{--docsearch-modal-shadow:none;--docsearch-footer-shadow:none;--docsearch-logo-color:var(--vp-c-text-2);--docsearch-hit-background:var(--vp-c-default-soft);--docsearch-hit-color:var(--vp-c-text-2);--docsearch-hit-shadow:none}.DocSearch-Button{align-items:center;display:flex;height:55px;justify-content:center;margin:0;padding:0;transition:border-color .25s;width:48px}.DocSearch-Button,.DocSearch-Button:hover{background:transparent}.DocSearch-Button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.DocSearch-Button-Key--pressed{box-shadow:none;transform:none}.DocSearch-Button:focus:not(:focus-visible){outline:none!important}@media (min-width:768px){.DocSearch-Button{background-color:var(--vp-c-bg-alt);border:1px solid transparent;border-radius:8px;height:40px;justify-content:flex-start;padding:0 10px 0 12px;width:100%}.DocSearch-Button:hover{background:var(--vp-c-bg-alt);border-color:var(--vp-c-brand-1)}}.DocSearch-Button .DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Button .DocSearch-Search-Icon{color:var(--vp-c-text-1);fill:currentColor;height:16px;position:relative;transition:color .5s;width:16px}.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--vp-c-text-1)}@media (min-width:768px){.DocSearch-Button .DocSearch-Search-Icon{color:var(--vp-c-text-2);height:14px;margin-right:8px;top:1px;width:14px}}.DocSearch-Button .DocSearch-Button-Placeholder{color:var(--vp-c-text-2);display:none;font-size:13px;font-weight:500;margin-top:2px;padding:0 16px 0 0;transition:color .5s}.DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--vp-c-text-1)}@media (min-width:768px){.DocSearch-Button .DocSearch-Button-Placeholder{display:inline-block}}.DocSearch-Button .DocSearch-Button-Keys{direction:ltr;display:none;min-width:auto}@media (min-width:768px){.DocSearch-Button .DocSearch-Button-Keys{align-items:center;display:flex}}.DocSearch-Button .DocSearch-Button-Key{border:1px solid var(--vp-c-divider);border-radius:4px 0 0 4px;border-right:none;display:block;font-family:var(--vp-font-family-base);font-size:12px;font-weight:500;height:22px;line-height:22px;margin:2px 0 0;min-width:0;padding-left:6px;transition:color .5s,border-color .5s;width:auto}.DocSearch-Button .DocSearch-Button-Key+.DocSearch-Button-Key{border-left:none;border-radius:0 4px 4px 0;border-right:1px solid var(--vp-c-divider);padding-left:2px;padding-right:6px}.DocSearch-Button .DocSearch-Button-Key:first-child{font-size:0!important}.DocSearch-Button .DocSearch-Button-Key:first-child:after{color:var(--docsearch-muted-color);content:"Ctrl";font-size:12px;letter-spacing:normal}.mac .DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"⌘"}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.DocSearch-Search-Icon{--icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' stroke-width='1.6' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m14.386 14.386 4.088 4.088zA7.533 7.533 0 1 1 3.733 3.733a7.533 7.533 0 0 1 10.653 10.653'/%3E%3C/svg%3E")}.VPNavBarSearch{align-items:center;display:flex}@media (min-width:768px){.VPNavBarSearch{flex-grow:1;padding-left:24px}}@media (min-width:960px){.VPNavBarSearch{padding-left:32px}}.dark .DocSearch-Footer{border-top:1px solid var(--vp-c-divider)}.DocSearch-Form{background-color:var(--vp-c-white);border:1px solid var(--vp-c-brand-1)}.dark .DocSearch-Form{background-color:var(--vp-c-default-soft)}.DocSearch-Screen-Icon>svg{margin:auto}.VPNavBarSocialLinks[data-v-0394ad82]{display:none}@media (min-width:1280px){.VPNavBarSocialLinks[data-v-0394ad82]{align-items:center;display:flex}}.title[data-v-1168a8e4]{align-items:center;border-bottom:1px solid transparent;color:var(--vp-c-text-1);display:flex;font-size:16px;font-weight:600;height:var(--vp-nav-height);transition:opacity .25s;width:100%}@media (min-width:960px){.title[data-v-1168a8e4]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-1168a8e4]{border-bottom-color:var(--vp-c-divider)}}[data-v-1168a8e4] .logo{height:var(--vp-nav-logo-height);margin-right:8px}.VPNavBarTranslations[data-v-88af2de4]{display:none}@media (min-width:1280px){.VPNavBarTranslations[data-v-88af2de4]{align-items:center;display:flex}}.title[data-v-88af2de4]{color:var(--vp-c-text-1);font-size:14px;font-weight:700;line-height:32px;padding:0 24px 0 12px}.VPNavBar[data-v-6aa21345]{height:var(--vp-nav-height);pointer-events:none;position:relative;transition:background-color .25s;white-space:nowrap}.VPNavBar.screen-open[data-v-6aa21345]{border-bottom:1px solid var(--vp-c-divider);transition:none}.VPNavBar.screen-open[data-v-6aa21345],.VPNavBar[data-v-6aa21345]:not(.home){background-color:var(--vp-nav-bg-color)}@media (min-width:960px){.VPNavBar[data-v-6aa21345]:not(.home){background-color:transparent}.VPNavBar[data-v-6aa21345]:not(.has-sidebar):not(.home.top){background-color:var(--vp-nav-bg-color)}}.wrapper[data-v-6aa21345]{padding:0 8px 0 24px}@media (min-width:768px){.wrapper[data-v-6aa21345]{padding:0 32px}}@media (min-width:960px){.VPNavBar.has-sidebar .wrapper[data-v-6aa21345]{padding:0}}.container[data-v-6aa21345]{display:flex;height:var(--vp-nav-height);justify-content:space-between;margin:0 auto;max-width:calc(var(--vp-layout-max-width) - 64px)}.container[data-v-6aa21345],.container>.content[data-v-6aa21345],.container>.title[data-v-6aa21345]{pointer-events:none}.container[data-v-6aa21345] *{pointer-events:auto}@media (min-width:960px){.VPNavBar.has-sidebar .container[data-v-6aa21345]{max-width:100%}}.title[data-v-6aa21345]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width:960px){.VPNavBar.has-sidebar .title[data-v-6aa21345]{background-color:transparent;height:var(--vp-nav-height);left:0;padding:0 32px;position:absolute;top:0;width:var(--vp-sidebar-width);z-index:2}}@media (min-width:1440px){.VPNavBar.has-sidebar .title[data-v-6aa21345]{padding-left:max(32px,calc(50% - var(--vp-layout-max-width)/2 + 32px));width:calc(50% - var(--vp-layout-max-width)/2 + var(--vp-sidebar-width))}}.content[data-v-6aa21345]{flex-grow:1}@media (min-width:960px){.VPNavBar.has-sidebar .content[data-v-6aa21345]{padding-left:var(--vp-sidebar-width);padding-right:32px;position:relative;z-index:1}}@media (min-width:1440px){.VPNavBar.has-sidebar .content[data-v-6aa21345]{padding-left:calc((100vw - var(--vp-layout-max-width))/2 + var(--vp-sidebar-width));padding-right:calc((100vw - var(--vp-layout-max-width))/2 + 32px)}}.content-body[data-v-6aa21345]{align-items:center;display:flex;height:var(--vp-nav-height);justify-content:flex-end;transition:background-color .5s}@media (min-width:960px){.VPNavBar:not(.home.top) .content-body[data-v-6aa21345]{background-color:var(--vp-nav-bg-color);position:relative}.VPNavBar:not(.has-sidebar):not(.home.top) .content-body[data-v-6aa21345]{background-color:transparent}}@media (max-width:767px){.content-body[data-v-6aa21345]{-moz-column-gap:.5rem;column-gap:.5rem}}.appearance+.social-links[data-v-6aa21345]:before,.menu+.appearance[data-v-6aa21345]:before,.menu+.social-links[data-v-6aa21345]:before,.menu+.translations[data-v-6aa21345]:before,.translations+.appearance[data-v-6aa21345]:before{background-color:var(--vp-c-divider);content:"";height:24px;margin-left:8px;margin-right:8px;width:1px}.menu+.appearance[data-v-6aa21345]:before,.translations+.appearance[data-v-6aa21345]:before{margin-right:16px}.appearance+.social-links[data-v-6aa21345]:before{margin-left:16px}.social-links[data-v-6aa21345]{margin-right:-8px}.divider[data-v-6aa21345]{height:1px;width:100%}@media (min-width:960px){.VPNavBar.has-sidebar .divider[data-v-6aa21345]{padding-left:var(--vp-sidebar-width)}}@media (min-width:1440px){.VPNavBar.has-sidebar .divider[data-v-6aa21345]{padding-left:calc((100vw - var(--vp-layout-max-width))/2 + var(--vp-sidebar-width))}}.divider-line[data-v-6aa21345]{height:1px;transition:background-color .5s;width:100%}.VPNavBar:not(.home) .divider-line[data-v-6aa21345]{background-color:var(--vp-c-gutter)}@media (min-width:960px){.VPNavBar:not(.has-sidebar):not(.home.top) .divider[data-v-6aa21345],.VPNavBar:not(.home.top) .divider-line[data-v-6aa21345]{background-color:var(--vp-c-gutter)}}.VPNavScreenAppearance[data-v-b44890b2]{align-items:center;background-color:var(--vp-c-bg-soft);border-radius:8px;display:flex;justify-content:space-between;padding:12px 14px 12px 16px}.text[data-v-b44890b2]{color:var(--vp-c-text-2);font-size:12px;font-weight:500;line-height:24px}.VPNavScreenMenuLink[data-v-df37e6dd]{border-bottom:1px solid var(--vp-c-divider);color:var(--vp-c-text-1);display:block;font-size:14px;font-weight:500;line-height:24px;padding:12px 0 11px;transition:border-color .25s,color .25s}.VPNavScreenMenuLink[data-v-df37e6dd]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-3e9c20e4]{color:var(--vp-c-text-1);display:block;font-size:14px;font-weight:400;line-height:32px;margin-left:12px;transition:color .25s}.VPNavScreenMenuGroupLink[data-v-3e9c20e4]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-8133b170]{display:block}.title[data-v-8133b170]{color:var(--vp-c-text-2);font-size:13px;font-weight:700;line-height:32px;transition:color .25s}.VPNavScreenMenuGroup[data-v-b9ab8c58]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-b9ab8c58]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-b9ab8c58]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-b9ab8c58]{height:auto;padding-bottom:10px}.VPNavScreenMenuGroup.open .button[data-v-b9ab8c58]{color:var(--vp-c-brand-1);padding-bottom:6px}.VPNavScreenMenuGroup.open .button-icon[data-v-b9ab8c58]{transform:rotate(45deg)}.button[data-v-b9ab8c58]{align-items:center;color:var(--vp-c-text-1);display:flex;font-size:14px;font-weight:500;justify-content:space-between;line-height:24px;padding:12px 4px 11px 0;transition:color .25s;width:100%}.button[data-v-b9ab8c58]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-b9ab8c58]{transition:transform .25s}.group[data-v-b9ab8c58]:first-child{padding-top:0}.group+.group[data-v-b9ab8c58],.group+.item[data-v-b9ab8c58]{padding-top:4px}.VPNavScreenTranslations[data-v-858fe1a4]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-858fe1a4]{height:auto}.title[data-v-858fe1a4]{align-items:center;color:var(--vp-c-text-1);display:flex;font-size:14px;font-weight:500}.icon[data-v-858fe1a4]{font-size:16px}.icon.lang[data-v-858fe1a4]{margin-right:8px}.icon.chevron[data-v-858fe1a4]{margin-left:4px}.list[data-v-858fe1a4]{padding:4px 0 0 24px}.link[data-v-858fe1a4]{color:var(--vp-c-text-1);font-size:13px;line-height:32px}.VPNavScreen[data-v-f2779853]{background-color:var(--vp-nav-screen-bg-color);bottom:0;left:0;overflow-y:auto;padding:0 32px;pointer-events:auto;position:fixed;right:0;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px));transition:background-color .25s;width:100%}.VPNavScreen.fade-enter-active[data-v-f2779853],.VPNavScreen.fade-leave-active[data-v-f2779853]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-f2779853],.VPNavScreen.fade-leave-active .container[data-v-f2779853]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-f2779853],.VPNavScreen.fade-leave-to[data-v-f2779853]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-f2779853],.VPNavScreen.fade-leave-to .container[data-v-f2779853]{transform:translateY(-8px)}@media (min-width:768px){.VPNavScreen[data-v-f2779853]{display:none}}.container[data-v-f2779853]{margin:0 auto;max-width:288px;padding:24px 0 96px}.menu+.appearance[data-v-f2779853],.menu+.translations[data-v-f2779853],.translations+.appearance[data-v-f2779853]{margin-top:24px}.appearance+.social-links[data-v-f2779853],.menu+.social-links[data-v-f2779853]{margin-top:16px}.VPNav[data-v-ae24b3ad]{left:0;pointer-events:none;position:relative;top:var(--vp-layout-top-height,0);transition:background-color .5s;width:100%;z-index:var(--vp-z-index-nav)}@media (min-width:960px){.VPNav[data-v-ae24b3ad]{position:fixed}}.VPSidebarItem.level-0[data-v-b3fd67f8]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-b3fd67f8]{padding-bottom:10px}.item[data-v-b3fd67f8]{display:flex;position:relative;width:100%}.VPSidebarItem.collapsible>.item[data-v-b3fd67f8]{cursor:pointer}.indicator[data-v-b3fd67f8]{border-radius:2px;bottom:6px;left:-17px;position:absolute;top:6px;transition:background-color .25s;width:2px}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-b3fd67f8],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-b3fd67f8],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-b3fd67f8],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-b3fd67f8]{background-color:var(--vp-c-brand-1)}.link[data-v-b3fd67f8]{align-items:center;display:flex;flex-grow:1}.text[data-v-b3fd67f8]{flex-grow:1;font-size:14px;line-height:24px;padding:4px 0;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-b3fd67f8]{color:var(--vp-c-text-1);font-weight:700}.VPSidebarItem.level-1 .text[data-v-b3fd67f8],.VPSidebarItem.level-2 .text[data-v-b3fd67f8],.VPSidebarItem.level-3 .text[data-v-b3fd67f8],.VPSidebarItem.level-4 .text[data-v-b3fd67f8],.VPSidebarItem.level-5 .text[data-v-b3fd67f8]{color:var(--vp-c-text-2);font-weight:500}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-b3fd67f8],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-b3fd67f8],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-b3fd67f8],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-b3fd67f8],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-b3fd67f8],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-b3fd67f8]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-b3fd67f8],.VPSidebarItem.level-0.has-active>.item>.text[data-v-b3fd67f8],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-b3fd67f8],.VPSidebarItem.level-1.has-active>.item>.text[data-v-b3fd67f8],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-b3fd67f8],.VPSidebarItem.level-2.has-active>.item>.text[data-v-b3fd67f8],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-b3fd67f8],.VPSidebarItem.level-3.has-active>.item>.text[data-v-b3fd67f8],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-b3fd67f8],.VPSidebarItem.level-4.has-active>.item>.text[data-v-b3fd67f8],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-b3fd67f8],.VPSidebarItem.level-5.has-active>.item>.text[data-v-b3fd67f8]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-b3fd67f8],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-b3fd67f8],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-b3fd67f8],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-b3fd67f8],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-b3fd67f8],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-b3fd67f8]{color:var(--vp-c-brand-1)}.caret[data-v-b3fd67f8]{align-items:center;color:var(--vp-c-text-3);cursor:pointer;display:flex;flex-shrink:0;height:32px;justify-content:center;margin-right:-7px;transition:color .25s;width:32px}.item:hover .caret[data-v-b3fd67f8]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-b3fd67f8]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-b3fd67f8]{font-size:18px;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-b3fd67f8]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-b3fd67f8],.VPSidebarItem.level-2 .items[data-v-b3fd67f8],.VPSidebarItem.level-3 .items[data-v-b3fd67f8],.VPSidebarItem.level-4 .items[data-v-b3fd67f8],.VPSidebarItem.level-5 .items[data-v-b3fd67f8]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-b3fd67f8]{display:none}.no-transition[data-v-c40bc020] .caret-icon{transition:none}.group+.group[data-v-c40bc020]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width:960px){.group[data-v-c40bc020]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSidebar[data-v-319d5ca6]{background-color:var(--vp-sidebar-bg-color);bottom:0;box-shadow:var(--vp-c-shadow-3);left:0;max-width:320px;opacity:0;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;padding:32px 32px 96px;position:fixed;top:var(--vp-layout-top-height,0);transform:translate(-100%);transition:opacity .5s,transform .25s ease;width:calc(100vw - 64px);z-index:var(--vp-z-index-sidebar)}.VPSidebar.open[data-v-319d5ca6]{opacity:1;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1);visibility:visible}.dark .VPSidebar[data-v-319d5ca6]{box-shadow:var(--vp-shadow-1)}@media (min-width:960px){.VPSidebar[data-v-319d5ca6]{background-color:var(--vp-sidebar-bg-color);box-shadow:none;max-width:100%;opacity:1;padding-top:var(--vp-nav-height);transform:translate(0);visibility:visible;width:var(--vp-sidebar-width)}}@media (min-width:1440px){.VPSidebar[data-v-319d5ca6]{padding-left:max(32px,calc(50% - var(--vp-layout-max-width)/2 + 32px));width:calc(50% - var(--vp-layout-max-width)/2 + var(--vp-sidebar-width))}}@media (min-width:960px){.curtain[data-v-319d5ca6]{background-color:var(--vp-sidebar-bg-color);height:var(--vp-nav-height);left:0;margin-left:-32px;margin-right:-32px;margin-top:calc(var(--vp-nav-height)*-1);position:sticky;top:-64px;z-index:1}}.nav[data-v-319d5ca6]{outline:0}.VPSkipLink[data-v-0b0ada53]{background-color:var(--vp-c-bg);border-radius:8px;box-shadow:var(--vp-shadow-3);color:var(--vp-c-brand-1);font-size:12px;font-weight:700;left:8px;padding:8px 16px;text-decoration:none;top:8px;z-index:999}.VPSkipLink[data-v-0b0ada53]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width:1280px){.VPSkipLink[data-v-0b0ada53]{left:16px;top:14px}}.Layout[data-v-5d98c3a5]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-3d121b4a]{border-top:1px solid var(--vp-c-gutter);margin:96px 0;padding-top:88px!important}@media (min-width:768px){.VPHomeSponsors[data-v-3d121b4a]{margin:128px 0}}.VPHomeSponsors[data-v-3d121b4a]{padding:0 24px}@media (min-width:768px){.VPHomeSponsors[data-v-3d121b4a]{padding:0 48px}}@media (min-width:960px){.VPHomeSponsors[data-v-3d121b4a]{padding:0 64px}}.container[data-v-3d121b4a]{margin:0 auto;max-width:1152px}.love[data-v-3d121b4a]{color:var(--vp-c-text-3);font-size:28px;margin:0 auto;width:-moz-fit-content;width:fit-content}.icon[data-v-3d121b4a]{display:inline-block}.message[data-v-3d121b4a]{color:var(--vp-c-text-2);font-size:16px;font-weight:500;line-height:24px;margin:0 auto;max-width:320px;padding-top:10px;text-align:center}.sponsors[data-v-3d121b4a]{padding-top:32px}.action[data-v-3d121b4a]{padding-top:40px;text-align:center}.VPTeamMembersItem[data-v-f3fa364a]{border-radius:12px;display:flex;flex-direction:column;gap:2px;height:100%;overflow:hidden;width:100%}.VPTeamMembersItem.small .profile[data-v-f3fa364a]{padding:32px}.VPTeamMembersItem.small .data[data-v-f3fa364a]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-f3fa364a]{height:64px;width:64px}.VPTeamMembersItem.small .name[data-v-f3fa364a]{font-size:16px;line-height:24px}.VPTeamMembersItem.small .affiliation[data-v-f3fa364a]{font-size:14px;line-height:20px;padding-top:4px}.VPTeamMembersItem.small .desc[data-v-f3fa364a]{font-size:14px;line-height:20px;padding-top:12px}.VPTeamMembersItem.small .links[data-v-f3fa364a]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-f3fa364a]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-f3fa364a]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-f3fa364a]{height:96px;width:96px}.VPTeamMembersItem.medium .name[data-v-f3fa364a]{font-size:20px;letter-spacing:.15px;line-height:28px}.VPTeamMembersItem.medium .affiliation[data-v-f3fa364a]{font-size:16px;padding-top:4px}.VPTeamMembersItem.medium .desc[data-v-f3fa364a]{font-size:16px;max-width:288px;padding-top:16px}.VPTeamMembersItem.medium .links[data-v-f3fa364a]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-f3fa364a]{background-color:var(--vp-c-bg-soft);flex-grow:1}.data[data-v-f3fa364a]{text-align:center}.avatar[data-v-f3fa364a]{border-radius:50%;box-shadow:var(--vp-shadow-3);flex-shrink:0;margin:0 auto;position:relative}.avatar-img[data-v-f3fa364a]{border-radius:50%;bottom:0;left:0;-o-object-fit:cover;object-fit:cover;position:absolute;right:0;top:0}.name[data-v-f3fa364a]{font-weight:600;margin:0}.affiliation[data-v-f3fa364a]{font-weight:500;margin:0}.affiliation[data-v-f3fa364a],.org.link[data-v-f3fa364a]{color:var(--vp-c-text-2)}.org.link[data-v-f3fa364a]{transition:color .25s}.org.link[data-v-f3fa364a]:hover{color:var(--vp-c-brand-1)}.desc[data-v-f3fa364a]{margin:0 auto}.desc[data-v-f3fa364a] a{color:var(--vp-c-brand-1);font-weight:500;text-decoration-style:dotted;transition:color .25s}.links[data-v-f3fa364a]{height:56px}.links[data-v-f3fa364a],.sp-link[data-v-f3fa364a]{display:flex;justify-content:center}.sp-link[data-v-f3fa364a]{align-items:center;background-color:var(--vp-c-bg-soft);color:var(--vp-c-sponsor);font-size:14px;font-weight:500;padding:16px;text-align:center;transition:color .25s,background-color .25s}.sp .sp-link.link[data-v-f3fa364a]:focus,.sp .sp-link.link[data-v-f3fa364a]:hover{background-color:var(--vp-c-sponsor);color:var(--vp-c-white);outline:none}.sp-icon[data-v-f3fa364a]{font-size:16px;margin-right:8px}.VPTeamMembers.small .container[data-v-6cb0dbc4]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-6cb0dbc4]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-6cb0dbc4]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-6cb0dbc4]{max-width:876px}.VPTeamMembers.medium .container[data-v-6cb0dbc4]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width:375px){.VPTeamMembers.medium .container[data-v-6cb0dbc4]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-6cb0dbc4]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-6cb0dbc4]{max-width:760px}.container[data-v-6cb0dbc4]{display:grid;gap:24px;margin:0 auto;max-width:1152px}.VPTeamPage[data-v-7c57f839]{margin:96px 0}@media (min-width:768px){.VPTeamPage[data-v-7c57f839]{margin:128px 0}}.VPHome .VPTeamPageTitle[data-v-7c57f839-s]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPTeamMembers+.VPTeamPageSection[data-v-7c57f839-s],.VPTeamPageSection+.VPTeamPageSection[data-v-7c57f839-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-7c57f839-s]{margin-top:24px}@media (min-width:768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-7c57f839-s]{margin-top:16px}.VPTeamMembers+.VPTeamPageSection[data-v-7c57f839-s],.VPTeamPageSection+.VPTeamPageSection[data-v-7c57f839-s]{margin-top:96px}}.VPTeamMembers[data-v-7c57f839-s]{padding:0 24px}@media (min-width:768px){.VPTeamMembers[data-v-7c57f839-s]{padding:0 48px}}@media (min-width:960px){.VPTeamMembers[data-v-7c57f839-s]{padding:0 64px}}.VPTeamPageSection[data-v-b1a88750]{padding:0 32px}@media (min-width:768px){.VPTeamPageSection[data-v-b1a88750]{padding:0 48px}}@media (min-width:960px){.VPTeamPageSection[data-v-b1a88750]{padding:0 64px}}.title[data-v-b1a88750]{color:var(--vp-c-text-2);margin:0 auto;max-width:1152px;position:relative;text-align:center}.title-line[data-v-b1a88750]{background-color:var(--vp-c-divider);height:1px;left:0;position:absolute;top:16px;width:100%}.title-text[data-v-b1a88750]{background-color:var(--vp-c-bg);display:inline-block;font-size:20px;font-weight:500;letter-spacing:0;line-height:32px;padding:0 24px;position:relative}.lead[data-v-b1a88750]{color:var(--vp-c-text-2);font-size:16px;font-weight:500;line-height:24px;margin:0 auto;max-width:480px;padding-top:12px;text-align:center}.members[data-v-b1a88750]{padding-top:40px}.VPTeamPageTitle[data-v-bf2cbdac]{padding:48px 32px;text-align:center}@media (min-width:768px){.VPTeamPageTitle[data-v-bf2cbdac]{padding:64px 48px 48px}}@media (min-width:960px){.VPTeamPageTitle[data-v-bf2cbdac]{padding:80px 64px 48px}}.title[data-v-bf2cbdac]{font-size:36px;font-weight:500;letter-spacing:0;line-height:44px}@media (min-width:768px){.title[data-v-bf2cbdac]{font-size:48px;letter-spacing:-.5px;line-height:56px}}.lead[data-v-bf2cbdac]{color:var(--vp-c-text-2);font-size:16px;font-weight:500;line-height:24px;margin:0 auto;max-width:512px;padding-top:12px}@media (min-width:768px){.lead[data-v-bf2cbdac]{font-size:20px;letter-spacing:.15px;line-height:28px;max-width:592px}} diff --git a/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v1.md.DyHoZFsd.js b/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v1.md.DyHoZFsd.js new file mode 100644 index 0000000000..9788b58c2c --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v1.md.DyHoZFsd.js @@ -0,0 +1,4 @@ +import{_ as e,c as t,o as i,ae as s}from"./chunks/framework.CBTkueSR.js";const u=JSON.parse('{"title":"Migrate to v1","description":"","frontmatter":{},"headers":[],"relativePath":"updates/migrate-v1.md","filePath":"updates/migrate-v1.md"}'),l={name:"updates/migrate-v1.md"};function n(o,a,r,p,h,d){return i(),t("div",null,[...a[0]||(a[0]=[s(`

v1.0.0 is the first stable release of the UI5 CLI. There are only a few notable changes to the 0.x alpha version.

Breaking changes

ui5-builder: Add transformation of apps index.html in self-contained build (SAP/ui5-builder#137)

When running a self-contained build on an application project, the index.html will be transformed by adopting the UI5 bootstrap script tag to load the custom bundle file instead.

ui5-project: normalizer: Rename optional parameter "translator" (SAP/ui5-project#96)

Renamed parameter "translator" of functions generateDependencyTree and generateProjectTree to "translatorName"

ui5-fs: Remove top-level access to adapters (SAP/ui5-fs#69)

Adapters "AbstractAdapter", "FileSystem" and "Memory" used to be accessible via the top-level export of index.js
Example:

js
require("@ui5/project").FileSystem

This is no longer possible. Adapters are now grouped in the top-level object "adapters" and can be accessed from there
Example:

js
require("@ui5/project").adapters.FileSystem

How to upgrade

Global installation

To upgrade your global installation, just run the installation command again, which will upgrade to the latest version.

npm install --global @ui5/cli

Note: Your local CLI installation will still be preferred, so you need to make sure to upgrade it as well (see Local vs. Global installation).

Local installation

To upgrade the CLI installation within a project you need to run the following command.

npm install @ui5/cli@^1

ui5.yaml

specVersion: "1.0"

We have introduced the specification version 1.0. New features will only be available for projects with specVersion 1.0 or newer.
The specVersion 0.1 will be compatible with the UI5 CLI v1.0.0, but we still recommend to adopt your projects.

yaml
specVersion: "1.0"
+metadata:
+  name: <project-name>
+type: <project-type>
`,24)])])}const g=e(l,[["render",n]]);export{u as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v1.md.DyHoZFsd.lean.js b/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v1.md.DyHoZFsd.lean.js new file mode 100644 index 0000000000..d401d925da --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v1.md.DyHoZFsd.lean.js @@ -0,0 +1 @@ +import{_ as e,c as t,o as i,ae as s}from"./chunks/framework.CBTkueSR.js";const u=JSON.parse('{"title":"Migrate to v1","description":"","frontmatter":{},"headers":[],"relativePath":"updates/migrate-v1.md","filePath":"updates/migrate-v1.md"}'),l={name:"updates/migrate-v1.md"};function n(o,a,r,p,h,d){return i(),t("div",null,[...a[0]||(a[0]=[s("",24)])])}const g=e(l,[["render",n]]);export{u as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v2.md.CL9i7ISl.js b/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v2.md.CL9i7ISl.js new file mode 100644 index 0000000000..00dec63b86 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v2.md.CL9i7ISl.js @@ -0,0 +1,4 @@ +import{_ as a,c as t,o as i,ae as s}from"./chunks/framework.CBTkueSR.js";const u=JSON.parse('{"title":"Migrate to v2","description":"","frontmatter":{},"headers":[],"relativePath":"updates/migrate-v2.md","filePath":"updates/migrate-v2.md"}'),o={name:"updates/migrate-v2.md"};function r(l,e,n,p,c,d){return i(),t("div",null,[...e[0]||(e[0]=[s(`

Migrate to v2

v2.0.0 of the UI5 CLI was released on April 1, 2020. As a major feature, it introduces the easy consumption of SAPUI5 libraries in UI5 projects.

Breaking changes

All UI5 CLI Modules: Require Node.js >= 10

Support for older Node.js releases has been dropped.

UI5 Builder: Make namespace mandatory for application and library projects (SAP/ui5-builder#430)

The UI5 CLI must be able to determine an application- or library project's namespace. Otherwise an error is thrown.

Ideally the namespace should be defined in the sap.app/id field of the manifest.json

In case of libraries, additional fallbacks are in place:

  1. The name attribute defined in the .library file
  2. The path of the library.js file

UI5 Builder: LibraryFormatter: Ignore manifest.json of nested apps (SAP/ui5-builder#392)

If a library contains both a manifest.json and a .library file, they must be located in the same directory. Otherwise the manifest.json is ignored. In cases where the manifest.json is located at a higher level or in a different directory at the same level as the .library file, an exception is thrown.

UI5 Server: serveResources middleware: Expect *.properties files in UTF-8 by default (SAP/ui5-server#303)

For projects of types other than application or library, the UI5 Server now expects *.properties files to be UTF-8 encoded as opposed to ISO-8859-1 before.

Note: This change does not affect most projects as *.properties files are typically only located in applications or libraries, for which their project specific configuration is used.

UI5 FS: Remove deprecated parameter useNamespaces (SAP/ui5-fs#223)

Remove the deprecated parameter useNamespaces from method resourceFactory.createCollectionsForTree. Use the parameter getVirtualBasePathPrefix instead.

How to upgrade

Global installation

To upgrade your global installation, just run the installation command again, which will upgrade to the latest version.

npm install --global @ui5/cli

Note: Your local CLI installation will still be preferred, so you need to make sure to upgrade it as well (see Local vs. Global installation).

Local installation

To upgrade the CLI installation within a project, you need to run the following command:

npm install --save-dev @ui5/cli@^2

ui5.yaml

specVersion: "2.0"

We have introduced the specification version 2.0. New features will only be available for projects with specVersion 2.0 or newer.
Most projects defining specVersion 0.1 or 1.0 can still be used.

yaml
specVersion: "2.0"
+metadata:
+  name: <project-name>
+type: <project-type>
`,29)])])}const g=a(o,[["render",r]]);export{u as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v2.md.CL9i7ISl.lean.js b/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v2.md.CL9i7ISl.lean.js new file mode 100644 index 0000000000..e6db7ab78b --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v2.md.CL9i7ISl.lean.js @@ -0,0 +1 @@ +import{_ as a,c as t,o as i,ae as s}from"./chunks/framework.CBTkueSR.js";const u=JSON.parse('{"title":"Migrate to v2","description":"","frontmatter":{},"headers":[],"relativePath":"updates/migrate-v2.md","filePath":"updates/migrate-v2.md"}'),o={name:"updates/migrate-v2.md"};function r(l,e,n,p,c,d){return i(),t("div",null,[...e[0]||(e[0]=[s("",29)])])}const g=a(o,[["render",r]]);export{u as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v3.md.DII3bq7u.js b/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v3.md.DII3bq7u.js new file mode 100644 index 0000000000..ac9d50a077 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v3.md.DII3bq7u.js @@ -0,0 +1,29 @@ +import{_ as t,c as s,o as a,ae as i}from"./chunks/framework.CBTkueSR.js";const g=JSON.parse('{"title":"Migrate to v3","description":"","frontmatter":{},"headers":[],"relativePath":"updates/migrate-v3.md","filePath":"updates/migrate-v3.md"}'),n={name:"updates/migrate-v3.md"};function r(d,e,o,l,c,h){return a(),s("div",null,[...e[0]||(e[0]=[i(`

Migrate to v3

"Superseded"

UI5 CLI 3.0 has been superseded by version 4.0. See Migrate to v4.

Find the announcement blog post for version 3.0 here: SAP Community: UI5 CLI 3.0

Node.js and npm Version Support

This release requires Node.js versions v16.18.0, v18.12.0 or higher as well as npm v8 or higher. Support for older Node.js and npm releases has been dropped and will cause an error to be shown.

Specification Versions Support

Going forward, only projects with Specification Versions 2.0 and higher are supported.

In case a legacy specification version is detected, an automatic migration is attempted. This means your old projects might still work. Unless they have non-standard configuration in their ui5.yaml.

Changes for Projects

INFO

✅ Projects defining Specification Version 2.x are expected to be fully compatible with UI5 CLI v3

For projects defining the latest Specification Versions 3.0 and higher, some changes apply:

  • Breaking Change: The metadata.name property is now restricted to contain only certain characters and no uppercase letters. See Configuration: name for details

See also Configuration: Specification Version 3.0.

Changes for Extensions

INFO

✅ Custom Tasks and Custom Middleware defining Specification Version 2.x are expected to be fully compatible with UI5 CLI v3

For extensions defining the latest Specification Versions 3.0 and higher, some changes and improvements apply:

  • Breaking Change: Custom Tasks need to request access to dependency resources
    • By default, resources of dependencies can't be accessed. A custom task requiring such access needs to implement a callback function with the export name determineRequiredDependencies. In this function it can define the scope of dependency-access. Please refer to the Custom Task: Required Dependencies documentation for details
  • Breaking Change: The metadata.name property is now restricted to contain only certain characters and no uppercase letters. See Configuration: name for details
  • Features: Enhanced TaskUtil and MiddlewareUtil API

Changes to Dependency Configuration

INFO

✅ The ui5.dependencies package.json configuration becomes obsolete and is ignored in UI5 CLI v3.

Configuration like the following is not needed anymore:

\`dependencies\`, \`devDependencies\` and \`optionalDependencies\` are now [automatically analyzed](https://github.com/SAP/ui5-project/blob/ff04ae4aeeb7f7d889dffd0c0e3e8774dd708c79/lib/graph/providers/NodePackageDependencies.js#L104).
+If a dependency can be configured as a UI5 project or UI5 CLI extension, it is added to the graph and its \`dependencies\` are analyzed.
+

dependencies, devDependencies and optionalDependencies are now automatically analyzed. If a dependency can be configured as a UI5 project or UI5 Tooling extension, it is added to the graph and its dependencies are analyzed.

Note that devDependencies and optionalDependencies are ignored for all but the current root project. For projects that are intended to be consumed in other projects (for example libraries), this means that any required custom tasks must be added to dependencies. :::

Changes to Module API

The normalizer and projectTree modules have been removed. The builder API has been moved from @ui5/builder to @ui5/project.

The JSON based, internal representation of a project dependency tree has been replaced with a graph. This is the result of a major refactoring of @ui5/project which lead to a series of API changes.

Also the @ui5/server API has been changed. Instead of a tree, it now only accepts a graph instance as the first parameter.

Migrate Your Code

The UI5 CLI-related modules such as @ui5/builder, etc. have been transformed to ES Modules ("ESM"). Therefore, they no longer use a CommonJS export and cannot be included via require. If your code is in CommonJS format, it needs to use dynamic imports or be converted to ES Modules.

Old: @ui5/project v2

js
const {normalizer} = require("@ui5/project");
+const {builder} = require("@ui5/builder");
+
+const tree = await normalizer.generateProjectTree({cwd: "."});
+
+await builder.build({
+    tree,
+    destPath: "./dist",
+    buildDependencies: true,
+});

New: @ui5/project v3

js
import {graphFromPackageDependencies} from "@ui5/project/graph";
+
+let graph = await graphFromPackageDependencies({cwd: "."});
+
+await graph.build({
+    destPath: "./dist",
+    includedDependencies: ["*"], // Parameter "buildDependencies" has been removed
+});
js
// Since CommonJS does not suport top-level await, the code must be wrapped in an asynchronous function
+async function buildProject() {
+    const {graphFromPackageDependencies} = await import("@ui5/project/graph");
+
+    let graph = await graphFromPackageDependencies({cwd: "."});
+
+    await graph.build({
+        destPath: "./dist",
+        includedDependencies: ["*"], // Parameter "buildDependencies" has been removed
+    });
+}

Changes to @ui5/cli

  • The CLI option --translator has been removed. For static dependency resolution, use the new option --dependency-definition to provide a file with static dependency information.
  • The ui5 build dev command has been removed. Use ui5 build --exclude-task=* --include-task=replaceCopyright replaceVersion replaceBuildtime buildThemes instead.

JSDoc Processor Fails When JSDoc Reports an Error

The jsdocGenerator processor and the corresponding generateJsdoc task will now throw an error when JSDoc reports an error (exit code != 0). This will also fail the build when running ui5 build jsdoc.

Always Building Required Dependencies

If any of a project's build tasks requires access to resources of the project's dependencies, UI5 CLI v3 will now always build that dependency upfront.

This ensures that tasks always access processed resources and never the raw sources of a dependency. Resulting in better reproducibility of build results and resolving common issues.

Especially for projects of type library, where standard tasks like buildThemes always require dependency access, UI5 CLI will now always build all dependencies.

In the future, a caching mechanism should help and improve build times with this new behavior.

Info

The CLI flags -a and --all are still present and now an alias for --include-all-dependencies. This flag (along with --include-dependency* and --exclude-dependency*) mainly controls the build output. Use it to define whether dependency resources should be part of the build result.

Please also refer to the ui5 build documentation.

Removal of Standard Tasks and Processors

The following tasks have been removed:

  • createDebugFiles
  • generateManifestBundle
  • uglify

The following processors have been removed:

  • debugFileCreator
  • manifestBundler
  • resourceCopier
  • uglifier

Task Migration

UI5 CLI v2UI5 CLI v3Note
createDebugFiles uglifyminifyThe minify task is executed earlier, before the bundling process takes place. Any existing beforeTask or afterTask configuration of custom tasks might need to be adapted to cater for this change.
To adapt, you can use the generateResourcesJson task for subscription before or after the last standard task. By default, generateResourcesJson is disabled, but you can still subscribe to it, thereby ensuring that your custom tasks execute in the correct order.
generateVersionInfogenerateVersionInfoThe task is no longer executed by default for application projects. It can be re-enabled by using the --include-task parameter.
generateManifestBundleNoneThis task was only needed for the HTML5 repository in Cloud Foundry. Meanwhile, the HTML5 repository implemented its own mechanism, so the task is no longer needed

Updated list of standard tasks:

TaskType applicationType libraryType theme-library
escapeNonAsciiCharactersenabledenabled
replaceCopyrightenabledenabledenabled
replaceVersionenabledenabledenabled
replaceBuildtimeenabled
generateJsdocdisabled¹
executeJsdocSdkTransformationdisabled¹
ADDED: minifyenabledenabled
generateFlexChangesBundleenabledenabled
REMOVED: generateManifestBundledisableddisabled
generateLibraryManifestenabled
generateComponentPreloadenableddisabled²
generateLibraryPreloadenabled
generateStandaloneAppBundledisabled³
transformBootstrapHtmldisabled³
generateBundledisabled⁴disabled⁴
buildThemesenabledenabled
generateThemeDesignerResourcesdisabled⁵disabled⁵
REMOVED: createDebugFilesenabledenabled
REMOVED: uglifyenabledenabled
generateVersionInfodisabled
generateCachebusterInfodisabled
generateApiIndexdisabled¹
generateResourcesJsondisableddisableddisabled

Disabled tasks can be activated by certain build modes, the project configuration, or by using the --include-task CLI parameter. See footnotes where given


¹ Enabled in jsdoc build, which disables most of the other tasks
² Enabled for projects defining a component preload configuration
³ Enabled in self-contained build, which disables generateComponentPreload and generateLibraryPreload
⁴ Enabled for projects defining a bundle configuration
⁵ Can be enabled for framework projects via the includeTask option. For other projects, this task is skipped

Removal of Standard Middleware

The following middleware has been removed from the standard middlewares list:

  • connectUi5Proxy

Middleware Migration

UI5 CLI v2UI5 CLI v3Note
connectUi5ProxyNoneMore sophisticated proxy solutions for ui5-server are now available in the form of custom middleware extensions from the UI5-community. Make sure to refactor any custom middleware that attaches to beforeMiddleware or afterMiddleware of connectUi5Proxy to reference some other middleware.
`,59)])])}const k=t(n,[["render",r]]);export{g as __pageData,k as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v3.md.DII3bq7u.lean.js b/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v3.md.DII3bq7u.lean.js new file mode 100644 index 0000000000..3919424694 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v3.md.DII3bq7u.lean.js @@ -0,0 +1 @@ +import{_ as t,c as s,o as a,ae as i}from"./chunks/framework.CBTkueSR.js";const g=JSON.parse('{"title":"Migrate to v3","description":"","frontmatter":{},"headers":[],"relativePath":"updates/migrate-v3.md","filePath":"updates/migrate-v3.md"}'),n={name:"updates/migrate-v3.md"};function r(d,e,o,l,c,h){return a(),s("div",null,[...e[0]||(e[0]=[i("",59)])])}const k=t(n,[["render",r]]);export{g as __pageData,k as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v4.md.DEFkbQjG.js b/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v4.md.DEFkbQjG.js new file mode 100644 index 0000000000..026f2503bf --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v4.md.DEFkbQjG.js @@ -0,0 +1,20 @@ +import{_ as i,c as s,o as a,ae as o}from"./chunks/framework.CBTkueSR.js";const u=JSON.parse('{"title":"Migrate to v4","description":"","frontmatter":{},"headers":[],"relativePath":"updates/migrate-v4.md","filePath":"updates/migrate-v4.md"}'),t={name:"updates/migrate-v4.md"};function n(r,e,p,l,h,d){return a(),s("div",null,[...e[0]||(e[0]=[o(`

Migrate to v4

"New Release"

UI5 CLI 4.0 has been released on July 24, 2024 🎉

And find the announcement blog post here: SAP Community: UI5 CLI 4.0

UI5 2.x Compatibility

Also see the blog post SAP Community: Introducing OpenUI5 2.x

UI5 CLI 4.0 is required for building UI5 2.x projects. The UI5 2.x framework libraries define Specification Version 4.0 and therefore can't be built using older UI5 CLI versions.

For applications and libraries running with UI5 2.x, the use of Specification Version 4.0 is not enforced. It is highly recommended, however, since only then UI5 CLI will ensure UI5 2.x compatibility of the generated bundles.

Node.js and npm Version Support

This release requires Node.js version v20.11.0 and higher or v22.0.0 and higher (v21 is not supported) as well as npm v8 or higher. Support for older Node.js releases has been dropped; their use will cause an error.

Specification Versions Support

As with UI5 CLI 3.x, all projects with Specification Versions 2.0 and higher are supported.

If a legacy specification version is detected, an automatic migration is attempted. Old projects might therefore still work, unless they have a non-standard configuration in their ui5.yaml.

Changes for Projects

"No changes for Specification Versions 2.x and 3.x"

Projects defining Specification Version 2.x or 3.x are expected to be fully compatible with UI5 CLI v4

Changes for Specification Version 4.0

Projects defining Specification Version 2.x or 3.x are expected to be fully compatible with UI5 Tooling v4

The following does not apply to them. :::

For projects defining the latest Specification Version 4.0 or higher, the following changes apply:

  • Breaking Change: Bundling of JavaScript modules requiring "top level scope" as a string is terminated.

    In UI5 2.x, the feature of evaluating modules from a string is expected to be removed. Therefore, when using the latest Specification Version, UI5 CLI will omit affected module from the bundle and log an error message instead.

    For more details, see Builder: JavaScript Files Requiring Top Level Scope.

  • Breaking Change: New async option for the require sections of bundle definitions.

    This option defaults to true for Specification Version 4.0 and higher, which can influence the loading behavior of your project. Require sections are now expressed using sap.ui.require instead of sap.ui.requireSync. The latter is not available in UI5 2.x.

    Note that the same default applies for all standard bundles as well, like the component- or library preloads as well as self-contained bundles.

    See Configuration: bundleDefinition.sections for more on the new async option.

  • Breaking Change: Removal of the usePredefineCalls bundle option. UI5 CLI v4 will always use sap.ui.predefine calls in bundles, making this option obsolete.

    We do not expect any negative impact on projects due to this change, therefore it is active independently of the Specification Version. However, when upgrading to Specification Version 4.0 you might need to remove the property if you have it in your ui5.yaml configuration.

You can find a summary of the above at Configuration: Specification Version 4.0.

Migrate Your Code

When using the Node.js API of UI5 CLI, or when integrating it into other tools, the following changes might be relevant to you:

Changes to @ui5/cli

Occurrences of console.log in the code base are replaced with process.stderr. Аny scripts that capture the output from console.log need to be adjusted to rely on process.stderr.

Changes to @ui5/fs

Non-public DuplexCollection#byGlobSource API has been removed.

Changes to @ui5/builder

  • Bundling: The usePredefineCalls option has been removed. Bundling now enforces the use of sap.ui.predefine instead of function wrappers.

  • Task API: The namespace option has been renamed to projectNamespace. For more information, check the documentation for CustomTasks API

  • New Option: Added a new async option for builder.bundles.bundleDefinition.section.

Example

yaml
builder:
+   bundles:
+   - bundleDefinition:
+       name: "app.js"
+       sections:
+           - mode: require
+           filters:
+               - some/app/Component.js
+           resolve: true
+           sort: true
+           async: true

Changes to @ui5/project

Default Workspace Name: The default workspaceName is now "default" for API usage.

js
import {graphFromPackageDependencies} from "@ui5/project/graph";
+
+graphFromPackageDependencies({
+    /* workspaceName: "default" */
+});

Directory Naming: The ui5HomeDir has been renamed to ui5DataDir in APIs.

js
import Resolver from "@ui5/project/ui5Framework/Openui5Resolver";
+
+await Resolver.resolveVersion("1.120.15", {
+    ui5DataDir: "~/.ui5",
+    cwd: process.cwd()
+});
  • Dependencies: The @ui5/builder is now an optional dependency to the @ui5/project

Consumers of the Node.js API that make use of the ProjectGraph#build method need to declare a dependency to @ui5/builder in their respective package.json. The package manager should ensure that the version fulfills the range specified in the package.json of @ui5/project.

Troubleshooting

App Stops Working With UI5 1.71

This might be caused by a mismatch of your project's manifest version and your UI5 version.

UI5 CLI v4 enhances the manifest.json with information about the supportedLocales (also see Builder: Generation of Supported Locales). In UI5 1.71 this configuration is not supported and leads to an ambiguous error message TypeError: invalid input and a failure to process the manifest file.

UI5 CLI uses the manifest's _version property to decide whether the supportedLocales can be generated. For UI5 1.71, only versions up to 1.17.0 are supported. See UI5 Demo Kit: Descriptor for Applications, Components, and Libraries (manifest.json) for a mapping per manifest version.

To resolve this issue, adjust the manifest version according to the UI5 version you are using.

This issue was first raised here: UI5 CLI #988

`,42)])])}const g=i(t,[["render",n]]);export{u as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v4.md.DEFkbQjG.lean.js b/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v4.md.DEFkbQjG.lean.js new file mode 100644 index 0000000000..21c9dad030 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v4.md.DEFkbQjG.lean.js @@ -0,0 +1 @@ +import{_ as i,c as s,o as a,ae as o}from"./chunks/framework.CBTkueSR.js";const u=JSON.parse('{"title":"Migrate to v4","description":"","frontmatter":{},"headers":[],"relativePath":"updates/migrate-v4.md","filePath":"updates/migrate-v4.md"}'),t={name:"updates/migrate-v4.md"};function n(r,e,p,l,h,d){return a(),s("div",null,[...e[0]||(e[0]=[o("",42)])])}const g=i(t,[["render",n]]);export{u as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/extensibility/CustomServerMiddleware.html b/packages/documentation/docs/.vitepress/dist/extensibility/CustomServerMiddleware.html new file mode 100644 index 0000000000..d2dfe0734f --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/extensibility/CustomServerMiddleware.html @@ -0,0 +1,177 @@ + + + + + + Custom UI5 Server Middleware | VitePress + + + + + + + + + + + + + + +
Skip to content

Custom UI5 Server Middleware

The UI5 Server Extensibility enables you to enhance the functionality of the UI5 Server. You may want to handle requests differently. For example add various headers to a response or parse data of a POST request in a specific way. For this you can plug custom middleware implementations into the internal express server of the UI5 Server module.

The UI5 community already created many custom middleware packages which you can integrate into your project. They are often prefixed by ui5-middleware- to make them easily searchable in the npm registry.

Please note that custom middleware packages from third parties can not only modify how your project is served but also execute arbitrary code on your system. In fact, this is the case for all npm packages you install. Always act with the according care and follow best practices.

Configuration

In a projects ui5.yaml file, you can define additional server middleware modules that will be executed when the request is received by the server. This configuration exclusively affects the server started in this project. Custom middleware configurations defined in any dependencies are ignored.

A middleware may be executed before or after any other middleware. This can either be a standard middleware or another custom middleware.

Example: Basic configuration

yaml
# In this example configuration, two custom tasks are defined: 'babel' and 'render-markdown-files'.
+specVersion: "4.0"
+type: application
+metadata:
+  name: my.application
+server:
+  customMiddleware:
+    - name: myCustomMiddleware
+      mountPath: /myapp
+      afterMiddleware: compression
+      configuration:
+        debug: true

In the above example the middleware compression is already included as a standard middleware by the UI5 Server. When serving the application my.application, the server will call the custom middleware myCustomMiddleware after compression.

There can be optional configuration parameters which are passed directly to the custom middleware implementation (see below).

An optional mountPath for which the middleware function is invoked can be provided. It will be passed to the app.use call (see express API reference).

Execution order

Note that middleware configurations are applied in the order they are defined. When referencing another custom middleware, it has to be defined before that reference.

Custom Middleware Extension

A custom middleware extension consists of a ui5.yaml and a custom middleware implementation. It can be a standalone module or part of an existing UI5 project.

Example: ui5.yaml

yaml
specVersion: "4.0"
+kind: extension
+type: server-middleware
+metadata:
+  name: markdownHandler
+middleware:
+  path: lib/middleware/markdownHandler.js

Custom middleware extensions can be standalone modules which are handled as dependencies.

Alternatively you can implement a custom middleware extension as part of your UI5 project. In that case, the configuration of the extension is part of your project configuration inside the ui5.yaml as shown below.

The UI5 Server will detect the custom middleware configuration of the project and use the middleware on startup.

Example: Custom Middleware Extension defined in UI5 project

yaml
# Project configuration for the above example
+specVersion: "4.0"
+kind: project
+type: application
+metadata:
+  name: my.application
+server:
+  customMiddleware:
+    - name: markdownHandler
+      beforeMiddleware: serveResources
+---
+# Custom middleware extension as part of your project
+specVersion: "4.0"
+kind: extension
+type: server-middleware
+metadata:
+  name: markdownHandler
+middleware:
+  path: lib/middleware/markdownHandler.js

Custom Middleware Implementation

A custom middleware implementation needs to return a function with the following signature:

js
/**
+ * Custom UI5 Server middleware API
+ * 
+ * @param {object} parameters Parameters
+ * @param {@ui5/logger/Logger} parameters.log
+ *      Logger instance for use in the custom middleware.
+ *      This parameter is only provided to custom middleware
+ *      extensions defining Specification Version 3.0 and later.
+ * @param {@ui5/server.middleware.MiddlewareUtil} parameters.middlewareUtil
+ *      Specification version-dependent interface to a
+ *      MiddlewareUtil instance. See the corresponding API reference for details:
+ *      https://sap.github.io/ui5-tooling/v4/api/@ui5_server_middleware_MiddlewareUtil.html
+ * @param {object} parameters.options Options
+ * @param {string} parameters.options.configuration
+ *      Custom middleware configuration, as defined in the project's ui5.yaml
+ * @param {string} parameters.options.middlewareName
+ *      Name of the custom middleware.
+ *      This parameter is only provided to custom middleware extensions
+ *      defining Specification Version 3.0 and later
+ * @param {object} parameters.resources Readers for accessing resources
+ * @param {module:@ui5/fs.AbstractReader} parameters.resources.all
+ *      Reader to access resources of the root project and its dependencies
+ * @param {module:@ui5/fs.AbstractReader} parameters.resources.rootProject
+ *      Reader to access resources of the root project
+ * @param {module:@ui5/fs.AbstractReader} parameters.resources.dependencies
+ *      Reader to access resources of the project's dependencies.
+ * @returns {function} Middleware function to use
+ */
+export default function({log, middlewareUtil, options, resources}) {
+    return async function (req, res, next) {
+        // [...]
+    }
+};
js
/**
+ * Custom UI5 Server middleware API
+ * 
+ * @param {object} parameters Parameters
+ * @param {@ui5/logger/Logger} parameters.log
+ *      Logger instance for use in the custom middleware.
+ *      This parameter is only provided to custom middleware
+ *      extensions defining Specification Version 3.0 and later.
+ * @param {@ui5/server.middleware.MiddlewareUtil} parameters.middlewareUtil
+ *      Specification version-dependent interface to a
+ *      MiddlewareUtil instance. See the corresponding API reference for details:
+ *      https://sap.github.io/ui5-tooling/v4/api/@ui5_server_middleware_MiddlewareUtil.html
+ * @param {object} parameters.options Options
+ * @param {string} parameters.options.configuration
+ *      Custom middleware configuration, as defined in the project's ui5.yaml
+ * @param {string} parameters.options.middlewareName
+ *      Name of the custom middleware.
+ *      This parameter is only provided to custom middleware extensions
+ *      defining Specification Version 3.0 and later
+ * @param {object} parameters.resources Readers for accessing resources
+ * @param {module:@ui5/fs.AbstractReader} parameters.resources.all
+ *      Reader to access resources of the root project and its dependencies
+ * @param {module:@ui5/fs.AbstractReader} parameters.resources.rootProject
+ *      Reader to access resources of the root project
+ * @param {module:@ui5/fs.AbstractReader} parameters.resources.dependencies
+ *      Reader to access resources of the project's dependencies.
+ * @returns {function} Middleware function to use
+ */
+module.exports = function({log, middlewareUtil, options, resources}) {
+    return async function (req, res, next) {
+        // [...]
+    }
+};

Example: lib/middleware/markdownHandler.(m)js

js

+   
+import MarkdownIt from "markdown-it";export default async function({log, middlewareUtil, options, resources}) {
+    const md = new MarkdownIt();
+    return function (req, res, next) {
+        if (!req.path || !req.path.endsWith(".html")) {
+            // Do not handle non-HTML requests
+            next();
+            return;
+        }
+        // Try to read a corresponding markdown file
+        resources.rootProject.byPath(req.path.replace(".html", ".md")).then(async (resource) => {
+            if (!resource) {
+                // No file found, hand over to next middleware
+                next();
+                return;
+            }
+            log.info(`Rendering markdown for ${resource.getPath()}`);
+            const markdown = await resource.getBuffer();
+            // Generate HTML from markdown string
+            const html = md.render(markdown.toString());
+            res.type('.html');
+            res.end(html);
+        }).catch((err) => {
+            next(err);
+        });
+   }
+ };
js
module.exports = async function({log, middlewareUtil, options, resources}) {
+    const MarkdownIt = require("markdown-it");
+    const md = new MarkdownIt();
+    return function (req, res, next) {
+        if (!req.path || !req.path.endsWith(".html")) {
+            // Do not handle non-HTML requests
+            next();
+            return;
+        }
+        // Try to read a corresponding markdown file
+        resources.rootProject.byPath(req.path.replace(".html", ".md")).then(async (resource) => {
+            if (!resource) {
+                // No file found, hand over to next middleware
+                next();
+                return;
+            }
+            log.info(`Rendering markdown for ${resource.getPath()}`);
+            const markdown = await resource.getBuffer();
+            // Generate HTML from markdown string
+            const html = md.render(markdown.toString());
+            res.type('.html');
+            res.end(html);
+        }).catch((err) => {
+            next(err);
+        });
+    }
+};

Helper Class MiddlewareUtil

Custom middleware defining Specification Version 2.0 or higher have access to an interface of a MiddlewareUtil instance.

In this case, a middlewareUtil object is provided as a part of the custom middleware's parameters. Depending on the specification version of the custom middleware, a set of helper functions is available to the implementation. The lowest required specification version for every function is listed in the MiddlewareUtil API reference.

Integration with karma-ui5

WARNING

The Karma project has been deprecated as of 2023

karma-ui5 is a plugin for the popular Karma test runner. Based on your configuration, it can fetch resources from a dedicated server or start an internal server using parts of UI5 Tooling.

In the latter case, any custom middleware configured in the default ui5.yaml of the project will be used automatically.

However, since Karma uses the connect framework, as opposed to UI5 Tooling's express, custom middleware might not always work as expected. Compared to connect, the express framework provides a more versatile API to middleware.

Therefore, if you plan to use custom middleware in an integrated scenario with karma-ui5, you must restrict the middleware to using the connect API only to ensure compatibility.

Alternatively, you can start a server with the usual ui5 serve command and configure the corresponding URL for use by karma-ui5.

+ + + + \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/extensibility/CustomTasks.html b/packages/documentation/docs/.vitepress/dist/extensibility/CustomTasks.html new file mode 100644 index 0000000000..af54675ca5 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/extensibility/CustomTasks.html @@ -0,0 +1,331 @@ + + + + + + Custom UI5 Builder Tasks | VitePress + + + + + + + + + + + + + + +
Skip to content

Custom UI5 Builder Tasks

The UI5 Build Extensibility enables you to enhance the build process of any UI5 project. In addition to the standard tasks, custom tasks can be created.

The UI5 community already created many custom tasks which you can integrate into your project. They are often prefixed by ui5-task- to make them easily searchable in the npm registry.

Please note that custom tasks from third parties can not only modify your project but also execute arbitrary code on your system. In fact, this is the case for all npm packages you install. Always act with the according care and follow best practices.

Configuration

You can configure your build process with additional build task. These custom tasks are defined in the project configuration.

To hook your custom tasks into the different build phases of a project, they need to reference other tasks to be executed before or after. This can be a standard task or another custom task. Standard tasks that are disabled, even though they are not executed, can still be referenced by custom tasks, which will be performed in their designated position.

In the below example, when building the library my.library the custom babel task will be executed before the standard task generateComponentPreload.
Another custom task called render-markdown-files is then executed immediately after the standard task minify.

Example: Basic configuration

yaml
# In this example configuration, two custom tasks are defined: 'babel' and 'render-markdown-files'.
+specVersion: "4.0"
+type: library
+metadata:
+  name: my.library
+builder:
+  customTasks:
+    - name: babel
+      beforeTask: generateComponentPreload
+    - name: render-markdown-files
+      afterTask: minify
+      configuration:
+        markdownStyle:
+            firstH1IsTitle: true

Example: Connect multiple custom tasks

You can also connect multiple custom tasks with each other. The order in the configuration is important in this case. You have to make sure that a task is defined before you reference it via beforeTask or afterTask.

yaml
# In this example, 'my-custom-task-2' gets executed after 'my-custom-task-1'.
+specVersion: "4.0"
+type: library
+metadata:
+  name: my.library
+builder:
+  customTasks:
+    - name: my-custom-task-1
+      beforeTask: generateComponentPreload
+    - name: my-custom-task-2
+      afterTask: my-custom-task-1

Custom Task Extension

A custom task extension consists of a ui5.yaml and a task implementation. It can be a standalone module or part of an existing UI5 project.

Example: ui5.yaml

yaml
specVersion: "4.0"
+kind: extension
+type: task
+metadata:
+  name: render-markdown-files
+task:
+  path: lib/tasks/renderMarkdownFiles.js

Task extensions can be standalone modules which are handled as dependencies.

Alternatively you can implement a task extension as part of your UI5 project. In that case, the configuration of the extension is part of your project configuration inside the ui5.yaml as shown below.

The task extension will then be automatically collected and processed during the processing of the project.

Example: Custom Task Extension defined in UI5 project

yaml
# Project configuration for the above example
+specVersion: "4.0"
+kind: project
+type: library
+metadata:
+  name: my.library
+builder:
+  customTasks:
+    - name: render-markdown-files
+      afterTask: minify
+      configuration:
+        markdownStyle:
+            firstH1IsTitle: true
+---
+# Task extension as part of your project
+specVersion: "4.0"
+kind: extension
+type: task
+metadata:
+  name: render-markdown-files
+task:
+  path: lib/tasks/renderMarkdownFiles.js

Task Implementation

A custom task implementation needs to return a function with the following signature:

js
/**
+ * Custom task API
+ *
+ * @param {object} parameters
+ * 
+ * @param {module:@ui5/fs.AbstractReader} parameters.dependencies
+ *      Reader to access resources of the project's dependencies
+ * @param {@ui5/logger/Logger} parameters.log
+ *      Logger instance for use in the custom task.
+ *      This parameter is only available to custom task extensions
+ *      defining Specification Version 3.0 and later.
+ * @param {object} parameters.options Options
+ * @param {string} parameters.options.projectName
+ *      Name of the project currently being built
+ * @param {string} parameters.options.projectNamespace
+ *      Namespace of the project currently being built
+ * @param {string} parameters.options.configuration
+ *      Custom task configuration, as defined in the project's ui5.yaml
+ * @param {string} parameters.options.taskName
+ *      Name of the custom task.
+ *      This parameter is only provided to custom task extensions
+ *      defining Specification Version 3.0 and later.
+ * @param {@ui5/builder.tasks.TaskUtil} parameters.taskUtil
+ *      Specification Version-dependent interface to a TaskUtil instance.
+ *      See the corresponding API reference for details:
+ *      https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html
+ * @param {module:@ui5/fs.DuplexCollection} parameters.workspace
+ *      Reader/Writer to access and modify resources of the
+ *      project currently being built
+ * @returns {Promise<undefined>}
+ *      Promise resolving once the task has finished
+ */
+export default async function({dependencies, log, options, taskUtil,workspace}) {
+    // [...]
+};
js
/**
+ * Custom task API
+ *
+ * @param {object} parameters
+ * 
+ * @param {module:@ui5/fs.AbstractReader} parameters.dependencies
+ *      Reader to access resources of the project's dependencies
+ * @param {@ui5/logger/Logger} parameters.log
+ *      Logger instance for use in the custom task.
+ *      This parameter is only available to custom task extensions
+ *      defining Specification Version 3.0 and later.
+ * @param {object} parameters.options Options
+ * @param {string} parameters.options.projectName
+ *      Name of the project currently being built
+ * @param {string} parameters.options.projectNamespace
+ *      Namespace of the project currently being built
+ * @param {string} parameters.options.configuration
+ *      Custom task configuration, as defined in the project's ui5.yaml
+ * @param {string} parameters.options.taskName
+ *      Name of the custom task.
+ *      This parameter is only provided to custom task extensions
+ *      defining Specification Version 3.0 and later.
+ * @param {@ui5/builder.tasks.TaskUtil} parameters.taskUtil
+ *      Specification Version-dependent interface to a TaskUtil instance.
+ *      See the corresponding API reference for details:
+ *      https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html
+ * @param {module:@ui5/fs.DuplexCollection} parameters.workspace
+ *      Reader/Writer to access and modify resources of the
+ *      project currently being built
+ * @returns {Promise<undefined>}
+ *      Promise resolving once the task has finished
+ */
+module.exports = async function({dependencies, log, options, taskUtil,workspace}) {
+    // [...]
+};

Required Dependencies

Info

This functionality has been added with UI5 CLI v3.0.0

Custom tasks can export an optional callback function determineRequiredDependencies to control which dependency-resources are made available through the dependencies-reader that is provided to the task. By reducing the amount of required dependencies or by not requiring any, UI5 Tooling might be able to build a project faster.

Before executing a task, UI5 Tooling will ensure that all required dependencies have been built.

If this callback is not provided, UI5 Tooling will make an assumption as to whether the custom task requires access to any resources of dependencies based on the defined Specification Version of the custom task extension:

  • Specification Version 3.0 and later: If no callback is provided, UI5 Tooling assumes that no dependencies are required. In this case, the dependencies parameter will be omitted.
  • Specification Versions before 3.0: If no callback is provided, UI5 Tooling assumes that all dependencies are required.

For more details, see also RFC 0012 UI5 Tooling Extension API v3

js
/**
+ * Callback function to define the list of required dependencies
+ *
+ * @param {object} parameters
+ * @param {Set} parameters.availableDependencies
+ *      Set containing the names of all direct dependencies of
+ *      the project currently being built.
+ * @param {function} parameters.getDependencies
+ *      Identical to TaskUtil#getDependencies
+ *         (see https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html).
+ *      Creates a list of names of all direct dependencies
+ *      of a given project.
+ * @param {function} parameters.getProject
+ *      Identical to TaskUtil#getProject
+ *         (see https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html).
+ *      Retrieves a Project-instance for a given project name.
+ * @param {object} parameters.options
+ *      Identical to the options given to the standard task function.
+ * @returns {Promise<Set>}
+ *      Promise resolving with a Set containing all dependencies
+ *      that should be made available to the task.
+ *      UI5 Tooling will ensure that those dependencies have been
+ *      built before executing the task.
+ */
+export async function determineRequiredDependencie({availableDependencies, getDependencies, getProject, options}) {
+    // "availableDependencies" could look like this: Set(3) { "sap.ui.core", "sap.m", "my.lib" }
+    // Reduce list of required dependencies: Do not require any UI5 framework projects
+    availableDependencies.forEach((depName) => {
+        if (getProject(depName).isFrameworkProject()) {
+            availableDependencies.delete(depName)
+        }
+    });
+    // => Only resources of project "my.lib" will be available to the task
+    return availableDependencies;
+}
js
/**
+ * Callback function to define the list of required dependencies
+ *
+ * @param {object} parameters
+ * @param {Set} parameters.availableDependencies
+ *      Set containing the names of all direct dependencies of
+ *      the project currently being built.
+ * @param {function} parameters.getDependencies
+ *      Identical to TaskUtil#getDependencies
+ *         (see https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html).
+ *      Creates a list of names of all direct dependencies
+ *      of a given project.
+ * @param {function} parameters.getProject
+ *      Identical to TaskUtil#getProject
+ *         (see https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html).
+ *      Retrieves a Project-instance for a given project name.
+ * @param {object} parameters.options
+ *      Identical to the options given to the standard task function.
+ * @returns {Promise<Set>}
+ *      Promise resolving with a Set containing all dependencies
+ *      that should be made available to the task.
+ *      UI5 Tooling will ensure that those dependencies have been
+ *      built before executing the task.
+ */
+module.exports.determineRequiredDependencies = async functio({availableDependencies, getDependencies, getProject, options}) {
+    // "availableDependencies" could look like this: Set(3) { "sap.ui.core", "sap.m", "my.lib" }
+    // Reduce list of required dependencies: Do not require any UI5 framework projects
+    availableDependencies.forEach((depName) => {
+        if (getProject(depName).isFrameworkProject()) {
+            availableDependencies.delete(depName)
+        }
+    });
+    // => Only resources of project "my.lib" will be available to the task
+    return availableDependencies;
+}

Examples

The following code snippets show examples for custom task implementations.

Example: lib/tasks/renderMarkdownFiles.js

This example is making use of the resourceFactory TaskUtil API to create new resources based on the output of a third-party module for rendering Markdown files. The created resources are added to the build result by writing them into the provided workspace.

js
import path from "node:path";
+import renderMarkdown from "./renderMarkdown.js";
+/*
+* Render all .md (Markdown) files in the project to HTML
+*/
+export default async function({dependencies, log, options, taskUtil,workspace}) {
+    const {createResource} = taskUtil.resourceFactory;
+    const textResources = await workspace.byGlob("**/*.md");
+    await Promise.all(textResources.map(async (resource) => {
+        const markdownResourcePath = resource.getPath();
+        log.info(`Rendering markdown file ${markdownResourcePath}...`);
+        const htmlString = await renderMarkdown(await resource.getString(), options.configuration);
+        // Note: @ui5/fs virtual paths are always (on *all* platforms) POSIX. Therefore using path.posix here
+        const newResourceName = path.posix.basename(markdownResourcePath, ".md") + ".html";
+        const newResourcePath = path.posix.join(path.posix.dirname(markdownResourcePath), newResourceName);
+        const markdownResource = createResource({
+            path: newResourcePath,
+            string: htmlString
+        });
+        await workspace.write(markdownResource);
+    }));
+};
js
const path = require("node:path");
+const renderMarkdown = require("./renderMarkdown.js");
+/*
+* Render all .md (Markdown) files in the project to HTML
+*/
+module.exports = async function({dependencies, log, options, taskUtil,workspace}) {
+    const {createResource} = taskUtil.resourceFactory;
+    const textResources = await workspace.byGlob("**/*.md");
+    await Promise.all(textResources.map(async (resource) => {
+        const markdownResourcePath = resource.getPath();
+        log.info(`Rendering markdown file ${markdownResourcePath}...`);
+        const htmlString = await renderMarkdown(await resource.getString(), options.configuration);
+        // Note: @ui5/fs virtual paths are always (on *all* platforms) POSIX. Therefore using path.posix here
+        const newResourceName = path.posix.basename(markdownResourcePath, ".md") + ".html";
+        const newResourcePath = path.posix.join(path.posix.dirname(markdownResourcePath), newResourceName);
+        const markdownResource = createResource({
+            path: newResourcePath,
+            string: htmlString
+        });
+        await workspace.write(markdownResource);
+    }));
+};

WARNING

Depending on your project setup, UI5 Tooling tends to open many files simultaneously during a build. To prevent errors like EMFILE: too many open files, we urge custom task implementations to use the graceful-fs module as a drop-in replacement for the native fs module in case it is used.

Tasks should ideally use the reader/writer APIs provided by UI5 Tooling for working with project resources.

Example: lib/tasks/compileLicenseSummary.js

This example is making use of multiple TaskUtil APIs to retrieve additional information about the project currently being built (taskUtil.getProject()) and its direct dependencies (taskUtil.getDependencies()). Project configuration files like package.json can be accessed directly using project.getRootReader().

js
import path from "node:path";
+/*
+* Compile a list of all licenses of the project's dependencies
+* and write it to "dependency-license-summary.json"
+*/
+export default async function({dependencies, log, options, taskUtil,workspace}) {
+    const {createResource} = taskUtil.resourceFactory;
+    const licenses = new Map();
+    const projectsVisited = new Set();
+    async function processProject(project) {
+        return Promise.all(taskUtil.getDependencies().map(async (projectName) => {
+            if (projectsVisited.has(projectName)) {
+                return;
+            }
+            projectsVisited.add(projectName);
+            const project = taskUtil.getProject(projectName);
+            const pkgResource = await project.getRootReader().byPath("/package.json");
+            if (pkgResource) {
+                const pkg = JSON.parse(await pkgResource.getString())
+                // Add project to list of licenses
+                if (licenses.has(pkg.license)) {
+                    licenses.get(pkg.license).push(project.getName());
+                } else {
+                    // License not yet in map. Define it
+                    licenses.set(pkg.license, [project.getName()]);
+                }
+            } else {
+                log.info(`Could not find package.json file in project ${project.getName()}`);
+            }
+            return processProject(project);
+        }));
+    }
+    // Start processing dependencies of the root project
+    await processProject(taskUtil.getProject());
+    const summaryResource = createResource({
+        path: "/dependency-license-summary.json",
+        string: JSON.stringify(Object.fromEntries(licenses), null, "\t")
+    });
+    await workspace.write(summaryResource);
+};
js
const path = require("node:path");
+/*
+* Compile a list of all licenses of the project's dependencies
+* and write it to "dependency-license-summary.json"
+*/
+module.exports = async function({dependencies, log, options, taskUtil,workspace}) {
+    const {createResource} = taskUtil.resourceFactory;
+    const licenses = new Map();
+    const projectsVisited = new Set();
+    async function processProject(project) {
+        return Promise.all(taskUtil.getDependencies().map(async (projectName) => {
+            if (projectsVisited.has(projectName)) {
+                return;
+            }
+            projectsVisited.add(projectName);
+            const project = taskUtil.getProject(projectName);
+            const pkgResource = await project.getRootReader().byPath("/package.json");
+            if (pkgResource) {
+                const pkg = JSON.parse(await pkgResource.getString())
+                // Add project to list of licenses
+                if (licenses.has(pkg.license)) {
+                    licenses.get(pkg.license).push(project.getName());
+                } else {
+                    // License not yet in map. Define it
+                    licenses.set(pkg.license, [project.getName()]);
+                }
+            } else {
+                log.info(`Could not find package.json file in project ${project.getName()}`);
+            }
+            return processProject(project);
+        }));
+    }
+    // Start processing dependencies of the root project
+    await processProject(taskUtil.getProject());
+    const summaryResource = createResource({
+        path: "/dependency-license-summary.json",
+        string: JSON.stringify(Object.fromEntries(licenses), null, "\t")
+    });
+    await workspace.write(summaryResource);
+};

Helper Class TaskUtil

Custom tasks defining Specification Version 2.2 or higher have access to an interface of a TaskUtil instance.

In this case, a taskUtil object is provided as a part of the custom task's parameters. Depending on the specification version of the custom task, a set of helper functions is available to the implementation. The lowest required specification version for every function is listed in the TaskUtil API reference.

+ + + + \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/extensibility/ProjectShims.html b/packages/documentation/docs/.vitepress/dist/extensibility/ProjectShims.html new file mode 100644 index 0000000000..86919f1d1d --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/extensibility/ProjectShims.html @@ -0,0 +1,136 @@ + + + + + + VitePress + + + + + + + + + + + + + + +
Skip to content

Project Shims

A project shim extension can be used to define or extend a project configuration of a module. The most popular use case is probably to add UI5 project configuration to a third party module that otherwise could not be used with the UI5 CLI.

Also see RFC 0002 Project Shims.

Structure

yaml
specVersion: "4.0"
+kind: extension
+type: project-shim
+metadata:
+  name: <name of project shim extension>
+shims:
+  configurations:
+    <module name (id)>:
+      specVersion: "4.0"
+      type: <project type>
+      metadata:
+        name: <project name>
+    <module name (id)>:
+      specVersion: "4.0"
+      type: <project type>
+      metadata:
+        name: <project name>
+  dependencies:
+    <module name (id)>:
+      - <module name (id)>
+      - <module name (id)>
+      - <module name (id)>
+  collections:
+    <module name>:
+      modules:
+        <id>: <relative path>
+        <id>: <relative path>
+        <id>: <relative path>

"module name" refers to the name of the module as identified by the used translator. E.g. when using the npm translator, the name declared in the modules package.json is used here. In most cases, the module name also becomes the internal ID of the project.

Properties

configurations (optional)

Used to add configuration to any module.

Map of module names. The values represent the configuration that should be applied to the module.

Note: Configuration is applied to the module using Object.assign(). This means that existing configuration properties will be overwritten.

dependencies (optional)

Used to add dependencies to any module.

Map of module names. The value is an array of module names that this module depends on. Note that the other modules need to be part of the dependency tree of the root project (not as direct children, just somewhere).

collections (optional)

Used when a dependency contains multiple modules. Also referred to as a Monorepo.

Map of module names. The values are objects with collection-specific configuration:

  • modules: Map of project IDs and their relative file system paths inside the collection module. The project ID does not have to match the actual module name (as for instance defined in the modules package.json). UI5 Project will use it in place of a module name.

Example A:

An application "my-application" defines a npm dependency to lodash in its package.json and configures it by using a project-shim extension added to its ui5.yaml.

ui5.yaml

yaml
specVersion: "4.0"
+type: application
+metadata:
+  name: my.application
+--- # Everything below this line could also be put into the ui5.yaml of a standalone extension module
+specVersion: "4.0"
+kind: extension
+type: project-shim
+metadata:
+  name: my.application.thirdparty
+shims:
+  configurations:
+    lodash: # name as defined in package.json
+      specVersion: "4.0"
+      type: module # Use module type
+      metadata:
+        name: lodash
+      resources:
+        configuration:
+          paths:
+            /resources/my/application/thirdparty/: "" # map root directory of lodash module

Example B:

An application "application.a" depends on a library "legacy.library.a" which does not contain a ui5.yaml or package.json yet (nor do its dependencies).

Structure of the legacy library directories (two repositories)
legacy-libs/
+    \_ src/
+        \_ library.a/
+            \_ src/
+            \_ test/
+        \_ library.b/
+            \_ src/
+            \_ test/
+legacy-library-x/
+    \_ src/
+    \_ test/
Dependencies between the legacy libraries
legacy.library.a depends on legacy.library.b
+legacy.library.a depends on legacy.library.x
+
+legacy.library.b depends on legacy.library.x
application.a

Directory structure

application-a/
+    \_ node_modules/
+        \_ legacy-libs/
+        \_ legacy-library-x/
+    \_ webapp/
+    \_ ui5.yaml
+    \_ package.json

package.json (extract)
napa can install git repositories that are lacking a package.json with npm. Within ui5-project, the npm translator already detects dependencies defined in the napa section of a package.json and tries to resolve them.

json
{
+    "scripts": {
+        "install": "napa"
+    },
+    "napa": {
+        "legacy-libs": "<git-repository-url>",
+        "legacy-library-x": "<git-repository-url>"
+    }
+}

ui5.yaml
The shim defined in the application configures the legacy libraries and defines their dependencies. This shim might as well be a standalone module that is added to the applications dependencies. That would be the typical reuse scenario for shims.

yaml
specVersion: "4.0"
+type: application
+metadata:
+  name: application.a
+----
+specVersion: "4.0"
+kind: extension
+type: project-shim
+metadata:
+  name: legacy-lib-shims
+shims:
+  configurations:
+    legacy-library-a:
+      specVersion: "4.0"
+      type: library
+      metadata:
+        name: legacy.library.a
+    legacy-library-b:
+      specVersion: "4.0"
+      type: library
+      metadata:
+        name: legacy.library.b
+    legacy-library-x:
+      specVersion: "4.0"
+      type: library
+      metadata:
+        name: legacy.library.x
+  dependencies:
+    legacy-library-a:
+      - legacy-library-b
+      - legacy-library-x
+    legacy-library-b:
+      - legacy-library-x
+  collections:
+    legacy-libs:
+      modules:
+        legacy-library-a: src/library.a
+        legacy-library-b: src/library.b
+ + + + \ No newline at end of file diff --git a/docs/public/favicon.ico b/packages/documentation/docs/.vitepress/dist/favicon.ico similarity index 100% rename from docs/public/favicon.ico rename to packages/documentation/docs/.vitepress/dist/favicon.ico diff --git a/packages/documentation/docs/.vitepress/dist/hashmap.json b/packages/documentation/docs/.vitepress/dist/hashmap.json new file mode 100644 index 0000000000..8e052c2d24 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/hashmap.json @@ -0,0 +1 @@ +{"benchmarking.md":"BzpEKz8R","builder.md":"ssqqwD1L","cli.md":"D5X2ohRt","codeanalysis.md":"lj6v3W4Y","configuration.md":"DJDUtYxO","essupport.md":"C_9do6hM","extensibility_customservermiddleware.md":"x59WjcrL","extensibility_customtasks.md":"iHprFA7D","extensibility_projectshims.md":"BoGGAAX7","faq.md":"icEjlMM4","filesystem.md":"D7YyUyY3","gettingstarted.md":"CPfMgG6N","homepage.md":"BnZy5h7J","index.md":"Bk6Xmwmv","indexjsdoc.md":"DfRJIwTb","openui5.md":"BhzTxPJW","overview.md":"Bxk3KCe3","privacy.md":"DEAZGlsC","project.md":"DXUu18Wn","sapui5.md":"DzeOp_G2","server.md":"0NEcQ1ii","troubleshooting.md":"zLa9CUap","updates_migrate-v1.md":"DyHoZFsd","updates_migrate-v2.md":"CL9i7ISl","updates_migrate-v3.md":"DII3bq7u","updates_migrate-v4.md":"DEFkbQjG","workspace.md":"Cozjt-6A"} diff --git a/docs/public/icons/logo/Autoprefixer.svg b/packages/documentation/docs/.vitepress/dist/icons/logo/Autoprefixer.svg similarity index 100% rename from docs/public/icons/logo/Autoprefixer.svg rename to packages/documentation/docs/.vitepress/dist/icons/logo/Autoprefixer.svg diff --git a/docs/public/icons/logo/PlantUML.svg b/packages/documentation/docs/.vitepress/dist/icons/logo/PlantUML.svg similarity index 100% rename from docs/public/icons/logo/PlantUML.svg rename to packages/documentation/docs/.vitepress/dist/icons/logo/PlantUML.svg diff --git a/docs/public/icons/logo/PostCSS.svg b/packages/documentation/docs/.vitepress/dist/icons/logo/PostCSS.svg similarity index 100% rename from docs/public/icons/logo/PostCSS.svg rename to packages/documentation/docs/.vitepress/dist/icons/logo/PostCSS.svg diff --git a/docs/public/icons/logo/Rollup.svg b/packages/documentation/docs/.vitepress/dist/icons/logo/Rollup.svg similarity index 100% rename from docs/public/icons/logo/Rollup.svg rename to packages/documentation/docs/.vitepress/dist/icons/logo/Rollup.svg diff --git a/docs/public/icons/logo/TailwindCSS.svg b/packages/documentation/docs/.vitepress/dist/icons/logo/TailwindCSS.svg similarity index 100% rename from docs/public/icons/logo/TailwindCSS.svg rename to packages/documentation/docs/.vitepress/dist/icons/logo/TailwindCSS.svg diff --git a/docs/public/icons/logo/TypeScript-wm.svg b/packages/documentation/docs/.vitepress/dist/icons/logo/TypeScript-wm.svg similarity index 100% rename from docs/public/icons/logo/TypeScript-wm.svg rename to packages/documentation/docs/.vitepress/dist/icons/logo/TypeScript-wm.svg diff --git a/docs/public/icons/logo/TypeScript.svg b/packages/documentation/docs/.vitepress/dist/icons/logo/TypeScript.svg similarity index 100% rename from docs/public/icons/logo/TypeScript.svg rename to packages/documentation/docs/.vitepress/dist/icons/logo/TypeScript.svg diff --git a/docs/public/icons/logo/UI5.svg b/packages/documentation/docs/.vitepress/dist/icons/logo/UI5.svg similarity index 100% rename from docs/public/icons/logo/UI5.svg rename to packages/documentation/docs/.vitepress/dist/icons/logo/UI5.svg diff --git a/docs/public/icons/logo/VitePress.svg b/packages/documentation/docs/.vitepress/dist/icons/logo/VitePress.svg similarity index 100% rename from docs/public/icons/logo/VitePress.svg rename to packages/documentation/docs/.vitepress/dist/icons/logo/VitePress.svg diff --git a/docs/public/icons/logo/Vitejs.svg b/packages/documentation/docs/.vitepress/dist/icons/logo/Vitejs.svg similarity index 100% rename from docs/public/icons/logo/Vitejs.svg rename to packages/documentation/docs/.vitepress/dist/icons/logo/Vitejs.svg diff --git a/docs/public/icons/logo/Vuejs.svg b/packages/documentation/docs/.vitepress/dist/icons/logo/Vuejs.svg similarity index 100% rename from docs/public/icons/logo/Vuejs.svg rename to packages/documentation/docs/.vitepress/dist/icons/logo/Vuejs.svg diff --git a/docs/public/icons/logo/Web-Components.svg b/packages/documentation/docs/.vitepress/dist/icons/logo/Web-Components.svg similarity index 100% rename from docs/public/icons/logo/Web-Components.svg rename to packages/documentation/docs/.vitepress/dist/icons/logo/Web-Components.svg diff --git a/docs/public/icons/logo/cssnano-wm-vertical.svg b/packages/documentation/docs/.vitepress/dist/icons/logo/cssnano-wm-vertical.svg similarity index 100% rename from docs/public/icons/logo/cssnano-wm-vertical.svg rename to packages/documentation/docs/.vitepress/dist/icons/logo/cssnano-wm-vertical.svg diff --git a/docs/public/icons/logo/cssnano-wm.svg b/packages/documentation/docs/.vitepress/dist/icons/logo/cssnano-wm.svg similarity index 100% rename from docs/public/icons/logo/cssnano-wm.svg rename to packages/documentation/docs/.vitepress/dist/icons/logo/cssnano-wm.svg diff --git a/docs/public/icons/logo/cssnano.svg b/packages/documentation/docs/.vitepress/dist/icons/logo/cssnano.svg similarity index 100% rename from docs/public/icons/logo/cssnano.svg rename to packages/documentation/docs/.vitepress/dist/icons/logo/cssnano.svg diff --git a/docs/public/icons/logo/markdown.svg b/packages/documentation/docs/.vitepress/dist/icons/logo/markdown.svg similarity index 100% rename from docs/public/icons/logo/markdown.svg rename to packages/documentation/docs/.vitepress/dist/icons/logo/markdown.svg diff --git a/docs/public/icons/logo/powering-sap-btp.svg b/packages/documentation/docs/.vitepress/dist/icons/logo/powering-sap-btp.svg similarity index 100% rename from docs/public/icons/logo/powering-sap-btp.svg rename to packages/documentation/docs/.vitepress/dist/icons/logo/powering-sap-btp.svg diff --git a/docs/public/icons/ui5/B.svg b/packages/documentation/docs/.vitepress/dist/icons/ui5/B.svg similarity index 100% rename from docs/public/icons/ui5/B.svg rename to packages/documentation/docs/.vitepress/dist/icons/ui5/B.svg diff --git a/docs/public/icons/ui5/B_OpenUI5_H.svg b/packages/documentation/docs/.vitepress/dist/icons/ui5/B_OpenUI5_H.svg similarity index 100% rename from docs/public/icons/ui5/B_OpenUI5_H.svg rename to packages/documentation/docs/.vitepress/dist/icons/ui5/B_OpenUI5_H.svg diff --git a/docs/public/icons/ui5/B_OpenUI5_V.svg b/packages/documentation/docs/.vitepress/dist/icons/ui5/B_OpenUI5_V.svg similarity index 100% rename from docs/public/icons/ui5/B_OpenUI5_V.svg rename to packages/documentation/docs/.vitepress/dist/icons/ui5/B_OpenUI5_V.svg diff --git a/docs/public/icons/ui5/B_UI5_H.svg b/packages/documentation/docs/.vitepress/dist/icons/ui5/B_UI5_H.svg similarity index 100% rename from docs/public/icons/ui5/B_UI5_H.svg rename to packages/documentation/docs/.vitepress/dist/icons/ui5/B_UI5_H.svg diff --git a/docs/public/icons/ui5/B_UI5_V.svg b/packages/documentation/docs/.vitepress/dist/icons/ui5/B_UI5_V.svg similarity index 100% rename from docs/public/icons/ui5/B_UI5_V.svg rename to packages/documentation/docs/.vitepress/dist/icons/ui5/B_UI5_V.svg diff --git a/docs/public/icons/ui5/O.svg b/packages/documentation/docs/.vitepress/dist/icons/ui5/O.svg similarity index 100% rename from docs/public/icons/ui5/O.svg rename to packages/documentation/docs/.vitepress/dist/icons/ui5/O.svg diff --git a/docs/public/icons/ui5/O_OpenUI5_H.svg b/packages/documentation/docs/.vitepress/dist/icons/ui5/O_OpenUI5_H.svg similarity index 100% rename from docs/public/icons/ui5/O_OpenUI5_H.svg rename to packages/documentation/docs/.vitepress/dist/icons/ui5/O_OpenUI5_H.svg diff --git a/docs/public/icons/ui5/O_OpenUI5_V.svg b/packages/documentation/docs/.vitepress/dist/icons/ui5/O_OpenUI5_V.svg similarity index 100% rename from docs/public/icons/ui5/O_OpenUI5_V.svg rename to packages/documentation/docs/.vitepress/dist/icons/ui5/O_OpenUI5_V.svg diff --git a/docs/public/icons/ui5/O_UI5_H.svg b/packages/documentation/docs/.vitepress/dist/icons/ui5/O_UI5_H.svg similarity index 100% rename from docs/public/icons/ui5/O_UI5_H.svg rename to packages/documentation/docs/.vitepress/dist/icons/ui5/O_UI5_H.svg diff --git a/docs/public/icons/ui5/O_UI5_V.svg b/packages/documentation/docs/.vitepress/dist/icons/ui5/O_UI5_V.svg similarity index 100% rename from docs/public/icons/ui5/O_UI5_V.svg rename to packages/documentation/docs/.vitepress/dist/icons/ui5/O_UI5_V.svg diff --git a/docs/public/icons/ui5/UI5.svg b/packages/documentation/docs/.vitepress/dist/icons/ui5/UI5.svg similarity index 100% rename from docs/public/icons/ui5/UI5.svg rename to packages/documentation/docs/.vitepress/dist/icons/ui5/UI5.svg diff --git a/packages/documentation/docs/.vitepress/dist/index.html b/packages/documentation/docs/.vitepress/dist/index.html new file mode 100644 index 0000000000..b54fcc1afe --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/index.html @@ -0,0 +1,80 @@ + + + + + + UI5 CLI | VitePress + + + + + + + + + + + + + + +
Skip to content

UI5 CLI

Project Rename

UI5 Tooling has been renamed to UI5 CLI 🚨

Read the announcement blog post: SAP Community: Goodbye UI5 Tooling - Hello UI5 CLI!

New Release

UI5 CLI V4 is here 🎉

Read the announcement blog post: SAP Community: UI5 CLI 4.0

And checkout the Migrate to v4 documentation.

Get Started

Main Features

💻 UI5 CLI

Also see the UI5 CLI Documentation

sh
# Global
+npm install --global @ui5/cli
+
+# In your project
+npm install --save-dev @ui5/cli

⚙️ Project Setup

Configure your project for use with UI5 CLI.
Also see the Configuration Documentation

❯ ui5 init
+Wrote ui5.yaml:
+
+specVersion: "4.0"
+metadata:
+  name: my-app
+type: application

🚚 Dependency Management

UI5 framework dependencies are managed by UI5 CLI. All other dependencies are managed by your favorite node package manager.

❯ ui5 use SAPUI5@1.117.0
+Updated configuration written to ui5.yaml
+This project is now using SAPUI5 version 1.117.0
+
+❯ ui5 add sap.ui.core sap.m themelib_sap_fiori_3
+Updated configuration written to ui5.yaml
+Added framework libraries sap.ui.core sap.m themelib_sap_fiori_3 as dependencies

🏄 Development Server

Start a local development server to work on your project.
Also see the Server Documentation

❯ ui5 serve
+Server started
+URL: http://localhost:8080

🛠 Build for Production

Build an optimized version of your project.
Also see the Builder Documentation

bash
 ui5 build
+info graph:helpers:ui5Framework Using OpenUI5 version: 1.117.0
+info ProjectBuilder Preparing build for project my-app
+info ProjectBuilder   Target directory: ./dist
+info ProjectBuilder Cleaning target directory...
+info Project 1 of 1: Building application project my-app...
+info my-app Running task escapeNonAsciiCharacters...
+info my-app Running task replaceCopyright...
+info my-app Running task replaceVersion...
+info my-app Running task minify...
+info my-app Running task generateFlexChangesBundle...
+info my-app Running task generateComponentPreload...
+info ProjectBuilder Build succeeded in 296 ms
+info ProjectBuilder Executing cleanup tasks...

🧪 Node.js API

Most UI5 CLI modules provide JavaScript APIs for direct consumption in other Node.js projects. This allows you to rely on UI5 CLI for UI5-specific build functionality and project handling, while creating your own tools to perfectly match the needs of your project.

All available APIs are documented in the UI5 CLI API Reference.

js
import {graphFromPackageDependencies} from "@ui5/project/graph";
+
+async function buildApp(projectPath, destinationPath) {
+    const graph = await graphFromPackageDependencies({
+        cwd: projectPath
+    });
+    await graph.build({
+        destPath: destinationPath,
+        selfContained: true,
+        excludedTasks: ["transformBootstrapHtml"],
+        includedDependencies: ["*"]
+    });
+}
js
async function buildApp(projectPath, destinationPath) {
+    const {graphFromPackageDependencies} = 
+        await import("@ui5/project/graph");
+    const graph = await graphFromPackageDependencies({
+        cwd: projectPath
+    });
+    await graph.build({
+        destPath: destinationPath,
+        selfContained: true,
+        excludedTasks: ["transformBootstrapHtml"],
+        includedDependencies: ["*"]
+    });
+}
+ + + + \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/indexJsdoc.html b/packages/documentation/docs/.vitepress/dist/indexJsdoc.html new file mode 100644 index 0000000000..e003c5134d --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/indexJsdoc.html @@ -0,0 +1,25 @@ + + + + + + UI5 CLI API Reference | VitePress + + + + + + + + + + + + + + +
Skip to content

UI5 CLI API Reference

Support

Please follow our Contribution Guidelines on how to report an issue. Or chat with us in the #tooling channel of the OpenUI5 Community Slack

License

This project is licensed under the Apache Software License, Version 2.0 except as noted otherwise in the LICENSE file.

+ + + + \ No newline at end of file diff --git a/docs/public/learn-more.svg b/packages/documentation/docs/.vitepress/dist/learn-more.svg similarity index 100% rename from docs/public/learn-more.svg rename to packages/documentation/docs/.vitepress/dist/learn-more.svg diff --git a/docs/public/tailwind-css-vsc-color-completion.png b/packages/documentation/docs/.vitepress/dist/tailwind-css-vsc-color-completion.png similarity index 100% rename from docs/public/tailwind-css-vsc-color-completion.png rename to packages/documentation/docs/.vitepress/dist/tailwind-css-vsc-color-completion.png diff --git a/packages/documentation/docs/.vitepress/dist/updates/migrate-v1.html b/packages/documentation/docs/.vitepress/dist/updates/migrate-v1.html new file mode 100644 index 0000000000..c5ac5f4bc3 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/updates/migrate-v1.html @@ -0,0 +1,28 @@ + + + + + + Migrate to v1 | VitePress + + + + + + + + + + + + + + +
Skip to content

Migrate to v1

v1.0.0 is the first stable release of the UI5 CLI. There are only a few notable changes to the 0.x alpha version.

Breaking changes

ui5-builder: Add transformation of apps index.html in self-contained build (SAP/ui5-builder#137)

When running a self-contained build on an application project, the index.html will be transformed by adopting the UI5 bootstrap script tag to load the custom bundle file instead.

ui5-project: normalizer: Rename optional parameter "translator" (SAP/ui5-project#96)

Renamed parameter "translator" of functions generateDependencyTree and generateProjectTree to "translatorName"

ui5-fs: Remove top-level access to adapters (SAP/ui5-fs#69)

Adapters "AbstractAdapter", "FileSystem" and "Memory" used to be accessible via the top-level export of index.js
Example:

js
require("@ui5/project").FileSystem

This is no longer possible. Adapters are now grouped in the top-level object "adapters" and can be accessed from there
Example:

js
require("@ui5/project").adapters.FileSystem

How to upgrade

Global installation

To upgrade your global installation, just run the installation command again, which will upgrade to the latest version.

npm install --global @ui5/cli

Note: Your local CLI installation will still be preferred, so you need to make sure to upgrade it as well (see Local vs. Global installation).

Local installation

To upgrade the CLI installation within a project you need to run the following command.

npm install @ui5/cli@^1

ui5.yaml

specVersion: "1.0"

We have introduced the specification version 1.0. New features will only be available for projects with specVersion 1.0 or newer.
The specVersion 0.1 will be compatible with the UI5 CLI v1.0.0, but we still recommend to adopt your projects.

yaml
specVersion: "1.0"
+metadata:
+  name: <project-name>
+type: <project-type>
+ + + + \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/updates/migrate-v2.html b/packages/documentation/docs/.vitepress/dist/updates/migrate-v2.html new file mode 100644 index 0000000000..1ca33e02a2 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/updates/migrate-v2.html @@ -0,0 +1,28 @@ + + + + + + Migrate to v2 | VitePress + + + + + + + + + + + + + + +
Skip to content

Migrate to v2

v2.0.0 of the UI5 CLI was released on April 1, 2020. As a major feature, it introduces the easy consumption of SAPUI5 libraries in UI5 projects.

Breaking changes

All UI5 CLI Modules: Require Node.js >= 10

Support for older Node.js releases has been dropped.

UI5 Builder: Make namespace mandatory for application and library projects (SAP/ui5-builder#430)

The UI5 CLI must be able to determine an application- or library project's namespace. Otherwise an error is thrown.

Ideally the namespace should be defined in the sap.app/id field of the manifest.json

In case of libraries, additional fallbacks are in place:

  1. The name attribute defined in the .library file
  2. The path of the library.js file

UI5 Builder: LibraryFormatter: Ignore manifest.json of nested apps (SAP/ui5-builder#392)

If a library contains both a manifest.json and a .library file, they must be located in the same directory. Otherwise the manifest.json is ignored. In cases where the manifest.json is located at a higher level or in a different directory at the same level as the .library file, an exception is thrown.

UI5 Server: serveResources middleware: Expect *.properties files in UTF-8 by default (SAP/ui5-server#303)

For projects of types other than application or library, the UI5 Server now expects *.properties files to be UTF-8 encoded as opposed to ISO-8859-1 before.

Note: This change does not affect most projects as *.properties files are typically only located in applications or libraries, for which their project specific configuration is used.

UI5 FS: Remove deprecated parameter useNamespaces (SAP/ui5-fs#223)

Remove the deprecated parameter useNamespaces from method resourceFactory.createCollectionsForTree. Use the parameter getVirtualBasePathPrefix instead.

How to upgrade

Global installation

To upgrade your global installation, just run the installation command again, which will upgrade to the latest version.

npm install --global @ui5/cli

Note: Your local CLI installation will still be preferred, so you need to make sure to upgrade it as well (see Local vs. Global installation).

Local installation

To upgrade the CLI installation within a project, you need to run the following command:

npm install --save-dev @ui5/cli@^2

ui5.yaml

specVersion: "2.0"

We have introduced the specification version 2.0. New features will only be available for projects with specVersion 2.0 or newer.
Most projects defining specVersion 0.1 or 1.0 can still be used.

yaml
specVersion: "2.0"
+metadata:
+  name: <project-name>
+type: <project-type>
+ + + + \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/updates/migrate-v3.html b/packages/documentation/docs/.vitepress/dist/updates/migrate-v3.html new file mode 100644 index 0000000000..11911d7abe --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/updates/migrate-v3.html @@ -0,0 +1,53 @@ + + + + + + Migrate to v3 | VitePress + + + + + + + + + + + + + + +
Skip to content

Migrate to v3

"Superseded"

UI5 CLI 3.0 has been superseded by version 4.0. See Migrate to v4.

Find the announcement blog post for version 3.0 here: SAP Community: UI5 CLI 3.0

Node.js and npm Version Support

This release requires Node.js versions v16.18.0, v18.12.0 or higher as well as npm v8 or higher. Support for older Node.js and npm releases has been dropped and will cause an error to be shown.

Specification Versions Support

Going forward, only projects with Specification Versions 2.0 and higher are supported.

In case a legacy specification version is detected, an automatic migration is attempted. This means your old projects might still work. Unless they have non-standard configuration in their ui5.yaml.

Changes for Projects

INFO

✅ Projects defining Specification Version 2.x are expected to be fully compatible with UI5 CLI v3

For projects defining the latest Specification Versions 3.0 and higher, some changes apply:

  • Breaking Change: The metadata.name property is now restricted to contain only certain characters and no uppercase letters. See Configuration: name for details

See also Configuration: Specification Version 3.0.

Changes for Extensions

INFO

✅ Custom Tasks and Custom Middleware defining Specification Version 2.x are expected to be fully compatible with UI5 CLI v3

For extensions defining the latest Specification Versions 3.0 and higher, some changes and improvements apply:

  • Breaking Change: Custom Tasks need to request access to dependency resources
    • By default, resources of dependencies can't be accessed. A custom task requiring such access needs to implement a callback function with the export name determineRequiredDependencies. In this function it can define the scope of dependency-access. Please refer to the Custom Task: Required Dependencies documentation for details
  • Breaking Change: The metadata.name property is now restricted to contain only certain characters and no uppercase letters. See Configuration: name for details
  • Features: Enhanced TaskUtil and MiddlewareUtil API

Changes to Dependency Configuration

INFO

✅ The ui5.dependencies package.json configuration becomes obsolete and is ignored in UI5 CLI v3.

Configuration like the following is not needed anymore:

`dependencies`, `devDependencies` and `optionalDependencies` are now [automatically analyzed](https://github.com/SAP/ui5-project/blob/ff04ae4aeeb7f7d889dffd0c0e3e8774dd708c79/lib/graph/providers/NodePackageDependencies.js#L104).
+If a dependency can be configured as a UI5 project or UI5 CLI extension, it is added to the graph and its `dependencies` are analyzed.
+

dependencies, devDependencies and optionalDependencies are now automatically analyzed. If a dependency can be configured as a UI5 project or UI5 Tooling extension, it is added to the graph and its dependencies are analyzed.

Note that devDependencies and optionalDependencies are ignored for all but the current root project. For projects that are intended to be consumed in other projects (for example libraries), this means that any required custom tasks must be added to dependencies. :::

Changes to Module API

The normalizer and projectTree modules have been removed. The builder API has been moved from @ui5/builder to @ui5/project.

The JSON based, internal representation of a project dependency tree has been replaced with a graph. This is the result of a major refactoring of @ui5/project which lead to a series of API changes.

Also the @ui5/server API has been changed. Instead of a tree, it now only accepts a graph instance as the first parameter.

Migrate Your Code

The UI5 CLI-related modules such as @ui5/builder, etc. have been transformed to ES Modules ("ESM"). Therefore, they no longer use a CommonJS export and cannot be included via require. If your code is in CommonJS format, it needs to use dynamic imports or be converted to ES Modules.

Old: @ui5/project v2

js
const {normalizer} = require("@ui5/project");
+const {builder} = require("@ui5/builder");
+
+const tree = await normalizer.generateProjectTree({cwd: "."});
+
+await builder.build({
+    tree,
+    destPath: "./dist",
+    buildDependencies: true,
+});

New: @ui5/project v3

js
import {graphFromPackageDependencies} from "@ui5/project/graph";
+
+let graph = await graphFromPackageDependencies({cwd: "."});
+
+await graph.build({
+    destPath: "./dist",
+    includedDependencies: ["*"], // Parameter "buildDependencies" has been removed
+});
js
// Since CommonJS does not suport top-level await, the code must be wrapped in an asynchronous function
+async function buildProject() {
+    const {graphFromPackageDependencies} = await import("@ui5/project/graph");
+
+    let graph = await graphFromPackageDependencies({cwd: "."});
+
+    await graph.build({
+        destPath: "./dist",
+        includedDependencies: ["*"], // Parameter "buildDependencies" has been removed
+    });
+}

Changes to @ui5/cli

  • The CLI option --translator has been removed. For static dependency resolution, use the new option --dependency-definition to provide a file with static dependency information.
  • The ui5 build dev command has been removed. Use ui5 build --exclude-task=* --include-task=replaceCopyright replaceVersion replaceBuildtime buildThemes instead.

JSDoc Processor Fails When JSDoc Reports an Error

The jsdocGenerator processor and the corresponding generateJsdoc task will now throw an error when JSDoc reports an error (exit code != 0). This will also fail the build when running ui5 build jsdoc.

Always Building Required Dependencies

If any of a project's build tasks requires access to resources of the project's dependencies, UI5 CLI v3 will now always build that dependency upfront.

This ensures that tasks always access processed resources and never the raw sources of a dependency. Resulting in better reproducibility of build results and resolving common issues.

Especially for projects of type library, where standard tasks like buildThemes always require dependency access, UI5 CLI will now always build all dependencies.

In the future, a caching mechanism should help and improve build times with this new behavior.

Info

The CLI flags -a and --all are still present and now an alias for --include-all-dependencies. This flag (along with --include-dependency* and --exclude-dependency*) mainly controls the build output. Use it to define whether dependency resources should be part of the build result.

Please also refer to the ui5 build documentation.

Removal of Standard Tasks and Processors

The following tasks have been removed:

  • createDebugFiles
  • generateManifestBundle
  • uglify

The following processors have been removed:

  • debugFileCreator
  • manifestBundler
  • resourceCopier
  • uglifier

Task Migration

UI5 CLI v2UI5 CLI v3Note
createDebugFiles uglifyminifyThe minify task is executed earlier, before the bundling process takes place. Any existing beforeTask or afterTask configuration of custom tasks might need to be adapted to cater for this change.
To adapt, you can use the generateResourcesJson task for subscription before or after the last standard task. By default, generateResourcesJson is disabled, but you can still subscribe to it, thereby ensuring that your custom tasks execute in the correct order.
generateVersionInfogenerateVersionInfoThe task is no longer executed by default for application projects. It can be re-enabled by using the --include-task parameter.
generateManifestBundleNoneThis task was only needed for the HTML5 repository in Cloud Foundry. Meanwhile, the HTML5 repository implemented its own mechanism, so the task is no longer needed

Updated list of standard tasks:

TaskType applicationType libraryType theme-library
escapeNonAsciiCharactersenabledenabled
replaceCopyrightenabledenabledenabled
replaceVersionenabledenabledenabled
replaceBuildtimeenabled
generateJsdocdisabled¹
executeJsdocSdkTransformationdisabled¹
ADDED: minifyenabledenabled
generateFlexChangesBundleenabledenabled
REMOVED: generateManifestBundledisableddisabled
generateLibraryManifestenabled
generateComponentPreloadenableddisabled²
generateLibraryPreloadenabled
generateStandaloneAppBundledisabled³
transformBootstrapHtmldisabled³
generateBundledisabled⁴disabled⁴
buildThemesenabledenabled
generateThemeDesignerResourcesdisabled⁵disabled⁵
REMOVED: createDebugFilesenabledenabled
REMOVED: uglifyenabledenabled
generateVersionInfodisabled
generateCachebusterInfodisabled
generateApiIndexdisabled¹
generateResourcesJsondisableddisableddisabled

Disabled tasks can be activated by certain build modes, the project configuration, or by using the --include-task CLI parameter. See footnotes where given


¹ Enabled in jsdoc build, which disables most of the other tasks
² Enabled for projects defining a component preload configuration
³ Enabled in self-contained build, which disables generateComponentPreload and generateLibraryPreload
⁴ Enabled for projects defining a bundle configuration
⁵ Can be enabled for framework projects via the includeTask option. For other projects, this task is skipped

Removal of Standard Middleware

The following middleware has been removed from the standard middlewares list:

  • connectUi5Proxy

Middleware Migration

UI5 CLI v2UI5 CLI v3Note
connectUi5ProxyNoneMore sophisticated proxy solutions for ui5-server are now available in the form of custom middleware extensions from the UI5-community. Make sure to refactor any custom middleware that attaches to beforeMiddleware or afterMiddleware of connectUi5Proxy to reference some other middleware.
+ + + + \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/updates/migrate-v4.html b/packages/documentation/docs/.vitepress/dist/updates/migrate-v4.html new file mode 100644 index 0000000000..4e84448496 --- /dev/null +++ b/packages/documentation/docs/.vitepress/dist/updates/migrate-v4.html @@ -0,0 +1,44 @@ + + + + + + Migrate to v4 | VitePress + + + + + + + + + + + + + + +
Skip to content

Migrate to v4

"New Release"

UI5 CLI 4.0 has been released on July 24, 2024 🎉

And find the announcement blog post here: SAP Community: UI5 CLI 4.0

UI5 2.x Compatibility

Also see the blog post SAP Community: Introducing OpenUI5 2.x

UI5 CLI 4.0 is required for building UI5 2.x projects. The UI5 2.x framework libraries define Specification Version 4.0 and therefore can't be built using older UI5 CLI versions.

For applications and libraries running with UI5 2.x, the use of Specification Version 4.0 is not enforced. It is highly recommended, however, since only then UI5 CLI will ensure UI5 2.x compatibility of the generated bundles.

Node.js and npm Version Support

This release requires Node.js version v20.11.0 and higher or v22.0.0 and higher (v21 is not supported) as well as npm v8 or higher. Support for older Node.js releases has been dropped; their use will cause an error.

Specification Versions Support

As with UI5 CLI 3.x, all projects with Specification Versions 2.0 and higher are supported.

If a legacy specification version is detected, an automatic migration is attempted. Old projects might therefore still work, unless they have a non-standard configuration in their ui5.yaml.

Changes for Projects

"No changes for Specification Versions 2.x and 3.x"

Projects defining Specification Version 2.x or 3.x are expected to be fully compatible with UI5 CLI v4

Changes for Specification Version 4.0

Projects defining Specification Version 2.x or 3.x are expected to be fully compatible with UI5 Tooling v4

The following does not apply to them. :::

For projects defining the latest Specification Version 4.0 or higher, the following changes apply:

  • Breaking Change: Bundling of JavaScript modules requiring "top level scope" as a string is terminated.

    In UI5 2.x, the feature of evaluating modules from a string is expected to be removed. Therefore, when using the latest Specification Version, UI5 CLI will omit affected module from the bundle and log an error message instead.

    For more details, see Builder: JavaScript Files Requiring Top Level Scope.

  • Breaking Change: New async option for the require sections of bundle definitions.

    This option defaults to true for Specification Version 4.0 and higher, which can influence the loading behavior of your project. Require sections are now expressed using sap.ui.require instead of sap.ui.requireSync. The latter is not available in UI5 2.x.

    Note that the same default applies for all standard bundles as well, like the component- or library preloads as well as self-contained bundles.

    See Configuration: bundleDefinition.sections for more on the new async option.

  • Breaking Change: Removal of the usePredefineCalls bundle option. UI5 CLI v4 will always use sap.ui.predefine calls in bundles, making this option obsolete.

    We do not expect any negative impact on projects due to this change, therefore it is active independently of the Specification Version. However, when upgrading to Specification Version 4.0 you might need to remove the property if you have it in your ui5.yaml configuration.

You can find a summary of the above at Configuration: Specification Version 4.0.

Migrate Your Code

When using the Node.js API of UI5 CLI, or when integrating it into other tools, the following changes might be relevant to you:

Changes to @ui5/cli

Occurrences of console.log in the code base are replaced with process.stderr. Аny scripts that capture the output from console.log need to be adjusted to rely on process.stderr.

Changes to @ui5/fs

Non-public DuplexCollection#byGlobSource API has been removed.

Changes to @ui5/builder

  • Bundling: The usePredefineCalls option has been removed. Bundling now enforces the use of sap.ui.predefine instead of function wrappers.

  • Task API: The namespace option has been renamed to projectNamespace. For more information, check the documentation for CustomTasks API

  • New Option: Added a new async option for builder.bundles.bundleDefinition.section.

Example

yaml
builder:
+   bundles:
+   - bundleDefinition:
+       name: "app.js"
+       sections:
+           - mode: require
+           filters:
+               - some/app/Component.js
+           resolve: true
+           sort: true
+           async: true

Changes to @ui5/project

Default Workspace Name: The default workspaceName is now "default" for API usage.

js
import {graphFromPackageDependencies} from "@ui5/project/graph";
+
+graphFromPackageDependencies({
+    /* workspaceName: "default" */
+});

Directory Naming: The ui5HomeDir has been renamed to ui5DataDir in APIs.

js
import Resolver from "@ui5/project/ui5Framework/Openui5Resolver";
+
+await Resolver.resolveVersion("1.120.15", {
+    ui5DataDir: "~/.ui5",
+    cwd: process.cwd()
+});
  • Dependencies: The @ui5/builder is now an optional dependency to the @ui5/project

Consumers of the Node.js API that make use of the ProjectGraph#build method need to declare a dependency to @ui5/builder in their respective package.json. The package manager should ensure that the version fulfills the range specified in the package.json of @ui5/project.

Troubleshooting

App Stops Working With UI5 1.71

This might be caused by a mismatch of your project's manifest version and your UI5 version.

UI5 CLI v4 enhances the manifest.json with information about the supportedLocales (also see Builder: Generation of Supported Locales). In UI5 1.71 this configuration is not supported and leads to an ambiguous error message TypeError: invalid input and a failure to process the manifest file.

UI5 CLI uses the manifest's _version property to decide whether the supportedLocales can be generated. For UI5 1.71, only versions up to 1.17.0 are supported. See UI5 Demo Kit: Descriptor for Applications, Components, and Libraries (manifest.json) for a mapping per manifest version.

To resolve this issue, adjust the manifest version according to the UI5 version you are using.

This issue was first raised here: UI5 CLI #988

+ + + + \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/vp-icons.css b/packages/documentation/docs/.vitepress/dist/vp-icons.css new file mode 100644 index 0000000000..e69de29bb2 diff --git a/docs/Benchmarking.md b/packages/documentation/docs/Benchmarking.md similarity index 100% rename from docs/Benchmarking.md rename to packages/documentation/docs/Benchmarking.md diff --git a/docs/Builder.md b/packages/documentation/docs/Builder.md similarity index 100% rename from docs/Builder.md rename to packages/documentation/docs/Builder.md diff --git a/packages/documentation/docs/CLI.md b/packages/documentation/docs/CLI.md new file mode 100644 index 0000000000..dc542f9a38 --- /dev/null +++ b/packages/documentation/docs/CLI.md @@ -0,0 +1,393 @@ +# UI5 CLI +## Requirements +- [Node.js](https://nodejs.org/) version v20.11.0 and higher or v22.0.0 and higher (v21 is not supported) +- [npm](https://www.npmjs.com/) version v8.0.0 or higher + +## Installation + +Install the CLI using the npm package manager: + +```sh +npm install --global @ui5/cli + +# Verify installation +ui5 --help +``` + +## Usage/Syntax + +` + ui5 [options] +` + +The CLI automatically checks for updates using [update-notifier](https://github.com/yeoman/update-notifier). While this is skipped in CI environments, you might also opt-out manually by following the steps described [here](https://github.com/yeoman/update-notifier/blob/-/readme.md#user-settings). + +## Common options + +These options you can use with each command. + +| Option | Description | Details | +| --- | --- | --- | +| -h, --help | Show help | [boolean] | +| -v, --version | Show version number | [boolean] | +| -c, --config | Path to project configuration file in YAML format | [string] | +| --dependency-definition | Path to a YAML file containing the project's dependency tree. This option will disable resolution of node package dependencies. | [string] | +| --workspace-config | Path to workspace configuration file in YAML format | [string] | +| -w, --workspace | Name of the workspace configuration to use | [string] [default: "default"] | +| --loglevel, --log-level | Set the logging level | [string] [choices: "silent", "error", "warn", "info", "perf", "verbose", "silly"] [default: "info"] | +| --verbose | Enable verbose logging. | [boolean] [default: false] | +| --perf | Enable performance measurements and related logging. | [boolean] [default: false] | +| --silent | Disable all log output. | [boolean] [default: false] | + +## Examples + +Execute command using a static dependency tree instead of resolving node package dependencies +``` +ui5 --dependency-definition /path/to/projectDependencies.yaml +``` +Execute command using a project configuration from custom path +``` +ui5 --config /path/to/ui5.yaml +``` +Execute command using the 'dolphin' workspace of a ui5-workspace.yaml +``` +ui5 --workspace dolphin +``` +Execute command with the maximum log output +``` +ui5 --log-level silly +``` + +## Commands + +### ui5 add + +**Description** + +Add SAPUI5/OpenUI5 framework libraries to the project configuration. + +**Usage** + +` +ui5 add [--development] [--optional] +` + + +**Options** + +| Option | Description | Details | +| --- | --- | --- | +| -D, --development, --dev | Add as development dependency | [boolean] [default: false] | +| -O, --optional | Add as optional dependency | [boolean] [default: false] | + +**Positionals** + +| Positional | Description | Details | +| --- | --- | --- | +| framework-libraries | Framework library names | [array] [required] [default: []] | + +**Examples** + +Add the framework libraries sap.ui.core and sap.m as dependencies +``` +ui5 add sap.ui.core sap.m +``` +Add the framework library sap.ui.support as development dependency +``` +ui5 add -D sap.ui.support +``` +Add the framework library themelib_sap_fiori_3 as optional dependency +``` +ui5 add --optional themelib_sap_fiori_3 +``` +### ui5 build + +**Description** + +Build project in current directory + +**Usage** + +` +ui5 build +` + +**Child Commands** + +| Command | Description | +| --- | --- | +| ui5 build jsdoc | Build JSDoc resources | +| ui5 build preload | (default) Build project and create preload bundles | +| ui5 build self-contained | Build project and create self-contained bundle. Recommended to be used in conjunction with --include-all-dependencies | + +**Options** + +| Option | Description | Details | +| --- | --- | --- | +| -a, --include-all-dependencies, --all | Include all dependencies in the build result. This is equivalent to '--include-dependency "*"' | [boolean] [default: false] | +| --include-dependency | A list of dependencies to be included in the build result. You can use the asterisk '*' as an alias for including all dependencies in the build result. The listed dependencies cannot be overruled by dependencies defined in 'exclude-dependency'. The provided name must match with the dependency name shown in 'ui5 ls --flat' | [array] | +| --include-dependency-regexp | A list of regular expressions defining dependencies to be included in the build result. This list is prioritized like 'include-dependency'. | [array] | +| --include-dependency-tree | A list of dependencies to be included in the build result. Transitive dependencies are implicitly included and do not need to be part of this list. These dependencies overrule the selection of 'exclude-dependency-tree' but can be overruled by 'exclude-dependency'. | [array] | +| --exclude-dependency | A list of dependencies to be excluded from the build result. The listed dependencies can be overruled by dependencies defined in 'include-dependency'. The provided name must match with the dependency name shown in 'ui5 ls --flat' | [array] | +| --exclude-dependency-regexp | A list of regular expressions defining dependencies to be excluded from the build result. This list is prioritized like 'exclude-dependency'. | [array] | +| --exclude-dependency-tree | A list of dependencies to be excluded from the build result. Transitive dependencies are implicitly included and do not need to be part of this list. | [array] | +| --dest | Path of build destination | [string] [default: "./dist"] | +| --clean-dest | If present, clean the destination directory before building | [boolean] [default: false] | +| --create-build-manifest | Store build metadata in a '.ui5' directory in the build destination, allowing reuse of the build result in other builds | [boolean] [default: false] | +| --include-task | A list of tasks to be added to the default execution set. This option takes precedence over any excludes. | [array] | +| --exclude-task | A list of tasks to be excluded from the default task execution set | [array] | +| --framework-version | Overrides the framework version defined by the project. Takes the same value as the version part of "ui5 use" | [string] | +| --cache-mode | Cache mode to use when consuming SNAPSHOT versions of framework dependencies. The 'Default' behavior is to invalidate the cache after 9 hours. 'Force' uses the cache only and does not create any requests. 'Off' invalidates any existing cache and updates from the repository | [string] [choices: "Default", "Force", "Off"] [default: "Default"] | +| --experimental-css-variables | Generate CSS variables (css-variables.css, css-variables.source.less) and skeleton (library-skeleton(-RTL).css) for all themes | [boolean] [default: false] | +| --output-style | Processes build results into a specific directory structure.
- Flat: Omits the project namespace and the "resources" directory.
- Namespace: Respects the project namespace and the "resources" directory, maintaining the original structure.
- Default: The default directory structure for every project type. For applications, this is identical to "Flat", and for libraries, it is "Namespace". Other types have a more distinct default output style. | [string] [choices: "Default", "Flat", "Namespace"] [default: "Default"] | + + +**Examples** + +Preload build for project without dependencies +``` +ui5 build +``` +Self-contained build for project +``` +ui5 build self-contained +``` +Build project but only apply the minify- and generateComponentPreload tasks +``` +ui5 build --exclude-task=* --include-task=minify generateComponentPreload +``` +Build project by applying all default tasks including the minify task and excluding the generateComponentPreload task +``` +ui5 build --include-task=minify --exclude-task=generateComponentPreload +``` +Preload build with experimental CSS variables artifacts +``` +ui5 build --experimental-css-variables +``` +### ui5 config + +**Description** + +Get and set UI5 CLI configuration options + +**Usage** + +` +ui5 config +` + +**Child Commands** + +| Command | Description | +| --- | --- | +| ui5 config set [value] | Set the value for a given configuration option. Clear an existing configuration by omitting the value | +| ui5 config get | Get the value for a given configuration option | +| ui5 config list | Display the current configuration | + + + +**Examples** + +Set a value for the ui5DataDir configuration +``` +ui5 config set ui5DataDir /path/to/.ui5 +``` +Unset the current value of the ui5DataDir configuration +``` +ui5 config set ui5DataDir +``` +### ui5 init + +**Description** + +Initialize the UI5 CLI configuration for an application or library project. + +**Usage** + +` +ui5 init +` + + + + +### ui5 remove + +**Description** + +Remove SAPUI5/OpenUI5 framework libraries from the project configuration. + +**Usage** + +` +ui5 remove +` + + + +**Positionals** + +| Positional | Description | Details | +| --- | --- | --- | +| framework-libraries | Framework library names | [array] [required] [default: []] | + +**Examples** + +Remove the framework libraries sap.ui.core and sap.m as dependencies +``` +ui5 remove sap.ui.core sap.m +``` +### ui5 serve + +**Description** + +Start a web server for the current project + +**Usage** + +` +ui5 serve +` + + +**Options** + +| Option | Description | Details | +| --- | --- | --- | +| -p, --port | Port to bind on (default for HTTP: 8080, HTTP/2: 8443) | [number] | +| -o, --open | Open web server root directory in default browser. Optionally, supplied relative path will be appended to the root URL | [string] | +| --h2 | Shortcut for enabling the HTTP/2 protocol for the web server | [boolean] [default: false] | +| --simple-index | Use a simplified view for the server directory listing | [boolean] [default: false] | +| --accept-remote-connections | Accept remote connections. By default the server only accepts connections from localhost | [boolean] [default: false] | +| --key | Path to the private key | [string] [default: "~/.ui5/server/server.key"] | +| --cert | Path to the certificate | [string] [default: "~/.ui5/server/server.crt"] | +| --sap-csp-policies | Always send content security policies 'sap-target-level-1' and 'sap-target-level-3' in report-only mode | [boolean] [default: false] | +| --serve-csp-reports | Collects and serves CSP reports upon request to '/.ui5/csp/csp-reports.json' | [boolean] [default: false] | +| --framework-version | Overrides the framework version defined by the project. Takes the same value as the version part of "ui5 use" | [string] | +| --cache-mode | Cache mode to use when consuming SNAPSHOT versions of framework dependencies. The 'Default' behavior is to invalidate the cache after 9 hours. 'Force' uses the cache only and does not create any requests. 'Off' invalidates any existing cache and updates from the repository | [string] [choices: "Default", "Force", "Off"] [default: "Default"] | + + +**Examples** + +Start a web server for the current project +``` +ui5 serve +``` +Enable the HTTP/2 protocol for the web server (requires SSL certificate) +``` +ui5 serve --h2 +``` +Use the project configuration from a custom path +``` +ui5 serve --config /path/to/ui5.yaml +``` +Use a static dependency definition file +``` +ui5 serve --dependency-definition /path/to/projectDependencies.yaml +``` +Listen to port 1337 and launch default browser with `http://localhost:1337/test/QUnit.html` +``` +ui5 serve --port 1337 --open tests/QUnit.html +``` +### ui5 tree + +**Description** + +Outputs the dependency tree of the current project to stdout. It takes all relevant parameters of ui5 build into account. + +**Usage** + +` +ui5 tree +` + + +**Options** + +| Option | Description | Details | +| --- | --- | --- | +| --flat | Output a flat list of all dependencies instead of a tree hierarchy | [boolean] [default: false] | +| --level | Limit the number of levels shown in the tree hierarchy | [number] | +| --framework-version | Overrides the framework version defined by the project. Takes the same value as the version part of "ui5 use" | [string] | +| --cache-mode | Cache mode to use when consuming SNAPSHOT versions of framework dependencies. The 'Default' behavior is to invalidate the cache after 9 hours. 'Force' uses the cache only and does not create any requests. 'Off' invalidates any existing cache and updates from the repository | [string] [choices: "Default", "Force", "Off"] [default: "Default"] | +| | | | + + +### ui5 use + +**Description** + +Initialize or update the project's framework configuration. + +**Usage** + +` +ui5 use +` + + + +**Positionals** + +| Positional | Description | Details | +| --- | --- | --- | +| framework-info | Framework name, version or both (name@version).
Name can be "SAPUI5" or "OpenUI5" (case-insensitive).
Version can be "latest" (default), a version or range according to the Semantic Versioning specification (https://semver.org/), or a tag available in the npm registry.
For SAP-internal usage the version can also be "latest-snapshot", a version or range ending with -SNAPSHOT, or a simplified range such as "1-SNAPSHOT", "1.x-SNAPSHOT" or "1.108-SNAPSHOT". | [string] [required] | + +**Examples** + +Use SAPUI5 in the latest available version +``` +ui5 use sapui5@latest +``` +Use OpenUI5 in the latest available 1.76 patch version +``` +ui5 use openui5@1.76 +``` +Use the latest available version of the configured framework +``` +ui5 use latest +``` +Use OpenUI5 in the latest available version +``` +ui5 use openui5 +``` +### ui5 versions + +**Description** + +Shows the versions of all UI5 CLI modules + +**Usage** + +` +ui5 versions +` + + + + + +## Local vs. Global Installation +In general, we recommend a global installation of the UI5 CLI (`npm install --global @ui5/cli`). + +However, it makes sense to add the UI5 CLI as a [devDependency](https://docs.npmjs.com/files/package.json#devdependencies) (`npm install --save-dev @ui5/cli`) to a project's `package.json`. This ensures that every developer working on the project uses the same version of the UI5 CLI and your continuous integration environments also uses this version. + +In case you have both, a local installation in one of your projects as well as a global installation, the UI5 CLI will always try to invoke the local installation. This is in part because [npm scripts](https://docs.npmjs.com/misc/scripts) defined in your `package.json` will also always invoke the local installation. + +This behavior can be disabled by setting the environment variable `UI5_CLI_NO_LOCAL`. + +**Example** +You have a project located in the directory `/my-application`. + +You have installed the UI5 CLI globally. In addition, the project's `package.json` defines a `devDependency` to `@ui5/cli` and a start script `"ui5 serve"`. This means there are at least two installations of `@ui5/cli` on your system. Their versions might not match. + +This table illustrates which of the two installations is used in different scenarios. Note how the UI5 CLI always tries to prefer the version installed in the project. + +| Current Working Directory | Command | Global UI5 CLI | Local UI5 CLI | +| ------------------------- | ------------------------------- | :-----------------------------: | :----------------------------: | +| `/` | `ui5 --version` | enabled | +| `/my-application` | `ui5 --version` | | enabled | +| `/my-application` | `ui5 serve` | | enabled | +| `/my-application` | `UI5_CLI_NO_LOCAL=X ui5 serve` | enabled | +| `/my-application` | `npm start` | | enabled | +| `/my-application` | `UI5_CLI_NO_LOCAL=X npm start` | | enabled | diff --git a/docs/CodeAnalysis.md b/packages/documentation/docs/CodeAnalysis.md similarity index 100% rename from docs/CodeAnalysis.md rename to packages/documentation/docs/CodeAnalysis.md diff --git a/docs/Configuration.md b/packages/documentation/docs/Configuration.md similarity index 98% rename from docs/Configuration.md rename to packages/documentation/docs/Configuration.md index c328d6b4a0..1bc51b9725 100644 --- a/docs/Configuration.md +++ b/packages/documentation/docs/Configuration.md @@ -23,7 +23,7 @@ metadata: ## General Configuration ### Specification Version and -Type -A project must define a specification version (`specVersion`), to which its configuration is compatible to. Also see [Specification Versions](/docs/Configuration#specification-versions). +A project must define a specification version (`specVersion`), to which its configuration is compatible to. Also see [Specification Versions](/Configuration#specification-versions). In addition, a project must define a `type`. This can be either `application`, `library`, `theme-library` (since Specification Version 1.1), or `module`. @@ -193,7 +193,7 @@ UI5 CLI will read the corresponding files of the project in the given encoding. ::: tip Info This configuration is available since UI5 CLI [`v2.2.0`](https://githubcom/SAP/ui5-cli/releases/tag/v2.2.0) -and applies only to projects defining [Specification Version](/CODE_OF_CONDUCT.mddocs/Configuration/#specification-versions) +and applies only to projects defining [Specification Version](#specification-versions) 2.1 or higher. ::: @@ -701,7 +701,7 @@ A list of bundle definitions. A `bundleDefinition` contains of the following opt - `optimize`: If set to `true`, the module bundle gets minified - - Projects defining [Specification Version](/docs/Configuration##specification-versions) 3.0 and higher: Defaults to `true` + - Projects defining [Specification Version](/Configuration##specification-versions) 3.0 and higher: Defaults to `true` - Projects defining [Specification Version](#/docs/Configuration#specification-versions) lower than 3.0: Defaults to `false` - `decorateBootstrapModule`: By default set to `false`. If set to `true`, the module will be decorated with an optimization marker - `addTryCatchRestartWrapper`: By default set to `false`. If set to `true`, bootable module bundles gets wrapped with a try/catch to filter "Restart" errors @@ -750,13 +750,13 @@ Version | UI5 CLI Release **Breaking changes:** -- Removed bundle option [`usePredefineCalls`](/docs/Configuration##properties). UI5 CLI v4.0.0 and above will always use predefine calls in bundles, making this option obsolete. +- Removed bundle option [`usePredefineCalls`](/Configuration##properties). UI5 CLI v4.0.0 and above will always use predefine calls in bundles, making this option obsolete. -- Adds new a new option `async` for `bundleDefinition`-section configuration, see [Configuration: `bundleDefinition.sections`](/docs/Configuration##properties) for details. +- Adds new a new option `async` for `bundleDefinition`-section configuration, see [Configuration: `bundleDefinition.sections`](/Configuration##properties) for details. Specification Version 4.0 projects are supported by [UI5 CLI](https://github.com/SAP/ui5-cli) v4.0.0 and above. -Also see [Migrate to v4](../updates/migrate-v4.md#changes-for-projects) for details on these breaking changes. +Also see [Migrate to v4](/updates/migrate-v4.md#changes-for-projects) for details on these breaking changes. ### Specification Version 3.2 diff --git a/docs/ESSupport.md b/packages/documentation/docs/ESSupport.md similarity index 100% rename from docs/ESSupport.md rename to packages/documentation/docs/ESSupport.md diff --git a/docs/FAQ.md b/packages/documentation/docs/FAQ.md similarity index 100% rename from docs/FAQ.md rename to packages/documentation/docs/FAQ.md diff --git a/docs/FileSystem.md b/packages/documentation/docs/FileSystem.md similarity index 100% rename from docs/FileSystem.md rename to packages/documentation/docs/FileSystem.md diff --git a/docs/GettingStarted.md b/packages/documentation/docs/GettingStarted.md similarity index 97% rename from docs/GettingStarted.md rename to packages/documentation/docs/GettingStarted.md index bb726958b0..4b31fb5320 100644 --- a/docs/GettingStarted.md +++ b/packages/documentation/docs/GettingStarted.md @@ -66,7 +66,7 @@ If your project is not set up for use with the UI5 CLI yet, follow these steps: You can choose between the OpenUI5 and the SAPUI5 framework. - Don't know which one to choose? Check out our [documentation on the differences between OpenUI5 and SAPUI5](/docs/FAQ.html#what-s-the-difference-between-openui5-and-sapui5). + Don't know which one to choose? Check out our [documentation on the differences between OpenUI5 and SAPUI5](/FAQ.html#what-s-the-difference-between-openui5-and-sapui5). 1. Add required libraries ```sh diff --git a/docs/HomePage.md b/packages/documentation/docs/HomePage.md similarity index 100% rename from docs/HomePage.md rename to packages/documentation/docs/HomePage.md diff --git a/docs/OpenUI5.md b/packages/documentation/docs/OpenUI5.md similarity index 100% rename from docs/OpenUI5.md rename to packages/documentation/docs/OpenUI5.md diff --git a/docs/Overview.md b/packages/documentation/docs/Overview.md similarity index 100% rename from docs/Overview.md rename to packages/documentation/docs/Overview.md diff --git a/docs/Privacy.md b/packages/documentation/docs/Privacy.md similarity index 100% rename from docs/Privacy.md rename to packages/documentation/docs/Privacy.md diff --git a/docs/Project.md b/packages/documentation/docs/Project.md similarity index 100% rename from docs/Project.md rename to packages/documentation/docs/Project.md diff --git a/docs/SAPUI5.md b/packages/documentation/docs/SAPUI5.md similarity index 100% rename from docs/SAPUI5.md rename to packages/documentation/docs/SAPUI5.md diff --git a/docs/Server.md b/packages/documentation/docs/Server.md similarity index 100% rename from docs/Server.md rename to packages/documentation/docs/Server.md diff --git a/docs/Troubleshooting.md b/packages/documentation/docs/Troubleshooting.md similarity index 100% rename from docs/Troubleshooting.md rename to packages/documentation/docs/Troubleshooting.md diff --git a/docs/Workspace.md b/packages/documentation/docs/Workspace.md similarity index 100% rename from docs/Workspace.md rename to packages/documentation/docs/Workspace.md diff --git a/docs/extensibility/CustomServerMiddleware.md b/packages/documentation/docs/extensibility/CustomServerMiddleware.md similarity index 100% rename from docs/extensibility/CustomServerMiddleware.md rename to packages/documentation/docs/extensibility/CustomServerMiddleware.md diff --git a/docs/extensibility/CustomTasks.md b/packages/documentation/docs/extensibility/CustomTasks.md similarity index 100% rename from docs/extensibility/CustomTasks.md rename to packages/documentation/docs/extensibility/CustomTasks.md diff --git a/docs/extensibility/ProjectShims.md b/packages/documentation/docs/extensibility/ProjectShims.md similarity index 100% rename from docs/extensibility/ProjectShims.md rename to packages/documentation/docs/extensibility/ProjectShims.md diff --git a/docs/images/Module_overview.png b/packages/documentation/docs/images/Module_overview.png similarity index 100% rename from docs/images/Module_overview.png rename to packages/documentation/docs/images/Module_overview.png diff --git a/packages/documentation/docs/images/UI5_CLI/Task_Minify.svg b/packages/documentation/docs/images/UI5_CLI/Task_Minify.svg new file mode 100644 index 0000000000..30f3c19ce4 --- /dev/null +++ b/packages/documentation/docs/images/UI5_CLI/Task_Minify.svg @@ -0,0 +1,459 @@ + + + + + + + + + + + + + + + + + Task_Minify + + + Layer 1 + + + + + Minify a JS + Resource + + + + + + + + processors/minifier + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Terser + + + + + tasks/minify + + + + + + + Search for Source Map + Reference in Resource + + + + + + + Remove + sourceMappingURL + Reference in Resource + + + + + + + Resolve + Reference + + + + + + + Log Warning + "Not Supported" + + + + + + + Locate Resource + within Project + + + + + + + Decode + base64 + Payload + + + + + + + Clone Source Map + + + + + + + Create Debug + Variant by Cloning + Modified Resource + + + + + + This Indicates the + Presence of an + "Input Source Map" + + + + + + + Execute Minification + (Using Input Source Map If + One Has Been Resolved) + + + + + + + Reference Source + Map in Debug + Resource + + + + + + + + + + + + Contains a Reference + + + + + + + + + + + + + + + + Resource Has Been Modified by Previous Tasks + + + + + + + + + + + + + + + + + + + Relative URL + + + + + + + + + Data-URL ("data:") + + + + + + + + + Absolute URL or + HTTP(S) URL + + + + + + + + + + + + + Not Found + + + + + + + + + + Log Warning + "Not Found" + + + + + + + + + + + + + + + + + + + + + + + + + + Contains No Reference + + + + + + + + + Found + + + + + + + + + + + + + + + + + + + + + + + + + Change "file" + Attribute to Name of + Debug Resource + + + + + + + Create Resource + "<debug resource + name>.map" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Searching For String + "//# sourceMappingURL=" + at the End of the File + + + + + + There Is a High Risk That the + Referenced Source Map Does + Not Reflect the Modification + + + + + + + + + + + + + Resource Is Not Modified + + + + + + + + + + + + + Appending String + "//# sourceMappingURL=<debug resource name>.map" + to the End of the Resource + + + + + + + Write Resources + to Workspace + + + + + + This Is the Only Path + on Which Terser Will + Be Provided With an + Input Source Map + + + + + + + + + + + + + + + + + + + + + + + + Resulting Resources (Example): + • Module.js + • Module.js.map + • Module-dbg.js + • Module-dbg.js.map + + + + + diff --git a/docs/images/UI5_logo.png b/packages/documentation/docs/images/UI5_logo.png similarity index 100% rename from docs/images/UI5_logo.png rename to packages/documentation/docs/images/UI5_logo.png diff --git a/docs/images/UI5_logo_wide.png b/packages/documentation/docs/images/UI5_logo_wide.png similarity index 100% rename from docs/images/UI5_logo_wide.png rename to packages/documentation/docs/images/UI5_logo_wide.png diff --git a/docs/images/favicon.png b/packages/documentation/docs/images/favicon.png similarity index 100% rename from docs/images/favicon.png rename to packages/documentation/docs/images/favicon.png diff --git a/docs/images/logo.svg b/packages/documentation/docs/images/logo.svg similarity index 100% rename from docs/images/logo.svg rename to packages/documentation/docs/images/logo.svg diff --git a/docs/index.md b/packages/documentation/docs/index.md similarity index 93% rename from docs/index.md rename to packages/documentation/docs/index.md index 679b5a50d4..f2a5d7ff3c 100644 --- a/docs/index.md +++ b/packages/documentation/docs/index.md @@ -24,7 +24,7 @@ And checkout the **[Migrate to v4](./updates/migrate-v4.md)** documentation. ### 💻 UI5 CLI -*Also see the [UI5 CLI Documentation](./pages/CLI.md)* +*Also see the [UI5 CLI Documentation](/CLI.md)* ```sh # Global @@ -37,7 +37,7 @@ npm install --save-dev @ui5/cli #### ⚙️ Project Setup Configure your project for use with UI5 CLI. -*Also see the [Configuration Documentation](./pages/Configuration.md)* +*Also see the [Configuration Documentation](/Configuration.md)* ``` ❯ ui5 init @@ -66,7 +66,7 @@ Added framework libraries sap.ui.core sap.m themelib_sap_fiori_3 as dependencies #### 🏄 Development Server Start a local development server to work on your project. -*Also see the [Server Documentation](./pages/Server.md)* +*Also see the [Server Documentation](/Server.md)* ``` ❯ ui5 serve @@ -77,7 +77,7 @@ URL: http://localhost:8080 #### 🛠 Build for Production Build an optimized version of your project. -*Also see the [Builder Documentation](./pages/Builder.md)* +*Also see the [Builder Documentation](/Builder.md)* ``` bash ❯ ui5 build diff --git a/docs/indexJsdoc.md b/packages/documentation/docs/indexJsdoc.md similarity index 100% rename from docs/indexJsdoc.md rename to packages/documentation/docs/indexJsdoc.md diff --git a/packages/documentation/docs/public/TripPinClassDiagram.jpg b/packages/documentation/docs/public/TripPinClassDiagram.jpg new file mode 100644 index 0000000000000000000000000000000000000000..44dfb5669c203a175f19df3cd026a1d6dca001a7 GIT binary patch literal 45518 zcmbTe2|QG7-#9)}NkR(|Whz8TQlx}wxsfDM5n?LI7Lx4Cp+eS)EJc}QD~!pWb+Rk_ zo_!gzGh;ntX3qRB^=$Y3ywCeS|Nr59X3oqx*Y(}5?|u#I2Wtqm{j!>d8j6jL4Rr_n zp;*JHgQ_l;4^SvAEz}Vd3bh4%w-dz<-m!tdUk9rfbrH3Jjcxt^ZwLD(_Vr`)#*OTo zI5u-|te;yrxj46M*}8>;V=MR8tz6r{!NJMH%e{?f{r&nN>yNKL1^%~f;n=c%$N#s3 z^%b>a3tQ-hTkLEHQ5$x!vF~7GRie-U)=dDTb)^1wux()9xM?#0X)71FA$L0fpPhXJ z0Cv;Hjo@xi@I7kdj!ioc$e!Q4OXn`fL3_RvK4I}&L@#8P@$0rw#7^FO{FHO+ZUMnP zLgI%cBo7~vlRu?!`i$bmKUCG!FKJx9e&eQ|{w)JT)B9!*%q=Xf9G*BjIlH*JJ$vr! z=l>!gF#J_SWK{I)H!&X)5|ffsK7LBg%FfBn%l}ePSYA(WG_Rw7!De4 zxTt4rSE0B&HmR@7QocIdt@C4ReMW8Ih2vr`@NG-PmeafAcz@`p1qT~yS+%+kCX|kk zzqK^t7iy39d!?1~!A4p7$22rtq9O}5(^6Te!B{&)UY((kQZ2KFmdDZ;ZCI%4v_>Vz zq1lVWH9^EB<$F7(ph<>=Mcb>vl)yS(Vc1VeQkA6`HY>eCvw<{5 zYg=r<%%rnB-MGs_dDk#}e!dqxKz4@;QnP@ibZDHbkSSb8)7V4`ha-R7q1YBf+izLLH0R7)|TvV5XOoyQHdJIL7 zg?b5DnL^_;B+6mv%`}!WfEOf9cyvJX4f!mTPy!;{MiyZ5#;gk+3q`&;THMlr{sE(D zi@#`(?s+{(qsuV1Vt=}I{Y64PvQU0Ya19G}@#iNN%FBiXceu*PIVRB2>@1YZZ^A#L z>+fNqFlH>2k0zrj3mS?e<;qlQ2jO#`D`EnaZhEF!hFdyc7j`xEy-_%`wfj;T*?xYY zbS=QCdXtwa3soki%`ht=F@5YXZ*Q*I`g0Dpl0?YC%16#biwl0Ni99QA))l|jwE5l< zy}Eh5tJ-hUO0ZW+vP;*UJuUi|i7!^+B$R=?Uj0i_sdJ5LZU z%|T5aE-KBjU2A6lm^`=EQZ#*z=R<7Kw8ocl7K(7r!ef|)+Vlq%DWD9lK&{KXyi;p_ zLGH&&Hf8r2d^ZhCusFtfJJi152ALU#*_^Q^q;EF)FsA! zp^9g+P~Y5R;2Kq!b9h#Nm|62;6n^u*=SO#gou!koTKk*X3<>oo!Kvk%Z&i;OJSItq z-4|k-J~!DMr5*GKZxT}cUTH>2(;Fa#m?L23+YBJyAACpV z8Gs&^>x0Pk`?S>6vt*^;1j~uXM z-(Gg}ME#9aKieacDrjq=j08C$lgM;y&bBq3X^Mp!&hR=6wOpV&BipbH3m_^5a1slp%2hQ8 z%R*G5vP-?~cW_)f;MclEY;S1aQ`uRqUgI5gk8F&uuP+i1Ko(TZK$NULC>&BIqJlss51Y_;@+?X6$%;E|b<|ENWTmF3SzvFVYSFHz={RqD} zg@(65wC!t%#NXCC3nk_z!H{pNl39~9`6UuS(V_p0iu|~{MX&mwKu2RM|DkS1aew@k zcnOHm_((L9PeuS5ssgIIc-}_X0%<6Rnm+zgSECoFVf^n^`(IKH-Tg(Iw!FUL881Ac zU4LJ(EL6DiuD?u%`zs|EOLA-y=n9-*&Bw1RTObR(|3Z4^eirJfA>#^FpbG74B2h#= zl%HyyuUFXYx5qB!q@2d+AHC<5H)~)*JTLJ$b%CcT>TxREE+nJ^Xw1ast{?0lm{Jrk z$rQl{x$zsrwaq?sJ2f+je&dJ7B9adE=FRJq-qq-+@(;yL=&16c{-^Vro6h;kb9=F~ z07fx^8uW_HAT+5IN%N>R!_B9lX;Q!h061qYPq_qTaGev|7^BlkLb%; zF&Q!9{25|fQx6|`NG23BgDqvDT3w~6xjcQxhrO%a7jYC~>la>*y;p^D56?F2My|3@ zDHj(*PgQC2zDUrGTM4IkkgiV>eFpcUtAr$i<=+VHhJDhkWwj-9s7fmQVL7ATV)hkE zfwiV;DA%*mqL$(-_OWCfP9RQ@B2j7Gv~5ZV>$|LMUcKUX>4~T6v9Cch3L6}@m2JkwThiJwz*HJEsc8ur5teH5Hrauzj4AOAeU{LacyQ9tE8ou3I^+Df z?c3aN1ZkZ+-CY^}Z39*D_X&IbQI>wwM5bvPE<79baUQVwHgonw7S z<6aFnra`8j)1g*kjQn%^8+If@A-Na~xglKp9+1k~mcIut?f(C(m~Gg{8bq z4eWSV!8qBztxE1^UTJ=5$iUzMd$q$PU$n2A|CSk@K)Ye}Vf9*$d%@SCt(dJU=g#uo zi-mPyodvcZ34DX)xN_V}o~i>QuP6zm%e#kGRJ?(dn_CG8>Cc|$uFAtZr`EK;;ng+{zN1xP|4U`;EllZhqL5+7sLm$(oT3^5`J!9>m65o_K~`W4{ec! z+W2`7lQ7Fd&2YKn7{1tK>cJOXJ)~XaZ{ly#(&%A>9e5(;icwwvyAqn$rBPD8hb0Sj zp%FL9LLC4meAEr|Z=cLa5`)HZ3&a{m6LH0kh95@M(aa*U_S)_zkT#7QI0B+Af4T0u ztGbtp+=N-E*X|08CJMME)CQ`)bcWIh==to|MCJ^!f#c{!X`m6|vv!C&0UZ=4XXlUJ zR(x@UKl{}+8xGCFcHi{-{)NZO7hJ8quNv8Ma1gw_Ja#d&RKz{@0+QK*XY)8Jae<08 zmDAYWE>45GXr6RA8wstJS)!w6k;N0brcus|+f^&B5|<7|jaXK&OVRE|>P1+o7Ck1` zWYl>jtmw84xUIQj<5%BP(ZP9hEYx#z^(El<^g;{D?3E%XL=n|@Xxv%|9#JO-dFTLh z?g#r0HKA{ND3D;O;XJs+oGPFSL#JNZkgH!^tR^P(O*ut>V5aXj{wV#uVMiWMS`@B9 zd`H1PQDiF%MGYE3R}cDRTdJ^8c>NjZk#`c+3vkobj$)HK@yI5B`AylS7Q{_q!RlK- zMIE}6hKbX=Xe-Jy-6Mq!bDYo8_jEHUUpbKvG(6AB?7;X0y9=&bHjIVh`%PFf3ne~* z-R|J?F|`4YROt%VYub-EP~oHP^f+d9)N7SOKgLf~JcxzdQm%CT;TRr)b? zwR9=Ed$lQI_72TLae!!{b_ueD+YsM(!o7&Z`t>pyOVQHq%{O2cmhPD@BnBuQNQAj6 zz0jn}t`sb4O=pC8D8>Xl;= za~KK(X2BM2hU&8u=uqV>i6(-Z9TeiFMLmJ+;CJidyDqLRe->99(ocQQLcK9pUtysF z)`h_Vvx8waLJ(;kFgTFeJhr&S*JfF~&^@{4@R+cgGkeA^j)4-xgxynFCyxy^e4~YO zu04sr@zmKKi=#bDI7Fytp@?CWd+^k8`6~AKxje4DHY0Gvu zyYyUOj{zOMPr{QnGfNs4%pDzG&B%#1uLB+q)T_A(;cGU`MWquFKWrbR5>B2mR(^u;x zS*1YX^WsDO*4WI&b39do$;bv=x%a+6SuKVn3sq{duCe=As3P^he+?dBTLZqpMmO?M zS1@KqiL|E0?dh#3(^`rFI!Ot5=|WV9>EFddX~Yvh3jha%wi*ajs~xs$Nqz3E4Dc>f zRq$#1RQdFq(C7GcR8jxwyaz8vk%EnVWAQ9l;$T%JZt?5@LFRbp$+wKs;LM_cB zWsDlaP7s$UA_C=D1uS^$WOO0SSM`u$0#Q5NbG4x#Zu_j|*TPs%D2 zER=H7Pfu$S)1scV9!Sc-92{%e(ZJng4pOuOfLp&lpFdb1m*I$kTlbvGd7S1OF(3r_ zfqA|B0SilD%VEuDj#Q~p>9|q%I$`@Et=Rz4j#SF{Xo< zavpKV*RQo8IS;VwKDYn_#X{*lo~JFNix5t#5{Yt^=(qh1rnOXDA^OX^&+PAtfYk)v z^$fb+tqp{lPn|qup65*y1F#1kjttV1Kr9^%tw7Y#eFo?07QYZoT}N==kv`nA^<*;? zH@>Kn0}=K_|B4q_C=@i+2m%F_gjJ|a<JN{f-fU%Z&cZY+aP{6NBrM+0M**pRy+6U9mBeVwLPf?&7V0W8h!e?ODQhJFHU$GVy|;8CBL)B)pg9ar%B%-bTnGwE zJLAk)!}SA5;WwnAchEKtMv2E|rLaoW(#Dnil_WIfD$Y*=F)0;ygFa4!u&EE(XFZFX zN%LT#QgLl_ftV~p?N7m`j2jN>Yb|e}^;8m;!p=0PBaOFv&BGE60K~2t>mkxJ(k@_~ z_cv!08+J7tDi>&7*%%Ohdza7H0Wq6>yn8qjHh4unzbC76KDpvyZ$gOv1g425e_D`# zlq?&Wc~hC-dPX^;d+HA5$)g-*BMVOEc#bD@Bi0=V+n(*NiV^UCqmTe7SSQY*h7eXJ%ztrW}Jb9)ZN zT#9_)ta{P=J&GN8BCt6AE1u8Ni$Akn1#K{32um1sD5)lh#k^aTC;Uu#v?>((b1`3Y zQ+@a@@f_cwJA8sGsXj}`1^G+^Q=CN9>%2CA6@J>Q5!&jt8*VF$k*SEtr3_XoD^_Sw z`O^pXci0+T&&hNZ%kfEy8cV$Ky!Lz19xts-X64O&uhvC?+gROfUyaX924RWmaGNT2 zYE>Zr`Z>GhkG6L@#9Rh+vj~;?(UL8vExty~s(!7>uiH?6yn88WyYDAwTNbKo`Lm-^ z+KN6i&`TJpD%_lz%s4~owRj0Xos@Ar8}#n#;?2_b2bZGwP8yqN9$nZN!mnd^;bX$q z%~w5*)c_mxUqAf2t#BpIs#5IE!M&8VeF~L&ZjsD)@0v?Pxi}eb5+g-lqIlH2^lW)I z7ju*DV0`UCPK^(b6Sh^a`)GRl=xO1iSu%5MnLML$z`(!$)c&KubX;= znc<`m*jT7Q?V5&fd##jR@76R7+967%#h%YrBx@)#%!R`$Rl6}ADa-|_H0Hf}XdJlN z6bZy!YPgRBtPfy!abrxMQhrrDoXGI_v61@G90M^k=)mE0^>jh6Y=rfIM^+_4?kwAH zsxw{3qhd>ksOwmuGu1FY(0rK2iXdq`hT1l^R|m=biCJ8OV6YyJ-&O|k6&|?mUv;QU zgP#@3zo;_;y;N*T&et04NzBr}&7jZpQQ?ob`!#u!)MNij&DWFv@_E2Xp1E zr}~ip%4S$k0Rr$Z1~0WMGFd2~>wmCNHPKzT&!sgYDkHcLf!djWB&Zm!EquT&<75HQ zZ2)LI?dfn|>0p`vI)(5no8Vi4V8L&RuH4Ku`O%R+ILkt1vrsr0A_y-&OO)q608G%V zsj+plQi&z?{5~?UC+>?P#TalHon2n75HDsvhjhQ#O>l zs}_@@B^LF~;%T5{y4Hn2$@d%n<9SkT3MHA~DE#ruCO+E)M*-A_kapV-Lwq`gA?>#} z1S;qh26^kKO)2O++A7(vHg$|mRrn)^97;#c;(r`0 zRv=3&REzA*?37EZm6w*do*z2bxYAvjw|cGCha9D#dowKJso>5n`$IpJ$}p3Z#Hm~> zz*0ULa`-{*+r_Re)8rqfI(;Op{s5KJpid5N^n5py}onVFdZbH{9L z_o{LiTX3B%%G{co$|?2|wK0Y;Y$rTvqDU!?&9HD@aqA2s7^*@kQ>S(j8j_gBA4Lv- zh~(4|eR3eOJ@U@^jZe9~&NIXTl6s7*1#KV&k~WMMK9oe|s(^NRoTUm*c^!_^#AY`< zY8w6_rkxY<^yqU7-$L&9;jmcO3l|*1IZi)6ImnGM@0DTm*aa628EX$mKlhNg6@Q8h zSn`zEq-IaQ(mZMXhe2W!BtpPsMHc!^C9kf@XR zRz{8oj$|WA+Dj5D!yuwaGoGSre8Z)!!sJvTEJ5&4?I03kx++ipFf_K*9_EtVzs+V& z_pWWv^GzPPUyqSa%u1*@Q_w4F%nwVLAav&Z3ni@~OhDX0s`@jA@`s7i1JTBv=US8$ zHVUk2IX*dNvwS)wlwlYVLXK)(;QAPR>2laY#Jsrhq`ODPJLD%}@j_%r&muzzV<3ZX zfQLVPW})75vryPII4h${WoS)*&!aDJf5P6m#%E9?Shq5}Z*~*=(U)73Tb52H6chUl zB|l`J+A8_M`@cWmzuk%oj$Hj&Y6m|9c@-ttlQLdoSmQqrQmwn?SAtx{BW5=xO7BvX z)xGiNylCiW}-NIBqW=AC~U2GV!a)#k~WU<7CgpMd}C2p?G}|9r+t zKs~z<3}q`XqKtiOfBWdy*;h`AvmUK}574fp4VKVH*PBF3Xh@s!jOo&F7AR^qAkSXF zg{bI7K$)*up&Acw;sC)*frvod5_G>tXs!0%yg&u00!m-BmJ8=XeWb^ z=T@oklv`wOj+2)(`Q=ZaAW34@eaz!<#X1S6jT^{%o|$wAkz zdoSd2NNN5tSk;ZqyheW5sH6`sucve2-%mPh@@8F=sm1sY|CSg52^H-D%j1h2^9 z0Wqoxfp=EebQqq?{CG8bLnrx8U*1kFvqz)U;M59-Ex?70`(r_aXs^M3Fiufl?clMk zd;4|j{68j++lE$rOrB5hbXXMq2&%nHb_s9RYq}FMKI&ld>n2xt4p$^y16Z8Kz;6x?hU2cqOl7TJUm)n zsU(nEQt6;^&<)-qZG+pp;HxATUedf!DZK)|>^NP`(@>#qJ?$`jddljw+llZ(-QH4P zSY^jV=_wd*H>|9pe7!9DR)wf>pG$m)Be&Kw-yK!fzN#-7y$86z4QzYhz z(i-(`qR=gaseOSr#ls6G9yJl8HkOPu2&+@ZkR)b;WwLro|2dnHa8sc_y7j7?A7ARb zwe2H^G;YZG8AE@VfTA0aAw>o_Sw^m9jk{IcYH;qjhY7QX-d~zkout+^-YYJ+{i+iNzcMD zo(>#`F;)c`19|#+QFQJ4SrvW;d$Wgw8Re((g~eO>xT>t_!yil1!|;cXk_X~+Bfd(Y zk3W36g`N`jX&CZFb9oq~z$dTyBfB>qhkFfQRkZXfb(#^(^!=HK`&1XzgI;8A?i+{Z zy>yEFOPPtqcRyMcDwDAW>Jt8)V{#L-OT8`!vNc~YKIw@5v4t<=k*v3dXt>s03;a$; z98b5!sg-CAK9xP~v3hMjzQVNyraO*lppP@_A*uTwC1>Ox*HM?zN>lPB1PLbn$)bPX zw_7v(7^k$@OmY-lPW@u3p&f?7X1M)6Rao+@k&?I|oEFTaX6+!~xBwyvbXA z`}$^deJ*4e$<)Xa88Q^;St%c6(RUkuRw>l6Qjj_kbHDIryHrY}^z#d6iC^Z*f&-mI zx#`&@P9IO3h%nPij^vL*3o#xI4;VrMJ?_N(RZ@N2$ z-!30wuA1F8XD6iTsj^1a^?rUM%vPfN=eJ_i<0}?!Lp!REJfe9$n9kQtDSEQ>%FqB9 zuOrDPWo|@gr=*rnI$9%~(}TMpb6!qZVz@JxAZ2}gz(sGaQCV9H+G*Jp9ez=YFU&;H z)YRy*B;hPCp?{I^LFx?=X#(lt@R zC&cy~t@7Dc-1Q1BTES7xLp`KESrqyX#5{D23e`GyKFP3G13GwW_-K~8P;t0j`IN)!ZL+B|h2r&W1t%a8pkzAi)FoP|8Duv@ z=Tt3jI})+5S{r=lOvNXY`CUphVCg=O?HXB*tx$XRQX~>jPuG>yhL|G<*9+&VKdczvb{&2*>7BY zJGylOX{t}e%WEnduEu5QxXpg}nHMWqw=cR%LeSW9MK8=&QDv^LXU|Xz`{UjBQPr$#^*1&Io>Oi1+HS!@?NSkH8sR?0 zeI0~`-KRi0RzR^huxEGt!HoWweRwmWTF2U^Tn%q(@-6*#>|D@U_k>!M; zdD`9_XpMye6{(gW1LlI3g^L2BE-i|XfcLRaa=Ra(zjg)P|2LFkQ)!N^%Zb!C5qh#C(5gA^F}i&Z_So*N&GbTY^xhM*1R`MD} z_jZG1sm;7yhnWz;Jm#I9sX-vkd1V%AooLUH zXF}Qt*FoUJyHdSDYRpsvIGFcu4(&;lBX#s;LiI{sL&!kANn8)sbqxy`Kfz2;(x
4zO>^D$5m;t~ubg*w@usx2o!43T|~c4ZD)<=v)^;r<&AErCo%l z6jkL=g>J>q$WOYsqt~;rVqP^BUjieudgQJ0Mmu`F5Jbeh5TKet2pRd^q-) z^}gCapYNAGJZtrq`kOPhi4OGHw`Rr#7Ao`UJPV~J#Poy;5YMy)u9a-^%6r(Cg)-eV zj)cgsN%*l)^N~K4;r62{Q$908+ASgI}`LF|)$Y}bmHsscd$Q2~Wd3?16 zUx?%gZTXsDf`89JRwt{So?ni)bg;f-nD+kbaze1<`<4arq`LgGbKr`-^DQsm1AP7F zA-5Lqvu)XG7BufZUc*+3Gb7Xx!-PO?Z=x!l(E&2)AY2$r0QqGm2?;i=+rc>OhWQq) z4u4+8#$XonIKK6OD&IA>|MKMcMxxw;XbM;m{`~0RK*CJA>QxTI z-KLa^a){?a>(ahM^Hs;;(-$}AN{=pRB)h&E6qWQb`o6fKh~M1!YeU=xZ!bKE^U4{Z zj_s!o!I$5kMlX-KW8WEUZ3tBmd1N2MbbtPck7{6yvCJ`-ma(3+aqO@rhS6jMOvU}{ zQ)X5l1uk{2GI$eJgzNan1671dk~8vR{N7Q1n&HDyP@_`D}4H z`~JO-RgQx@Jlslo+m{J$jh-rKP^~P_KmVvpAkQtm&a1G}g8kdhqbK^*(T-O#s;2Yh zskA@L?tBmVGCFqtTfEM-Z8n0FK5ay}EC1Nup!C$sA1o!3@%4jJUBm6v1iZ%eN5S$= zT}CP2qffMX@+N5qAEchjPn^zQU3qLR)KuYilMsGiH$O7(soxqj!&JU(iRu13?* z$J&oA4rtENoJ}`nE}FI}+c#Zqy?yrT>U9$%ixTGUk~5Jd+Y;Vgmd!slZM^LDv&eDG zd0C~X%R|fFk!m^|Y$Dkj*Sdz@eetMUXu`-l1-$~gq;}jk-H1fL4Gm$oGFIsojsO;XSj3jNX*UF-Pw*3ynWxCe=)0Suf>fc zo92$oYWg-|ACAY=@m9#)-6RyQo1fyG+Y1!8PtwD+#Ghk=3xiqEs1rJ8Qz$;!!-*PM z8kN^F`FUF3+A0rT(8I_F&ejNy2Rmh`t1Nk^el!V8K=G7^3@k6bcJpd{YdNr@VKPCL zy0H=|uG?8ulDkjaY1XJ&RCL0 z{KttPu&Sk>ML3^PFJS!9JRW*kmW96Kz4EuHiidj7K0J3O&S9aFM~%x|8Fi>M8KgL> zm9HZ^Q*ytw5td`m25l_Kx8r?4J#ffC)XehTOO4gdTR#lVZFDBCCoRr8P*$r4SNQ!w z;;?P&8vP2z?^VK-zCfp&O$cFmNXOoO+t%*?GW5G)TghDU&(c>1D5U& zuio;dDafp4H79@S4v@?C*E}9lBZG{MI2I}t=w~iH?KOT6V_<1TfYqXYpDzCFX|do> z8poalI!0#1Q{d>DCgltoHq3&W(?;gC;idohWc)m>WsDbU462|(+s8gJ27PM5j2*8K zU#x%|RFeoX9^+ucS0Zuzpw)JRI!FgeWvowiQEfxanFI#u#p9-Q5<7c2cKZS9)dW}b zm3^Ap#aW?e68%=#g!x{6Q4xs#Cb%`kJ+;3ijB@ zBw-}#Mu4y>+2Kg&jsUScB9UvLox*`Z*B^r_p#Y%lm^sKHtNMID^@7eB>4Aqx)c0fv%Cmdr?!!ooMoNFhW{=tIQOWzF+k|Zu-)<9fF5|_m`Im!AdcMm3cA|X41+D8> zqc0a12f{3rMHQdVxv0bU`{}jcr6g^6`u4JiwYfyE#O8JuYdXlq_=gssx0CS8HQs$D zcRJS9cBl1^%Nx=}_(gTM?>)J@hj;I@H31d73ntZXT|c~Xwk&bXDp}6T>hf&z(XErJ z>DBJHA?%JenJd*VIwOqs7D`SsOEs=YcTr83>wRUmk8G`@ZkKv{%O5|5^&fKL>&%q> zZf$EH*v^bm(jwdOT6T4Y!(PJgY}p+WC!Gz8k6S6`n4Y#c@L=?$RO+16m-uQm&LWBo zndcd$uA=9yP)W**Tx`Bv$f3wxz26e2YVS!2^(Cen?AaSG79?FuPjWDf+Y2ua3(ghq z8<95sgSxLPh{0uMZEn6VcSbXL3S-7G(^_A@Ei!|hRAL*?--WD33i1uc+H7>u+)kHRXwy=`GZwdn~PK9VC5@K>!d^RX{wg; z%*w|PkE;v6tG;0G6MWb2k_5k<7OWo+i%n=pj{i)!^>3T)G8tc=?klju41hV#!=RF(kYxh;r);q1Zob+Uix}$%J z#<}u;Lf16$z~!BtnC%zI(xSS}bGFrC87{U9f-(s?U*a^p8cx*Sd=w(}a*8%?yJeId z7-cSfM0KHmFj`Z*$>zFesX`w?*mcTfk9GOeV+$N`ae&o66%Z5 z<=qNHnih=iVgpb97n$K#!q{ui_00^Iqv8WUitFcw$gG%B)sj+O0teKab6|$ligUZ| zyyKcHslzcUKVb+Ox6tqbs>Wbg0@NvkG@H~5xn+3^XO)d(^D!3z3LT& z9u5fPwT(7E0ZjnOq8*L|!*K%~T~DEEZ!n|k# zRE|l9%`deai}@BGy22H-@!G4Z;@8~<5l_?g#~x`*Ju4X=>;W4KDEZOJ6P)?u`dJIa9-R3=YbMxd9 z)TKL*87hoFDM&AE?Cc+)zvYRh%eutsbuDXd`AK2ePps@-OYd5k$~=Y_kC@qgHUfXv z@Z{TZ;>J61Qa&YlMpE7Ji-b9)H$s?GoJzGxW!0m0BiGwSh60ym_9D$r15(-4s+?#M zsZQP(OR?N18dnVp{M;j~-D_=)N4s-x8kug|F;`ah4M9tarJk=mRy8p|@`3?o}!3A8fKKx<+QioMxd8y>iYKE=lWbANo=Zy)qQx2D#!IU;~JB zh$)!+uBa!ccpvDFi~`mL3yKD7vetW5nGsC%==TK1EjMBVI!_ibL#2J~zVhK^MmePM zzh+4Pl0g+wpxZJwf~>fOwr`Z;gHP!V@4F`r!>w$dM2*-lRLL1#4nM78r_*R(lTsG~ zeE$K;Ln~*GtEJc8k0aui)hFY^O<|*jHT?~H=yA|tIy71s1CWj(Pw~` zHna~OM+~8?!AL+2Fsaq%e(Kq4!VY*iGUXxo#vT2=bPcHi8?oZftYxxL=*3slSB1ns zqNhkyG9urFe0hLhTxQlWLS>fKr6#q!Fh4y&48}7^d4L&Bu@V6W{peLi;5KNR(yl>6 zv8CMX$YrN^;8f&*;y~nTcMCxuxivmj!?4^OVucyQVOMZ)%Rfea#?<+~)(Tom@f+~) zA<#;Fu8DDU7Q{oF0_IsLElf8i5>1)o1<}c65T%e9m)mfRfMrJ7e0+l8xQe!P`9PMzAKL|0ifWU<64_;JXX8nwd|7p`xqj2#RLN*`OX(|%xT40ad+ z(c6v3r4e0Z#Qdu{!dWr|9Kvr`+fTUEtQbPn@0j7uXRuaz@TyEmsOjNqHF8=f=bwm;lWJw@<2<=)=%U7OG<}!A1)^j+h4_l^~z?08dwP z!Q8@K>6%kIzd6?_TI5MyIq%WbhhI@|$M;>8>KE`$UCGli_;f1)?1g&CeT&GoC-74M z;mES_n6#1d%(2~3Lg5J-2Kzq*O1+-=RY_E*`%h|KVxb-}CD~uLL8JNbGvsTbGZI>w zQT~OgfM`N5Ff&{!(8ToA%#l>vk{u!F+^OCpw2x&jbYDJHk zf*dd_5ZPbMfgmx=r|ypSwM^@J4^zrJN6hvCVacSf97 zX$X_+DY0!ltWK&iJ-$AXP*OOUYTif{(Kz}&*s}a~aRwcmR47lwhq+?sc^Bc9NCddk zm=LclP0GDMba-N0qbk|WR3*ajq+~R?;HL{g6o8Uru%@>!odE^ zq;VkIUqKq;keAjNRE%jNtLf7#7>NAZH<>b56d2wMjW5YpJh38!8=ha_rBC++lycR^ z=D`=gazFiQsjh z^sSh<>Q7@>d}pCtAbd5+06moR#-?-!?2eBGbgA}w2=QK-VJJ9P?eq{d(~|=12wUWD z3@*Sxwq7Qrsc&lvxoGP4k6_Ojp791+0Hw!D3;{4O8Uej>w37=D|HjWfzqs2qEy~#a z@~jPD-eQ;S>>hi@tww>AwPG?717-Ul+p^O5DUkOq?kb0bW0z=|_-JCE#Kgd#iL-(7 zf57k4YX=CQzY4~{1nr@@L1|4)pdZcI82|$_iodsktJJ$a&N~)OVMS&uG-UGU@j2Ff zj1WkMv5AFRFdrTG&C&Sb&7335{iF5}+cZ#>yGb{Nhthvf6j%3dkA0lmu%c%ZBLHbU zYKhr=5O?#bCXN#pzZ0?=<$p;vf-QWD__=L7P2WB%-e@PUT~CobayHFFb1CpxG+SqI zdr4jc#uv#lPwg#rsUhpOi3*wmh1{9aH6}5|rFsWsoCNqkssxn`5#8WB7* ziNLM0c1E6NvwMDre4q16MFp)N+_>n|RA1|x4mM) zwh~e$dSz1^X~}WfiT|d8$%|@S&+=VWz8n8O-~kS~oNF7lwYGrHq8zp_R>#|C+ierh zeSRjF0~(KnP<`@(R!*SN=>4tpF@~V;CWkQIQ6@$4vE=VDuuDm&q_>s14M>gPHW|;BTM}35~4D zuL&?NI)ltFng(_W3}Ht0V`z)ON`A%ILOCGufPVqakF+ooI2a7zKtQ`mJF+DhOAvjc z)$fi91Hamm$WRCeJGgL+Xk-g%WIqIaiCBb0pM~4VPAB=LfkOSCCiJoDNNJ#!EmtOJn|H?fQ7*wJ2;TH(C8qAx3|tZ z@!jY24CR|X$W6t!g!Rp38|^`0^xUqd`+?n3(eV=wxc+ZgYl(j1vxbFLpK9%`V-4R| zdq23NT_a6Pi+ueK^%d9IfFav;R9#cv|L3xgi8dXJGSa&AxR!LJLoWEbU5iMjss}Hq8-#UXCeF8# zD0ULR_Wq+qGoa>YfXhQY+K4<>14%MRFHTdjKRs60#v*_@83g1BTdm@!U>GXuw?RFJ z12Ca12fzO74IZHdVBaARu*1(l#iav1rDqRpCy5`qixik)7FR)!hbQ&Fm{xu5)mx~E zSOvX?G7P|uZ3dc#_RztygRY`c$ELOIPe=@54UpUe=FPu$8o#uE5`s^?0{f_ev#INV zqbL53J@+A2R)<^?oFaLa!o^CULFgDXYUVwGg`;uuk4Uie$ozLZso;LF;>hNcMD zfecgRk9|^;Ou{4VzaCC~~zg|d@ ziLi$ss0?1I42C6euE*h;f36SeIlm0p2aTdxb%Z^4{2eRrHTwr0H z=nMlt+_1?K#t!>E8zNlLBuHqqEzy1kt1VpIuJ>d*2Y+P|3sz3Ws5}WUg7{ZPV1F}0 z2T3+JwnU^D6-?W2g*Vn2=$<6)!2=Ct360xVuh2XTCDRWh)`aA3N+b1fhCI%+y7Hywg zH4<~&O9U=XTOI!BP&9p&7_0K)x2cH#f}iPJxKueJ`-L1Q$sO4(&%bB{mE9=iQ#~41 z()Hq*TGds#{Mi};nzD?2PFh?Ykzw#-;I2#&bbU`@JfR+n6Q>|13{?;=rmX)AK}TO3;xi63YG%g%I%u2$QN-L2 z{nc16*x(s_O~YoyO5^K#?gW=!lgX8+OtR+VvJc^7v7&9e4)J!i=97k}NSx64d?gl^ zf~aYqDhiUi=t?VCvo|_TS-3qd4__;vlW=^$)JMb`*n z{g;Xe_Qd6&h@AYLlMO<9_70f^47ra44prT;KW!=5l{_-2o?^7`$89I{4iUFqx+aGB z^I(tvcgJ6@j|W&qn;wm?JZK}$+{**Cb^-on@!ubwX1>W8qze*AOR81wZ%+|pu3-n% zgDMTpB4-)tFjtMq1}q1REmsWhFDav{MXbGw$JuoU_BCw&`q+8f#kX;;HJ7tf8SK;y z-yyIQ(@yDRy3vID?(0r1caF%G*Vet8@W;K0*mfdrx!om@UWUlST0?`Fs+P&MLEk4D z>7$^pG{biHoLz3;?IWBK8?TLAD>%dcsp;}Wu@Tj%?4(P6^}yLo>gHTWf=icLacf(} zd~%N3x4HM*KSzz*hY&`33pQ{M9))D~5Px8DsF}Av2ie8wubQ=9ty8tp@98$WzJU2S z99x_iK8EYTe$QBTZehli@Sd>q@j9Ws@%+dsN@FH7$Z?FOe{e7DgBqvs5p#R>dmHjj zy$yBUGuR5WFW*j zT8A2yML_G1rk${*msseaCM9L%I^kV$c#&9Ew(XY!Hb0XK4n^~_=GCWz+hna|Q?&K^ znct2X69~)McE;~=A&_>aPhd}~VbfP_VHfMK(<53J%hz%<{B*<=w6|=Kb9nB2 zWiCV;eG)}F0fH=jV}eUtxrtCVoMfFetwmHHNvqp;QTzW9_vYbHzi;2TQc00Yl65Lc zj8e!_m`Vsq$i7S^dkD$yt%N8hghHk)2_frPXY9M|WGrKsEi=~HKfg=g=YGEH{rv9d zuje>Abj*8Zt~sys+Ro*5zAoE7n-cRE3B9_K(mAZ#dO>F<u zHLeol!DE>Mzg4u_K`_-5M)IYZ_|J zLB0oDt)0A^#MBXlVl}am8y0&(U{PGYrwpxiEdYe;_dMYv5`a0jv<7xLwN|9#nKIZ@ zqE9}+1xzHwVU!#y#eDlxbaZkeT_EDux^2lw%vj(pK=A=D zn=Q6(qcZIZ*t)blpIrHZnc6~y`H{J~;$)mxXuY_D$&+h~S8OYb zACA(7+S}wbw^dSPs)rtIfTY#+|CA|5%0RWo`yd+)K{|c_eLZCrd3&e>M>OIcrb);= z9rj<7tUm*K3gEd8wL zKza@)nY+E_f2y{^(BN+8G@bJ#w*e(Xnw&k?qv^X<4YjnTHi zYta&Rdz|mGZ|48Zns<>-&gq*CnMobm_CX`hjg%0wD4e&ykY3u~Sub>kUdIsLe3y>#Y zY`KRoJ$^!C?tR=bUP+O9qRK+2-?P_e(2SWSNQauiEt{dC0+L^5fMy#D0I64_A;ulW~gl3#L=fkW*$% zV`}`Zm=j8&2cll(zRZ13{%Nt%$1_wlcbTA9s1qj7X!K-sALtS_+kURv#rtCF7* z?Ox6=ZfCH9(nGm;qiw2A$#6k%N9e7=h4Fij3-;+WvLA3;E3q?v^_@6dt?1X}$2xqD`^`CiUuW)6i|jEY5iJzI5~s>yq%LKyJ&)t4J;R}QNG^F^C-B6=IINF(%1J(DF9`3rr7z&+GQXHE zB=EmXbX0X0@NBWjZ3$19x1Txr#@dTd{=&(OgKB+Vn0WeVHK15Ay=>~lA2DRPHS3I4 zwvBT7rK38D2wTp(j5w+~d19`rgs6skg_}I);G$Dq(!b5QC+12{z^7V4`=ZC=htBfd z-{;ut&02TGHONKD`m6WZrg7?YZD$S_SG%VNXEAqP7UwtP0~vG@M?twLALYP^`P}Hy zsRI{Ai^p>{mVbjP#+9nAb+#BIGp$r3<0Z@(*~Nc;R&zF7t}HU?zI*zG--qO%c8LUO zQbJC0bg+z?MzL%I%WP(-Y@D2RdG#l=369)L_B2~>+%9eFK3L00UUg<&o1wsz6WCXULP{NmW*{Y6>yv&5Cms1jXPso+zVr(6lzpGNo=-v9FMb-~~{8pb@Tl%K6WzI_F^1VXS@gB6f=fHUTmxNLp zOmY75Dw22`ID~u&lW6K>0AOe8G7~;U)P3=rZjk4#La5!6lQt!vR(|SqWZdF%uT`YV z!Eayf)*2qgb5x#)X_&ENm1nZQqy5G57k^ zI~;h(Oi@M_^#P)_p|2Kx6*cfQJ2j`~gkSd=eyLl#R^+ z!Qdqnb&k-|0}JM<&>iU@x@K zCuh;jTz=m%veKe%D~)c_&ov?9{F=iM4_8-m?HXPSf6jCCg+faVyB`HyXc{*U&o>f{ znOKgW5ZEnKE9^JV-DjjXVh&BPs&|WIC*L2g<`%cyitSmP3Eik9*1PUFUL)iMQA+TDPQ9~TFR_Q6%SW&a#6Tw35t;^wOvz_Rq6>|K)mK36 z{HcM`sRg2sbG3EXHe&VLUo7mLR5bl2hZLQbz|>~i&7l{CMROfBNFXq=4v^@WQ zQl!y*HBwTL!t=fH$YFTxCl$iWlq1aZWfg&c1pm{vI0w{l4S-y_%ApzD9Bfe-P}qUa zf>_@_$i0@|#|NBIo+i#xK%GCxl}^ArJ*%xDT41FM51Jo&`*M zD%nnp*zR~J*KKdK?a{}Q#|lo`&5C>yjJ0}M4PTesz8ESGGvL;dO<&EUiBe%1kI3Sa z7w^{Jb12*TIiqp`>L>sUjfR}r9L%H^SR^!dQQ{HH2q$_;u2aC?8 zNk-T4$h^JnR^B?+EL5Iva3=SFVhI0$(7Q)T8@JbGvbl4Eas3qJSmn5h2wXS1#w2;nHzB(>5{eSzTg`7nuRYlMz_8+9#H zkr7q8Uq+bg+eV4SMAZ022bCp=o5dXUej+g=jofEOT$Up(P@8fe2<5g`g`Cen6Y`); z{Ch`|iSyh1_9_odRNQJNll}QL7zY`7AR55sM-l|V^ishFp=M+EJr=v1-x8}4;lOZB6Q%wn_P`EAnWqb`ZQM)1aig}v&1?8FP5O{K^xD#<# z(k0jVGJEc1#puQHhawVK4Z*0Fo2}mnE3dnjrIx!&Eji_X$RBi=M-0d4Kj%nQS~=>> z;_{nC2>vS+M5d7B1!JbVYnTEnV(m!fgu4d-GGd$806;)=9<{3$s1rv&VM#+%Hn$Mb zfRanhxa8Int^y=Y5#K%Rocdx*|HxHiONuH$gvXjWo8NPOC~soZ7PZXUL|R9C@tzO6srCT<;T~(srQaY~ zvIk4Tzt9cG3UPjl{iwD2ycKMKNNWmA%MA!^=}ppA5hXuWY^J|-RqmowX|NWm9s?Jv zD6ZvJ(c_m-f1!BDb+3J$(aKYtLCuCP%xRoIrm=X;!=lezOZqZuSSkZU<9qv1SIU|* zsYW1T`WZZx*tNnsrF(Ee_?(I7dCSdw?sf;s#G$R^r2tm*%8RG(j*PgM_9ZN&H1jMW ziA!C=T$B%3As~&OKo?M&3Q(HLJD@cJijCeuID{iU@LB~4ke$bIA0JPPe9cvCTC-kLnDRut zA|K_s;&B&SfgQS>vlOW>8cH?Kq1gKU9Egh(mDKd)$iDXQnuxMbzAplBwFrHEOir3? zIUw!vb&Ld7dDox${tm=!_EeIlg#ERN%N||y+pfwxbL}Tnqqo?UsS{|UK%h&}!%c-< zVo_(n;Z}v~02|V6(wBl%dtuvlU?m#IKv|e zLb`}wfAj{Hh|hGl&(3TE_5rs54x)O3`Ic(>`}S;?coU5fx4ON%#lutBklozL18%;m zBw|KRm~!Rji^`bNJ?zNoW-nR6F-T0W$q!^1mocSbW+caB-W6iazq%G&|tQV zKQO_0X_Fn_z!CfW5aZLMdExoNYLNb_m8yD%n6n{!G$YCH$4Fq4#u73V!1D`q@1&wB zWSFWecw>AAYh)RKnsGGpiNXKSTP0RACz$n}+cOES;n0V5P=awbvCmP)O0FR1@<1c* z=NI&fyH8>5?5nCT&cpWf@4ODvEQbb`0p-Q*di01?y&}kd@e-)FH@_2z+5}+^z(S%; zTqQ8i%KLi)R#7n7`8N?io3{>;>}sX(yy_&mjBjKWYO`*{tmx}IRb}!1t;eF@us!G9 zRWTbjrhKdM$=vXkspMYYdyeq7^YF8I%PZZ#+uQ}4PJsG~TD-K*BHC~+pa!=jK+H6_ z>rOE93_KgyvXh45K^lT>$+MZ^;X32kc&}ex`Q@al%!!|SH>W~KQu-1IPbw@bWiPqJ zjX11v9qq zN*I$be@cVFjT43@m3=@seu*l;Ol+-hwe9!IG zhf)XW)>Ylb%G%ofPa!Vv9PI%qs5ql|FgGJ!wz6rkOg-Y(j47X{QTyAPH^IgC_*WZ~ zRy=N^bogDuGKXt(yYlKeBeO73d^S-hIOVR_Alr6@!#3{Ffh;dK zK@49Y?O!DXsnC~Q4lDQ4yqsw5o~|l5K4K{POMA)+Gsn-PA7yp3`UhWg*T* zBc>dv@B>wom=9^i<-!k4@53bu3n{sgv&{v0dpOgmi7Q;oLnIMqI01zqrhugQ^i!x_ z&i@u-{U2n={c2RB$K<({k%_nDNw8`%T$px3jQ0U32zBY_)V5zw<#?qo*%tS|C12T* zJOeNaIFX|Pwtcl3O};Y@kt!CMy?{};1qAx^c5+-_AMO}J;ONodsT>Coe>_xwnSKkD z@pw&l(Z%u+4m`r4zfqJfz=9%0WG~ETYA}K~^pqP7M>+r=BXv+22S0Y?v##7T%gGAQM`}JlpU$f4ow(O_JZywwKUN|)!lpnQRRv<(Piy}GwuY!@e z9at1WV!{I_spo*W3X833Q@RN1exk9;XDRQCL5lX?3l zsAqa(uQ*oBh&*jmNDs^4ACG8yiVnpZ+FrlCqkn8Vk$AsCRnT z1jGK-`imi#gT!DnBWwkV9Wp~NHabW>=WCv_{+b%m(fzkP+uxxXJFg}3iqfv-Yivlaz+*^}0^wa7!#`uWyaTqu zuD4xcx?wq1RS!UpX|1fTanRq9v(|F!9M=|BM`auo?()* zp-J?sUx%~x77ud0tr@OUwR`5VwsvSsVIf|n1T>&jiK|l7Ysb`a?$a459@)1pQwfBQ zX#msB{dYin!KzNuBrI&^5KObrL{62}j-BJs@{IG0&}wrI%xp1R@!faj$^(isrLLl)xGex~CpA&7%63@j68=Y`4VL5nYQ5O;EtcMrRBp0Qm z6vYI{DQ=Ume`+y*mUMsI*2{MAg1bfR$LfwK(8oocqyEA~`sZMWE7mS8kB1xAca*gL zakZJIvt+5pgOW`!-cBmZ?4BK&-1mZpaVX`)T`h9rRg}~vZeN%mEm!X30$N_n+1LAY za4dQ5#|4i{FzO?L2)wI-rP?u%_DWiPoM17U?J2uqy+fj(&-1u?vzw~>#>!v`$*cZU z3JP82fSh0k!!HGZA*75Y-HP(SouOCjeh{a&{lzlAGt{zRqy!CqxvvtT`Zd?FjD_4e zyJwH5D20N8U_Nxjs$i`_u4jP3R+H!&x|%ZeV{m+2lWmp%T#SsAr25n+yS<}tHbw)S zY$NXI{Q7w=qY#7@qW|Oy^r|di3;KG4K?`CtF0GFFMvK8_SdB1gA> zLVS-lPu#+C6EupL5}XfS?48Vb9V6!sc@Uhq(({2_exRAJKb6^LHHx9$>&rvv@gF=Y z$B?H$k-v#^+1Q7N?bCLD8d{z9eRJAh3~Tv;v@dVOtv3F`t&uKj3P>d1Vx|d=*Zx9C z$Z=h#=&jhyZlB!JTc-`z<=6Sm!vA97+4uctlZPZy4peIQ!2tW_T)J)uZ#xDEbU%dk z8#wjQn<@3gN8*{zUCJKjxN-uLm=8WK$NZ`-(jQ zY{g)c>8y3@_5jFZ6G1$?)$F;W;>h6czNz4D+RK{B*SsL zF;Gmq(_Ht(noYzM&l{!aobP(GPs+tud-E>oSXT12IbRj^=s%Z-VDi{BGdNQ&fc*D+ z2w-A}ITsMW9)rTHJ@w#x%UY|a;PwgjF_A6H|NddN$$$E;;CH5LZ5Z%w6V|RY(@NTQ zNKj+ACvdb~Ccs8l@)SfLbdj@W9>tvy8oh7P2%69NOhkoE5YeHsj0*#n&QC|YSMD1t z+C*JG@F``U#Y5A*NhynP-{Oa{V^icYy}S1R2sUzu@gn9x!`~VCYrabc43j+Vsd;)k zYztPx)U|Yka(L3Qd+cE0Q2^pBbM0U8aR1F~RumZ&j*4hJ$1N*C8!y%>8dfaOU?ZjQ zD{+Dd1aLmmdE*Af9J7-&sEay?@EDNd7yXYBhkvO&_&}jDPMys6xt?d@HI?5tuaFTIcaLG+mIoBnsl^b+OogG%62 z_r>l138DDkjL6?VQzgH}AU94)JqKD@u9y#X4Mk^PNONY1OO4ViXdS&c5#>G4mmdZW z?-?8)N|#p*L)Xd$Mqa>Ky}Gi|wy?pA^wLT*EJ0-6Ne#z9OA~0IHDLOG}`jv+o(ty3&RCp{w$wV}9_$l!2u4$ZTG@z5Mi6kPHf|Wt?bN>~ zOiQCE0wOMmUp#iTn*iBzZ-a|`4$+9?us8B`Mn#BV3i~Fa@cTnQIF6g04lx|fkps<)v6)`b&sOS z5=Fr5H{95!b0fEsNSGDYEHYN=_|n1b3voh8<_`x?C>5Q0FHbG8n18srak=&bF%ZET z8ZUv7lJt`gu&fmN03E+y5H}r`p5ZkH$c>9r)5Lf>==aGeSRE|XcRT#|`8=ry-QUJZ z6XA7L*=c8XkJ>FErS4qtxEq>V3DZ&h+Sq0;>XDs_l>z9eW^Vvr+W|-2gG~eQ+0}Yz zLzMg)*!!Qrm~Z0-EC@`0L^bpQgz0nnkO1!p4Z z24lBA$yfq_vK>(T{2E=i=-eNm!9RZx*kn;e0)u@AUsdxJ(S+JGmIomru2tk5;5;@4 z;o5|$fU6`ArVWb5h5w61EUyGH5J83-L7pGUNlteNW*&hZR%M{Ss`+&`aN=wOt*Y#l zoh+bQYk#>M!19fJRRMK%uu=!KLyBAsX$fTLL$Y@od>+Dru2}y6cLg{p+2uGo8S(`# zlC8Udky+v#dU6b@Sr*Z{`esPx z<}X9x%kU7zR>DvwPn1ZQhs3cl$Ku3@u?42>JMY&QaxZIryf?FDhQ6tHO)<5~0RJbg z@?VGH;q(wNgCm2j)zV!GoLN+T*5i6(1vN58U87V zi6W0TP-7A5FO~x!T+Sx}&pW%gU=>4-Y2%NujG1lMDPvNdQc#gPr(Edi-4eOPD>x_VR-m0Pr^>+Z5>jpTPL}qOo%NqhE0ICf00Q3Uw z0@crhBuJ_q3`yk!@v76n8UEW(2SC4U5cF{52`8pNzY;vBJ#*2>>$rS(i1c-7=cgQ> zheXCqV4rz3EiL4FbBoub+zf>|TQhjh^;U0fXM(H^>(ug?+(%1XC5(BK25SKHD11s9 zS@sxC;_O3aBUZjv zXf&oK#g^ns(GwwhG;Haa<3~n5Q=1F4>-sO60kGW}!p80CCBQf&{^#ql#~z|KrNnk3 zsT5#sP(Y)3d>A?iI=B8&fHT;9{#^q}?@^Sq;6$C&+EMqJ##4g&{=Bgx*}GF+k2}#BD&g@fXVoQx~5zCHMK0{7c^YspdP*sw=EUG`kO_xB6@erdA5FfuxF%nYftqw(%JH3$f{e zIbV<=>CjrGaY^a3VPG2|uLSJ>AC_nAT1U`%OqLn%z!-lo`83U#M((!9u_)=~k+pS) zPGNec`z|ZY#tdrbK5OdveO#Ph-X_W+x`pG7g4Mt_fzImk;(K#>RrB7_w8gkm8Czu*{o z6;I%#mJD3L`A|?tA2=9wKFTJHeMw28Yd#C$TTg$SFU+X7pGba6r3T8TJp66QJUhc- zjkrCH2nk@FBtI=@vJd;~)0Be=-d;D#iRGo2)csfP#)bB}zpsZpZ$}d*Wb=W(s z(d@!&r;HX)sUz2g29u5zYH;BvqqWaOSOy)a5j?6fiM-*xWD#acns0DrYfUG+E3@ek zr5)w6Tr)=MFIGnl{&?Uv_j27#rjqSw9=&Jn{VD>B7k?bafbKQihyFyoUB}rcU z&`w9?KAkEvHSl-K$vUC<=4~3^LDPF(IcpwY&yAm7Wi$=_SbCWCXd?+z>}uH8DMtD2 zADHe>Sbotk{YmJT^jE&oO1F>0)3AA*uJ5*MFl-lHkGNzyG(DgM-*OeuN!3KW{I>bp z+rrY~e8UZ|5YaZxD>pjy_A8qNxmkwb!uTORZ+B%UP2w8eLifO;eqM^Rv$bi-v1oPl z)~mbcari2fa@>J8aVQBEo`F|gSxwFc5ivyrvRf8I7?%V*)uf3}315|A7nqf+Snj+u zI5J`|>piQ<`^0AC%{-kc6yP}HD>Q@WZ2DT-EBC=k=~?e+2m`OR*zrnt`-5JK&{nd? z8-@&#P^Th|Zp5CcBAtytMe|=qk^S` zM$OHSy!C|R8(ggTg&d)j&zX*ec(u%*9o={xYq;eP=@8RBA$K+uR4X5-HM(_$+b;U? zKZ)F^tRBogzcTmjN1`eJQ^vRSmF$v|;Svh$?2;L0b6EOw7i@ddYm?P`wVph6-(2J` zObc8zYBqcU`lB0So7Pw@lY8+T;-NlP_iQQj)URO{=+Q4jAofXzZVV?jPp8a3Gz z;x)Nso@9T96<5G0{mwfEYc2Q%fs&HTh zk4NInVG_-!+oUs0b#ExL4Pt+SomHNToJ_y56$Va&?mVY?Bwpp0Q)$Ysp|hbsgp93- zZ5EEY&aOg*799!lN7!$>gM`%tM3C8ZIeWHzIu*n`apOsJt_mvpM-^sk5J_(2dWGED17dF7oW8GU&7^!OM#&w- zqt%_KW#B2CG>T*VP9P`z3M`KrI%q(bq(`0)(xrf7=*Nqnh(-#@kLr8W{Jz=^x42JJ`_uQE90BR{+geoLMiYutPq`_h-|V{t)a$60lwxd>g7}HRfsGT&8&k>4@;Tu zoqL#O!YY74Xum|Jf}+?F-J7`=&)yW&MP>F@$2LJ6bdd}?5*Y@-_f-ZyQ*a@x5uHT3V-MW%!^zu6*&_8h zeyf=Cx*WSy7o+h2R!i7Jc51*Ks#43uFKiDEsmKK1sOnqxzvF2ygo-Cswhb0cMn_p4 zev=oxN+153(_r#6wcln{%(=pAB`~z71unOVs&x8A-CA|Y>tdQa?I^ zx(~+g03D(0lFW68%f9H46<}08Wt`9LGhEO8lH&Z}lXOe=s{>N+PpGSNi_N*DeI#kr zukLZWV%H!fUynz=lC3tF96gU1S@qmojxxNJ7c;09bL8l2uV+tw@g)5&OuiqH?Ze>H zQFn8oRU7qc=68M47KyRwamWb#h?_*gKxv)R0)c#{8CD`R2mP`HORr~Z^EnAVfeU)9 zbbWf2)85zXRqiH|?U$-0O248%-elfWu1@;_%bN?Gm_6b0@h!CUy}7I8GhMI}&iQ=0 z2u8W!FP8HwOI<&T_CH+nzxgR~+jpeU$<-j|Z2Np@=f%Y|U2}&qm%w-G!?KG}QdN#x zba5EqaQ_Ed-QeB`U~7{g@;PJrhoMLSxW-E{&P8B_x~q)S$xd7PM2)TZtm#e_?T^N$ z<`7v!Y8qpFDz|7pOz}Ruz_WQ)uiHbTFyh_VzgSLqPNS$>zzfqlo!_>U`;1CcFY2?a zC`;1q8`pGp9&3#nOUGMA`|chwR#HRp8_QY0FS*TaB3u``{LTX|kXv#;ok} zcB}A8ru}y(h;764f|+6L9kOW-@`iOqycFSV@uYUh{YQ6&u*MvjN-wTu1)lMjA?nt3 zh45oW=<=T~&(lTXr5&!kVV-`!n7|*>rrswRuXjfYCwZ%*a>{VGXluZz_hVs&!QA56 zB9u|TNU=G)Z0&*DH=Uf$ywC`Cfd+~`&T1HR0>3E&a?a^G>VFm6J#@1wq=Zvk)+bCxY76VK{<@@SB+VU>v3k9;HA75544#*h>DocONJ%;B z7Mo+=9(QKNuQ+CX*%KjD3>~0fBYz}`=)~4v0-QQtb=^y^a{<$->=5taT02_N{s%`J zdfJPFDhv67-FK4^CAf&EV^$+I7tO%U#l5x=+k){Ci+WElnOxkv#nKvW5wZAh=5x*O zwcZruUn(O%&$C>t2%#sIrf*l2WEEC_%(NEmKcP2!)zbza{YF^j`Y-XzQZT2A=8(rv z;hom{n~Rqd9tz~vCv>ja~o-5_>Y8*=BIpSGW4&b_N}L%!+`fv zdycM_Nk&dLzq(MObE8?O1mq`u)zkME5t{CB#{Up0k9~Klj@jA#r z8`na_TVKqJM6_bIgoje(97g=7UY-t3_6Ek%+QGYHkqw zeUl4SM$y^dobq*p(pUl)xh+#SQr)zS)NbhHfJB~z);~G6|K;HR!~ZIFJF%ttPN zk9V%Rv~Dd2x;FX<%kxHVkv)H}WspQE#s0o6-zfOy?}06251#libPT*f*>xURfHF<2Fyu|w_EF@9t97Iag!eGdk7lZ8zT$B=>A zM{S`Yj@+wRIQnj8`yhJ0s*u8cVmV&GE78F=mq?b znZJ92fA~HHfJ1B}xKpcO;wQ$19G)AQ9{i^#^1%e=2OML4BUP7twk!Cw=|TUSgYVSY zUCGfYEQfR<>LXBd+*Q_QVfijMeG5}7pUK<}Tgz{{K z%39b?v}}JeYuX(dv0E_eitq<|5MT}gs4#Bp+V8GFgJwv{?>kM)t+L@z>~k8*?Za(iV~6WotNdxP7ohmU*&8k2!&_b+gF#Nt4(rzRD* zwLbl&G;-=^Pa6D5y?s50HQNyB^Lgv*LD4Hh`)Zqfr~BwWOGs<5IQI+@oeQELk;C(( z-kB&c>%|0a2W_v+wEk%xTwNsRFYp)!HR!nce{aNru{bzqhXcSyCS{usF~pI*Jr9xh z;3%NT+R)=F9YIlofV#VbE;)bpI%>`;5Iz%2j-?ENbw*StP!9gxQZ+RI`+}U3fXgES ziQD3DJ&%pV-dCpi=s#tymUUs74Nzg;2ig_wDR{M1122BrtT}cM+P>)cxWTox;OEK7 z2_h<^kBoyG1+{}3XZz~Awhk*sC@M8=|QfjZD7=gH%|O7BiDx! zi#-MXJOt7J*YfrF8hy4`)FwGKnh8ZiZ;CB1@RaqJ=t%ha*(a(+S`I(iWqV3Pxi!Dz zqO@K^U+l0ZqJ;tH+eciFSni<+_)Jx+-X(U1Mk+Ud__7e&>EX%}&SM?#oZ@72P0TAE z?VW5LRgx*zh&$4m3fXC9E5$>@(e@)8hhv;ie{?w=_N?=#>9NBem4bGH#u;d`7}Qt` za^TfC<{?QOc?Hn%{KfJbw*d$H+{AbnpsyKP)$d#jt2T2rUlm&QAnl(mPk%h12rk3B zgP2Tcc2=!}1PRSo(uWeLB@M=NPOl#b%9J!Vrgwi!v%hDVf6j$vp;_5!5h`{C0R1EO z)Z%fGa+E$O7>gV+lbu&?GJTfsrTYlyqBYDMd#rdfpHT_9N z*vgS<9pgqbl@hr!f-7;Uh3Xn-=gJ|cu1c$WoBr^mdHFfbMa^&MU3A?cET8G(ajNjA z(r47-gU){3=Bi3w`^!h-qEGCWm*aa<@3qJHE7y*)>VdKvF@IAQ8B>ce8rvUA*dGC<3){&$+bi(tYVA9HE4C!j!7({=pNV*dlM&PYf;X&eu1hAd zv0RnEzWUxDNxSCV++14vcClilb8kpDwlwOXw%_F!6HvS1;ie#YcfVxrm|a5i^sBh3 zdB(xx1hPUQh};*$cE)W0WR0u{pz3=IqCd-44AtQCP=C6*BwQKR@8M@2^QCl0IqR$3 z;I>TUn>*oYOD;Cg z`$fQwrW+{ffRz1K3(+^ybk4ZtbX@DA_KqfR*5<7i`#G%!NkJ>TsM65F#M^b8_c0cG2Jo`6`0Y)07gP#I_)NH21qLMA#I(cp z>-$4SAICUg+g;%S&6zQ?h2gMER?$xRsf$yCSPTw(4Z+xE4uZ6qnsbCcw1 z(p(5|7nPLTAa$GPw4ljVgXS1{d1OIOOJoFdSgIYrdXHPhQ}uXj@;PcTwz0NYtFf}@ftFY!LVHUX zlOgsggNd_+je+A30smDCwV_&R6?iJxBhX*d+4`ATt_3kkQuQ7)%-19tscSBfHk&6T+N7_dLEe;CaLjEq<@=`0%WepeO9n zOQ?poxAZ)7AKCVZ@YvZ_|L>J<2k4dl-=3|^r~y(MY%k`M*+Ln z+xBp!Y|`anjLRu2xmPvxmwFJPWaEnlQM;~3dZkZNBjL?M9*W!S^x7H_ALq1S@Sha{ z(XR?j)gZxGQ|7@>Bmef(r@-8>rkm{SWn?JoFBUvlr494IyvFJThSw8i>cufGagXGj zn@(9>Jj~SsuJk4e=NVXT3; zKZ8FfMHb6k4xUC1)25H-imbwud=k&{S?u1&Q@*u1h3(V}foU}n z(a$#sY#L{LovWS|+^YQ`axMFo;k74MLkwZp;C5GmS(J-}C)ygik;B4sNiqwC9i{R6 z!oH`KPW3&ag~nOPt0royOy(#I|N5Il;k1B!tHC4qfOCr~B$ zmo>C{^P4)p()R8SX!yn@aoMPJ19XF5t9<2R* z>(^cRd%~kB2s7Q~gV1lT1~lm}7A3<)@%4-1av`jn*8&s~2|Movs$6f*LQFHgH*)&* z=kDt}AK14TJQB-PA#@GK(smO>W(0j>pnS?yzMh86?&$7MF4tb}MOE}IqLh=1E==PdD|JiEmHa-)U+AvSW=J@SdzJ~>lSRMm=E7f= z%xB!ZP>oy2r-^{=>6Xg=1*hI={U5+zdmA~VSB#=KG3%I?g&xB_W`2(74(68K@`GVP zNB<+e(<7w;+Orc-L)}tlJK)iRej?ku-|7YKU$DQ0$r7;Z4;{4zcx6kF zLhD0r@vf52-dq-5h$W6mYmnxPIb5WcY_ya|{-`)gWXfS?E zeLM07YH0d3Eo`-;1nE22u>K)CHDP?_I-)wPAncJ_H0Z_Tf#U(U|NN3?%I;kt0u&&k z+aTN!oIk0%+uZv)db!X-x@F(ZqIUUf$L_Z*`*N*0xkrfVJDZl?b7*vY+g%1|v5ai~ zPgoW~sPT}$?u09i3&uEEl~=%}HNzAGYVY~`BMq%=6hPrx-U@4Ig-^oB;@d0pB>2`1 zMy|@?pJXEfK;Z9UgyoVk%~b230jbngjqhmPs6}n{AG7iJ@kOVPubD;5v%YWPzZch$ z0?c+M4>^o9Uk@EA@ng@UYfmb}^}9FL`U*B3%-h;L_yC zBb4=NU^OVXAciHnny6t>vT&rZgB;*As?y9@Fy>b&`LeKn{j-UH$iaG7$rPKVxC+}t zpAE5kI5E^`Da1q`^-jTbr*@5z)!~8MDo?fs0mAOryycA*lXf z{jnOdQezln9ms!ldK*slbI~m;2~vldYXr_-$(Dx}0+mht1Dkwg=qJYnnB!QIptQr*eeId_MX5TA;oO2yBWp0( z*@#{>5Kn%Up+hFQjpDiAlXkPm6LySXWuN$%f0|N}ZWOP7>tSis)D6pq>zdXnPvna8 za*KvGF~5`(7pn=q^X*guT`=d1|8BA?u>^b8Uu;ma%6clF&4DRHQcg+wW@>=WH&t?`gn%FrgVG7mtR%x)Map~3a}AoD=~Q$;LH^9)y(qgm%m zUd)Q1(V9m2DHbUP6vTCwQo+6ML=w&(zgbLEw6S;AslWM#X%^(}_WZeFr@+!YxaUoOZO7X6)va?S z(@1uVFaSvDxjXdmim?zeiK#*d;GG8)+{V4jKcnId1Lf>ACID{K$oBJpBAWQOXL}~@ z$tQH1m}|60R27Q1C{MFwb^Fq^D5bDu6W| z5Nwc2$S@&FgI(tM!~?1tw%W3ZPT{M%0f^JL$D`YD)kEJ*B5Sy8t0EslUI2cYcuVbDb5Gm-RYko$KYq4wlIo}Y^ z@ZWuh$0Rn0ed1ZxQ;7^O-t9}-{Ue1jw4NS49fQs*MVJ3`;P6W)GYk8U1z^Dhnt_*V z0*gd*D4n92wtsV^$~t{sOp*9b*2z8_cOc{AT*%Yt(S_K2xSNPs*WM2E=RU{bU@wx) z>8EP|J9D1{9?^u0NZDIJegNe=A`fi@_?Z?2Tx~qQjU35JtzeXj%&IT#`642cD$?O~ z(;7NoXynkIBB7nFOT>-GPv$(cTp|BtoK3~DlQ49iSmtp=Q~q9i0@si}h8Q{2KsZ2F zcRf-QKV-xd<fY(@ zCv(*w_I~GRKv(U>JY3QGJ7keVPNQ#^^+{SSCn^4@ zX`k8U{wRjK{Gs;^$taY*KR8H(-_k{BH=sICkI!^*a(F;G8LFeABR2SCS1_0g`f4r*o?9aXQK-FsZWk#BdbWhGPtDu5{f#S;eHnvIG=CC%wvk=oW{iP)?!3wpO3 zMf}>|VN6fBU%Q~L+gp{hwTqF*wo*d7@{_zo6RubFd!3aljBjp;4?J1Y@#sO!;y`JP z;X5VwGy07uqxtrAcaC|N@Lrjd0*mX?!N{Y$V2aU*F~)n zW&RNeR(|8UH>;1 zMV3$rB}3|xY>}mexk?Pl5{a^mQkG;dTliKklx>o-#*}SBOp7H;CVLr72-z9S$T~C3 z7-s1?x_{U2zV7AqdY(U?e~j06IG=Mq=X}rkZ0G%6LAAkn^+34EMQMet5Y`h*ah*?4 zhc%|(l*& zBzZy2vu~P2juh!7?1WwxyFD#xH^q3&jhp=_U@m|P4gQ(c%=j7$2UScaJ5v#5BQNDOl9P1JDf=@$gQo0N}lH3M+w-5nX>ML;ucnKC2#bFeAdEF z5<%iBdjde6t&7oLE!@Shc3(S;qIZ#V`fNLbKl1VHeFC8HLZa`YSi5hzg6Al9U_D40 znJTpr`LT=b>m1X_^E3_p;{qy>CZvh#lN|QPT=b(ADQ)zelHc6Ig?0JYf@&kKJ;z2q zfV)T=SfVd$m%{|q3X76aB8xl>KOX!l#JAO1qnbj0DfMl6*X@2)hvNjH_Q}be1&?z@ z3l1gw$I8}Dl32T9C&n8=ztH3y&oJLd1$}b51B03%=(BrXXGk@(ra8vRROR*W8Kp1G z9+@WhYg%;#gb76)Huem_E_ADXIXou=4L}_ms7Y{p+j64n6E;d_2U#s@P2UjF6Dbq& zf-&%iYw?J==DxOPhZF;k*QWUGI;s6|MmhbgWMe}352iTOz(+$r7~}s|w~ca&NH3kj z#sq{!5)kjm%czLbAKj&W1&cbDhRS@jl+bTSKhe9v8}PoR+$C+BiLLnNxdw-_UfPSJ zNqCE)su7X&IvrsD#4vOwMFc%IeX?Llr9S0qQX>pbuLDx*W~}4BmOk8I*{t^;T|Q1e za?0;od&D2BkL)zR%m@bmn87e4mzei!viUfBcV^|zrv__lhn)}8qnRZJ+I;M* za7eVX?!#ha@qvMN{8p5E-duF*YF;urP~zKyre3O(fxhE_rRC`qsyFb2WyMHgM^Ow0 zBU^i%J-+A+UR~8@mya0jJ533 zyND*U54LK%ZsK1u!ZsN#{(hBK`VDcse!=LCK);i={Zcy;babDC+R9NE4+aXmdIG4npigU=qb6(xR?^!GLYH9VE)x7?E zx8bY&ks~8YN?C$NzfT%Z8hyH=sACQFvO`~Rw21m>Lrn|M2K2(^f zu3;6i%Brr3c_X{5_nM6I3)McI_-&`L@OREZhGnCHI3*P|$@JazMdab@Te1%#%od66 znS#w9l1E+PwZ^tXFVDxyzv|-4Y*LOq$7 z`DTq)t8=d>w5J_+Dt$IkV*QaqL^o&qHVea2WQu}%PV;l|%OamhzBzU1=0o^snSYKB zvm-I5dIj-3<0qGWwZb7%sfC1c!I`Rx_%I_Qr*Ysz9gxUX5=*~SYB~5NqReY!@X$w{ z$k#zomj_{^Q>PQf#BX%Zwy|ee3w^W5UOmp`pabaD%;TIu^Ho<4m2*23oZF$0?#Z;Z zrc|d`ch)Q@`+D9R{(b9We74LjXbjnvbc20tChh7V0Hw%-lQhS*;VWt+L>6p4Z57jj zE0lh>cnVI^T1Jx1aT|K${DAN6)C&91lRC9u(g&)c2A$uLj9Uc$r5mpA*6%?-dXQwT zDGF~I{RTuf!`^Z2{bIAp-jAUm$e!q8D_W6akp-4yvIuQ)8~<09W?r`j>@x!$sKH8e z1z5%6G=iY{1l!Om%jo%;0kN@M1o4+o;p~MUl;tb^I!qzyzMyb3o zFyI$-A*RDWFfY#ToX(YDhrDS7*T)}16k=L*5s2F`XVP4H$>CnW{sbAs>`9qi+!++l z^m0Flaem4mTTdzX`NA7up-|JbCVEqpX33HSrgk$pU_>7GKy!wDaIz~5yjI8^BSW1x zbelA748djT{5ae1$9P3WPRKscKh1~HlJx%Gz#J99_Mm7mg`4wg;AX z@r+nZFhW>7EmnQ>p3ue;7o3!F(5)<@K8HSQ_(W`4gA#N=0Sh$eu%(gf;48gc6Wgi-nr^I?wv*>E@>J&c~@7(v*KSPypF4-!kCZ&HN4t-_ME z*POE_5xCT+8AhlL!J9eb6y+>*4^ExGMOti_1-NxkGnO2=Wn|5BoCvtSvwCds6}yAk zMvr7yM($;)e4w09%bd-{zq+|y-P`7&W}DLXJs)fIo}jV`+$yAS~cVBIFrFH$p`+ttYDo#2sFE3d%jJ! zMEW*wm@C&FpoOVawCB{jkNb^z+QFjew9>m3nB>EteBU5~>#vmEzkepw;&?JkioX}k zqWy)E^S@}C?>C;8auhwy8_eq;S7m%;m8Z>(al9kPGCF+Q{aU<8ZkfqOC5eaKF~!E- zJj~D-*GZd1asfh+pojVnJ|S!0ExSLK3{*nzS+5kq%-eR;+CKt_J17HB+Xu%p5G<5j z+C-BuQ%_}L_j)Di?14z{7Zh;4VHHJZZ`;L^@okOxT@9L@Et8fGz>paLI zQ1je?(l7jKPJ(mw@2y3y;>lI_EXM}3Mel6TquMZOXa?*>u5XmG9zm_Ko_l^+$0Mqb zPC}Xg$%e5rX-jC3mOZNN&VZi5981P2&@Aji9t-y;^qDGEFZ5<~hT-t((6UQLHy;l&Ava>bc>uPYhsForOw^ox?`rUY8E$=JPfMf4_Q`uFo_*P>u_wMJj+r(W&9kTcf_*mke?;#7!D7L)#iBA|H$z(DAy3wW zL#5#?jUYUehqCEUR&^BBE4lMX##1AN+tv7_-fiqRoqrsw7ns*V+N{XIOLr-Xr+gCNp<#;Oo4{^dol^(8K`>gMT7 zZg=42mN9ow`xXp%D3usjuRLc*kRl-`jU;Mw`bnQ3`Gn*7gn2#}6Zx*6JUP1EFJQ+^ zq&~}ljJ;oXs$_oXKE(n{RPkyalkHVGq(f;Fy4GV)Cmf?bN`CZI{dBnj>7=6obwwcD zuwM_b!Fz7rAPx=AOK4XGwt7!Jl`6fi@yAqHc7Z**HnHL1t+I=_R%o{t0X9@nUm9Lz z)fN$2bnv0IewDQFWgalcM;1hS)n}Y~nCS5ZNb;K9-eLRaBkZ^er~{t;{o~ zXvY_$Ra2EstpfI~UK-*JE2t+wt1;4`)?r~LiC{*yu6T8WsXvf`Ny#{EZC^%6<8=*m zKRIb|m_sn&x7@=zOD4oPG=E*l*^xSqukTaMO&wbAsCzK_wN3i!Q-z#-11gg5XvK65 z0l+jfVlBRv`f70>u77*rPdiU~NNi@Mdis*_8KGNe5ctILmf8eW3UsNy)*4YC{%|`R;6V6~; zZ3a*(ZOi&PQ&o%131kdMlENG2`*3Y`pzhRN@$zFjk5trrw9w=Hg|O>MT6f*e$J|DH zT;zF@DkfjBKAMH4jMb`1alSgMGGcQb?HBevEA4R(HJ-QaRdK1Qqf*{?eMnMQ{vZp> zM#%MPo8N_KD6RfMP9jHT! zM9ora7y&0#TzZV34_r1!PYUyc{4eiYJnULrB2nlKuD*F2^ZoJ^|iY;y%A!Cg9@2v?Wv>_ za<+bT{&ky~BXx|`GNi{7`;MAh4}3*hCNtbT&|R5bic>lI9g@QHt`~(-AC4h-VAcH% zu8|eGl$$;8sxIad*;)e_yYH-XF~_$pUNz1Qj<1b4u#txKTIdcwRcb@`CtpXFJHka? z>zNW24^=RO>4kazt^$U9$sX(c2aN)H#NL#o3hXZ?z9g?Kj!&W=UD1!Jn#At%vSNgd z5toI7yd5ka`MgdY>nlrmi;(_P_w&Q{Vtb9s<86HVC(&(97*4P76#H&_lGptR<)2(P zD#v0xU(Y^L-<`VOu;%(MW1Zc}4X<$(5|5Nu%0tU*;X;haaYSf=gYa=vlf|<99Qe_o zoZsD6gWIU0Cfp%b`8=1;C0)ng&>JJd6WCmLS8v?C?m>taA5M&*1}4ks*n9xl}z|@aKop&MkA_0_Q3~| zo+BCkCui3*dIO%h`ntcf$&D>D0|jx^CGR$y<@%@NWx}gIAI(v#V8)NzAmGoPY~+l*Yrgx@n2J zV{M2&O`NEqP;g~fDQ3vkEgIh<+f=km{74skMJvH?y{nU4Mm17R; zB4sYJy$P49%m;@jJuf@cYt1)3Uv^+eNix%sxH9PIcKGK)OnX#47wk$<#KOG13cQ1S z!)+Odt#cHi9syqc!4v}k`&^Qq><9mx$HR&{&+JBroxHc{z}ayc+%|SnVBZ5-n6+Et zn|84AE39w8;+JC?oxj~dA57AqqDQj6I)bcKm(Zv;$ySGkF4lP7@41 z|K;=l|NQi#0|?cjHu_=4Gmt1wqPSJ(&S|e_y1fjYZBYDH>Z)8TdcDL%GC)^UY0XZm z4B3nneywNo3cxUvG}FKT)_KT<`?+5dpS4BU+M4*n^hV#UcO|9912>0CXqGjLp;E1u zh+_r&Y_Zo@@~X^W8BO4FBIPcestigOe-%$|l`gustZeS}20S$Gp!mmY?OynS?s4o; zR`B^z!U`}H4a)l&YWbh-q5K2mYcxMN9rFfTkoM4iWf>%3)mVfa0I+w=(#Q8BK;mqK zPh_JdaC4VIy+OmT+P)W1!zlwb=<9o+)2O>}&M72_b&@f+A4x7VZF~r8#=i1Cxxg1WLrf;5gA)Aj%K6H_8xOHf@5QoY+Y(9DU+{=LEqTn!z~Rqs|~)6h#^m ze?QX@P3Yji<9DYgFW&BaAE~v?C~w8vvlZH2z(`C0hA*FbB*`^E-Pz-j(X6g zniX=0IPd?Q6wE4LSXGzFfQ{}!kzGyG-&_r3elona>^~6X&+IZ-jnL5F4oIB-QezX_ zu;C}y-4(D0`++*nf0+|txWxvAgCp&w+c1{B?bl!e!SDslCgKNnCJ;<+-w0=M8e`PXV4`{$^KEQ!Oaevq6*35w;;@|a&05#a}iIhYf zF{5Hy487#FHGBCfELivG<$Q<2RUY-0k%h;G%RdzO*58RGWyP*b?7k8%*XvE&_90

S>HQY|?q#lil2pSyF7z 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è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ˬO>6_PT8h${?nqeT;@I7;Ip!VP@b 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 \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/logo/PlantUML.svg b/packages/documentation/docs/public/icons/logo/PlantUML.svg new file mode 100644 index 0000000000..96535d4553 --- /dev/null +++ b/packages/documentation/docs/public/icons/logo/PlantUML.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/logo/PostCSS.svg b/packages/documentation/docs/public/icons/logo/PostCSS.svg new file mode 100644 index 0000000000..baf9b1e760 --- /dev/null +++ b/packages/documentation/docs/public/icons/logo/PostCSS.svg @@ -0,0 +1 @@ +postcss-logo-symbol diff --git a/packages/documentation/docs/public/icons/logo/Rollup.svg b/packages/documentation/docs/public/icons/logo/Rollup.svg new file mode 100644 index 0000000000..20bb5dfe63 --- /dev/null +++ b/packages/documentation/docs/public/icons/logo/Rollup.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/logo/TailwindCSS.svg b/packages/documentation/docs/public/icons/logo/TailwindCSS.svg new file mode 100644 index 0000000000..e0e971530c --- /dev/null +++ b/packages/documentation/docs/public/icons/logo/TailwindCSS.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/documentation/docs/public/icons/logo/TypeScript-wm.svg b/packages/documentation/docs/public/icons/logo/TypeScript-wm.svg new file mode 100644 index 0000000000..3c9fa5d366 --- /dev/null +++ b/packages/documentation/docs/public/icons/logo/TypeScript-wm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/logo/TypeScript.svg b/packages/documentation/docs/public/icons/logo/TypeScript.svg new file mode 100644 index 0000000000..a46d53d49f --- /dev/null +++ b/packages/documentation/docs/public/icons/logo/TypeScript.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/logo/UI5.svg b/packages/documentation/docs/public/icons/logo/UI5.svg new file mode 100644 index 0000000000..c54ff84762 --- /dev/null +++ b/packages/documentation/docs/public/icons/logo/UI5.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/packages/documentation/docs/public/icons/logo/VitePress.svg b/packages/documentation/docs/public/icons/logo/VitePress.svg new file mode 100644 index 0000000000..ed6438ade1 --- /dev/null +++ b/packages/documentation/docs/public/icons/logo/VitePress.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/logo/Vitejs.svg b/packages/documentation/docs/public/icons/logo/Vitejs.svg new file mode 100644 index 0000000000..de4aeddc12 --- /dev/null +++ b/packages/documentation/docs/public/icons/logo/Vitejs.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/packages/documentation/docs/public/icons/logo/Vuejs.svg b/packages/documentation/docs/public/icons/logo/Vuejs.svg new file mode 100644 index 0000000000..a6c05382d6 --- /dev/null +++ b/packages/documentation/docs/public/icons/logo/Vuejs.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/logo/Web-Components.svg b/packages/documentation/docs/public/icons/logo/Web-Components.svg new file mode 100644 index 0000000000..a1e3ce54c3 --- /dev/null +++ b/packages/documentation/docs/public/icons/logo/Web-Components.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/logo/cssnano-wm-vertical.svg b/packages/documentation/docs/public/icons/logo/cssnano-wm-vertical.svg new file mode 100644 index 0000000000..8faebaf4da --- /dev/null +++ b/packages/documentation/docs/public/icons/logo/cssnano-wm-vertical.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/logo/cssnano-wm.svg b/packages/documentation/docs/public/icons/logo/cssnano-wm.svg new file mode 100644 index 0000000000..e0a266aa49 --- /dev/null +++ b/packages/documentation/docs/public/icons/logo/cssnano-wm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/logo/cssnano.svg b/packages/documentation/docs/public/icons/logo/cssnano.svg new file mode 100644 index 0000000000..58bfe27f2d --- /dev/null +++ b/packages/documentation/docs/public/icons/logo/cssnano.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/packages/documentation/docs/public/icons/logo/markdown.svg b/packages/documentation/docs/public/icons/logo/markdown.svg new file mode 100644 index 0000000000..efaefee739 --- /dev/null +++ b/packages/documentation/docs/public/icons/logo/markdown.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/logo/powering-sap-btp.svg b/packages/documentation/docs/public/icons/logo/powering-sap-btp.svg new file mode 100644 index 0000000000..260b75880f --- /dev/null +++ b/packages/documentation/docs/public/icons/logo/powering-sap-btp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/ui5/B.svg b/packages/documentation/docs/public/icons/ui5/B.svg new file mode 100644 index 0000000000..b5c1033309 --- /dev/null +++ b/packages/documentation/docs/public/icons/ui5/B.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/ui5/B_OpenUI5_H.svg b/packages/documentation/docs/public/icons/ui5/B_OpenUI5_H.svg new file mode 100644 index 0000000000..0b66b01e83 --- /dev/null +++ b/packages/documentation/docs/public/icons/ui5/B_OpenUI5_H.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/ui5/B_OpenUI5_V.svg b/packages/documentation/docs/public/icons/ui5/B_OpenUI5_V.svg new file mode 100644 index 0000000000..00be266e41 --- /dev/null +++ b/packages/documentation/docs/public/icons/ui5/B_OpenUI5_V.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/ui5/B_UI5_H.svg b/packages/documentation/docs/public/icons/ui5/B_UI5_H.svg new file mode 100644 index 0000000000..690ee70443 --- /dev/null +++ b/packages/documentation/docs/public/icons/ui5/B_UI5_H.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/ui5/B_UI5_V.svg b/packages/documentation/docs/public/icons/ui5/B_UI5_V.svg new file mode 100644 index 0000000000..fd78b9bc78 --- /dev/null +++ b/packages/documentation/docs/public/icons/ui5/B_UI5_V.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/ui5/O.svg b/packages/documentation/docs/public/icons/ui5/O.svg new file mode 100644 index 0000000000..122eacd4ab --- /dev/null +++ b/packages/documentation/docs/public/icons/ui5/O.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/ui5/O_OpenUI5_H.svg b/packages/documentation/docs/public/icons/ui5/O_OpenUI5_H.svg new file mode 100644 index 0000000000..633e548432 --- /dev/null +++ b/packages/documentation/docs/public/icons/ui5/O_OpenUI5_H.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/ui5/O_OpenUI5_V.svg b/packages/documentation/docs/public/icons/ui5/O_OpenUI5_V.svg new file mode 100644 index 0000000000..d272c1a348 --- /dev/null +++ b/packages/documentation/docs/public/icons/ui5/O_OpenUI5_V.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/ui5/O_UI5_H.svg b/packages/documentation/docs/public/icons/ui5/O_UI5_H.svg new file mode 100644 index 0000000000..b0659ccbbb --- /dev/null +++ b/packages/documentation/docs/public/icons/ui5/O_UI5_H.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/ui5/O_UI5_V.svg b/packages/documentation/docs/public/icons/ui5/O_UI5_V.svg new file mode 100644 index 0000000000..79304ca259 --- /dev/null +++ b/packages/documentation/docs/public/icons/ui5/O_UI5_V.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/documentation/docs/public/icons/ui5/UI5.svg b/packages/documentation/docs/public/icons/ui5/UI5.svg new file mode 100644 index 0000000000..c54ff84762 --- /dev/null +++ b/packages/documentation/docs/public/icons/ui5/UI5.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/packages/documentation/docs/public/learn-more.svg b/packages/documentation/docs/public/learn-more.svg new file mode 100644 index 0000000000..22a412cd6e --- /dev/null +++ b/packages/documentation/docs/public/learn-more.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/packages/documentation/docs/public/tailwind-css-vsc-color-completion.png b/packages/documentation/docs/public/tailwind-css-vsc-color-completion.png new file mode 100644 index 0000000000000000000000000000000000000000..889123407f2c11558d9eb9c58b047ff7bb48ffc1 GIT binary patch literal 13680 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/updates/migrate-v1.md b/packages/documentation/docs/updates/migrate-v1.md similarity index 95% rename from docs/updates/migrate-v1.md rename to packages/documentation/docs/updates/migrate-v1.md index 4b2489f316..e238dbb8c3 100644 --- a/docs/updates/migrate-v1.md +++ b/packages/documentation/docs/updates/migrate-v1.md @@ -52,7 +52,7 @@ npm install @ui5/cli@^1 #### `specVersion: "1.0"` -We have introduced the [specification version `1.0`](../pages/Configuration.md#specification-version-10). +We have introduced the [specification version `1.0`](/Configuration.md#specification-version-10). New features will only be available for projects with specVersion `1.0` or newer. The specVersion `0.1` will be compatible with the UI5 CLI v1.0.0, but we still recommend to adopt your projects. diff --git a/docs/updates/migrate-v2.md b/packages/documentation/docs/updates/migrate-v2.md similarity index 92% rename from docs/updates/migrate-v2.md rename to packages/documentation/docs/updates/migrate-v2.md index fcfa286f0b..9adb9f5339 100644 --- a/docs/updates/migrate-v2.md +++ b/packages/documentation/docs/updates/migrate-v2.md @@ -26,7 +26,7 @@ If a library contains both a manifest.json and a .library file, they must be loc For projects of types **other** than `application` or `library`, the UI5 Server now expects `*.properties` files to be UTF-8 encoded as opposed to `ISO-8859-1` before. -_**Note:** This change does not affect most projects as `*.properties` files are typically only located in applications or libraries, for which their project specific [configuration](../pages/Configuration.md#encoding-of-properties-files) is used._ +_**Note:** This change does not affect most projects as `*.properties` files are typically only located in applications or libraries, for which their project specific [configuration](/Configuration.md#encoding-of-properties-files) is used._ **UI5 FS: Remove deprecated parameter useNamespaces ([SAP/ui5-fs#223](https://github.com/SAP/ui5-fs/pull/223))** @@ -56,7 +56,7 @@ npm install --save-dev @ui5/cli@^2 #### `specVersion: "2.0"` -We have introduced the [specification version `2.0`](../pages/Configuration.md#specification-version-10). +We have introduced the [specification version `2.0`](/Configuration.md#specification-version-10). New features will only be available for projects with specVersion `2.0` or newer. Most projects defining specVersion `0.1` or `1.0` can still be used. diff --git a/docs/updates/migrate-v3.md b/packages/documentation/docs/updates/migrate-v3.md similarity index 92% rename from docs/updates/migrate-v3.md rename to packages/documentation/docs/updates/migrate-v3.md index ea8a9d9edd..55110133e6 100644 --- a/docs/updates/migrate-v3.md +++ b/packages/documentation/docs/updates/migrate-v3.md @@ -26,9 +26,9 @@ This means your old projects might still work. Unless they have non-standard con For projects defining the latest **Specification Versions 3.0 and higher**, some changes apply: -* **Breaking Change:** The `metadata.name` property is now restricted to contain only certain characters and no uppercase letters. See [Configuration: `name`](../pages/Configuration.md#name) for details +* **Breaking Change:** The `metadata.name` property is now restricted to contain only certain characters and no uppercase letters. See [Configuration: `name`](/Configuration.md#name) for details -See also [Configuration: Specification Version 3.0](../pages/Configuration.md#specification-version-30). +See also [Configuration: Specification Version 3.0](/Configuration.md#specification-version-30). ## Changes for Extensions @@ -39,11 +39,11 @@ See also [Configuration: Specification Version 3.0](../pages/Configuration.md#sp For extensions defining the latest **Specification Versions 3.0 and higher**, some changes and improvements apply: * **Breaking Change:** Custom Tasks need to request access to dependency resources - * By default, resources of dependencies can't be accessed. A custom task requiring such access needs to implement a callback function with the export name `determineRequiredDependencies`. In this function it can define the scope of dependency-access. Please refer to the [Custom Task: Required Dependencies](../pages/extensibility/CustomTasks.md#required-dependencies) documentation for details -* **Breaking Change:** The `metadata.name` property is now restricted to contain only certain characters and no uppercase letters. See [Configuration: `name`](../pages/Configuration.md#name) for details + * By default, resources of dependencies can't be accessed. A custom task requiring such access needs to implement a callback function with the export name `determineRequiredDependencies`. In this function it can define the scope of dependency-access. Please refer to the [Custom Task: Required Dependencies](/extensibility/CustomTasks.md#required-dependencies) documentation for details +* **Breaking Change:** The `metadata.name` property is now restricted to contain only certain characters and no uppercase letters. See [Configuration: `name`](/Configuration.md#name) for details * **Features:** Enhanced TaskUtil and MiddlewareUtil API * For example providing access to a [project's root directory](https://ui5.github.io/cli/v3/api/@ui5_project_build_helpers_TaskUtil.html#~ProjectInterface), or [dependencies](https://ui5.github.io/cli/v3/api/@ui5_project_build_helpers_TaskUtil.html#getDependencies) - * See also [Custom Tasks](../pages/extensibility/CustomTasks.md) and [Custom Server Middleware](../pages/extensibility/CustomServerMiddleware.md) + * See also [Custom Tasks](/extensibility/CustomTasks.md) and [Custom Server Middleware](/extensibility/CustomServerMiddleware.md) ## Changes to Dependency Configuration @@ -142,7 +142,7 @@ In the future, a caching mechanism should help and improve build times with this ::: tip Info The CLI flags `-a` and `--all` are still present and now an alias for `--include-all-dependencies`. This flag (along with `--include-dependency*` and `--exclude-dependency*`) mainly controls the **build output**. Use it to define whether dependency resources should be part of the build result. -Please also refer to the [`ui5 build` documentation](../pages/CLI.md#ui5-build). +Please also refer to the [`ui5 build` documentation](/CLI.md#ui5-build). ::: ## Removal of Standard Tasks and Processors @@ -196,19 +196,19 @@ The following processors have been removed: | generateApiIndex | *disabled¹* | | | | generateResourcesJson | *disabled* | *disabled* | *disabled* | -*Disabled tasks can be activated by certain build modes, the project configuration, or by using the `--include-task` [CLI parameter](../pages/CLI.md#ui5-build). See footnotes where given* +*Disabled tasks can be activated by certain build modes, the project configuration, or by using the `--include-task` [CLI parameter](/CLI.md#ui5-build). See footnotes where given* --- ¹ Enabled in `jsdoc` build, which disables most of the other tasks -² Enabled for projects defining a [component preload configuration](../pages/Configuration.md#component-preload-generation) +² Enabled for projects defining a [component preload configuration](/Configuration.md#component-preload-generation) ³ Enabled in `self-contained` build, which disables `generateComponentPreload` and `generateLibraryPreload` -⁴ Enabled for projects defining a [bundle configuration](../pages/Configuration.md#custom-bundling) +⁴ Enabled for projects defining a [bundle configuration](/Configuration.md#custom-bundling) ⁵ Can be enabled for framework projects via the `includeTask` option. For other projects, this task is skipped ## Removal of Standard Middleware -The following middleware has been removed from the [standard middlewares list](.../../pages/Server/#standard-middleware): +The following middleware has been removed from the [standard middlewares list](/Server#standard-middleware): * connectUi5Proxy diff --git a/docs/updates/migrate-v4.md b/packages/documentation/docs/updates/migrate-v4.md similarity index 89% rename from docs/updates/migrate-v4.md rename to packages/documentation/docs/updates/migrate-v4.md index 80e5a9b7d1..8edef62c12 100644 --- a/docs/updates/migrate-v4.md +++ b/packages/documentation/docs/updates/migrate-v4.md @@ -45,7 +45,7 @@ For projects defining the latest **Specification Version 4.0 or higher**, the fo In UI5 2.x, the feature of evaluating modules from a string is expected to be removed. Therefore, when using the latest Specification Version, UI5 CLI will **omit affected module from the bundle and log an error message instead.** - For more details, see [Builder: JavaScript Files Requiring Top Level Scope](../pages/Builder.md#javascript-files-requiring-top-level-scope). + For more details, see [Builder: JavaScript Files Requiring Top Level Scope](/Builder.md#javascript-files-requiring-top-level-scope). * **Breaking Change:** New `async` option for the `require` sections of bundle definitions. @@ -53,13 +53,13 @@ For projects defining the latest **Specification Version 4.0 or higher**, the fo Note that the same default applies for all standard bundles as well, like the component- or library preloads as well as self-contained bundles. - See [Configuration: `bundleDefinition.sections`](../pages/Configuration.md#properties) for more on the new `async` option. + See [Configuration: `bundleDefinition.sections`](/Configuration.md#properties) for more on the new `async` option. -* **Breaking Change:** Removal of the `usePredefineCalls` [bundle option](../pages/Configuration.md#properties). UI5 CLI v4 will _always_ use `sap.ui.predefine` calls in bundles, making this option obsolete. +* **Breaking Change:** Removal of the `usePredefineCalls` [bundle option](/Configuration.md#properties). UI5 CLI v4 will _always_ use `sap.ui.predefine` calls in bundles, making this option obsolete. **We do not expect any negative impact** on projects due to this change, therefore it is active independently of the Specification Version. However, when upgrading to Specification Version 4.0 you might need to remove the property if you have it in your ui5.yaml configuration. -You can find a summary of the above at [Configuration: Specification Version 4.0](../pages/Configuration.md#specification-version-40). +You can find a summary of the above at [Configuration: Specification Version 4.0](/Configuration.md#specification-version-40). ## Migrate Your Code @@ -78,7 +78,7 @@ Non-public `DuplexCollection#byGlobSource` API has been removed. - **Bundling**: The `usePredefineCalls` option has been removed. Bundling now enforces the use of `sap.ui.predefine` instead of function wrappers. -- **Task API**: The `namespace` option has been renamed to `projectNamespace`. For more information, check the documentation for [CustomTasks API](../pages/extensibility/CustomTasks.md#task-implementation) +- **Task API**: The `namespace` option has been renamed to `projectNamespace`. For more information, check the documentation for [CustomTasks API](/extensibility/CustomTasks.md#task-implementation) - **New Option**: Added a new `async` option for `builder.bundles.bundleDefinition.section`. @@ -130,7 +130,7 @@ Consumers of the Node.js API that make use of the `ProjectGraph#build` method ne This might be caused by a mismatch of your project's manifest version and your UI5 version. -UI5 CLI v4 enhances the manifest.json with information about the `supportedLocales` (also see [Builder: Generation of Supported Locales](../pages/Builder.md#generation-of-supported-locales)). In UI5 1.71 this configuration is not supported and leads to an ambiguous error message `TypeError: invalid input` and a failure to process the manifest file. +UI5 CLI v4 enhances the manifest.json with information about the `supportedLocales` (also see [Builder: Generation of Supported Locales](/Builder.md#generation-of-supported-locales)). In UI5 1.71 this configuration is not supported and leads to an ambiguous error message `TypeError: invalid input` and a failure to process the manifest file. UI5 CLI uses the manifest's `_version` property to decide whether the `supportedLocales` can be generated. For UI5 1.71, only versions up to `1.17.0` are supported. See [UI5 Demo Kit: Descriptor for Applications, Components, and Libraries (manifest.json)](https://sdk.openui5.org/#/topic/be0cf40f61184b358b5faedaec98b2da) for a mapping per manifest version. diff --git a/packages/documentation/package-lock.json b/packages/documentation/package-lock.json new file mode 100644 index 0000000000..82c2ee23bb --- /dev/null +++ b/packages/documentation/package-lock.json @@ -0,0 +1,4704 @@ +{ + "name": "@ui5/documentation", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@ui5/documentation", + "version": "0.0.1", + "license": "Apache-2.0", + "dependencies": { + "@types/markdown-it-plantuml": "^1.4.5", + "@types/node": "^22.5.1", + "@ui5/webcomponents": "^2.1.2", + "autoprefixer": "^10.4.20", + "cssnano": "^7.0.5", + "markdown-it-implicit-figures": "^0.12.0", + "markdown-it-link-attributes": "^4.0.1", + "markdown-it-plantuml": "^1.4.1", + "postcss": "^8.4.41", + "tailwindcss": "^3.4.10", + "vitepress": "^1.3.4", + "vue": "^3.4.38" + }, + "engines": { + "node": "^20.11.0 || >=22.0.0", + "npm": ">= 8" + } + }, + "node_modules/@algolia/abtesting": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.5.0.tgz", + "integrity": "sha512-W/ohRkbKQsqDWALJg28X15KF7Tcyg53L1MfdOkLgvkcCcofdzGHSimHHeNG05ojjFw9HK8+VPhe/Vwq4MozIJg==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.39.0", + "@algolia/requester-browser-xhr": "5.39.0", + "@algolia/requester-fetch": "5.39.0", + "@algolia/requester-node-http": "5.39.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/autocomplete-core": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.7.tgz", + "integrity": "sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-plugin-algolia-insights": "1.17.7", + "@algolia/autocomplete-shared": "1.17.7" + } + }, + "node_modules/@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.7.tgz", + "integrity": "sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-shared": "1.17.7" + }, + "peerDependencies": { + "search-insights": ">= 1 < 3" + } + }, + "node_modules/@algolia/autocomplete-preset-algolia": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.7.tgz", + "integrity": "sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-shared": "1.17.7" + }, + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/autocomplete-shared": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.7.tgz", + "integrity": "sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==", + "license": "MIT", + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/client-abtesting": { + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.39.0.tgz", + "integrity": "sha512-Vf0ZVe+qo3sHDrCinouJqlg8VoxM4Qo/KxNIqMYybkuctutfnp3kIY9OmESplOQ/9NGBthU9EG+4d5fBibWK/A==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.39.0", + "@algolia/requester-browser-xhr": "5.39.0", + "@algolia/requester-fetch": "5.39.0", + "@algolia/requester-node-http": "5.39.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.39.0.tgz", + "integrity": "sha512-V16ITZxYIwcv1arNce65JZmn94Ft6vKlBZ//gXw8AvIH32glJz1KcbaVAUr9p7PYlGZ/XVHP6LxDgrpNdtwgcA==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.39.0", + "@algolia/requester-browser-xhr": "5.39.0", + "@algolia/requester-fetch": "5.39.0", + "@algolia/requester-node-http": "5.39.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-common": { + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.39.0.tgz", + "integrity": "sha512-UCJTuwySEQeiKPWV3wruhuI/wHbDYenHzgL9pYsvh6r/u5Z+g61ip1iwdAlFp02CnywzI9O7+AQPh2ManYyHmQ==", + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-insights": { + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.39.0.tgz", + "integrity": "sha512-s0ia8M/ZZR+iO2uLNTBrlQdEb6ZMAMcKMHckp5mcoglxrf8gHifL4LmdhGKdAxAn3UIagtqIP0RCnIymHUbm7A==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.39.0", + "@algolia/requester-browser-xhr": "5.39.0", + "@algolia/requester-fetch": "5.39.0", + "@algolia/requester-node-http": "5.39.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.39.0.tgz", + "integrity": "sha512-vZPIt7Lw+toNsHZUiPhNIc1Z3vUjDp7nzn6AMOaPC73gEuTq2iLPNvM06CSB6aHePo5eMeJIP5YEKBUQUA/PJA==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.39.0", + "@algolia/requester-browser-xhr": "5.39.0", + "@algolia/requester-fetch": "5.39.0", + "@algolia/requester-node-http": "5.39.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-query-suggestions": { + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.39.0.tgz", + "integrity": "sha512-jcPQr3iKTWNVli2NYHPv02aNLwixDjPCpOgMp9CZTvEiPI6Ec4jHX+oFr3LDZagOFY9e1xJhc/JrgMGGW1sHnw==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.39.0", + "@algolia/requester-browser-xhr": "5.39.0", + "@algolia/requester-fetch": "5.39.0", + "@algolia/requester-node-http": "5.39.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-search": { + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.39.0.tgz", + "integrity": "sha512-/IYpF10BpthGZEJQZMhMqV4AqWr5avcWfZm/SIKK1RvUDmzGqLoW/+xeJVX9C8ZnNkIC8hivbIQFaNaRw0BFZQ==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.39.0", + "@algolia/requester-browser-xhr": "5.39.0", + "@algolia/requester-fetch": "5.39.0", + "@algolia/requester-node-http": "5.39.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/ingestion": { + "version": "1.39.0", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.39.0.tgz", + "integrity": "sha512-IgSHKUiuecqLfBlXiuCSdRTdsO3/yvpmXrMFz8fAJ8M4QmDtHkOuD769dmybRYqsbYMHivw+lir4BgbRGMtOIQ==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.39.0", + "@algolia/requester-browser-xhr": "5.39.0", + "@algolia/requester-fetch": "5.39.0", + "@algolia/requester-node-http": "5.39.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/monitoring": { + "version": "1.39.0", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.39.0.tgz", + "integrity": "sha512-8Xnd4+609SKC/hqVsuFc4evFBmvA2765/4NcH+Dpr756SKPbL1BY0X8kVxlmM3YBLNqnduSQxHxpDJUK58imCA==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.39.0", + "@algolia/requester-browser-xhr": "5.39.0", + "@algolia/requester-fetch": "5.39.0", + "@algolia/requester-node-http": "5.39.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/recommend": { + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.39.0.tgz", + "integrity": "sha512-D7Ye2Ss/5xqUkQUxKm/VqEJLt5kARd9IMmjdzlxaKhGgNlOemTay0lwBmOVFuJRp7UODjp5c9+K+B8g0ORObIw==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.39.0", + "@algolia/requester-browser-xhr": "5.39.0", + "@algolia/requester-fetch": "5.39.0", + "@algolia/requester-node-http": "5.39.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.39.0.tgz", + "integrity": "sha512-mgPte1ZJqpk9dkVs44J3wKAbHATvHZNlSpzhMdjMLIg/3qTycSZyDiomLiSlxE8CLsxyBAOJWnyKRHfom+Z1rg==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.39.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-fetch": { + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.39.0.tgz", + "integrity": "sha512-LIrCkrxu1WnO3ev1+w6NnZ12JZL/o+2H9w6oWnZAjQZIlA/Ym6M9QHkt+OQ/SwkuoiNkW3DAo+Pi4A2V9FPtqg==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.39.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-node-http": { + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.39.0.tgz", + "integrity": "sha512-6beG+egPwXmvhAg+m0STCj+ZssDcjrLzf4L05aKm2nGglMXSSPz0cH/rM+kVD9krNfldiMctURd4wjojW1fV0w==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.39.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", + "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.4" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz", + "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@docsearch/css": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.8.2.tgz", + "integrity": "sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==", + "license": "MIT" + }, + "node_modules/@docsearch/js": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.8.2.tgz", + "integrity": "sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ==", + "license": "MIT", + "dependencies": { + "@docsearch/react": "3.8.2", + "preact": "^10.0.0" + } + }, + "node_modules/@docsearch/react": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.8.2.tgz", + "integrity": "sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-core": "1.17.7", + "@algolia/autocomplete-preset-algolia": "1.17.7", + "@docsearch/css": "3.8.2", + "algoliasearch": "^5.14.2" + }, + "peerDependencies": { + "@types/react": ">= 16.8.0 < 19.0.0", + "react": ">= 16.8.0 < 19.0.0", + "react-dom": ">= 16.8.0 < 19.0.0", + "search-insights": ">= 1 < 3" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "search-insights": { + "optional": true + } + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@iconify-json/simple-icons": { + "version": "1.2.53", + "resolved": "https://registry.npmjs.org/@iconify-json/simple-icons/-/simple-icons-1.2.53.tgz", + "integrity": "sha512-8GEW5mshsPAZpVAJmkBG/niR2qn8t4U03Wmz6aSD9R4VMZKTECqbOxH3z4inA0JfZOoTvP4qoK9T2VXAx2Xg5g==", + "license": "CC0-1.0", + "dependencies": { + "@iconify/types": "*" + } + }, + "node_modules/@iconify/types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", + "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", + "license": "MIT" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@lit-labs/ssr-dom-shim": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.4.0.tgz", + "integrity": "sha512-ficsEARKnmmW5njugNYKipTm4SFnbik7CXtoencDZzmzo/dQ+2Q0bgkzJuoJP20Aj0F+izzJjOqsnkd6F/o1bw==", + "license": "BSD-3-Clause" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.3.tgz", + "integrity": "sha512-h6cqHGZ6VdnwliFG1NXvMPTy/9PS3h8oLh7ImwR+kl+oYnQizgjxsONmmPSb2C66RksfkfIxEVtDSEcJiO0tqw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.3.tgz", + "integrity": "sha512-wd+u7SLT/u6knklV/ifG7gr5Qy4GUbH2hMWcDauPFJzmCZUAJ8L2bTkVXC2niOIxp8lk3iH/QX8kSrUxVZrOVw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.3.tgz", + "integrity": "sha512-lj9ViATR1SsqycwFkJCtYfQTheBdvlWJqzqxwc9f2qrcVrQaF/gCuBRTiTolkRWS6KvNxSk4KHZWG7tDktLgjg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.3.tgz", + "integrity": "sha512-+Dyo7O1KUmIsbzx1l+4V4tvEVnVQqMOIYtrxK7ncLSknl1xnMHLgn7gddJVrYPNZfEB8CIi3hK8gq8bDhb3h5A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.3.tgz", + "integrity": "sha512-u9Xg2FavYbD30g3DSfNhxgNrxhi6xVG4Y6i9Ur1C7xUuGDW3banRbXj+qgnIrwRN4KeJ396jchwy9bCIzbyBEQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.3.tgz", + "integrity": "sha512-5M8kyi/OX96wtD5qJR89a/3x5x8x5inXBZO04JWhkQb2JWavOWfjgkdvUqibGJeNNaz1/Z1PPza5/tAPXICI6A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.3.tgz", + "integrity": "sha512-IoerZJ4l1wRMopEHRKOO16e04iXRDyZFZnNZKrWeNquh5d6bucjezgd+OxG03mOMTnS1x7hilzb3uURPkJ0OfA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.3.tgz", + "integrity": "sha512-ZYdtqgHTDfvrJHSh3W22TvjWxwOgc3ThK/XjgcNGP2DIwFIPeAPNsQxrJO5XqleSlgDux2VAoWQ5iJrtaC1TbA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.3.tgz", + "integrity": "sha512-NcViG7A0YtuFDA6xWSgmFb6iPFzHlf5vcqb2p0lGEbT+gjrEEz8nC/EeDHvx6mnGXnGCC1SeVV+8u+smj0CeGQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.3.tgz", + "integrity": "sha512-d3pY7LWno6SYNXRm6Ebsq0DJGoiLXTb83AIPCXl9fmtIQs/rXoS8SJxxUNtFbJ5MiOvs+7y34np77+9l4nfFMw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.3.tgz", + "integrity": "sha512-3y5GA0JkBuirLqmjwAKwB0keDlI6JfGYduMlJD/Rl7fvb4Ni8iKdQs1eiunMZJhwDWdCvrcqXRY++VEBbvk6Eg==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.3.tgz", + "integrity": "sha512-AUUH65a0p3Q0Yfm5oD2KVgzTKgwPyp9DSXc3UA7DtxhEb/WSPfbG4wqXeSN62OG5gSo18em4xv6dbfcUGXcagw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.3.tgz", + "integrity": "sha512-1makPhFFVBqZE+XFg3Dkq+IkQ7JvmUrwwqaYBL2CE+ZpxPaqkGaiWFEWVGyvTwZace6WLJHwjVh/+CXbKDGPmg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.3.tgz", + "integrity": "sha512-OOFJa28dxfl8kLOPMUOQBCO6z3X2SAfzIE276fwT52uXDWUS178KWq0pL7d6p1kz7pkzA0yQwtqL0dEPoVcRWg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.3.tgz", + "integrity": "sha512-jMdsML2VI5l+V7cKfZx3ak+SLlJ8fKvLJ0Eoa4b9/vCUrzXKgoKxvHqvJ/mkWhFiyp88nCkM5S2v6nIwRtPcgg==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.3.tgz", + "integrity": "sha512-tPgGd6bY2M2LJTA1uGq8fkSPK8ZLYjDjY+ZLK9WHncCnfIz29LIXIqUgzCR0hIefzy6Hpbe8Th5WOSwTM8E7LA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.3.tgz", + "integrity": "sha512-BCFkJjgk+WFzP+tcSMXq77ymAPIxsX9lFJWs+2JzuZTLtksJ2o5hvgTdIcZ5+oKzUDMwI0PfWzRBYAydAHF2Mw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.3.tgz", + "integrity": "sha512-KTD/EqjZF3yvRaWUJdD1cW+IQBk4fbQaHYJUmP8N4XoKFZilVL8cobFSTDnjTtxWJQ3JYaMgF4nObY/+nYkumA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.3.tgz", + "integrity": "sha512-+zteHZdoUYLkyYKObGHieibUFLbttX2r+58l27XZauq0tcWYYuKUwY2wjeCN9oK1Um2YgH2ibd6cnX/wFD7DuA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.3.tgz", + "integrity": "sha512-of1iHkTQSo3kr6dTIRX6t81uj/c/b15HXVsPcEElN5sS859qHrOepM5p9G41Hah+CTqSh2r8Bm56dL2z9UQQ7g==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.3.tgz", + "integrity": "sha512-s0hybmlHb56mWVZQj8ra9048/WZTPLILKxcvcq+8awSZmyiSUZjjem1AhU3Tf4ZKpYhK4mg36HtHDOe8QJS5PQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.3.tgz", + "integrity": "sha512-zGIbEVVXVtauFgl3MRwGWEN36P5ZGenHRMgNw88X5wEhEBpq0XrMEZwOn07+ICrwM17XO5xfMZqh0OldCH5VTA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sap-theming/theming-base-content": { + "version": "11.29.3", + "resolved": "https://registry.npmjs.org/@sap-theming/theming-base-content/-/theming-base-content-11.29.3.tgz", + "integrity": "sha512-0LVCUYqoTQGcKmgPShbxQLBoF8469ZojUrYtVm1k3op/1pgLA/FMN//bvgGEm7HTBJBu3gW2Ad2f4ASqEzLolA==", + "license": "Apache-2.0" + }, + "node_modules/@shikijs/core": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-2.5.0.tgz", + "integrity": "sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==", + "license": "MIT", + "dependencies": { + "@shikijs/engine-javascript": "2.5.0", + "@shikijs/engine-oniguruma": "2.5.0", + "@shikijs/types": "2.5.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.4" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-2.5.0.tgz", + "integrity": "sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "2.5.0", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^3.1.0" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-2.5.0.tgz", + "integrity": "sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "2.5.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "node_modules/@shikijs/langs": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-2.5.0.tgz", + "integrity": "sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "2.5.0" + } + }, + "node_modules/@shikijs/themes": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-2.5.0.tgz", + "integrity": "sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "2.5.0" + } + }, + "node_modules/@shikijs/transformers": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-2.5.0.tgz", + "integrity": "sha512-SI494W5X60CaUwgi8u4q4m4s3YAFSxln3tzNjOSYqq54wlVgz0/NbbXEb3mdLbqMBztcmS7bVTaEd2w0qMmfeg==", + "license": "MIT", + "dependencies": { + "@shikijs/core": "2.5.0", + "@shikijs/types": "2.5.0" + } + }, + "node_modules/@shikijs/types": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-2.5.0.tgz", + "integrity": "sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==", + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/jquery": { + "version": "3.5.33", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.33.tgz", + "integrity": "sha512-SeyVJXlCZpEki5F0ghuYe+L+PprQta6nRZqhONt9F13dWBtR/ftoaIbdRQ7cis7womE+X2LKhsDdDtkkDhJS6g==", + "license": "MIT", + "dependencies": { + "@types/sizzle": "*" + } + }, + "node_modules/@types/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", + "license": "MIT" + }, + "node_modules/@types/markdown-it": { + "version": "14.1.2", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", + "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", + "license": "MIT", + "dependencies": { + "@types/linkify-it": "^5", + "@types/mdurl": "^2" + } + }, + "node_modules/@types/markdown-it-plantuml": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@types/markdown-it-plantuml/-/markdown-it-plantuml-1.4.5.tgz", + "integrity": "sha512-QTEJOz9UJSJhLNTYXbjg3p/MsEY3TIgzVH3r1zf/tfXOclf/E2lmP8ZXOkv7RdD4agnMROO4h/3IFWCElEvR8A==", + "license": "MIT", + "dependencies": { + "@types/markdown-it": "*" + } + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.18.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.8.tgz", + "integrity": "sha512-pAZSHMiagDR7cARo/cch1f3rXy0AEXwsVsVH09FcyeJVAzCnGgmYis7P3JidtTUjyadhTeSo8TgRPswstghDaw==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/openui5": { + "version": "1.140.0", + "resolved": "https://registry.npmjs.org/@types/openui5/-/openui5-1.140.0.tgz", + "integrity": "sha512-z5S2dVRZi4CFnNj4WGAgEcUbg3C3p1HyJvE57/WZBoMLxERS26KBqAF32yWBTSQCmI+E5T4Kk5vbfFfzppBvkQ==", + "license": "MIT", + "dependencies": { + "@types/jquery": "~3.5.13", + "@types/qunit": "^2.5.4" + } + }, + "node_modules/@types/qunit": { + "version": "2.19.13", + "resolved": "https://registry.npmjs.org/@types/qunit/-/qunit-2.19.13.tgz", + "integrity": "sha512-N4xp3v4s7f0jb2Oij6+6xw5QhH7/IgHCoGIFLCWtbEWoPkGYp8Te4mIwIP21qaurr6ed5JiPMiy2/ZoiGPkLIw==", + "license": "MIT" + }, + "node_modules/@types/sizzle": { + "version": "2.3.10", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.10.tgz", + "integrity": "sha512-TC0dmN0K8YcWEAEfiPi5gJP14eJe30TTGjkvek3iM/1NdHHsdCA/Td6GvNndMOo/iSnIsZ4HuuhrYPDAmbxzww==", + "license": "MIT" + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT" + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.21", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", + "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", + "license": "MIT" + }, + "node_modules/@ui5/webcomponents": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/@ui5/webcomponents/-/webcomponents-2.14.0.tgz", + "integrity": "sha512-ZOJSXPChGMe9R/3ZqzCx1qhyHEazpWofBI+StJe316YcnnynJSJ0a0zuoTKrNac+6DoxwRq3SD3kK1W5TbbNZw==", + "license": "Apache-2.0", + "dependencies": { + "@ui5/webcomponents-base": "2.14.0", + "@ui5/webcomponents-icons": "2.14.0", + "@ui5/webcomponents-icons-business-suite": "2.14.0", + "@ui5/webcomponents-icons-tnt": "2.14.0", + "@ui5/webcomponents-localization": "2.14.0", + "@ui5/webcomponents-theming": "2.14.0" + } + }, + "node_modules/@ui5/webcomponents-base": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/@ui5/webcomponents-base/-/webcomponents-base-2.14.0.tgz", + "integrity": "sha512-fu5+YjNFDcie2IiluYnp0nlkyluaN3JA997+zcwgXZFUU+2Vqm6eOpeTuXJBepVNcgMKo2uz0cdC1+rsL3gciQ==", + "license": "Apache-2.0", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.1.2", + "lit-html": "^2.0.1" + } + }, + "node_modules/@ui5/webcomponents-icons": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/@ui5/webcomponents-icons/-/webcomponents-icons-2.14.0.tgz", + "integrity": "sha512-pGFhJjGxkLYpFo52nRWu/DC24Y6yg9XJ06rBw999TW6WTE0Ay1dcBnhp/Nfi8KEgDdY3oBlxQlWXcLxjrf5t1Q==", + "license": "Apache-2.0", + "dependencies": { + "@ui5/webcomponents-base": "2.14.0" + } + }, + "node_modules/@ui5/webcomponents-icons-business-suite": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/@ui5/webcomponents-icons-business-suite/-/webcomponents-icons-business-suite-2.14.0.tgz", + "integrity": "sha512-Kl9R4c3B5LELZhejZ/ZaPbV372VjVKNCt4q8kSBih0i3Ekp6k6oM1dVcTIJd3ttJ5r0iDFBR1wgtxn5RNDrygg==", + "license": "Apache-2.0", + "dependencies": { + "@ui5/webcomponents-base": "2.14.0" + } + }, + "node_modules/@ui5/webcomponents-icons-tnt": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/@ui5/webcomponents-icons-tnt/-/webcomponents-icons-tnt-2.14.0.tgz", + "integrity": "sha512-8nslq04M9pS7ZRI9hVO9VhJWuX/hlIMXKevH0X3Cgw8suzy6yib6n552XvltSM11XMpAmReVjUeTa1n5OgbblQ==", + "license": "Apache-2.0", + "dependencies": { + "@ui5/webcomponents-base": "2.14.0" + } + }, + "node_modules/@ui5/webcomponents-localization": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/@ui5/webcomponents-localization/-/webcomponents-localization-2.14.0.tgz", + "integrity": "sha512-XyYvsJF13p5wE+VTkVucJKe5vvTFfbdSOQi4CBzlhcrtCHZHq0CY3nq8eLzSd3buDHN6XOvWTny1VRmcz5I3rA==", + "license": "Apache-2.0", + "dependencies": { + "@types/openui5": "^1.113.0", + "@ui5/webcomponents-base": "2.14.0" + } + }, + "node_modules/@ui5/webcomponents-theming": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/@ui5/webcomponents-theming/-/webcomponents-theming-2.14.0.tgz", + "integrity": "sha512-L+CHet/jA8yYlPjr5lBZDZGzZeuytHJFC+yt4n6POdVRpXSpctcJIoFXUX3PJrH5s/Uc6dYKvQKMf1Toxw3HPw==", + "license": "Apache-2.0", + "dependencies": { + "@sap-theming/theming-base-content": "11.29.3", + "@ui5/webcomponents-base": "2.14.0" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "license": "ISC" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", + "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.22.tgz", + "integrity": "sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.4", + "@vue/shared": "3.5.22", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.22.tgz", + "integrity": "sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.22", + "@vue/shared": "3.5.22" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.22.tgz", + "integrity": "sha512-tbTR1zKGce4Lj+JLzFXDq36K4vcSZbJ1RBu8FxcDv1IGRz//Dh2EBqksyGVypz3kXpshIfWKGOCcqpSbyGWRJQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.4", + "@vue/compiler-core": "3.5.22", + "@vue/compiler-dom": "3.5.22", + "@vue/compiler-ssr": "3.5.22", + "@vue/shared": "3.5.22", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.19", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.22.tgz", + "integrity": "sha512-GdgyLvg4R+7T8Nk2Mlighx7XGxq/fJf9jaVofc3IL0EPesTE86cP/8DD1lT3h1JeZr2ySBvyqKQJgbS54IX1Ww==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.22", + "@vue/shared": "3.5.22" + } + }, + "node_modules/@vue/devtools-api": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.7.tgz", + "integrity": "sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg==", + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.7.7" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.7.tgz", + "integrity": "sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==", + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^7.7.7", + "birpc": "^2.3.0", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.2" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.7.tgz", + "integrity": "sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==", + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.22.tgz", + "integrity": "sha512-f2Wux4v/Z2pqc9+4SmgZC1p73Z53fyD90NFWXiX9AKVnVBEvLFOWCEgJD3GdGnlxPZt01PSlfmLqbLYzY/Fw4A==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.22" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.22.tgz", + "integrity": "sha512-EHo4W/eiYeAzRTN5PCextDUZ0dMs9I8mQ2Fy+OkzvRPUYQEyK9yAjbasrMCXbLNhF7P0OUyivLjIy0yc6VrLJQ==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.22", + "@vue/shared": "3.5.22" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.22.tgz", + "integrity": "sha512-Av60jsryAkI023PlN7LsqrfPvwfxOd2yAwtReCjeuugTJTkgrksYJJstg1e12qle0NarkfhfFu1ox2D+cQotww==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.22", + "@vue/runtime-core": "3.5.22", + "@vue/shared": "3.5.22", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.22.tgz", + "integrity": "sha512-gXjo+ao0oHYTSswF+a3KRHZ1WszxIqO7u6XwNHqcqb9JfyIL/pbWrrh/xLv7jeDqla9u+LK7yfZKHih1e1RKAQ==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.22", + "@vue/shared": "3.5.22" + }, + "peerDependencies": { + "vue": "3.5.22" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.22.tgz", + "integrity": "sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==", + "license": "MIT" + }, + "node_modules/@vueuse/core": { + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-12.8.2.tgz", + "integrity": "sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "12.8.2", + "@vueuse/shared": "12.8.2", + "vue": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/integrations": { + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-12.8.2.tgz", + "integrity": "sha512-fbGYivgK5uBTRt7p5F3zy6VrETlV9RtZjBqd1/HxGdjdckBgBM4ugP8LHpjolqTj14TXTxSK1ZfgPbHYyGuH7g==", + "license": "MIT", + "dependencies": { + "@vueuse/core": "12.8.2", + "@vueuse/shared": "12.8.2", + "vue": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "async-validator": "^4", + "axios": "^1", + "change-case": "^5", + "drauu": "^0.4", + "focus-trap": "^7", + "fuse.js": "^7", + "idb-keyval": "^6", + "jwt-decode": "^4", + "nprogress": "^0.2", + "qrcode": "^1.5", + "sortablejs": "^1", + "universal-cookie": "^7" + }, + "peerDependenciesMeta": { + "async-validator": { + "optional": true + }, + "axios": { + "optional": true + }, + "change-case": { + "optional": true + }, + "drauu": { + "optional": true + }, + "focus-trap": { + "optional": true + }, + "fuse.js": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "jwt-decode": { + "optional": true + }, + "nprogress": { + "optional": true + }, + "qrcode": { + "optional": true + }, + "sortablejs": { + "optional": true + }, + "universal-cookie": { + "optional": true + } + } + }, + "node_modules/@vueuse/metadata": { + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-12.8.2.tgz", + "integrity": "sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-12.8.2.tgz", + "integrity": "sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==", + "license": "MIT", + "dependencies": { + "vue": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/algoliasearch": { + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.39.0.tgz", + "integrity": "sha512-DzTfhUxzg9QBNGzU/0kZkxEV72TeA4MmPJ7RVfLnQwHNhhliPo7ynglEWJS791rNlLFoTyrKvkapwr/P3EXV9A==", + "license": "MIT", + "dependencies": { + "@algolia/abtesting": "1.5.0", + "@algolia/client-abtesting": "5.39.0", + "@algolia/client-analytics": "5.39.0", + "@algolia/client-common": "5.39.0", + "@algolia/client-insights": "5.39.0", + "@algolia/client-personalization": "5.39.0", + "@algolia/client-query-suggestions": "5.39.0", + "@algolia/client-search": "5.39.0", + "@algolia/ingestion": "1.39.0", + "@algolia/monitoring": "1.39.0", + "@algolia/recommend": "5.39.0", + "@algolia/requester-browser-xhr": "5.39.0", + "@algolia/requester-fetch": "5.39.0", + "@algolia/requester-node-http": "5.39.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" + }, + "node_modules/autoprefixer": { + "version": "10.4.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.9.tgz", + "integrity": "sha512-hY/u2lxLrbecMEWSB0IpGzGyDyeoMFQhCvZd2jGFSE5I17Fh01sYUBPCJtkWERw7zrac9+cIghxm/ytJa2X8iA==", + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/birpc": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.6.1.tgz", + "integrity": "sha512-LPnFhlDpdSH6FJhJyn4M0kFO7vtQ5iPw24FnG0y21q09xC7e8+1LeR31S1MAIrDAHp4m7aas4bEkTDTvMAtebQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.26.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.26.2.tgz", + "integrity": "sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.8.3", + "caniuse-lite": "^1.0.30001741", + "electron-to-chromium": "^1.5.218", + "node-releases": "^2.0.21", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001746", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001746.tgz", + "integrity": "sha512-eA7Ys/DGw+pnkWWSE/id29f2IcPHVoE8wxtvE5JdvD2V28VTDPy1yEeo11Guz0sJ4ZeGRcm3uaTcAqK1LXaphA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "license": "MIT" + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "license": "MIT", + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-declaration-sorter": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.3.0.tgz", + "integrity": "sha512-LQF6N/3vkAMYF4xoHLJfG718HRJh34Z8BnNhd6bosOMIVjMlhuZK5++oZa3uYAgrI5+7x2o27gUqTR2U/KjUOQ==", + "license": "ISC", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.1.1.tgz", + "integrity": "sha512-fm4D8ti0dQmFPeF8DXSAA//btEmqCOgAc/9Oa3C1LW94h5usNrJEfrON7b4FkPZgnDEn6OUs5NdxiJZmAtGOpQ==", + "license": "MIT", + "dependencies": { + "cssnano-preset-default": "^7.0.9", + "lilconfig": "^3.1.3" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/cssnano-preset-default": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.9.tgz", + "integrity": "sha512-tCD6AAFgYBOVpMBX41KjbvRh9c2uUjLXRyV7KHSIrwHiq5Z9o0TFfUCoM3TwVrRsRteN3sVXGNvjVNxYzkpTsA==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.25.1", + "css-declaration-sorter": "^7.2.0", + "cssnano-utils": "^5.0.1", + "postcss-calc": "^10.1.1", + "postcss-colormin": "^7.0.4", + "postcss-convert-values": "^7.0.7", + "postcss-discard-comments": "^7.0.4", + "postcss-discard-duplicates": "^7.0.2", + "postcss-discard-empty": "^7.0.1", + "postcss-discard-overridden": "^7.0.1", + "postcss-merge-longhand": "^7.0.5", + "postcss-merge-rules": "^7.0.6", + "postcss-minify-font-values": "^7.0.1", + "postcss-minify-gradients": "^7.0.1", + "postcss-minify-params": "^7.0.4", + "postcss-minify-selectors": "^7.0.5", + "postcss-normalize-charset": "^7.0.1", + "postcss-normalize-display-values": "^7.0.1", + "postcss-normalize-positions": "^7.0.1", + "postcss-normalize-repeat-style": "^7.0.1", + "postcss-normalize-string": "^7.0.1", + "postcss-normalize-timing-functions": "^7.0.1", + "postcss-normalize-unicode": "^7.0.4", + "postcss-normalize-url": "^7.0.1", + "postcss-normalize-whitespace": "^7.0.1", + "postcss-ordered-values": "^7.0.2", + "postcss-reduce-initial": "^7.0.4", + "postcss-reduce-transforms": "^7.0.1", + "postcss-svgo": "^7.1.0", + "postcss-unique-selectors": "^7.0.4" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/cssnano-utils": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-5.0.1.tgz", + "integrity": "sha512-ZIP71eQgG9JwjVZsTPSqhc6GHgEr53uJ7tK5///VfyWj6Xp2DBmixWHqJgPno+PqATzn48pL42ww9x5SSGmhZg==", + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "license": "CC0-1.0" + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "license": "Apache-2.0" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "license": "MIT" + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.228", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.228.tgz", + "integrity": "sha512-nxkiyuqAn4MJ1QbobwqJILiDtu/jk14hEAWaMiJmNPh1Z+jqoFlBFZjdXwLWGeVSeu9hGLg6+2G9yJaW8rBIFA==", + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/emoji-regex-xs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz", + "integrity": "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==", + "license": "MIT" + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/focus-trap": { + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.6.5.tgz", + "integrity": "sha512-7Ke1jyybbbPZyZXFxEftUtxFGLMpE2n6A+z//m4CRDlj0hW+o3iYSmh8nFlYMurOiJVDmJRilUQtJr08KfIxlg==", + "license": "MIT", + "dependencies": { + "tabbable": "^6.2.0" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hast-util-to-html": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", + "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "license": "MIT" + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "license": "MIT", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/lit-html": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.8.0.tgz", + "integrity": "sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==", + "license": "BSD-3-Clause", + "dependencies": { + "@types/trusted-types": "^2.0.2" + } + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/magic-string": { + "version": "0.30.19", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", + "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/mark.js": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", + "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==", + "license": "MIT" + }, + "node_modules/markdown-it-implicit-figures": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/markdown-it-implicit-figures/-/markdown-it-implicit-figures-0.12.0.tgz", + "integrity": "sha512-IeD2V74f3ZBYrZ+bz/9uEGii0S61BYoD2731qsHTgYLlENUrTevlgODScScS1CK44/TV9ddlufGHCYCQueh1rw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/markdown-it-link-attributes": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/markdown-it-link-attributes/-/markdown-it-link-attributes-4.0.1.tgz", + "integrity": "sha512-pg5OK0jPLg62H4k7M9mRJLT61gUp9nvG0XveKYHMOOluASo9OEF13WlXrpAp2aj35LbedAy3QOCgQCw0tkLKAQ==", + "license": "MIT" + }, + "node_modules/markdown-it-plantuml": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/markdown-it-plantuml/-/markdown-it-plantuml-1.4.1.tgz", + "integrity": "sha512-13KgnZaGYTHBp4iUmGofzZSBz+Zj6cyqfR0SXUIc9wgWTto5Xhn7NjaXYxY0z7uBeTUMlc9LMQq5uP4OM5xCHg==", + "license": "MIT" + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", + "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "license": "CC0-1.0" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minisearch": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-7.2.0.tgz", + "integrity": "sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg==", + "license": "MIT" + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "license": "MIT" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.21", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.21.tgz", + "integrity": "sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==", + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/oniguruma-to-es": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-3.1.1.tgz", + "integrity": "sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==", + "license": "MIT", + "dependencies": { + "emoji-regex-xs": "^1.0.0", + "regex": "^6.0.1", + "regex-recursion": "^6.0.2" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-calc": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.1.1.tgz", + "integrity": "sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12 || ^20.9 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.38" + } + }, + "node_modules/postcss-colormin": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.4.tgz", + "integrity": "sha512-ziQuVzQZBROpKpfeDwmrG+Vvlr0YWmY/ZAk99XD+mGEBuEojoFekL41NCsdhyNUtZI7DPOoIWIR7vQQK9xwluw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.25.1", + "caniuse-api": "^3.0.0", + "colord": "^2.9.3", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-convert-values": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.7.tgz", + "integrity": "sha512-HR9DZLN04Xbe6xugRH6lS4ZQH2zm/bFh/ZyRkpedZozhvh+awAfbA0P36InO4fZfDhvYfNJeNvlTf1sjwGbw/A==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.25.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-discard-comments": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.4.tgz", + "integrity": "sha512-6tCUoql/ipWwKtVP/xYiFf1U9QgJ0PUvxN7pTcsQ8Ns3Fnwq1pU5D5s1MhT/XySeLq6GXNvn37U46Ded0TckWg==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^7.1.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.2.tgz", + "integrity": "sha512-eTonaQvPZ/3i1ASDHOKkYwAybiM45zFIc7KXils4mQmHLqIswXD9XNOKEVxtTFnsmwYzF66u4LMgSr0abDlh5w==", + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-discard-empty": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-7.0.1.tgz", + "integrity": "sha512-cFrJKZvcg/uxB6Ijr4l6qmn3pXQBna9zyrPC+sK0zjbkDUZew+6xDltSF7OeB7rAtzaaMVYSdbod+sZOCWnMOg==", + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-7.0.1.tgz", + "integrity": "sha512-7c3MMjjSZ/qYrx3uc1940GSOzN1Iqjtlqe8uoSg+qdVPYyRb0TILSqqmtlSFuE4mTDECwsm397Ya7iXGzfF7lg==", + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", + "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-merge-longhand": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.5.tgz", + "integrity": "sha512-Kpu5v4Ys6QI59FxmxtNB/iHUVDn9Y9sYw66D6+SZoIk4QTz1prC4aYkhIESu+ieG1iylod1f8MILMs1Em3mmIw==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^7.0.5" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-merge-rules": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.6.tgz", + "integrity": "sha512-2jIPT4Tzs8K87tvgCpSukRQ2jjd+hH6Bb8rEEOUDmmhOeTcqDg5fEFK8uKIu+Pvc3//sm3Uu6FRqfyv7YF7+BQ==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.25.1", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^5.0.1", + "postcss-selector-parser": "^7.1.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-7.0.1.tgz", + "integrity": "sha512-2m1uiuJeTplll+tq4ENOQSzB8LRnSUChBv7oSyFLsJRtUgAAJGP6LLz0/8lkinTgxrmJSPOEhgY1bMXOQ4ZXhQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-7.0.1.tgz", + "integrity": "sha512-X9JjaysZJwlqNkJbUDgOclyG3jZEpAMOfof6PUZjPnPrePnPG62pS17CjdM32uT1Uq1jFvNSff9l7kNbmMSL2A==", + "license": "MIT", + "dependencies": { + "colord": "^2.9.3", + "cssnano-utils": "^5.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-minify-params": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.4.tgz", + "integrity": "sha512-3OqqUddfH8c2e7M35W6zIwv7jssM/3miF9cbCSb1iJiWvtguQjlxZGIHK9JRmc8XAKmE2PFGtHSM7g/VcW97sw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.25.1", + "cssnano-utils": "^5.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.5.tgz", + "integrity": "sha512-x2/IvofHcdIrAm9Q+p06ZD1h6FPcQ32WtCRVodJLDR+WMn8EVHI1kvLxZuGKz/9EY5nAmI6lIQIrpo4tBy5+ug==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "postcss-selector-parser": "^7.1.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-nested/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-7.0.1.tgz", + "integrity": "sha512-sn413ofhSQHlZFae//m9FTOfkmiZ+YQXsbosqOWRiVQncU2BA3daX3n0VF3cG6rGLSFVc5Di/yns0dFfh8NFgQ==", + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.1.tgz", + "integrity": "sha512-E5nnB26XjSYz/mGITm6JgiDpAbVuAkzXwLzRZtts19jHDUBFxZ0BkXAehy0uimrOjYJbocby4FVswA/5noOxrQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-7.0.1.tgz", + "integrity": "sha512-pB/SzrIP2l50ZIYu+yQZyMNmnAcwyYb9R1fVWPRxm4zcUFCY2ign7rcntGFuMXDdd9L2pPNUgoODDk91PzRZuQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.1.tgz", + "integrity": "sha512-NsSQJ8zj8TIDiF0ig44Byo3Jk9e4gNt9x2VIlJudnQQ5DhWAHJPF4Tr1ITwyHio2BUi/I6Iv0HRO7beHYOloYQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-string": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-7.0.1.tgz", + "integrity": "sha512-QByrI7hAhsoze992kpbMlJSbZ8FuCEc1OT9EFbZ6HldXNpsdpZr+YXC5di3UEv0+jeZlHbZcoCADgb7a+lPmmQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.1.tgz", + "integrity": "sha512-bHifyuuSNdKKsnNJ0s8fmfLMlvsQwYVxIoUBnowIVl2ZAdrkYQNGVB4RxjfpvkMjipqvbz0u7feBZybkl/6NJg==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.4.tgz", + "integrity": "sha512-LvIURTi1sQoZqj8mEIE8R15yvM+OhbR1avynMtI9bUzj5gGKR/gfZFd8O7VMj0QgJaIFzxDwxGl/ASMYAkqO8g==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.25.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-url": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-7.0.1.tgz", + "integrity": "sha512-sUcD2cWtyK1AOL/82Fwy1aIVm/wwj5SdZkgZ3QiUzSzQQofrbq15jWJ3BA7Z+yVRwamCjJgZJN0I9IS7c6tgeQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.1.tgz", + "integrity": "sha512-vsbgFHMFQrJBJKrUFJNZ2pgBeBkC2IvvoHjz1to0/0Xk7sII24T0qFOiJzG6Fu3zJoq/0yI4rKWi7WhApW+EFA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-ordered-values": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-7.0.2.tgz", + "integrity": "sha512-AMJjt1ECBffF7CEON/Y0rekRLS6KsePU6PRP08UqYW4UGFRnTXNrByUzYK1h8AC7UWTZdQ9O3Oq9kFIhm0SFEw==", + "license": "MIT", + "dependencies": { + "cssnano-utils": "^5.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.4.tgz", + "integrity": "sha512-rdIC9IlMBn7zJo6puim58Xd++0HdbvHeHaPgXsimMfG1ijC5A9ULvNLSE0rUKVJOvNMcwewW4Ga21ngyJjY/+Q==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.25.1", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.1.tgz", + "integrity": "sha512-MhyEbfrm+Mlp/36hvZ9mT9DaO7dbncU0CvWI8V93LRkY6IYlu38OPg3FObnuKTUxJ4qA8HpurdQOo5CyqqO76g==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-7.1.0.tgz", + "integrity": "sha512-KnAlfmhtoLz6IuU3Sij2ycusNs4jPW+QoFE5kuuUOK8awR6tMxZQrs5Ey3BUz7nFCzT3eqyFgqkyrHiaU2xx3w==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^4.0.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >= 18" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.4.tgz", + "integrity": "sha512-pmlZjsmEAG7cHd7uK3ZiNSW6otSZ13RHuZ/4cDN/bVglS5EpF2r2oxY99SuOHa8m7AWoBCelTS3JPpzsIs8skQ==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^7.1.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" + }, + "node_modules/preact": { + "version": "10.27.2", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.27.2.tgz", + "integrity": "sha512-5SYSgFKSyhCbk6SrXyMpqjb5+MQBgfvEKE/OC+PujcY34sOpqtr+0AZQtPYx5IA6VxynQ7rUPCtKzyovpj9Bpg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/regex/-/regex-6.0.1.tgz", + "integrity": "sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-recursion": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", + "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" + }, + "node_modules/rollup": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.3.tgz", + "integrity": "sha512-RIDh866U8agLgiIcdpB+COKnlCreHJLfIhWC3LVflku5YHfpnsIKigRZeFfMfCc4dVcqNVfQQ5gO/afOck064A==", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.52.3", + "@rollup/rollup-android-arm64": "4.52.3", + "@rollup/rollup-darwin-arm64": "4.52.3", + "@rollup/rollup-darwin-x64": "4.52.3", + "@rollup/rollup-freebsd-arm64": "4.52.3", + "@rollup/rollup-freebsd-x64": "4.52.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.52.3", + "@rollup/rollup-linux-arm-musleabihf": "4.52.3", + "@rollup/rollup-linux-arm64-gnu": "4.52.3", + "@rollup/rollup-linux-arm64-musl": "4.52.3", + "@rollup/rollup-linux-loong64-gnu": "4.52.3", + "@rollup/rollup-linux-ppc64-gnu": "4.52.3", + "@rollup/rollup-linux-riscv64-gnu": "4.52.3", + "@rollup/rollup-linux-riscv64-musl": "4.52.3", + "@rollup/rollup-linux-s390x-gnu": "4.52.3", + "@rollup/rollup-linux-x64-gnu": "4.52.3", + "@rollup/rollup-linux-x64-musl": "4.52.3", + "@rollup/rollup-openharmony-arm64": "4.52.3", + "@rollup/rollup-win32-arm64-msvc": "4.52.3", + "@rollup/rollup-win32-ia32-msvc": "4.52.3", + "@rollup/rollup-win32-x64-gnu": "4.52.3", + "@rollup/rollup-win32-x64-msvc": "4.52.3", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "license": "ISC" + }, + "node_modules/search-insights": { + "version": "2.17.3", + "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz", + "integrity": "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==", + "license": "MIT", + "peer": true + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shiki": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-2.5.0.tgz", + "integrity": "sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==", + "license": "MIT", + "dependencies": { + "@shikijs/core": "2.5.0", + "@shikijs/engine-javascript": "2.5.0", + "@shikijs/engine-oniguruma": "2.5.0", + "@shikijs/langs": "2.5.0", + "@shikijs/themes": "2.5.0", + "@shikijs/types": "2.5.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/stylehacks": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.6.tgz", + "integrity": "sha512-iitguKivmsueOmTO0wmxURXBP8uqOO+zikLGZ7Mm9e/94R4w5T999Js2taS/KBOnQ/wdC3jN3vNSrkGDrlnqQg==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.25.1", + "postcss-selector-parser": "^7.1.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/superjson": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.2.tgz", + "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", + "license": "MIT", + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/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==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svgo": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.0.tgz", + "integrity": "sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==", + "license": "MIT", + "dependencies": { + "commander": "^11.1.0", + "css-select": "^5.1.0", + "css-tree": "^3.0.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.1.1", + "sax": "^1.4.1" + }, + "bin": { + "svgo": "bin/svgo.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/tabbable": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", + "license": "MIT" + }, + "node_modules/tailwindcss": { + "version": "3.4.17", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", + "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.6", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "license": "Apache-2.0" + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" + }, + "node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vite": { + "version": "5.4.20", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.20.tgz", + "integrity": "sha512-j3lYzGC3P+B5Yfy/pfKNgVEg4+UtcIJcVRt2cDjIOmhLourAqPqf8P7acgxeiSgUB7E3p2P8/3gNIgDLpwzs4g==", + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vitepress": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.6.4.tgz", + "integrity": "sha512-+2ym1/+0VVrbhNyRoFFesVvBvHAVMZMK0rw60E3X/5349M1GuVdKeazuksqopEdvkKwKGs21Q729jX81/bkBJg==", + "license": "MIT", + "dependencies": { + "@docsearch/css": "3.8.2", + "@docsearch/js": "3.8.2", + "@iconify-json/simple-icons": "^1.2.21", + "@shikijs/core": "^2.1.0", + "@shikijs/transformers": "^2.1.0", + "@shikijs/types": "^2.1.0", + "@types/markdown-it": "^14.1.2", + "@vitejs/plugin-vue": "^5.2.1", + "@vue/devtools-api": "^7.7.0", + "@vue/shared": "^3.5.13", + "@vueuse/core": "^12.4.0", + "@vueuse/integrations": "^12.4.0", + "focus-trap": "^7.6.4", + "mark.js": "8.11.1", + "minisearch": "^7.1.1", + "shiki": "^2.1.0", + "vite": "^5.4.14", + "vue": "^3.5.13" + }, + "bin": { + "vitepress": "bin/vitepress.js" + }, + "peerDependencies": { + "markdown-it-mathjax3": "^4", + "postcss": "^8" + }, + "peerDependenciesMeta": { + "markdown-it-mathjax3": { + "optional": true + }, + "postcss": { + "optional": true + } + } + }, + "node_modules/vue": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.22.tgz", + "integrity": "sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.22", + "@vue/compiler-sfc": "3.5.22", + "@vue/runtime-dom": "3.5.22", + "@vue/server-renderer": "3.5.22", + "@vue/shared": "3.5.22" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/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==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yaml": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", + "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/packages/documentation/package.json b/packages/documentation/package.json new file mode 100644 index 0000000000..609663d6aa --- /dev/null +++ b/packages/documentation/package.json @@ -0,0 +1,45 @@ +{ + "name": "@ui5/documentation", + "private": true, + "version": "0.0.1", + "description": "UI5 CLI Documentation", + "author": { + "name": "SAP SE", + "email": "openui5@sap.com", + "url": "https://www.sap.com" + }, + "license": "Apache-2.0", + "keywords": [ + "openui5", + "sapui5", + "ui5", + "documentation", + "vitepress" + ], + "type": "module", + "engines": { + "node": "^20.11.0 || >=22.0.0", + "npm": ">= 8" + }, + "scripts": { + "start": "vitepress dev docs --open", + "dev": "vitepress dev docs", + "build": "vitepress build docs", + "preview": "vitepress preview docs --port 8080", + "serve-docs": "npm run build && npm run preview" + }, + "dependencies": { + "@types/markdown-it-plantuml": "^1.4.5", + "@types/node": "^22.5.1", + "@ui5/webcomponents": "^2.1.2", + "autoprefixer": "^10.4.20", + "cssnano": "^7.0.5", + "markdown-it-implicit-figures": "^0.12.0", + "markdown-it-link-attributes": "^4.0.1", + "markdown-it-plantuml": "^1.4.1", + "postcss": "^8.4.41", + "tailwindcss": "^3.4.10", + "vitepress": "^1.3.4", + "vue": "^3.4.38" + } +} \ No newline at end of file diff --git a/postcss.config.js b/packages/documentation/postcss.config.js similarity index 100% rename from postcss.config.js rename to packages/documentation/postcss.config.js diff --git a/tailwind.config.js b/packages/documentation/tailwind.config.js similarity index 100% rename from tailwind.config.js rename to packages/documentation/tailwind.config.js diff --git a/scripts/generateCliDoc.js b/scripts/generateCliDoc.js index 67db10b6c0..c12c4e5248 100644 --- a/scripts/generateCliDoc.js +++ b/scripts/generateCliDoc.js @@ -193,12 +193,12 @@ function generateDoc() { content = content.split("<").join("<").split(">").join(">"); content = content.split("=").join("="); try { - writeFileSync("./docs/CLI.md", content); + writeFileSync("./packages/documentation/docs/CLI.md", content); } catch (err) { - console.error(`Failed to generate /docs/CLI.md: ${err.message}.`); + console.error(`Failed to generate /packages/documentation/docs/CLI.md: ${err.message}.`); throw err; } - console.log("Generated /docs/CLI.md"); + console.log("Generated /packages/documentation/docs/CLI.md"); } function splitString(temp) { From 613d35f3beaec82eaacc00921681520ae8b56afe Mon Sep 17 00:00:00 2001 From: d3xter666 Date: Wed, 1 Oct 2025 14:19:11 +0300 Subject: [PATCH 06/10] refactor: Remove redundant files/dirs --- .../.vitepress/cache/deps/@theme_index.js | 275 - .../.vitepress/cache/deps/@theme_index.js.map | 7 - .../docs/.vitepress/cache/deps/_metadata.json | 40 - .../.vitepress/cache/deps/chunk-Q2AYPHVK.js | 9719 ------------ .../cache/deps/chunk-Q2AYPHVK.js.map | 7 - .../.vitepress/cache/deps/chunk-QAXAIFA7.js | 12705 ---------------- .../cache/deps/chunk-QAXAIFA7.js.map | 7 - .../docs/.vitepress/cache/deps/package.json | 3 - .../deps/vitepress___@vue_devtools-api.js | 4505 ------ .../deps/vitepress___@vue_devtools-api.js.map | 7 - .../cache/deps/vitepress___@vueuse_core.js | 583 - .../deps/vitepress___@vueuse_core.js.map | 7 - .../docs/.vitepress/cache/deps/vue.js | 343 - .../docs/.vitepress/cache/deps/vue.js.map | 7 - .../docs/.vitepress/dist/404.html | 22 - .../docs/.vitepress/dist/Benchmarking.html | 38 - .../docs/.vitepress/dist/Builder.html | 55 - .../docs/.vitepress/dist/CLI.html | 28 - .../docs/.vitepress/dist/CodeAnalysis.html | 35 - .../docs/.vitepress/dist/Configuration.html | 220 - .../docs/.vitepress/dist/ESSupport.html | 259 - .../docs/.vitepress/dist/FAQ.html | 25 - .../docs/.vitepress/dist/FileSystem.html | 25 - .../docs/.vitepress/dist/GettingStarted.html | 33 - .../docs/.vitepress/dist/HomePage.html | 80 - .../docs/.vitepress/dist/OpenUI5.html | 51 - .../docs/.vitepress/dist/Overview.html | 56 - .../docs/.vitepress/dist/Privacy.html | 25 - .../docs/.vitepress/dist/Project.html | 25 - .../docs/.vitepress/dist/SAPUI5.html | 56 - .../docs/.vitepress/dist/Server.html | 25 - .../.vitepress/dist/TripPinClassDiagram.jpg | Bin 45518 -> 0 bytes .../docs/.vitepress/dist/Troubleshooting.html | 25 - .../dist/UI5-VitePress-fire-and-water.jpg | Bin 167975 -> 0 bytes .../docs/.vitepress/dist/Workspace.html | 57 - .../dist/assets/Benchmarking.md.BzpEKz8R.js | 14 - .../assets/Benchmarking.md.BzpEKz8R.lean.js | 1 - .../dist/assets/Builder.md.ssqqwD1L.js | 31 - .../dist/assets/Builder.md.ssqqwD1L.lean.js | 1 - .../.vitepress/dist/assets/CLI.md.D5X2ohRt.js | 4 - .../dist/assets/CLI.md.D5X2ohRt.lean.js | 1 - .../dist/assets/CodeAnalysis.md.lj6v3W4Y.js | 11 - .../assets/CodeAnalysis.md.lj6v3W4Y.lean.js | 1 - .../dist/assets/Configuration.md.DJDUtYxO.js | 196 - .../assets/Configuration.md.DJDUtYxO.lean.js | 1 - .../dist/assets/ESSupport.md.C_9do6hM.js | 235 - .../dist/assets/ESSupport.md.C_9do6hM.lean.js | 1 - .../.vitepress/dist/assets/FAQ.md.icEjlMM4.js | 1 - .../dist/assets/FAQ.md.icEjlMM4.lean.js | 1 - .../dist/assets/FileSystem.md.D7YyUyY3.js | 1 - .../assets/FileSystem.md.D7YyUyY3.lean.js | 1 - .../dist/assets/GettingStarted.md.CPfMgG6N.js | 9 - .../assets/GettingStarted.md.CPfMgG6N.lean.js | 1 - .../dist/assets/HomePage.md.BnZy5h7J.js | 56 - .../dist/assets/HomePage.md.BnZy5h7J.lean.js | 1 - .../dist/assets/OpenUI5.md.BhzTxPJW.js | 27 - .../dist/assets/OpenUI5.md.BhzTxPJW.lean.js | 1 - .../dist/assets/Overview.md.Bxk3KCe3.js | 32 - .../dist/assets/Overview.md.Bxk3KCe3.lean.js | 1 - .../dist/assets/Privacy.md.DEAZGlsC.js | 1 - .../dist/assets/Privacy.md.DEAZGlsC.lean.js | 1 - .../dist/assets/Project.md.DXUu18Wn.js | 1 - .../dist/assets/Project.md.DXUu18Wn.lean.js | 1 - .../dist/assets/SAPUI5.md.DzeOp_G2.js | 32 - .../dist/assets/SAPUI5.md.DzeOp_G2.lean.js | 1 - .../dist/assets/Server.md.0NEcQ1ii.js | 1 - .../dist/assets/Server.md.0NEcQ1ii.lean.js | 1 - .../dist/assets/Task_Minify.C_54hEom.svg | 459 - .../assets/Troubleshooting.md.zLa9CUap.js | 1 - .../Troubleshooting.md.zLa9CUap.lean.js | 1 - .../dist/assets/Workspace.md.Cozjt-6A.js | 33 - .../dist/assets/Workspace.md.Cozjt-6A.lean.js | 1 - .../.vitepress/dist/assets/app.BXNXXhu6.js | 1 - .../dist/assets/chunks/framework.CBTkueSR.js | 18 - .../dist/assets/chunks/theme.CWt1tcxf.js | 1 - ...lity_CustomServerMiddleware.md.x59WjcrL.js | 153 - ...CustomServerMiddleware.md.x59WjcrL.lean.js | 1 - .../extensibility_CustomTasks.md.iHprFA7D.js | 307 - ...ensibility_CustomTasks.md.iHprFA7D.lean.js | 1 - .../extensibility_ProjectShims.md.BoGGAAX7.js | 112 - ...nsibility_ProjectShims.md.BoGGAAX7.lean.js | 1 - .../dist/assets/index.md.Bk6Xmwmv.js | 56 - .../dist/assets/index.md.Bk6Xmwmv.lean.js | 1 - .../dist/assets/indexJsdoc.md.DfRJIwTb.js | 1 - .../assets/indexJsdoc.md.DfRJIwTb.lean.js | 1 - .../inter-italic-cyrillic-ext.r48I6akx.woff2 | Bin 43112 -> 0 bytes .../inter-italic-cyrillic.By2_1cv3.woff2 | Bin 31300 -> 0 bytes .../inter-italic-greek-ext.1u6EdAuj.woff2 | Bin 17404 -> 0 bytes .../assets/inter-italic-greek.DJ8dCoTZ.woff2 | Bin 32564 -> 0 bytes .../inter-italic-latin-ext.CN1xVJS-.woff2 | Bin 120840 -> 0 bytes .../assets/inter-italic-latin.C2AdPX0b.woff2 | Bin 74784 -> 0 bytes .../inter-italic-vietnamese.BSbpV94h.woff2 | Bin 14884 -> 0 bytes .../inter-roman-cyrillic-ext.BBPuwvHQ.woff2 | Bin 40488 -> 0 bytes .../inter-roman-cyrillic.C5lxZ8CY.woff2 | Bin 29164 -> 0 bytes .../inter-roman-greek-ext.CqjqNYQ-.woff2 | Bin 16272 -> 0 bytes .../assets/inter-roman-greek.BBVDIX6e.woff2 | Bin 29920 -> 0 bytes .../inter-roman-latin-ext.4ZJIpNVo.woff2 | Bin 110160 -> 0 bytes .../assets/inter-roman-latin.Di8DUHzh.woff2 | Bin 67792 -> 0 bytes .../inter-roman-vietnamese.BjW4sHH5.woff2 | Bin 14072 -> 0 bytes .../.vitepress/dist/assets/style.DSaPWSqg.css | 1 - .../assets/updates_migrate-v1.md.DyHoZFsd.js | 4 - .../updates_migrate-v1.md.DyHoZFsd.lean.js | 1 - .../assets/updates_migrate-v2.md.CL9i7ISl.js | 4 - .../updates_migrate-v2.md.CL9i7ISl.lean.js | 1 - .../assets/updates_migrate-v3.md.DII3bq7u.js | 29 - .../updates_migrate-v3.md.DII3bq7u.lean.js | 1 - .../assets/updates_migrate-v4.md.DEFkbQjG.js | 20 - .../updates_migrate-v4.md.DEFkbQjG.lean.js | 1 - .../extensibility/CustomServerMiddleware.html | 177 - .../dist/extensibility/CustomTasks.html | 331 - .../dist/extensibility/ProjectShims.html | 136 - .../docs/.vitepress/dist/favicon.ico | Bin 15086 -> 0 bytes .../docs/.vitepress/dist/hashmap.json | 1 - .../dist/icons/logo/Autoprefixer.svg | 1 - .../.vitepress/dist/icons/logo/PlantUML.svg | 41 - .../.vitepress/dist/icons/logo/PostCSS.svg | 1 - .../.vitepress/dist/icons/logo/Rollup.svg | 3 - .../dist/icons/logo/TailwindCSS.svg | 4 - .../dist/icons/logo/TypeScript-wm.svg | 1 - .../.vitepress/dist/icons/logo/TypeScript.svg | 1 - .../docs/.vitepress/dist/icons/logo/UI5.svg | 9 - .../.vitepress/dist/icons/logo/VitePress.svg | 1 - .../.vitepress/dist/icons/logo/Vitejs.svg | 15 - .../docs/.vitepress/dist/icons/logo/Vuejs.svg | 1 - .../dist/icons/logo/Web-Components.svg | 1 - .../dist/icons/logo/cssnano-wm-vertical.svg | 1 - .../.vitepress/dist/icons/logo/cssnano-wm.svg | 1 - .../.vitepress/dist/icons/logo/cssnano.svg | 8 - .../.vitepress/dist/icons/logo/markdown.svg | 1 - .../dist/icons/logo/powering-sap-btp.svg | 1 - .../docs/.vitepress/dist/icons/ui5/B.svg | 1 - .../.vitepress/dist/icons/ui5/B_OpenUI5_H.svg | 1 - .../.vitepress/dist/icons/ui5/B_OpenUI5_V.svg | 1 - .../.vitepress/dist/icons/ui5/B_UI5_H.svg | 1 - .../.vitepress/dist/icons/ui5/B_UI5_V.svg | 1 - .../docs/.vitepress/dist/icons/ui5/O.svg | 1 - .../.vitepress/dist/icons/ui5/O_OpenUI5_H.svg | 1 - .../.vitepress/dist/icons/ui5/O_OpenUI5_V.svg | 1 - .../.vitepress/dist/icons/ui5/O_UI5_H.svg | 1 - .../.vitepress/dist/icons/ui5/O_UI5_V.svg | 1 - .../docs/.vitepress/dist/icons/ui5/UI5.svg | 9 - .../docs/.vitepress/dist/index.html | 80 - .../docs/.vitepress/dist/indexJsdoc.html | 25 - .../docs/.vitepress/dist/learn-more.svg | 9 - .../tailwind-css-vsc-color-completion.png | Bin 13680 -> 0 bytes .../.vitepress/dist/updates/migrate-v1.html | 28 - .../.vitepress/dist/updates/migrate-v2.html | 28 - .../.vitepress/dist/updates/migrate-v3.html | 53 - .../.vitepress/dist/updates/migrate-v4.html | 44 - .../docs/.vitepress/dist/vp-icons.css | 0 150 files changed, 32256 deletions(-) delete mode 100644 packages/documentation/docs/.vitepress/cache/deps/@theme_index.js delete mode 100644 packages/documentation/docs/.vitepress/cache/deps/@theme_index.js.map delete mode 100644 packages/documentation/docs/.vitepress/cache/deps/_metadata.json delete mode 100644 packages/documentation/docs/.vitepress/cache/deps/chunk-Q2AYPHVK.js delete mode 100644 packages/documentation/docs/.vitepress/cache/deps/chunk-Q2AYPHVK.js.map delete mode 100644 packages/documentation/docs/.vitepress/cache/deps/chunk-QAXAIFA7.js delete mode 100644 packages/documentation/docs/.vitepress/cache/deps/chunk-QAXAIFA7.js.map delete mode 100644 packages/documentation/docs/.vitepress/cache/deps/package.json delete mode 100644 packages/documentation/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js delete mode 100644 packages/documentation/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js.map delete mode 100644 packages/documentation/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js delete mode 100644 packages/documentation/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js.map delete mode 100644 packages/documentation/docs/.vitepress/cache/deps/vue.js delete mode 100644 packages/documentation/docs/.vitepress/cache/deps/vue.js.map delete mode 100644 packages/documentation/docs/.vitepress/dist/404.html delete mode 100644 packages/documentation/docs/.vitepress/dist/Benchmarking.html delete mode 100644 packages/documentation/docs/.vitepress/dist/Builder.html delete mode 100644 packages/documentation/docs/.vitepress/dist/CLI.html delete mode 100644 packages/documentation/docs/.vitepress/dist/CodeAnalysis.html delete mode 100644 packages/documentation/docs/.vitepress/dist/Configuration.html delete mode 100644 packages/documentation/docs/.vitepress/dist/ESSupport.html delete mode 100644 packages/documentation/docs/.vitepress/dist/FAQ.html delete mode 100644 packages/documentation/docs/.vitepress/dist/FileSystem.html delete mode 100644 packages/documentation/docs/.vitepress/dist/GettingStarted.html delete mode 100644 packages/documentation/docs/.vitepress/dist/HomePage.html delete mode 100644 packages/documentation/docs/.vitepress/dist/OpenUI5.html delete mode 100644 packages/documentation/docs/.vitepress/dist/Overview.html delete mode 100644 packages/documentation/docs/.vitepress/dist/Privacy.html delete mode 100644 packages/documentation/docs/.vitepress/dist/Project.html delete mode 100644 packages/documentation/docs/.vitepress/dist/SAPUI5.html delete mode 100644 packages/documentation/docs/.vitepress/dist/Server.html delete mode 100644 packages/documentation/docs/.vitepress/dist/TripPinClassDiagram.jpg delete mode 100644 packages/documentation/docs/.vitepress/dist/Troubleshooting.html delete mode 100644 packages/documentation/docs/.vitepress/dist/UI5-VitePress-fire-and-water.jpg delete mode 100644 packages/documentation/docs/.vitepress/dist/Workspace.html delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/Benchmarking.md.BzpEKz8R.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/Benchmarking.md.BzpEKz8R.lean.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/Builder.md.ssqqwD1L.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/Builder.md.ssqqwD1L.lean.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/CLI.md.D5X2ohRt.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/CLI.md.D5X2ohRt.lean.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/CodeAnalysis.md.lj6v3W4Y.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/CodeAnalysis.md.lj6v3W4Y.lean.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/Configuration.md.DJDUtYxO.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/Configuration.md.DJDUtYxO.lean.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/ESSupport.md.C_9do6hM.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/ESSupport.md.C_9do6hM.lean.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/FAQ.md.icEjlMM4.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/FAQ.md.icEjlMM4.lean.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/FileSystem.md.D7YyUyY3.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/FileSystem.md.D7YyUyY3.lean.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/GettingStarted.md.CPfMgG6N.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/GettingStarted.md.CPfMgG6N.lean.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/HomePage.md.BnZy5h7J.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/HomePage.md.BnZy5h7J.lean.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/OpenUI5.md.BhzTxPJW.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/OpenUI5.md.BhzTxPJW.lean.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/Overview.md.Bxk3KCe3.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/Overview.md.Bxk3KCe3.lean.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/Privacy.md.DEAZGlsC.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/Privacy.md.DEAZGlsC.lean.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/Project.md.DXUu18Wn.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/Project.md.DXUu18Wn.lean.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/SAPUI5.md.DzeOp_G2.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/SAPUI5.md.DzeOp_G2.lean.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/Server.md.0NEcQ1ii.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/Server.md.0NEcQ1ii.lean.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/Task_Minify.C_54hEom.svg delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/Troubleshooting.md.zLa9CUap.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/Troubleshooting.md.zLa9CUap.lean.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/Workspace.md.Cozjt-6A.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/Workspace.md.Cozjt-6A.lean.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/app.BXNXXhu6.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/chunks/framework.CBTkueSR.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/chunks/theme.CWt1tcxf.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/extensibility_CustomServerMiddleware.md.x59WjcrL.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/extensibility_CustomServerMiddleware.md.x59WjcrL.lean.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/extensibility_CustomTasks.md.iHprFA7D.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/extensibility_CustomTasks.md.iHprFA7D.lean.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/extensibility_ProjectShims.md.BoGGAAX7.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/extensibility_ProjectShims.md.BoGGAAX7.lean.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/index.md.Bk6Xmwmv.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/index.md.Bk6Xmwmv.lean.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/indexJsdoc.md.DfRJIwTb.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/indexJsdoc.md.DfRJIwTb.lean.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/inter-italic-cyrillic.By2_1cv3.woff2 delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/inter-italic-greek-ext.1u6EdAuj.woff2 delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/inter-italic-greek.DJ8dCoTZ.woff2 delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/inter-italic-latin-ext.CN1xVJS-.woff2 delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/inter-italic-latin.C2AdPX0b.woff2 delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/inter-italic-vietnamese.BSbpV94h.woff2 delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/inter-roman-greek.BBVDIX6e.woff2 delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/inter-roman-latin.Di8DUHzh.woff2 delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/inter-roman-vietnamese.BjW4sHH5.woff2 delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/style.DSaPWSqg.css delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v1.md.DyHoZFsd.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v1.md.DyHoZFsd.lean.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v2.md.CL9i7ISl.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v2.md.CL9i7ISl.lean.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v3.md.DII3bq7u.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v3.md.DII3bq7u.lean.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v4.md.DEFkbQjG.js delete mode 100644 packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v4.md.DEFkbQjG.lean.js delete mode 100644 packages/documentation/docs/.vitepress/dist/extensibility/CustomServerMiddleware.html delete mode 100644 packages/documentation/docs/.vitepress/dist/extensibility/CustomTasks.html delete mode 100644 packages/documentation/docs/.vitepress/dist/extensibility/ProjectShims.html delete mode 100644 packages/documentation/docs/.vitepress/dist/favicon.ico delete mode 100644 packages/documentation/docs/.vitepress/dist/hashmap.json delete mode 100644 packages/documentation/docs/.vitepress/dist/icons/logo/Autoprefixer.svg delete mode 100644 packages/documentation/docs/.vitepress/dist/icons/logo/PlantUML.svg delete mode 100644 packages/documentation/docs/.vitepress/dist/icons/logo/PostCSS.svg delete mode 100644 packages/documentation/docs/.vitepress/dist/icons/logo/Rollup.svg delete mode 100644 packages/documentation/docs/.vitepress/dist/icons/logo/TailwindCSS.svg delete mode 100644 packages/documentation/docs/.vitepress/dist/icons/logo/TypeScript-wm.svg delete mode 100644 packages/documentation/docs/.vitepress/dist/icons/logo/TypeScript.svg delete mode 100644 packages/documentation/docs/.vitepress/dist/icons/logo/UI5.svg delete mode 100644 packages/documentation/docs/.vitepress/dist/icons/logo/VitePress.svg delete mode 100644 packages/documentation/docs/.vitepress/dist/icons/logo/Vitejs.svg delete mode 100644 packages/documentation/docs/.vitepress/dist/icons/logo/Vuejs.svg delete mode 100644 packages/documentation/docs/.vitepress/dist/icons/logo/Web-Components.svg delete mode 100644 packages/documentation/docs/.vitepress/dist/icons/logo/cssnano-wm-vertical.svg delete mode 100644 packages/documentation/docs/.vitepress/dist/icons/logo/cssnano-wm.svg delete mode 100644 packages/documentation/docs/.vitepress/dist/icons/logo/cssnano.svg delete mode 100644 packages/documentation/docs/.vitepress/dist/icons/logo/markdown.svg delete mode 100644 packages/documentation/docs/.vitepress/dist/icons/logo/powering-sap-btp.svg delete mode 100644 packages/documentation/docs/.vitepress/dist/icons/ui5/B.svg delete mode 100644 packages/documentation/docs/.vitepress/dist/icons/ui5/B_OpenUI5_H.svg delete mode 100644 packages/documentation/docs/.vitepress/dist/icons/ui5/B_OpenUI5_V.svg delete mode 100644 packages/documentation/docs/.vitepress/dist/icons/ui5/B_UI5_H.svg delete mode 100644 packages/documentation/docs/.vitepress/dist/icons/ui5/B_UI5_V.svg delete mode 100644 packages/documentation/docs/.vitepress/dist/icons/ui5/O.svg delete mode 100644 packages/documentation/docs/.vitepress/dist/icons/ui5/O_OpenUI5_H.svg delete mode 100644 packages/documentation/docs/.vitepress/dist/icons/ui5/O_OpenUI5_V.svg delete mode 100644 packages/documentation/docs/.vitepress/dist/icons/ui5/O_UI5_H.svg delete mode 100644 packages/documentation/docs/.vitepress/dist/icons/ui5/O_UI5_V.svg delete mode 100644 packages/documentation/docs/.vitepress/dist/icons/ui5/UI5.svg delete mode 100644 packages/documentation/docs/.vitepress/dist/index.html delete mode 100644 packages/documentation/docs/.vitepress/dist/indexJsdoc.html delete mode 100644 packages/documentation/docs/.vitepress/dist/learn-more.svg delete mode 100644 packages/documentation/docs/.vitepress/dist/tailwind-css-vsc-color-completion.png delete mode 100644 packages/documentation/docs/.vitepress/dist/updates/migrate-v1.html delete mode 100644 packages/documentation/docs/.vitepress/dist/updates/migrate-v2.html delete mode 100644 packages/documentation/docs/.vitepress/dist/updates/migrate-v3.html delete mode 100644 packages/documentation/docs/.vitepress/dist/updates/migrate-v4.html delete mode 100644 packages/documentation/docs/.vitepress/dist/vp-icons.css diff --git a/packages/documentation/docs/.vitepress/cache/deps/@theme_index.js b/packages/documentation/docs/.vitepress/cache/deps/@theme_index.js deleted file mode 100644 index 7161fd425c..0000000000 --- a/packages/documentation/docs/.vitepress/cache/deps/@theme_index.js +++ /dev/null @@ -1,275 +0,0 @@ -import { - useMediaQuery -} from "./chunk-Q2AYPHVK.js"; -import { - computed, - ref, - shallowRef, - watch -} from "./chunk-QAXAIFA7.js"; - -// node_modules/vitepress/dist/client/theme-default/index.js -import "/Users/i326076/SAPDevelop/ui5-cli-mono/packages/documentation/node_modules/vitepress/dist/client/theme-default/styles/fonts.css"; - -// node_modules/vitepress/dist/client/theme-default/without-fonts.js -import "/Users/i326076/SAPDevelop/ui5-cli-mono/packages/documentation/node_modules/vitepress/dist/client/theme-default/styles/vars.css"; -import "/Users/i326076/SAPDevelop/ui5-cli-mono/packages/documentation/node_modules/vitepress/dist/client/theme-default/styles/base.css"; -import "/Users/i326076/SAPDevelop/ui5-cli-mono/packages/documentation/node_modules/vitepress/dist/client/theme-default/styles/icons.css"; -import "/Users/i326076/SAPDevelop/ui5-cli-mono/packages/documentation/node_modules/vitepress/dist/client/theme-default/styles/utils.css"; -import "/Users/i326076/SAPDevelop/ui5-cli-mono/packages/documentation/node_modules/vitepress/dist/client/theme-default/styles/components/custom-block.css"; -import "/Users/i326076/SAPDevelop/ui5-cli-mono/packages/documentation/node_modules/vitepress/dist/client/theme-default/styles/components/vp-code.css"; -import "/Users/i326076/SAPDevelop/ui5-cli-mono/packages/documentation/node_modules/vitepress/dist/client/theme-default/styles/components/vp-code-group.css"; -import "/Users/i326076/SAPDevelop/ui5-cli-mono/packages/documentation/node_modules/vitepress/dist/client/theme-default/styles/components/vp-doc.css"; -import "/Users/i326076/SAPDevelop/ui5-cli-mono/packages/documentation/node_modules/vitepress/dist/client/theme-default/styles/components/vp-sponsor.css"; -import VPBadge from "/Users/i326076/SAPDevelop/ui5-cli-mono/packages/documentation/node_modules/vitepress/dist/client/theme-default/components/VPBadge.vue"; -import Layout from "/Users/i326076/SAPDevelop/ui5-cli-mono/packages/documentation/node_modules/vitepress/dist/client/theme-default/Layout.vue"; -import { default as default2 } from "/Users/i326076/SAPDevelop/ui5-cli-mono/packages/documentation/node_modules/vitepress/dist/client/theme-default/components/VPBadge.vue"; -import { default as default3 } from "/Users/i326076/SAPDevelop/ui5-cli-mono/packages/documentation/node_modules/vitepress/dist/client/theme-default/components/VPButton.vue"; -import { default as default4 } from "/Users/i326076/SAPDevelop/ui5-cli-mono/packages/documentation/node_modules/vitepress/dist/client/theme-default/components/VPDocAsideSponsors.vue"; -import { default as default5 } from "/Users/i326076/SAPDevelop/ui5-cli-mono/packages/documentation/node_modules/vitepress/dist/client/theme-default/components/VPFeatures.vue"; -import { default as default6 } from "/Users/i326076/SAPDevelop/ui5-cli-mono/packages/documentation/node_modules/vitepress/dist/client/theme-default/components/VPHomeContent.vue"; -import { default as default7 } from "/Users/i326076/SAPDevelop/ui5-cli-mono/packages/documentation/node_modules/vitepress/dist/client/theme-default/components/VPHomeFeatures.vue"; -import { default as default8 } from "/Users/i326076/SAPDevelop/ui5-cli-mono/packages/documentation/node_modules/vitepress/dist/client/theme-default/components/VPHomeHero.vue"; -import { default as default9 } from "/Users/i326076/SAPDevelop/ui5-cli-mono/packages/documentation/node_modules/vitepress/dist/client/theme-default/components/VPHomeSponsors.vue"; -import { default as default10 } from "/Users/i326076/SAPDevelop/ui5-cli-mono/packages/documentation/node_modules/vitepress/dist/client/theme-default/components/VPImage.vue"; -import { default as default11 } from "/Users/i326076/SAPDevelop/ui5-cli-mono/packages/documentation/node_modules/vitepress/dist/client/theme-default/components/VPLink.vue"; -import { default as default12 } from "/Users/i326076/SAPDevelop/ui5-cli-mono/packages/documentation/node_modules/vitepress/dist/client/theme-default/components/VPNavBarSearch.vue"; -import { default as default13 } from "/Users/i326076/SAPDevelop/ui5-cli-mono/packages/documentation/node_modules/vitepress/dist/client/theme-default/components/VPSocialLink.vue"; -import { default as default14 } from "/Users/i326076/SAPDevelop/ui5-cli-mono/packages/documentation/node_modules/vitepress/dist/client/theme-default/components/VPSocialLinks.vue"; -import { default as default15 } from "/Users/i326076/SAPDevelop/ui5-cli-mono/packages/documentation/node_modules/vitepress/dist/client/theme-default/components/VPSponsors.vue"; -import { default as default16 } from "/Users/i326076/SAPDevelop/ui5-cli-mono/packages/documentation/node_modules/vitepress/dist/client/theme-default/components/VPTeamMembers.vue"; -import { default as default17 } from "/Users/i326076/SAPDevelop/ui5-cli-mono/packages/documentation/node_modules/vitepress/dist/client/theme-default/components/VPTeamPage.vue"; -import { default as default18 } from "/Users/i326076/SAPDevelop/ui5-cli-mono/packages/documentation/node_modules/vitepress/dist/client/theme-default/components/VPTeamPageSection.vue"; -import { default as default19 } from "/Users/i326076/SAPDevelop/ui5-cli-mono/packages/documentation/node_modules/vitepress/dist/client/theme-default/components/VPTeamPageTitle.vue"; - -// node_modules/vitepress/dist/client/theme-default/composables/local-nav.js -import { onContentUpdated } from "vitepress"; - -// node_modules/vitepress/dist/client/theme-default/composables/outline.js -import { getScrollOffset } from "vitepress"; - -// node_modules/vitepress/dist/client/theme-default/support/utils.js -import { withBase } from "vitepress"; - -// node_modules/vitepress/dist/client/theme-default/composables/data.js -import { useData as useData$ } from "vitepress"; -var useData = useData$; - -// node_modules/vitepress/dist/client/theme-default/support/utils.js -function ensureStartingSlash(path) { - return path.startsWith("/") ? path : `/${path}`; -} - -// node_modules/vitepress/dist/client/theme-default/support/sidebar.js -function getSidebar(_sidebar, path) { - if (Array.isArray(_sidebar)) - return addBase(_sidebar); - if (_sidebar == null) - return []; - path = ensureStartingSlash(path); - const dir = Object.keys(_sidebar).sort((a, b) => { - return b.split("/").length - a.split("/").length; - }).find((dir2) => { - return path.startsWith(ensureStartingSlash(dir2)); - }); - const sidebar = dir ? _sidebar[dir] : []; - return Array.isArray(sidebar) ? addBase(sidebar) : addBase(sidebar.items, sidebar.base); -} -function getSidebarGroups(sidebar) { - const groups = []; - let lastGroupIndex = 0; - for (const index in sidebar) { - const item = sidebar[index]; - if (item.items) { - lastGroupIndex = groups.push(item); - continue; - } - if (!groups[lastGroupIndex]) { - groups.push({ items: [] }); - } - groups[lastGroupIndex].items.push(item); - } - return groups; -} -function addBase(items, _base) { - return [...items].map((_item) => { - const item = { ..._item }; - const base = item.base || _base; - if (base && item.link) - item.link = base + item.link; - if (item.items) - item.items = addBase(item.items, base); - return item; - }); -} - -// node_modules/vitepress/dist/client/theme-default/composables/sidebar.js -function useSidebar() { - const { frontmatter, page, theme: theme2 } = useData(); - const is960 = useMediaQuery("(min-width: 960px)"); - const isOpen = ref(false); - const _sidebar = computed(() => { - const sidebarConfig = theme2.value.sidebar; - const relativePath = page.value.relativePath; - return sidebarConfig ? getSidebar(sidebarConfig, relativePath) : []; - }); - const sidebar = ref(_sidebar.value); - watch(_sidebar, (next, prev) => { - if (JSON.stringify(next) !== JSON.stringify(prev)) - sidebar.value = _sidebar.value; - }); - const hasSidebar = computed(() => { - return frontmatter.value.sidebar !== false && sidebar.value.length > 0 && frontmatter.value.layout !== "home"; - }); - const leftAside = computed(() => { - if (hasAside) - return frontmatter.value.aside == null ? theme2.value.aside === "left" : frontmatter.value.aside === "left"; - return false; - }); - const hasAside = computed(() => { - if (frontmatter.value.layout === "home") - return false; - if (frontmatter.value.aside != null) - return !!frontmatter.value.aside; - return theme2.value.aside !== false; - }); - const isSidebarEnabled = computed(() => hasSidebar.value && is960.value); - const sidebarGroups = computed(() => { - return hasSidebar.value ? getSidebarGroups(sidebar.value) : []; - }); - function open() { - isOpen.value = true; - } - function close() { - isOpen.value = false; - } - function toggle() { - isOpen.value ? close() : open(); - } - return { - isOpen, - sidebar, - sidebarGroups, - hasSidebar, - hasAside, - leftAside, - isSidebarEnabled, - open, - close, - toggle - }; -} - -// node_modules/vitepress/dist/client/theme-default/composables/outline.js -var ignoreRE = /\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\b/; -var resolvedHeaders = []; -function getHeaders(range) { - const headers = [ - ...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)") - ].filter((el) => el.id && el.hasChildNodes()).map((el) => { - const level = Number(el.tagName[1]); - return { - element: el, - title: serializeHeader(el), - link: "#" + el.id, - level - }; - }); - return resolveHeaders(headers, range); -} -function serializeHeader(h) { - let ret = ""; - for (const node of h.childNodes) { - if (node.nodeType === 1) { - if (ignoreRE.test(node.className)) - continue; - ret += node.textContent; - } else if (node.nodeType === 3) { - ret += node.textContent; - } - } - return ret.trim(); -} -function resolveHeaders(headers, range) { - if (range === false) { - return []; - } - const levelsRange = (typeof range === "object" && !Array.isArray(range) ? range.level : range) || 2; - const [high, low] = typeof levelsRange === "number" ? [levelsRange, levelsRange] : levelsRange === "deep" ? [2, 6] : levelsRange; - return buildTree(headers, high, low); -} -function buildTree(data, min, max) { - resolvedHeaders.length = 0; - const result = []; - const stack = []; - data.forEach((item) => { - const node = { ...item, children: [] }; - let parent = stack[stack.length - 1]; - while (parent && parent.level >= node.level) { - stack.pop(); - parent = stack[stack.length - 1]; - } - if (node.element.classList.contains("ignore-header") || parent && "shouldIgnore" in parent) { - stack.push({ level: node.level, shouldIgnore: true }); - return; - } - if (node.level > max || node.level < min) - return; - resolvedHeaders.push({ element: node.element, link: node.link }); - if (parent) - parent.children.push(node); - else - result.push(node); - stack.push(node); - }); - return result; -} - -// node_modules/vitepress/dist/client/theme-default/composables/local-nav.js -function useLocalNav() { - const { theme: theme2, frontmatter } = useData(); - const headers = shallowRef([]); - const hasLocalNav = computed(() => { - return headers.value.length > 0; - }); - onContentUpdated(() => { - headers.value = getHeaders(frontmatter.value.outline ?? theme2.value.outline); - }); - return { - headers, - hasLocalNav - }; -} - -// node_modules/vitepress/dist/client/theme-default/without-fonts.js -var theme = { - Layout, - enhanceApp: ({ app }) => { - app.component("Badge", VPBadge); - } -}; -var without_fonts_default = theme; -export { - default2 as VPBadge, - default3 as VPButton, - default4 as VPDocAsideSponsors, - default5 as VPFeatures, - default6 as VPHomeContent, - default7 as VPHomeFeatures, - default8 as VPHomeHero, - default9 as VPHomeSponsors, - default10 as VPImage, - default11 as VPLink, - default12 as VPNavBarSearch, - default13 as VPSocialLink, - default14 as VPSocialLinks, - default15 as VPSponsors, - default16 as VPTeamMembers, - default17 as VPTeamPage, - default18 as VPTeamPageSection, - default19 as VPTeamPageTitle, - without_fonts_default as default, - useLocalNav, - useSidebar -}; -//# sourceMappingURL=@theme_index.js.map diff --git a/packages/documentation/docs/.vitepress/cache/deps/@theme_index.js.map b/packages/documentation/docs/.vitepress/cache/deps/@theme_index.js.map deleted file mode 100644 index 76de7c1ed4..0000000000 --- a/packages/documentation/docs/.vitepress/cache/deps/@theme_index.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../../../../node_modules/vitepress/dist/client/theme-default/index.js", "../../../../node_modules/vitepress/dist/client/theme-default/without-fonts.js", "../../../../node_modules/vitepress/dist/client/theme-default/composables/local-nav.js", "../../../../node_modules/vitepress/dist/client/theme-default/composables/outline.js", "../../../../node_modules/vitepress/dist/client/theme-default/support/utils.js", "../../../../node_modules/vitepress/dist/client/theme-default/composables/data.js", "../../../../node_modules/vitepress/dist/client/theme-default/support/sidebar.js", "../../../../node_modules/vitepress/dist/client/theme-default/composables/sidebar.js"], - "sourcesContent": ["import './styles/fonts.css';\nexport * from './without-fonts';\nexport { default as default } from './without-fonts';\n", "import './styles/vars.css';\nimport './styles/base.css';\nimport './styles/icons.css';\nimport './styles/utils.css';\nimport './styles/components/custom-block.css';\nimport './styles/components/vp-code.css';\nimport './styles/components/vp-code-group.css';\nimport './styles/components/vp-doc.css';\nimport './styles/components/vp-sponsor.css';\nimport VPBadge from './components/VPBadge.vue';\nimport Layout from './Layout.vue';\nexport { default as VPBadge } from './components/VPBadge.vue';\nexport { default as VPButton } from './components/VPButton.vue';\nexport { default as VPDocAsideSponsors } from './components/VPDocAsideSponsors.vue';\nexport { default as VPFeatures } from './components/VPFeatures.vue';\nexport { default as VPHomeContent } from './components/VPHomeContent.vue';\nexport { default as VPHomeFeatures } from './components/VPHomeFeatures.vue';\nexport { default as VPHomeHero } from './components/VPHomeHero.vue';\nexport { default as VPHomeSponsors } from './components/VPHomeSponsors.vue';\nexport { default as VPImage } from './components/VPImage.vue';\nexport { default as VPLink } from './components/VPLink.vue';\nexport { default as VPNavBarSearch } from './components/VPNavBarSearch.vue';\nexport { default as VPSocialLink } from './components/VPSocialLink.vue';\nexport { default as VPSocialLinks } from './components/VPSocialLinks.vue';\nexport { default as VPSponsors } from './components/VPSponsors.vue';\nexport { default as VPTeamMembers } from './components/VPTeamMembers.vue';\nexport { default as VPTeamPage } from './components/VPTeamPage.vue';\nexport { default as VPTeamPageSection } from './components/VPTeamPageSection.vue';\nexport { default as VPTeamPageTitle } from './components/VPTeamPageTitle.vue';\nexport { useLocalNav } from './composables/local-nav';\nexport { useSidebar } from './composables/sidebar';\nconst theme = {\n Layout,\n enhanceApp: ({ app }) => {\n app.component('Badge', VPBadge);\n }\n};\nexport default theme;\n", "import { onContentUpdated } from 'vitepress';\nimport { computed, shallowRef } from 'vue';\nimport { getHeaders } from '../composables/outline';\nimport { useData } from './data';\nexport function useLocalNav() {\n const { theme, frontmatter } = useData();\n const headers = shallowRef([]);\n const hasLocalNav = computed(() => {\n return headers.value.length > 0;\n });\n onContentUpdated(() => {\n headers.value = getHeaders(frontmatter.value.outline ?? theme.value.outline);\n });\n return {\n headers,\n hasLocalNav\n };\n}\n", "import { getScrollOffset } from 'vitepress';\nimport { onMounted, onUnmounted, onUpdated } from 'vue';\nimport { throttleAndDebounce } from '../support/utils';\nimport { useAside } from './aside';\nconst ignoreRE = /\\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\\b/;\n// cached list of anchor elements from resolveHeaders\nconst resolvedHeaders = [];\nexport function resolveTitle(theme) {\n return ((typeof theme.outline === 'object' &&\n !Array.isArray(theme.outline) &&\n theme.outline.label) ||\n theme.outlineTitle ||\n 'On this page');\n}\nexport function getHeaders(range) {\n const headers = [\n ...document.querySelectorAll('.VPDoc :where(h1,h2,h3,h4,h5,h6)')\n ]\n .filter((el) => el.id && el.hasChildNodes())\n .map((el) => {\n const level = Number(el.tagName[1]);\n return {\n element: el,\n title: serializeHeader(el),\n link: '#' + el.id,\n level\n };\n });\n return resolveHeaders(headers, range);\n}\nfunction serializeHeader(h) {\n let ret = '';\n for (const node of h.childNodes) {\n if (node.nodeType === 1) {\n if (ignoreRE.test(node.className))\n continue;\n ret += node.textContent;\n }\n else if (node.nodeType === 3) {\n ret += node.textContent;\n }\n }\n return ret.trim();\n}\nexport function resolveHeaders(headers, range) {\n if (range === false) {\n return [];\n }\n const levelsRange = (typeof range === 'object' && !Array.isArray(range)\n ? range.level\n : range) || 2;\n const [high, low] = typeof levelsRange === 'number'\n ? [levelsRange, levelsRange]\n : levelsRange === 'deep'\n ? [2, 6]\n : levelsRange;\n return buildTree(headers, high, low);\n}\nexport function useActiveAnchor(container, marker) {\n const { isAsideEnabled } = useAside();\n const onScroll = throttleAndDebounce(setActiveLink, 100);\n let prevActiveLink = null;\n onMounted(() => {\n requestAnimationFrame(setActiveLink);\n window.addEventListener('scroll', onScroll);\n });\n onUpdated(() => {\n // sidebar update means a route change\n activateLink(location.hash);\n });\n onUnmounted(() => {\n window.removeEventListener('scroll', onScroll);\n });\n function setActiveLink() {\n if (!isAsideEnabled.value) {\n return;\n }\n const scrollY = window.scrollY;\n const innerHeight = window.innerHeight;\n const offsetHeight = document.body.offsetHeight;\n const isBottom = Math.abs(scrollY + innerHeight - offsetHeight) < 1;\n // resolvedHeaders may be repositioned, hidden or fix positioned\n const headers = resolvedHeaders\n .map(({ element, link }) => ({\n link,\n top: getAbsoluteTop(element)\n }))\n .filter(({ top }) => !Number.isNaN(top))\n .sort((a, b) => a.top - b.top);\n // no headers available for active link\n if (!headers.length) {\n activateLink(null);\n return;\n }\n // page top\n if (scrollY < 1) {\n activateLink(null);\n return;\n }\n // page bottom - highlight last link\n if (isBottom) {\n activateLink(headers[headers.length - 1].link);\n return;\n }\n // find the last header above the top of viewport\n let activeLink = null;\n for (const { link, top } of headers) {\n if (top > scrollY + getScrollOffset() + 4) {\n break;\n }\n activeLink = link;\n }\n activateLink(activeLink);\n }\n function activateLink(hash) {\n if (prevActiveLink) {\n prevActiveLink.classList.remove('active');\n }\n if (hash == null) {\n prevActiveLink = null;\n }\n else {\n prevActiveLink = container.value.querySelector(`a[href=\"${decodeURIComponent(hash)}\"]`);\n }\n const activeLink = prevActiveLink;\n if (activeLink) {\n activeLink.classList.add('active');\n marker.value.style.top = activeLink.offsetTop + 39 + 'px';\n marker.value.style.opacity = '1';\n }\n else {\n marker.value.style.top = '33px';\n marker.value.style.opacity = '0';\n }\n }\n}\nfunction getAbsoluteTop(element) {\n let offsetTop = 0;\n while (element !== document.body) {\n if (element === null) {\n // child element is:\n // - not attached to the DOM (display: none)\n // - set to fixed position (not scrollable)\n // - body or html element (null offsetParent)\n return NaN;\n }\n offsetTop += element.offsetTop;\n element = element.offsetParent;\n }\n return offsetTop;\n}\nfunction buildTree(data, min, max) {\n resolvedHeaders.length = 0;\n const result = [];\n const stack = [];\n data.forEach((item) => {\n const node = { ...item, children: [] };\n let parent = stack[stack.length - 1];\n while (parent && parent.level >= node.level) {\n stack.pop();\n parent = stack[stack.length - 1];\n }\n if (node.element.classList.contains('ignore-header') ||\n (parent && 'shouldIgnore' in parent)) {\n stack.push({ level: node.level, shouldIgnore: true });\n return;\n }\n if (node.level > max || node.level < min)\n return;\n resolvedHeaders.push({ element: node.element, link: node.link });\n if (parent)\n parent.children.push(node);\n else\n result.push(node);\n stack.push(node);\n });\n return result;\n}\n", "import { withBase } from 'vitepress';\nimport { isExternal, treatAsHtml } from '../../shared';\nimport { useData } from '../composables/data';\nexport function throttleAndDebounce(fn, delay) {\n let timeoutId;\n let called = false;\n return () => {\n if (timeoutId)\n clearTimeout(timeoutId);\n if (!called) {\n fn();\n (called = true) && setTimeout(() => (called = false), delay);\n }\n else\n timeoutId = setTimeout(fn, delay);\n };\n}\nexport function ensureStartingSlash(path) {\n return path.startsWith('/') ? path : `/${path}`;\n}\nexport function normalizeLink(url) {\n const { pathname, search, hash, protocol } = new URL(url, 'http://a.com');\n if (isExternal(url) ||\n url.startsWith('#') ||\n !protocol.startsWith('http') ||\n !treatAsHtml(pathname))\n return url;\n const { site } = useData();\n const normalizedPath = pathname.endsWith('/') || pathname.endsWith('.html')\n ? url\n : url.replace(/(?:(^\\.+)\\/)?.*$/, `$1${pathname.replace(/(\\.md)?$/, site.value.cleanUrls ? '' : '.html')}${search}${hash}`);\n return withBase(normalizedPath);\n}\n", "import { useData as useData$ } from 'vitepress';\nexport const useData = useData$;\n", "import { isActive } from '../../shared';\nimport { ensureStartingSlash } from './utils';\n/**\n * Get the `Sidebar` from sidebar option. This method will ensure to get correct\n * sidebar config from `MultiSideBarConfig` with various path combinations such\n * as matching `guide/` and `/guide/`. If no matching config was found, it will\n * return empty array.\n */\nexport function getSidebar(_sidebar, path) {\n if (Array.isArray(_sidebar))\n return addBase(_sidebar);\n if (_sidebar == null)\n return [];\n path = ensureStartingSlash(path);\n const dir = Object.keys(_sidebar)\n .sort((a, b) => {\n return b.split('/').length - a.split('/').length;\n })\n .find((dir) => {\n // make sure the multi sidebar key starts with slash too\n return path.startsWith(ensureStartingSlash(dir));\n });\n const sidebar = dir ? _sidebar[dir] : [];\n return Array.isArray(sidebar)\n ? addBase(sidebar)\n : addBase(sidebar.items, sidebar.base);\n}\n/**\n * Get or generate sidebar group from the given sidebar items.\n */\nexport function getSidebarGroups(sidebar) {\n const groups = [];\n let lastGroupIndex = 0;\n for (const index in sidebar) {\n const item = sidebar[index];\n if (item.items) {\n lastGroupIndex = groups.push(item);\n continue;\n }\n if (!groups[lastGroupIndex]) {\n groups.push({ items: [] });\n }\n groups[lastGroupIndex].items.push(item);\n }\n return groups;\n}\nexport function getFlatSideBarLinks(sidebar) {\n const links = [];\n function recursivelyExtractLinks(items) {\n for (const item of items) {\n if (item.text && item.link) {\n links.push({\n text: item.text,\n link: item.link,\n docFooterText: item.docFooterText\n });\n }\n if (item.items) {\n recursivelyExtractLinks(item.items);\n }\n }\n }\n recursivelyExtractLinks(sidebar);\n return links;\n}\n/**\n * Check if the given sidebar item contains any active link.\n */\nexport function hasActiveLink(path, items) {\n if (Array.isArray(items)) {\n return items.some((item) => hasActiveLink(path, item));\n }\n return isActive(path, items.link)\n ? true\n : items.items\n ? hasActiveLink(path, items.items)\n : false;\n}\nfunction addBase(items, _base) {\n return [...items].map((_item) => {\n const item = { ..._item };\n const base = item.base || _base;\n if (base && item.link)\n item.link = base + item.link;\n if (item.items)\n item.items = addBase(item.items, base);\n return item;\n });\n}\n", "import { useMediaQuery } from '@vueuse/core';\nimport { computed, onMounted, onUnmounted, ref, watch, watchEffect, watchPostEffect } from 'vue';\nimport { isActive } from '../../shared';\nimport { hasActiveLink as containsActiveLink, getSidebar, getSidebarGroups } from '../support/sidebar';\nimport { useData } from './data';\nexport function useSidebar() {\n const { frontmatter, page, theme } = useData();\n const is960 = useMediaQuery('(min-width: 960px)');\n const isOpen = ref(false);\n const _sidebar = computed(() => {\n const sidebarConfig = theme.value.sidebar;\n const relativePath = page.value.relativePath;\n return sidebarConfig ? getSidebar(sidebarConfig, relativePath) : [];\n });\n const sidebar = ref(_sidebar.value);\n watch(_sidebar, (next, prev) => {\n if (JSON.stringify(next) !== JSON.stringify(prev))\n sidebar.value = _sidebar.value;\n });\n const hasSidebar = computed(() => {\n return (frontmatter.value.sidebar !== false &&\n sidebar.value.length > 0 &&\n frontmatter.value.layout !== 'home');\n });\n const leftAside = computed(() => {\n if (hasAside)\n return frontmatter.value.aside == null\n ? theme.value.aside === 'left'\n : frontmatter.value.aside === 'left';\n return false;\n });\n const hasAside = computed(() => {\n if (frontmatter.value.layout === 'home')\n return false;\n if (frontmatter.value.aside != null)\n return !!frontmatter.value.aside;\n return theme.value.aside !== false;\n });\n const isSidebarEnabled = computed(() => hasSidebar.value && is960.value);\n const sidebarGroups = computed(() => {\n return hasSidebar.value ? getSidebarGroups(sidebar.value) : [];\n });\n function open() {\n isOpen.value = true;\n }\n function close() {\n isOpen.value = false;\n }\n function toggle() {\n isOpen.value ? close() : open();\n }\n return {\n isOpen,\n sidebar,\n sidebarGroups,\n hasSidebar,\n hasAside,\n leftAside,\n isSidebarEnabled,\n open,\n close,\n toggle\n };\n}\n/**\n * a11y: cache the element that opened the Sidebar (the menu button) then\n * focus that button again when Menu is closed with Escape key.\n */\nexport function useCloseSidebarOnEscape(isOpen, close) {\n let triggerElement;\n watchEffect(() => {\n triggerElement = isOpen.value\n ? document.activeElement\n : undefined;\n });\n onMounted(() => {\n window.addEventListener('keyup', onEscape);\n });\n onUnmounted(() => {\n window.removeEventListener('keyup', onEscape);\n });\n function onEscape(e) {\n if (e.key === 'Escape' && isOpen.value) {\n close();\n triggerElement?.focus();\n }\n }\n}\nexport function useSidebarControl(item) {\n const { page, hash } = useData();\n const collapsed = ref(false);\n const collapsible = computed(() => {\n return item.value.collapsed != null;\n });\n const isLink = computed(() => {\n return !!item.value.link;\n });\n const isActiveLink = ref(false);\n const updateIsActiveLink = () => {\n isActiveLink.value = isActive(page.value.relativePath, item.value.link);\n };\n watch([page, item, hash], updateIsActiveLink);\n onMounted(updateIsActiveLink);\n const hasActiveLink = computed(() => {\n if (isActiveLink.value) {\n return true;\n }\n return item.value.items\n ? containsActiveLink(page.value.relativePath, item.value.items)\n : false;\n });\n const hasChildren = computed(() => {\n return !!(item.value.items && item.value.items.length);\n });\n watchEffect(() => {\n collapsed.value = !!(collapsible.value && item.value.collapsed);\n });\n watchPostEffect(() => {\n ;\n (isActiveLink.value || hasActiveLink.value) && (collapsed.value = false);\n });\n function toggle() {\n if (collapsible.value) {\n collapsed.value = !collapsed.value;\n }\n }\n return {\n collapsed,\n collapsible,\n isLink,\n isActiveLink,\n hasActiveLink,\n hasChildren,\n toggle\n };\n}\n"], - "mappings": ";;;;;;;;;;;AAAA,OAAO;;;ACAP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO,aAAa;AACpB,OAAO,YAAY;AACnB,SAAoB,WAAXA,gBAA0B;AACnC,SAAoB,WAAXA,gBAA2B;AACpC,SAAoB,WAAXA,gBAAqC;AAC9C,SAAoB,WAAXA,gBAA6B;AACtC,SAAoB,WAAXA,gBAAgC;AACzC,SAAoB,WAAXA,gBAAiC;AAC1C,SAAoB,WAAXA,gBAA6B;AACtC,SAAoB,WAAXA,gBAAiC;AAC1C,SAAoB,WAAXA,iBAA0B;AACnC,SAAoB,WAAXA,iBAAyB;AAClC,SAAoB,WAAXA,iBAAiC;AAC1C,SAAoB,WAAXA,iBAA+B;AACxC,SAAoB,WAAXA,iBAAgC;AACzC,SAAoB,WAAXA,iBAA6B;AACtC,SAAoB,WAAXA,iBAAgC;AACzC,SAAoB,WAAXA,iBAA6B;AACtC,SAAoB,WAAXA,iBAAoC;AAC7C,SAAoB,WAAXA,iBAAkC;;;AC5B3C,SAAS,wBAAwB;;;ACAjC,SAAS,uBAAuB;;;ACAhC,SAAS,gBAAgB;;;ACAzB,SAAS,WAAW,gBAAgB;AAC7B,IAAM,UAAU;;;ADgBhB,SAAS,oBAAoB,MAAM;AACtC,SAAO,KAAK,WAAW,GAAG,IAAI,OAAO,IAAI,IAAI;AACjD;;;AEXO,SAAS,WAAW,UAAU,MAAM;AACvC,MAAI,MAAM,QAAQ,QAAQ;AACtB,WAAO,QAAQ,QAAQ;AAC3B,MAAI,YAAY;AACZ,WAAO,CAAC;AACZ,SAAO,oBAAoB,IAAI;AAC/B,QAAM,MAAM,OAAO,KAAK,QAAQ,EAC3B,KAAK,CAAC,GAAG,MAAM;AAChB,WAAO,EAAE,MAAM,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,EAAE;AAAA,EAC9C,CAAC,EACI,KAAK,CAACC,SAAQ;AAEf,WAAO,KAAK,WAAW,oBAAoBA,IAAG,CAAC;AAAA,EACnD,CAAC;AACD,QAAM,UAAU,MAAM,SAAS,GAAG,IAAI,CAAC;AACvC,SAAO,MAAM,QAAQ,OAAO,IACtB,QAAQ,OAAO,IACf,QAAQ,QAAQ,OAAO,QAAQ,IAAI;AAC7C;AAIO,SAAS,iBAAiB,SAAS;AACtC,QAAM,SAAS,CAAC;AAChB,MAAI,iBAAiB;AACrB,aAAW,SAAS,SAAS;AACzB,UAAM,OAAO,QAAQ,KAAK;AAC1B,QAAI,KAAK,OAAO;AACZ,uBAAiB,OAAO,KAAK,IAAI;AACjC;AAAA,IACJ;AACA,QAAI,CAAC,OAAO,cAAc,GAAG;AACzB,aAAO,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;AAAA,IAC7B;AACA,WAAO,cAAc,EAAE,MAAM,KAAK,IAAI;AAAA,EAC1C;AACA,SAAO;AACX;AAiCA,SAAS,QAAQ,OAAO,OAAO;AAC3B,SAAO,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,UAAU;AAC7B,UAAM,OAAO,EAAE,GAAG,MAAM;AACxB,UAAM,OAAO,KAAK,QAAQ;AAC1B,QAAI,QAAQ,KAAK;AACb,WAAK,OAAO,OAAO,KAAK;AAC5B,QAAI,KAAK;AACL,WAAK,QAAQ,QAAQ,KAAK,OAAO,IAAI;AACzC,WAAO;AAAA,EACX,CAAC;AACL;;;ACnFO,SAAS,aAAa;AACzB,QAAM,EAAE,aAAa,MAAM,OAAAC,OAAM,IAAI,QAAQ;AAC7C,QAAM,QAAQ,cAAc,oBAAoB;AAChD,QAAM,SAAS,IAAI,KAAK;AACxB,QAAM,WAAW,SAAS,MAAM;AAC5B,UAAM,gBAAgBA,OAAM,MAAM;AAClC,UAAM,eAAe,KAAK,MAAM;AAChC,WAAO,gBAAgB,WAAW,eAAe,YAAY,IAAI,CAAC;AAAA,EACtE,CAAC;AACD,QAAM,UAAU,IAAI,SAAS,KAAK;AAClC,QAAM,UAAU,CAAC,MAAM,SAAS;AAC5B,QAAI,KAAK,UAAU,IAAI,MAAM,KAAK,UAAU,IAAI;AAC5C,cAAQ,QAAQ,SAAS;AAAA,EACjC,CAAC;AACD,QAAM,aAAa,SAAS,MAAM;AAC9B,WAAQ,YAAY,MAAM,YAAY,SAClC,QAAQ,MAAM,SAAS,KACvB,YAAY,MAAM,WAAW;AAAA,EACrC,CAAC;AACD,QAAM,YAAY,SAAS,MAAM;AAC7B,QAAI;AACA,aAAO,YAAY,MAAM,SAAS,OAC5BA,OAAM,MAAM,UAAU,SACtB,YAAY,MAAM,UAAU;AACtC,WAAO;AAAA,EACX,CAAC;AACD,QAAM,WAAW,SAAS,MAAM;AAC5B,QAAI,YAAY,MAAM,WAAW;AAC7B,aAAO;AACX,QAAI,YAAY,MAAM,SAAS;AAC3B,aAAO,CAAC,CAAC,YAAY,MAAM;AAC/B,WAAOA,OAAM,MAAM,UAAU;AAAA,EACjC,CAAC;AACD,QAAM,mBAAmB,SAAS,MAAM,WAAW,SAAS,MAAM,KAAK;AACvE,QAAM,gBAAgB,SAAS,MAAM;AACjC,WAAO,WAAW,QAAQ,iBAAiB,QAAQ,KAAK,IAAI,CAAC;AAAA,EACjE,CAAC;AACD,WAAS,OAAO;AACZ,WAAO,QAAQ;AAAA,EACnB;AACA,WAAS,QAAQ;AACb,WAAO,QAAQ;AAAA,EACnB;AACA,WAAS,SAAS;AACd,WAAO,QAAQ,MAAM,IAAI,KAAK;AAAA,EAClC;AACA,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACJ;;;AJ3DA,IAAM,WAAW;AAEjB,IAAM,kBAAkB,CAAC;AAQlB,SAAS,WAAW,OAAO;AAC9B,QAAM,UAAU;AAAA,IACZ,GAAG,SAAS,iBAAiB,kCAAkC;AAAA,EACnE,EACK,OAAO,CAAC,OAAO,GAAG,MAAM,GAAG,cAAc,CAAC,EAC1C,IAAI,CAAC,OAAO;AACb,UAAM,QAAQ,OAAO,GAAG,QAAQ,CAAC,CAAC;AAClC,WAAO;AAAA,MACH,SAAS;AAAA,MACT,OAAO,gBAAgB,EAAE;AAAA,MACzB,MAAM,MAAM,GAAG;AAAA,MACf;AAAA,IACJ;AAAA,EACJ,CAAC;AACD,SAAO,eAAe,SAAS,KAAK;AACxC;AACA,SAAS,gBAAgB,GAAG;AACxB,MAAI,MAAM;AACV,aAAW,QAAQ,EAAE,YAAY;AAC7B,QAAI,KAAK,aAAa,GAAG;AACrB,UAAI,SAAS,KAAK,KAAK,SAAS;AAC5B;AACJ,aAAO,KAAK;AAAA,IAChB,WACS,KAAK,aAAa,GAAG;AAC1B,aAAO,KAAK;AAAA,IAChB;AAAA,EACJ;AACA,SAAO,IAAI,KAAK;AACpB;AACO,SAAS,eAAe,SAAS,OAAO;AAC3C,MAAI,UAAU,OAAO;AACjB,WAAO,CAAC;AAAA,EACZ;AACA,QAAM,eAAe,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,IAChE,MAAM,QACN,UAAU;AAChB,QAAM,CAAC,MAAM,GAAG,IAAI,OAAO,gBAAgB,WACrC,CAAC,aAAa,WAAW,IACzB,gBAAgB,SACZ,CAAC,GAAG,CAAC,IACL;AACV,SAAO,UAAU,SAAS,MAAM,GAAG;AACvC;AA8FA,SAAS,UAAU,MAAM,KAAK,KAAK;AAC/B,kBAAgB,SAAS;AACzB,QAAM,SAAS,CAAC;AAChB,QAAM,QAAQ,CAAC;AACf,OAAK,QAAQ,CAAC,SAAS;AACnB,UAAM,OAAO,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE;AACrC,QAAI,SAAS,MAAM,MAAM,SAAS,CAAC;AACnC,WAAO,UAAU,OAAO,SAAS,KAAK,OAAO;AACzC,YAAM,IAAI;AACV,eAAS,MAAM,MAAM,SAAS,CAAC;AAAA,IACnC;AACA,QAAI,KAAK,QAAQ,UAAU,SAAS,eAAe,KAC9C,UAAU,kBAAkB,QAAS;AACtC,YAAM,KAAK,EAAE,OAAO,KAAK,OAAO,cAAc,KAAK,CAAC;AACpD;AAAA,IACJ;AACA,QAAI,KAAK,QAAQ,OAAO,KAAK,QAAQ;AACjC;AACJ,oBAAgB,KAAK,EAAE,SAAS,KAAK,SAAS,MAAM,KAAK,KAAK,CAAC;AAC/D,QAAI;AACA,aAAO,SAAS,KAAK,IAAI;AAAA;AAEzB,aAAO,KAAK,IAAI;AACpB,UAAM,KAAK,IAAI;AAAA,EACnB,CAAC;AACD,SAAO;AACX;;;AD7KO,SAAS,cAAc;AAC1B,QAAM,EAAE,OAAAC,QAAO,YAAY,IAAI,QAAQ;AACvC,QAAM,UAAU,WAAW,CAAC,CAAC;AAC7B,QAAM,cAAc,SAAS,MAAM;AAC/B,WAAO,QAAQ,MAAM,SAAS;AAAA,EAClC,CAAC;AACD,mBAAiB,MAAM;AACnB,YAAQ,QAAQ,WAAW,YAAY,MAAM,WAAWA,OAAM,MAAM,OAAO;AAAA,EAC/E,CAAC;AACD,SAAO;AAAA,IACH;AAAA,IACA;AAAA,EACJ;AACJ;;;ADcA,IAAM,QAAQ;AAAA,EACV;AAAA,EACA,YAAY,CAAC,EAAE,IAAI,MAAM;AACrB,QAAI,UAAU,SAAS,OAAO;AAAA,EAClC;AACJ;AACA,IAAO,wBAAQ;", - "names": ["default", "dir", "theme", "theme"] -} diff --git a/packages/documentation/docs/.vitepress/cache/deps/_metadata.json b/packages/documentation/docs/.vitepress/cache/deps/_metadata.json deleted file mode 100644 index 8e9c35facc..0000000000 --- a/packages/documentation/docs/.vitepress/cache/deps/_metadata.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "hash": "c95560c5", - "configHash": "a7d1da23", - "lockfileHash": "bc2dc377", - "browserHash": "498da326", - "optimized": { - "vue": { - "src": "../../../../node_modules/vue/dist/vue.runtime.esm-bundler.js", - "file": "vue.js", - "fileHash": "743746d9", - "needsInterop": false - }, - "vitepress > @vue/devtools-api": { - "src": "../../../../node_modules/@vue/devtools-api/dist/index.js", - "file": "vitepress___@vue_devtools-api.js", - "fileHash": "76ae132b", - "needsInterop": false - }, - "vitepress > @vueuse/core": { - "src": "../../../../node_modules/@vueuse/core/index.mjs", - "file": "vitepress___@vueuse_core.js", - "fileHash": "2ef8d057", - "needsInterop": false - }, - "@theme/index": { - "src": "../../../../node_modules/vitepress/dist/client/theme-default/index.js", - "file": "@theme_index.js", - "fileHash": "0d86e2ca", - "needsInterop": false - } - }, - "chunks": { - "chunk-Q2AYPHVK": { - "file": "chunk-Q2AYPHVK.js" - }, - "chunk-QAXAIFA7": { - "file": "chunk-QAXAIFA7.js" - } - } -} \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/cache/deps/chunk-Q2AYPHVK.js b/packages/documentation/docs/.vitepress/cache/deps/chunk-Q2AYPHVK.js deleted file mode 100644 index 642e7cea7b..0000000000 --- a/packages/documentation/docs/.vitepress/cache/deps/chunk-Q2AYPHVK.js +++ /dev/null @@ -1,9719 +0,0 @@ -import { - Fragment, - TransitionGroup, - computed, - customRef, - defineComponent, - effectScope, - getCurrentInstance, - getCurrentScope, - h, - hasInjectionContext, - inject, - isReactive, - isReadonly, - isRef, - markRaw, - nextTick, - onBeforeMount, - onBeforeUnmount, - onBeforeUpdate, - onMounted, - onScopeDispose, - onUnmounted, - onUpdated, - provide, - reactive, - readonly, - ref, - shallowReactive, - shallowRef, - toRaw, - toRef, - toRefs, - toValue, - unref, - watch, - watchEffect -} from "./chunk-QAXAIFA7.js"; - -// node_modules/@vueuse/shared/index.mjs -function computedEager(fn, options) { - var _a; - const result = shallowRef(); - watchEffect(() => { - result.value = fn(); - }, { - ...options, - flush: (_a = options == null ? void 0 : options.flush) != null ? _a : "sync" - }); - return readonly(result); -} -function computedWithControl(source, fn) { - let v = void 0; - let track; - let trigger; - const dirty = shallowRef(true); - const update = () => { - dirty.value = true; - trigger(); - }; - watch(source, update, { flush: "sync" }); - const get2 = typeof fn === "function" ? fn : fn.get; - const set2 = typeof fn === "function" ? void 0 : fn.set; - const result = customRef((_track, _trigger) => { - track = _track; - trigger = _trigger; - return { - get() { - if (dirty.value) { - v = get2(v); - dirty.value = false; - } - track(); - return v; - }, - set(v2) { - set2 == null ? void 0 : set2(v2); - } - }; - }); - if (Object.isExtensible(result)) - result.trigger = update; - return result; -} -function tryOnScopeDispose(fn) { - if (getCurrentScope()) { - onScopeDispose(fn); - return true; - } - return false; -} -function createEventHook() { - const fns = /* @__PURE__ */ new Set(); - const off = (fn) => { - fns.delete(fn); - }; - const clear = () => { - fns.clear(); - }; - const on = (fn) => { - fns.add(fn); - const offFn = () => off(fn); - tryOnScopeDispose(offFn); - return { - off: offFn - }; - }; - const trigger = (...args) => { - return Promise.all(Array.from(fns).map((fn) => fn(...args))); - }; - return { - on, - off, - trigger, - clear - }; -} -function createGlobalState(stateFactory) { - let initialized = false; - let state; - const scope = effectScope(true); - return (...args) => { - if (!initialized) { - state = scope.run(() => stateFactory(...args)); - initialized = true; - } - return state; - }; -} -var localProvidedStateMap = /* @__PURE__ */ new WeakMap(); -var injectLocal = (...args) => { - var _a; - const key = args[0]; - const instance = (_a = getCurrentInstance()) == null ? void 0 : _a.proxy; - if (instance == null && !hasInjectionContext()) - throw new Error("injectLocal must be called in setup"); - if (instance && localProvidedStateMap.has(instance) && key in localProvidedStateMap.get(instance)) - return localProvidedStateMap.get(instance)[key]; - return inject(...args); -}; -var provideLocal = (key, value) => { - var _a; - const instance = (_a = getCurrentInstance()) == null ? void 0 : _a.proxy; - if (instance == null) - throw new Error("provideLocal must be called in setup"); - if (!localProvidedStateMap.has(instance)) - localProvidedStateMap.set(instance, /* @__PURE__ */ Object.create(null)); - const localProvidedState = localProvidedStateMap.get(instance); - localProvidedState[key] = value; - provide(key, value); -}; -function createInjectionState(composable, options) { - const key = (options == null ? void 0 : options.injectionKey) || Symbol(composable.name || "InjectionState"); - const defaultValue = options == null ? void 0 : options.defaultValue; - const useProvidingState = (...args) => { - const state = composable(...args); - provideLocal(key, state); - return state; - }; - const useInjectedState = () => injectLocal(key, defaultValue); - return [useProvidingState, useInjectedState]; -} -function createRef(value, deep) { - if (deep === true) { - return ref(value); - } else { - return shallowRef(value); - } -} -function createSharedComposable(composable) { - let subscribers = 0; - let state; - let scope; - const dispose = () => { - subscribers -= 1; - if (scope && subscribers <= 0) { - scope.stop(); - state = void 0; - scope = void 0; - } - }; - return (...args) => { - subscribers += 1; - if (!scope) { - scope = effectScope(true); - state = scope.run(() => composable(...args)); - } - tryOnScopeDispose(dispose); - return state; - }; -} -function extendRef(ref2, extend, { enumerable = false, unwrap = true } = {}) { - for (const [key, value] of Object.entries(extend)) { - if (key === "value") - continue; - if (isRef(value) && unwrap) { - Object.defineProperty(ref2, key, { - get() { - return value.value; - }, - set(v) { - value.value = v; - }, - enumerable - }); - } else { - Object.defineProperty(ref2, key, { value, enumerable }); - } - } - return ref2; -} -function get(obj, key) { - if (key == null) - return unref(obj); - return unref(obj)[key]; -} -function isDefined(v) { - return unref(v) != null; -} -function makeDestructurable(obj, arr) { - if (typeof Symbol !== "undefined") { - const clone = { ...obj }; - Object.defineProperty(clone, Symbol.iterator, { - enumerable: false, - value() { - let index = 0; - return { - next: () => ({ - value: arr[index++], - done: index > arr.length - }) - }; - } - }); - return clone; - } else { - return Object.assign([...arr], obj); - } -} -function reactify(fn, options) { - const unrefFn = (options == null ? void 0 : options.computedGetter) === false ? unref : toValue; - return function(...args) { - return computed(() => fn.apply(this, args.map((i) => unrefFn(i)))); - }; -} -function reactifyObject(obj, optionsOrKeys = {}) { - let keys2 = []; - let options; - if (Array.isArray(optionsOrKeys)) { - keys2 = optionsOrKeys; - } else { - options = optionsOrKeys; - const { includeOwnProperties = true } = optionsOrKeys; - keys2.push(...Object.keys(obj)); - if (includeOwnProperties) - keys2.push(...Object.getOwnPropertyNames(obj)); - } - return Object.fromEntries( - keys2.map((key) => { - const value = obj[key]; - return [ - key, - typeof value === "function" ? reactify(value.bind(obj), options) : value - ]; - }) - ); -} -function toReactive(objectRef) { - if (!isRef(objectRef)) - return reactive(objectRef); - const proxy = new Proxy({}, { - get(_, p, receiver) { - return unref(Reflect.get(objectRef.value, p, receiver)); - }, - set(_, p, value) { - if (isRef(objectRef.value[p]) && !isRef(value)) - objectRef.value[p].value = value; - else - objectRef.value[p] = value; - return true; - }, - deleteProperty(_, p) { - return Reflect.deleteProperty(objectRef.value, p); - }, - has(_, p) { - return Reflect.has(objectRef.value, p); - }, - ownKeys() { - return Object.keys(objectRef.value); - }, - getOwnPropertyDescriptor() { - return { - enumerable: true, - configurable: true - }; - } - }); - return reactive(proxy); -} -function reactiveComputed(fn) { - return toReactive(computed(fn)); -} -function reactiveOmit(obj, ...keys2) { - const flatKeys = keys2.flat(); - const predicate = flatKeys[0]; - return reactiveComputed(() => typeof predicate === "function" ? Object.fromEntries(Object.entries(toRefs(obj)).filter(([k, v]) => !predicate(toValue(v), k))) : Object.fromEntries(Object.entries(toRefs(obj)).filter((e) => !flatKeys.includes(e[0])))); -} -var isClient = typeof window !== "undefined" && typeof document !== "undefined"; -var isWorker = typeof WorkerGlobalScope !== "undefined" && globalThis instanceof WorkerGlobalScope; -var isDef = (val) => typeof val !== "undefined"; -var notNullish = (val) => val != null; -var assert = (condition, ...infos) => { - if (!condition) - console.warn(...infos); -}; -var toString = Object.prototype.toString; -var isObject = (val) => toString.call(val) === "[object Object]"; -var now = () => Date.now(); -var timestamp = () => +Date.now(); -var clamp = (n, min, max) => Math.min(max, Math.max(min, n)); -var noop = () => { -}; -var rand = (min, max) => { - min = Math.ceil(min); - max = Math.floor(max); - return Math.floor(Math.random() * (max - min + 1)) + min; -}; -var hasOwn = (val, key) => Object.prototype.hasOwnProperty.call(val, key); -var isIOS = getIsIOS(); -function getIsIOS() { - var _a, _b; - return isClient && ((_a = window == null ? void 0 : window.navigator) == null ? void 0 : _a.userAgent) && (/iP(?:ad|hone|od)/.test(window.navigator.userAgent) || ((_b = window == null ? void 0 : window.navigator) == null ? void 0 : _b.maxTouchPoints) > 2 && /iPad|Macintosh/.test(window == null ? void 0 : window.navigator.userAgent)); -} -function createFilterWrapper(filter, fn) { - function wrapper(...args) { - return new Promise((resolve, reject) => { - Promise.resolve(filter(() => fn.apply(this, args), { fn, thisArg: this, args })).then(resolve).catch(reject); - }); - } - return wrapper; -} -var bypassFilter = (invoke2) => { - return invoke2(); -}; -function debounceFilter(ms, options = {}) { - let timer; - let maxTimer; - let lastRejector = noop; - const _clearTimeout = (timer2) => { - clearTimeout(timer2); - lastRejector(); - lastRejector = noop; - }; - let lastInvoker; - const filter = (invoke2) => { - const duration = toValue(ms); - const maxDuration = toValue(options.maxWait); - if (timer) - _clearTimeout(timer); - if (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) { - if (maxTimer) { - _clearTimeout(maxTimer); - maxTimer = null; - } - return Promise.resolve(invoke2()); - } - return new Promise((resolve, reject) => { - lastRejector = options.rejectOnCancel ? reject : resolve; - lastInvoker = invoke2; - if (maxDuration && !maxTimer) { - maxTimer = setTimeout(() => { - if (timer) - _clearTimeout(timer); - maxTimer = null; - resolve(lastInvoker()); - }, maxDuration); - } - timer = setTimeout(() => { - if (maxTimer) - _clearTimeout(maxTimer); - maxTimer = null; - resolve(invoke2()); - }, duration); - }); - }; - return filter; -} -function throttleFilter(...args) { - let lastExec = 0; - let timer; - let isLeading = true; - let lastRejector = noop; - let lastValue; - let ms; - let trailing; - let leading; - let rejectOnCancel; - if (!isRef(args[0]) && typeof args[0] === "object") - ({ delay: ms, trailing = true, leading = true, rejectOnCancel = false } = args[0]); - else - [ms, trailing = true, leading = true, rejectOnCancel = false] = args; - const clear = () => { - if (timer) { - clearTimeout(timer); - timer = void 0; - lastRejector(); - lastRejector = noop; - } - }; - const filter = (_invoke) => { - const duration = toValue(ms); - const elapsed = Date.now() - lastExec; - const invoke2 = () => { - return lastValue = _invoke(); - }; - clear(); - if (duration <= 0) { - lastExec = Date.now(); - return invoke2(); - } - if (elapsed > duration && (leading || !isLeading)) { - lastExec = Date.now(); - invoke2(); - } else if (trailing) { - lastValue = new Promise((resolve, reject) => { - lastRejector = rejectOnCancel ? reject : resolve; - timer = setTimeout(() => { - lastExec = Date.now(); - isLeading = true; - resolve(invoke2()); - clear(); - }, Math.max(0, duration - elapsed)); - }); - } - if (!leading && !timer) - timer = setTimeout(() => isLeading = true, duration); - isLeading = false; - return lastValue; - }; - return filter; -} -function pausableFilter(extendFilter = bypassFilter, options = {}) { - const { - initialState = "active" - } = options; - const isActive = toRef2(initialState === "active"); - function pause() { - isActive.value = false; - } - function resume() { - isActive.value = true; - } - const eventFilter = (...args) => { - if (isActive.value) - extendFilter(...args); - }; - return { isActive: readonly(isActive), pause, resume, eventFilter }; -} -function cacheStringFunction(fn) { - const cache = /* @__PURE__ */ Object.create(null); - return (str) => { - const hit = cache[str]; - return hit || (cache[str] = fn(str)); - }; -} -var hyphenateRE = /\B([A-Z])/g; -var hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, "-$1").toLowerCase()); -var camelizeRE = /-(\w)/g; -var camelize = cacheStringFunction((str) => { - return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : ""); -}); -function promiseTimeout(ms, throwOnTimeout = false, reason = "Timeout") { - return new Promise((resolve, reject) => { - if (throwOnTimeout) - setTimeout(() => reject(reason), ms); - else - setTimeout(resolve, ms); - }); -} -function identity(arg) { - return arg; -} -function createSingletonPromise(fn) { - let _promise; - function wrapper() { - if (!_promise) - _promise = fn(); - return _promise; - } - wrapper.reset = async () => { - const _prev = _promise; - _promise = void 0; - if (_prev) - await _prev; - }; - return wrapper; -} -function invoke(fn) { - return fn(); -} -function containsProp(obj, ...props) { - return props.some((k) => k in obj); -} -function increaseWithUnit(target, delta) { - var _a; - if (typeof target === "number") - return target + delta; - const value = ((_a = target.match(/^-?\d+\.?\d*/)) == null ? void 0 : _a[0]) || ""; - const unit = target.slice(value.length); - const result = Number.parseFloat(value) + delta; - if (Number.isNaN(result)) - return target; - return result + unit; -} -function pxValue(px) { - return px.endsWith("rem") ? Number.parseFloat(px) * 16 : Number.parseFloat(px); -} -function objectPick(obj, keys2, omitUndefined = false) { - return keys2.reduce((n, k) => { - if (k in obj) { - if (!omitUndefined || obj[k] !== void 0) - n[k] = obj[k]; - } - return n; - }, {}); -} -function objectOmit(obj, keys2, omitUndefined = false) { - return Object.fromEntries(Object.entries(obj).filter(([key, value]) => { - return (!omitUndefined || value !== void 0) && !keys2.includes(key); - })); -} -function objectEntries(obj) { - return Object.entries(obj); -} -function getLifeCycleTarget(target) { - return target || getCurrentInstance(); -} -function toArray(value) { - return Array.isArray(value) ? value : [value]; -} -function toRef2(...args) { - if (args.length !== 1) - return toRef(...args); - const r = args[0]; - return typeof r === "function" ? readonly(customRef(() => ({ get: r, set: noop }))) : ref(r); -} -var resolveRef = toRef2; -function reactivePick(obj, ...keys2) { - const flatKeys = keys2.flat(); - const predicate = flatKeys[0]; - return reactiveComputed(() => typeof predicate === "function" ? Object.fromEntries(Object.entries(toRefs(obj)).filter(([k, v]) => predicate(toValue(v), k))) : Object.fromEntries(flatKeys.map((k) => [k, toRef2(obj, k)]))); -} -function refAutoReset(defaultValue, afterMs = 1e4) { - return customRef((track, trigger) => { - let value = toValue(defaultValue); - let timer; - const resetAfter = () => setTimeout(() => { - value = toValue(defaultValue); - trigger(); - }, toValue(afterMs)); - tryOnScopeDispose(() => { - clearTimeout(timer); - }); - return { - get() { - track(); - return value; - }, - set(newValue) { - value = newValue; - trigger(); - clearTimeout(timer); - timer = resetAfter(); - } - }; - }); -} -function useDebounceFn(fn, ms = 200, options = {}) { - return createFilterWrapper( - debounceFilter(ms, options), - fn - ); -} -function refDebounced(value, ms = 200, options = {}) { - const debounced = ref(value.value); - const updater = useDebounceFn(() => { - debounced.value = value.value; - }, ms, options); - watch(value, () => updater()); - return debounced; -} -function refDefault(source, defaultValue) { - return computed({ - get() { - var _a; - return (_a = source.value) != null ? _a : defaultValue; - }, - set(value) { - source.value = value; - } - }); -} -function useThrottleFn(fn, ms = 200, trailing = false, leading = true, rejectOnCancel = false) { - return createFilterWrapper( - throttleFilter(ms, trailing, leading, rejectOnCancel), - fn - ); -} -function refThrottled(value, delay = 200, trailing = true, leading = true) { - if (delay <= 0) - return value; - const throttled = ref(value.value); - const updater = useThrottleFn(() => { - throttled.value = value.value; - }, delay, trailing, leading); - watch(value, () => updater()); - return throttled; -} -function refWithControl(initial, options = {}) { - let source = initial; - let track; - let trigger; - const ref2 = customRef((_track, _trigger) => { - track = _track; - trigger = _trigger; - return { - get() { - return get2(); - }, - set(v) { - set2(v); - } - }; - }); - function get2(tracking = true) { - if (tracking) - track(); - return source; - } - function set2(value, triggering = true) { - var _a, _b; - if (value === source) - return; - const old = source; - if (((_a = options.onBeforeChange) == null ? void 0 : _a.call(options, value, old)) === false) - return; - source = value; - (_b = options.onChanged) == null ? void 0 : _b.call(options, value, old); - if (triggering) - trigger(); - } - const untrackedGet = () => get2(false); - const silentSet = (v) => set2(v, false); - const peek = () => get2(false); - const lay = (v) => set2(v, false); - return extendRef( - ref2, - { - get: get2, - set: set2, - untrackedGet, - silentSet, - peek, - lay - }, - { enumerable: true } - ); -} -var controlledRef = refWithControl; -function set(...args) { - if (args.length === 2) { - const [ref2, value] = args; - ref2.value = value; - } - if (args.length === 3) { - const [target, key, value] = args; - target[key] = value; - } -} -function watchWithFilter(source, cb, options = {}) { - const { - eventFilter = bypassFilter, - ...watchOptions - } = options; - return watch( - source, - createFilterWrapper( - eventFilter, - cb - ), - watchOptions - ); -} -function watchPausable(source, cb, options = {}) { - const { - eventFilter: filter, - initialState = "active", - ...watchOptions - } = options; - const { eventFilter, pause, resume, isActive } = pausableFilter(filter, { initialState }); - const stop = watchWithFilter( - source, - cb, - { - ...watchOptions, - eventFilter - } - ); - return { stop, pause, resume, isActive }; -} -function syncRef(left, right, ...[options]) { - const { - flush = "sync", - deep = false, - immediate = true, - direction = "both", - transform = {} - } = options || {}; - const watchers = []; - const transformLTR = "ltr" in transform && transform.ltr || ((v) => v); - const transformRTL = "rtl" in transform && transform.rtl || ((v) => v); - if (direction === "both" || direction === "ltr") { - watchers.push(watchPausable( - left, - (newValue) => { - watchers.forEach((w) => w.pause()); - right.value = transformLTR(newValue); - watchers.forEach((w) => w.resume()); - }, - { flush, deep, immediate } - )); - } - if (direction === "both" || direction === "rtl") { - watchers.push(watchPausable( - right, - (newValue) => { - watchers.forEach((w) => w.pause()); - left.value = transformRTL(newValue); - watchers.forEach((w) => w.resume()); - }, - { flush, deep, immediate } - )); - } - const stop = () => { - watchers.forEach((w) => w.stop()); - }; - return stop; -} -function syncRefs(source, targets, options = {}) { - const { - flush = "sync", - deep = false, - immediate = true - } = options; - const targetsArray = toArray(targets); - return watch( - source, - (newValue) => targetsArray.forEach((target) => target.value = newValue), - { flush, deep, immediate } - ); -} -function toRefs2(objectRef, options = {}) { - if (!isRef(objectRef)) - return toRefs(objectRef); - const result = Array.isArray(objectRef.value) ? Array.from({ length: objectRef.value.length }) : {}; - for (const key in objectRef.value) { - result[key] = customRef(() => ({ - get() { - return objectRef.value[key]; - }, - set(v) { - var _a; - const replaceRef = (_a = toValue(options.replaceRef)) != null ? _a : true; - if (replaceRef) { - if (Array.isArray(objectRef.value)) { - const copy = [...objectRef.value]; - copy[key] = v; - objectRef.value = copy; - } else { - const newObject = { ...objectRef.value, [key]: v }; - Object.setPrototypeOf(newObject, Object.getPrototypeOf(objectRef.value)); - objectRef.value = newObject; - } - } else { - objectRef.value[key] = v; - } - } - })); - } - return result; -} -var toValue2 = toValue; -var resolveUnref = toValue; -function tryOnBeforeMount(fn, sync = true, target) { - const instance = getLifeCycleTarget(target); - if (instance) - onBeforeMount(fn, target); - else if (sync) - fn(); - else - nextTick(fn); -} -function tryOnBeforeUnmount(fn, target) { - const instance = getLifeCycleTarget(target); - if (instance) - onBeforeUnmount(fn, target); -} -function tryOnMounted(fn, sync = true, target) { - const instance = getLifeCycleTarget(); - if (instance) - onMounted(fn, target); - else if (sync) - fn(); - else - nextTick(fn); -} -function tryOnUnmounted(fn, target) { - const instance = getLifeCycleTarget(target); - if (instance) - onUnmounted(fn, target); -} -function createUntil(r, isNot = false) { - function toMatch(condition, { flush = "sync", deep = false, timeout, throwOnTimeout } = {}) { - let stop = null; - const watcher = new Promise((resolve) => { - stop = watch( - r, - (v) => { - if (condition(v) !== isNot) { - if (stop) - stop(); - else - nextTick(() => stop == null ? void 0 : stop()); - resolve(v); - } - }, - { - flush, - deep, - immediate: true - } - ); - }); - const promises = [watcher]; - if (timeout != null) { - promises.push( - promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => stop == null ? void 0 : stop()) - ); - } - return Promise.race(promises); - } - function toBe(value, options) { - if (!isRef(value)) - return toMatch((v) => v === value, options); - const { flush = "sync", deep = false, timeout, throwOnTimeout } = options != null ? options : {}; - let stop = null; - const watcher = new Promise((resolve) => { - stop = watch( - [r, value], - ([v1, v2]) => { - if (isNot !== (v1 === v2)) { - if (stop) - stop(); - else - nextTick(() => stop == null ? void 0 : stop()); - resolve(v1); - } - }, - { - flush, - deep, - immediate: true - } - ); - }); - const promises = [watcher]; - if (timeout != null) { - promises.push( - promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => { - stop == null ? void 0 : stop(); - return toValue(r); - }) - ); - } - return Promise.race(promises); - } - function toBeTruthy(options) { - return toMatch((v) => Boolean(v), options); - } - function toBeNull(options) { - return toBe(null, options); - } - function toBeUndefined(options) { - return toBe(void 0, options); - } - function toBeNaN(options) { - return toMatch(Number.isNaN, options); - } - function toContains(value, options) { - return toMatch((v) => { - const array = Array.from(v); - return array.includes(value) || array.includes(toValue(value)); - }, options); - } - function changed(options) { - return changedTimes(1, options); - } - function changedTimes(n = 1, options) { - let count = -1; - return toMatch(() => { - count += 1; - return count >= n; - }, options); - } - if (Array.isArray(toValue(r))) { - const instance = { - toMatch, - toContains, - changed, - changedTimes, - get not() { - return createUntil(r, !isNot); - } - }; - return instance; - } else { - const instance = { - toMatch, - toBe, - toBeTruthy, - toBeNull, - toBeNaN, - toBeUndefined, - changed, - changedTimes, - get not() { - return createUntil(r, !isNot); - } - }; - return instance; - } -} -function until(r) { - return createUntil(r); -} -function defaultComparator(value, othVal) { - return value === othVal; -} -function useArrayDifference(...args) { - var _a, _b; - const list = args[0]; - const values = args[1]; - let compareFn = (_a = args[2]) != null ? _a : defaultComparator; - const { - symmetric = false - } = (_b = args[3]) != null ? _b : {}; - if (typeof compareFn === "string") { - const key = compareFn; - compareFn = (value, othVal) => value[key] === othVal[key]; - } - const diff1 = computed(() => toValue(list).filter((x) => toValue(values).findIndex((y) => compareFn(x, y)) === -1)); - if (symmetric) { - const diff2 = computed(() => toValue(values).filter((x) => toValue(list).findIndex((y) => compareFn(x, y)) === -1)); - return computed(() => symmetric ? [...toValue(diff1), ...toValue(diff2)] : toValue(diff1)); - } else { - return diff1; - } -} -function useArrayEvery(list, fn) { - return computed(() => toValue(list).every((element, index, array) => fn(toValue(element), index, array))); -} -function useArrayFilter(list, fn) { - return computed(() => toValue(list).map((i) => toValue(i)).filter(fn)); -} -function useArrayFind(list, fn) { - return computed(() => toValue( - toValue(list).find((element, index, array) => fn(toValue(element), index, array)) - )); -} -function useArrayFindIndex(list, fn) { - return computed(() => toValue(list).findIndex((element, index, array) => fn(toValue(element), index, array))); -} -function findLast(arr, cb) { - let index = arr.length; - while (index-- > 0) { - if (cb(arr[index], index, arr)) - return arr[index]; - } - return void 0; -} -function useArrayFindLast(list, fn) { - return computed(() => toValue( - !Array.prototype.findLast ? findLast(toValue(list), (element, index, array) => fn(toValue(element), index, array)) : toValue(list).findLast((element, index, array) => fn(toValue(element), index, array)) - )); -} -function isArrayIncludesOptions(obj) { - return isObject(obj) && containsProp(obj, "formIndex", "comparator"); -} -function useArrayIncludes(...args) { - var _a; - const list = args[0]; - const value = args[1]; - let comparator = args[2]; - let formIndex = 0; - if (isArrayIncludesOptions(comparator)) { - formIndex = (_a = comparator.fromIndex) != null ? _a : 0; - comparator = comparator.comparator; - } - if (typeof comparator === "string") { - const key = comparator; - comparator = (element, value2) => element[key] === toValue(value2); - } - comparator = comparator != null ? comparator : (element, value2) => element === toValue(value2); - return computed(() => toValue(list).slice(formIndex).some((element, index, array) => comparator( - toValue(element), - toValue(value), - index, - toValue(array) - ))); -} -function useArrayJoin(list, separator) { - return computed(() => toValue(list).map((i) => toValue(i)).join(toValue(separator))); -} -function useArrayMap(list, fn) { - return computed(() => toValue(list).map((i) => toValue(i)).map(fn)); -} -function useArrayReduce(list, reducer, ...args) { - const reduceCallback = (sum, value, index) => reducer(toValue(sum), toValue(value), index); - return computed(() => { - const resolved = toValue(list); - return args.length ? resolved.reduce(reduceCallback, typeof args[0] === "function" ? toValue(args[0]()) : toValue(args[0])) : resolved.reduce(reduceCallback); - }); -} -function useArraySome(list, fn) { - return computed(() => toValue(list).some((element, index, array) => fn(toValue(element), index, array))); -} -function uniq(array) { - return Array.from(new Set(array)); -} -function uniqueElementsBy(array, fn) { - return array.reduce((acc, v) => { - if (!acc.some((x) => fn(v, x, array))) - acc.push(v); - return acc; - }, []); -} -function useArrayUnique(list, compareFn) { - return computed(() => { - const resolvedList = toValue(list).map((element) => toValue(element)); - return compareFn ? uniqueElementsBy(resolvedList, compareFn) : uniq(resolvedList); - }); -} -function useCounter(initialValue = 0, options = {}) { - let _initialValue = unref(initialValue); - const count = shallowRef(initialValue); - const { - max = Number.POSITIVE_INFINITY, - min = Number.NEGATIVE_INFINITY - } = options; - const inc = (delta = 1) => count.value = Math.max(Math.min(max, count.value + delta), min); - const dec = (delta = 1) => count.value = Math.min(Math.max(min, count.value - delta), max); - const get2 = () => count.value; - const set2 = (val) => count.value = Math.max(min, Math.min(max, val)); - const reset = (val = _initialValue) => { - _initialValue = val; - return set2(val); - }; - return { count, inc, dec, get: get2, set: set2, reset }; -} -var REGEX_PARSE = /^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[T\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/i; -var REGEX_FORMAT = /[YMDHhms]o|\[([^\]]+)\]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a{1,2}|A{1,2}|m{1,2}|s{1,2}|Z{1,2}|z{1,4}|SSS/g; -function defaultMeridiem(hours, minutes, isLowercase, hasPeriod) { - let m = hours < 12 ? "AM" : "PM"; - if (hasPeriod) - m = m.split("").reduce((acc, curr) => acc += `${curr}.`, ""); - return isLowercase ? m.toLowerCase() : m; -} -function formatOrdinal(num) { - const suffixes = ["th", "st", "nd", "rd"]; - const v = num % 100; - return num + (suffixes[(v - 20) % 10] || suffixes[v] || suffixes[0]); -} -function formatDate(date, formatStr, options = {}) { - var _a; - const years = date.getFullYear(); - const month = date.getMonth(); - const days = date.getDate(); - const hours = date.getHours(); - const minutes = date.getMinutes(); - const seconds = date.getSeconds(); - const milliseconds = date.getMilliseconds(); - const day = date.getDay(); - const meridiem = (_a = options.customMeridiem) != null ? _a : defaultMeridiem; - const stripTimeZone = (dateString) => { - var _a2; - return (_a2 = dateString.split(" ")[1]) != null ? _a2 : ""; - }; - const matches = { - Yo: () => formatOrdinal(years), - YY: () => String(years).slice(-2), - YYYY: () => years, - M: () => month + 1, - Mo: () => formatOrdinal(month + 1), - MM: () => `${month + 1}`.padStart(2, "0"), - MMM: () => date.toLocaleDateString(toValue(options.locales), { month: "short" }), - MMMM: () => date.toLocaleDateString(toValue(options.locales), { month: "long" }), - D: () => String(days), - Do: () => formatOrdinal(days), - DD: () => `${days}`.padStart(2, "0"), - H: () => String(hours), - Ho: () => formatOrdinal(hours), - HH: () => `${hours}`.padStart(2, "0"), - h: () => `${hours % 12 || 12}`.padStart(1, "0"), - ho: () => formatOrdinal(hours % 12 || 12), - hh: () => `${hours % 12 || 12}`.padStart(2, "0"), - m: () => String(minutes), - mo: () => formatOrdinal(minutes), - mm: () => `${minutes}`.padStart(2, "0"), - s: () => String(seconds), - so: () => formatOrdinal(seconds), - ss: () => `${seconds}`.padStart(2, "0"), - SSS: () => `${milliseconds}`.padStart(3, "0"), - d: () => day, - dd: () => date.toLocaleDateString(toValue(options.locales), { weekday: "narrow" }), - ddd: () => date.toLocaleDateString(toValue(options.locales), { weekday: "short" }), - dddd: () => date.toLocaleDateString(toValue(options.locales), { weekday: "long" }), - A: () => meridiem(hours, minutes), - AA: () => meridiem(hours, minutes, false, true), - a: () => meridiem(hours, minutes, true), - aa: () => meridiem(hours, minutes, true, true), - z: () => stripTimeZone(date.toLocaleDateString(toValue(options.locales), { timeZoneName: "shortOffset" })), - zz: () => stripTimeZone(date.toLocaleDateString(toValue(options.locales), { timeZoneName: "shortOffset" })), - zzz: () => stripTimeZone(date.toLocaleDateString(toValue(options.locales), { timeZoneName: "shortOffset" })), - zzzz: () => stripTimeZone(date.toLocaleDateString(toValue(options.locales), { timeZoneName: "longOffset" })) - }; - return formatStr.replace(REGEX_FORMAT, (match, $1) => { - var _a2, _b; - return (_b = $1 != null ? $1 : (_a2 = matches[match]) == null ? void 0 : _a2.call(matches)) != null ? _b : match; - }); -} -function normalizeDate(date) { - if (date === null) - return new Date(Number.NaN); - if (date === void 0) - return /* @__PURE__ */ new Date(); - if (date instanceof Date) - return new Date(date); - if (typeof date === "string" && !/Z$/i.test(date)) { - const d = date.match(REGEX_PARSE); - if (d) { - const m = d[2] - 1 || 0; - const ms = (d[7] || "0").substring(0, 3); - return new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms); - } - } - return new Date(date); -} -function useDateFormat(date, formatStr = "HH:mm:ss", options = {}) { - return computed(() => formatDate(normalizeDate(toValue(date)), toValue(formatStr), options)); -} -function useIntervalFn(cb, interval = 1e3, options = {}) { - const { - immediate = true, - immediateCallback = false - } = options; - let timer = null; - const isActive = shallowRef(false); - function clean() { - if (timer) { - clearInterval(timer); - timer = null; - } - } - function pause() { - isActive.value = false; - clean(); - } - function resume() { - const intervalValue = toValue(interval); - if (intervalValue <= 0) - return; - isActive.value = true; - if (immediateCallback) - cb(); - clean(); - if (isActive.value) - timer = setInterval(cb, intervalValue); - } - if (immediate && isClient) - resume(); - if (isRef(interval) || typeof interval === "function") { - const stopWatch = watch(interval, () => { - if (isActive.value && isClient) - resume(); - }); - tryOnScopeDispose(stopWatch); - } - tryOnScopeDispose(pause); - return { - isActive, - pause, - resume - }; -} -function useInterval(interval = 1e3, options = {}) { - const { - controls: exposeControls = false, - immediate = true, - callback - } = options; - const counter = shallowRef(0); - const update = () => counter.value += 1; - const reset = () => { - counter.value = 0; - }; - const controls = useIntervalFn( - callback ? () => { - update(); - callback(counter.value); - } : update, - interval, - { immediate } - ); - if (exposeControls) { - return { - counter, - reset, - ...controls - }; - } else { - return counter; - } -} -function useLastChanged(source, options = {}) { - var _a; - const ms = shallowRef((_a = options.initialValue) != null ? _a : null); - watch( - source, - () => ms.value = timestamp(), - options - ); - return ms; -} -function useTimeoutFn(cb, interval, options = {}) { - const { - immediate = true, - immediateCallback = false - } = options; - const isPending = shallowRef(false); - let timer = null; - function clear() { - if (timer) { - clearTimeout(timer); - timer = null; - } - } - function stop() { - isPending.value = false; - clear(); - } - function start(...args) { - if (immediateCallback) - cb(); - clear(); - isPending.value = true; - timer = setTimeout(() => { - isPending.value = false; - timer = null; - cb(...args); - }, toValue(interval)); - } - if (immediate) { - isPending.value = true; - if (isClient) - start(); - } - tryOnScopeDispose(stop); - return { - isPending: readonly(isPending), - start, - stop - }; -} -function useTimeout(interval = 1e3, options = {}) { - const { - controls: exposeControls = false, - callback - } = options; - const controls = useTimeoutFn( - callback != null ? callback : noop, - interval, - options - ); - const ready = computed(() => !controls.isPending.value); - if (exposeControls) { - return { - ready, - ...controls - }; - } else { - return ready; - } -} -function useToNumber(value, options = {}) { - const { - method = "parseFloat", - radix, - nanToZero - } = options; - return computed(() => { - let resolved = toValue(value); - if (typeof method === "function") - resolved = method(resolved); - else if (typeof resolved === "string") - resolved = Number[method](resolved, radix); - if (nanToZero && Number.isNaN(resolved)) - resolved = 0; - return resolved; - }); -} -function useToString(value) { - return computed(() => `${toValue(value)}`); -} -function useToggle(initialValue = false, options = {}) { - const { - truthyValue = true, - falsyValue = false - } = options; - const valueIsRef = isRef(initialValue); - const _value = shallowRef(initialValue); - function toggle(value) { - if (arguments.length) { - _value.value = value; - return _value.value; - } else { - const truthy = toValue(truthyValue); - _value.value = _value.value === truthy ? toValue(falsyValue) : truthy; - return _value.value; - } - } - if (valueIsRef) - return toggle; - else - return [_value, toggle]; -} -function watchArray(source, cb, options) { - let oldList = (options == null ? void 0 : options.immediate) ? [] : [...typeof source === "function" ? source() : Array.isArray(source) ? source : toValue(source)]; - return watch(source, (newList, _, onCleanup) => { - const oldListRemains = Array.from({ length: oldList.length }); - const added = []; - for (const obj of newList) { - let found = false; - for (let i = 0; i < oldList.length; i++) { - if (!oldListRemains[i] && obj === oldList[i]) { - oldListRemains[i] = true; - found = true; - break; - } - } - if (!found) - added.push(obj); - } - const removed = oldList.filter((_2, i) => !oldListRemains[i]); - cb(newList, oldList, added, removed, onCleanup); - oldList = [...newList]; - }, options); -} -function watchAtMost(source, cb, options) { - const { - count, - ...watchOptions - } = options; - const current = shallowRef(0); - const stop = watchWithFilter( - source, - (...args) => { - current.value += 1; - if (current.value >= toValue(count)) - nextTick(() => stop()); - cb(...args); - }, - watchOptions - ); - return { count: current, stop }; -} -function watchDebounced(source, cb, options = {}) { - const { - debounce = 0, - maxWait = void 0, - ...watchOptions - } = options; - return watchWithFilter( - source, - cb, - { - ...watchOptions, - eventFilter: debounceFilter(debounce, { maxWait }) - } - ); -} -function watchDeep(source, cb, options) { - return watch( - source, - cb, - { - ...options, - deep: true - } - ); -} -function watchIgnorable(source, cb, options = {}) { - const { - eventFilter = bypassFilter, - ...watchOptions - } = options; - const filteredCb = createFilterWrapper( - eventFilter, - cb - ); - let ignoreUpdates; - let ignorePrevAsyncUpdates; - let stop; - if (watchOptions.flush === "sync") { - const ignore = shallowRef(false); - ignorePrevAsyncUpdates = () => { - }; - ignoreUpdates = (updater) => { - ignore.value = true; - updater(); - ignore.value = false; - }; - stop = watch( - source, - (...args) => { - if (!ignore.value) - filteredCb(...args); - }, - watchOptions - ); - } else { - const disposables = []; - const ignoreCounter = shallowRef(0); - const syncCounter = shallowRef(0); - ignorePrevAsyncUpdates = () => { - ignoreCounter.value = syncCounter.value; - }; - disposables.push( - watch( - source, - () => { - syncCounter.value++; - }, - { ...watchOptions, flush: "sync" } - ) - ); - ignoreUpdates = (updater) => { - const syncCounterPrev = syncCounter.value; - updater(); - ignoreCounter.value += syncCounter.value - syncCounterPrev; - }; - disposables.push( - watch( - source, - (...args) => { - const ignore = ignoreCounter.value > 0 && ignoreCounter.value === syncCounter.value; - ignoreCounter.value = 0; - syncCounter.value = 0; - if (ignore) - return; - filteredCb(...args); - }, - watchOptions - ) - ); - stop = () => { - disposables.forEach((fn) => fn()); - }; - } - return { stop, ignoreUpdates, ignorePrevAsyncUpdates }; -} -function watchImmediate(source, cb, options) { - return watch( - source, - cb, - { - ...options, - immediate: true - } - ); -} -function watchOnce(source, cb, options) { - const stop = watch(source, (...args) => { - nextTick(() => stop()); - return cb(...args); - }, options); - return stop; -} -function watchThrottled(source, cb, options = {}) { - const { - throttle = 0, - trailing = true, - leading = true, - ...watchOptions - } = options; - return watchWithFilter( - source, - cb, - { - ...watchOptions, - eventFilter: throttleFilter(throttle, trailing, leading) - } - ); -} -function watchTriggerable(source, cb, options = {}) { - let cleanupFn; - function onEffect() { - if (!cleanupFn) - return; - const fn = cleanupFn; - cleanupFn = void 0; - fn(); - } - function onCleanup(callback) { - cleanupFn = callback; - } - const _cb = (value, oldValue) => { - onEffect(); - return cb(value, oldValue, onCleanup); - }; - const res = watchIgnorable(source, _cb, options); - const { ignoreUpdates } = res; - const trigger = () => { - let res2; - ignoreUpdates(() => { - res2 = _cb(getWatchSources(source), getOldValue(source)); - }); - return res2; - }; - return { - ...res, - trigger - }; -} -function getWatchSources(sources) { - if (isReactive(sources)) - return sources; - if (Array.isArray(sources)) - return sources.map((item) => toValue(item)); - return toValue(sources); -} -function getOldValue(source) { - return Array.isArray(source) ? source.map(() => void 0) : void 0; -} -function whenever(source, cb, options) { - const stop = watch( - source, - (v, ov, onInvalidate) => { - if (v) { - if (options == null ? void 0 : options.once) - nextTick(() => stop()); - cb(v, ov, onInvalidate); - } - }, - { - ...options, - once: false - } - ); - return stop; -} - -// node_modules/@vueuse/core/index.mjs -function computedAsync(evaluationCallback, initialState, optionsOrRef) { - let options; - if (isRef(optionsOrRef)) { - options = { - evaluating: optionsOrRef - }; - } else { - options = optionsOrRef || {}; - } - const { - lazy = false, - evaluating = void 0, - shallow = true, - onError = noop - } = options; - const started = shallowRef(!lazy); - const current = shallow ? shallowRef(initialState) : ref(initialState); - let counter = 0; - watchEffect(async (onInvalidate) => { - if (!started.value) - return; - counter++; - const counterAtBeginning = counter; - let hasFinished = false; - if (evaluating) { - Promise.resolve().then(() => { - evaluating.value = true; - }); - } - try { - const result = await evaluationCallback((cancelCallback) => { - onInvalidate(() => { - if (evaluating) - evaluating.value = false; - if (!hasFinished) - cancelCallback(); - }); - }); - if (counterAtBeginning === counter) - current.value = result; - } catch (e) { - onError(e); - } finally { - if (evaluating && counterAtBeginning === counter) - evaluating.value = false; - hasFinished = true; - } - }); - if (lazy) { - return computed(() => { - started.value = true; - return current.value; - }); - } else { - return current; - } -} -function computedInject(key, options, defaultSource, treatDefaultAsFactory) { - let source = inject(key); - if (defaultSource) - source = inject(key, defaultSource); - if (treatDefaultAsFactory) - source = inject(key, defaultSource, treatDefaultAsFactory); - if (typeof options === "function") { - return computed((ctx) => options(source, ctx)); - } else { - return computed({ - get: (ctx) => options.get(source, ctx), - set: options.set - }); - } -} -function createReusableTemplate(options = {}) { - const { - inheritAttrs = true - } = options; - const render = shallowRef(); - const define = defineComponent({ - setup(_, { slots }) { - return () => { - render.value = slots.default; - }; - } - }); - const reuse = defineComponent({ - inheritAttrs, - props: options.props, - setup(props, { attrs, slots }) { - return () => { - var _a; - if (!render.value && true) - throw new Error("[VueUse] Failed to find the definition of reusable template"); - const vnode = (_a = render.value) == null ? void 0 : _a.call(render, { - ...options.props == null ? keysToCamelKebabCase(attrs) : props, - $slots: slots - }); - return inheritAttrs && (vnode == null ? void 0 : vnode.length) === 1 ? vnode[0] : vnode; - }; - } - }); - return makeDestructurable( - { define, reuse }, - [define, reuse] - ); -} -function keysToCamelKebabCase(obj) { - const newObj = {}; - for (const key in obj) - newObj[camelize(key)] = obj[key]; - return newObj; -} -function createTemplatePromise(options = {}) { - let index = 0; - const instances = ref([]); - function create(...args) { - const props = shallowReactive({ - key: index++, - args, - promise: void 0, - resolve: () => { - }, - reject: () => { - }, - isResolving: false, - options - }); - instances.value.push(props); - props.promise = new Promise((_resolve, _reject) => { - props.resolve = (v) => { - props.isResolving = true; - return _resolve(v); - }; - props.reject = _reject; - }).finally(() => { - props.promise = void 0; - const index2 = instances.value.indexOf(props); - if (index2 !== -1) - instances.value.splice(index2, 1); - }); - return props.promise; - } - function start(...args) { - if (options.singleton && instances.value.length > 0) - return instances.value[0].promise; - return create(...args); - } - const component = defineComponent((_, { slots }) => { - const renderList = () => instances.value.map((props) => { - var _a; - return h(Fragment, { key: props.key }, (_a = slots.default) == null ? void 0 : _a.call(slots, props)); - }); - if (options.transition) - return () => h(TransitionGroup, options.transition, renderList); - return renderList; - }); - component.start = start; - return component; -} -function createUnrefFn(fn) { - return function(...args) { - return fn.apply(this, args.map((i) => toValue(i))); - }; -} -var defaultWindow = isClient ? window : void 0; -var defaultDocument = isClient ? window.document : void 0; -var defaultNavigator = isClient ? window.navigator : void 0; -var defaultLocation = isClient ? window.location : void 0; -function unrefElement(elRef) { - var _a; - const plain = toValue(elRef); - return (_a = plain == null ? void 0 : plain.$el) != null ? _a : plain; -} -function useEventListener(...args) { - const cleanups = []; - const cleanup = () => { - cleanups.forEach((fn) => fn()); - cleanups.length = 0; - }; - const register = (el, event, listener, options) => { - el.addEventListener(event, listener, options); - return () => el.removeEventListener(event, listener, options); - }; - const firstParamTargets = computed(() => { - const test = toArray(toValue(args[0])).filter((e) => e != null); - return test.every((e) => typeof e !== "string") ? test : void 0; - }); - const stopWatch = watchImmediate( - () => { - var _a, _b; - return [ - (_b = (_a = firstParamTargets.value) == null ? void 0 : _a.map((e) => unrefElement(e))) != null ? _b : [defaultWindow].filter((e) => e != null), - toArray(toValue(firstParamTargets.value ? args[1] : args[0])), - toArray(unref(firstParamTargets.value ? args[2] : args[1])), - // @ts-expect-error - TypeScript gets the correct types, but somehow still complains - toValue(firstParamTargets.value ? args[3] : args[2]) - ]; - }, - ([raw_targets, raw_events, raw_listeners, raw_options]) => { - cleanup(); - if (!(raw_targets == null ? void 0 : raw_targets.length) || !(raw_events == null ? void 0 : raw_events.length) || !(raw_listeners == null ? void 0 : raw_listeners.length)) - return; - const optionsClone = isObject(raw_options) ? { ...raw_options } : raw_options; - cleanups.push( - ...raw_targets.flatMap( - (el) => raw_events.flatMap( - (event) => raw_listeners.map((listener) => register(el, event, listener, optionsClone)) - ) - ) - ); - }, - { flush: "post" } - ); - const stop = () => { - stopWatch(); - cleanup(); - }; - tryOnScopeDispose(cleanup); - return stop; -} -var _iOSWorkaround = false; -function onClickOutside(target, handler, options = {}) { - const { window: window2 = defaultWindow, ignore = [], capture = true, detectIframe = false, controls = false } = options; - if (!window2) { - return controls ? { stop: noop, cancel: noop, trigger: noop } : noop; - } - if (isIOS && !_iOSWorkaround) { - _iOSWorkaround = true; - const listenerOptions = { passive: true }; - Array.from(window2.document.body.children).forEach((el) => useEventListener(el, "click", noop, listenerOptions)); - useEventListener(window2.document.documentElement, "click", noop, listenerOptions); - } - let shouldListen = true; - const shouldIgnore = (event) => { - return toValue(ignore).some((target2) => { - if (typeof target2 === "string") { - return Array.from(window2.document.querySelectorAll(target2)).some((el) => el === event.target || event.composedPath().includes(el)); - } else { - const el = unrefElement(target2); - return el && (event.target === el || event.composedPath().includes(el)); - } - }); - }; - function hasMultipleRoots(target2) { - const vm = toValue(target2); - return vm && vm.$.subTree.shapeFlag === 16; - } - function checkMultipleRoots(target2, event) { - const vm = toValue(target2); - const children = vm.$.subTree && vm.$.subTree.children; - if (children == null || !Array.isArray(children)) - return false; - return children.some((child) => child.el === event.target || event.composedPath().includes(child.el)); - } - const listener = (event) => { - const el = unrefElement(target); - if (event.target == null) - return; - if (!(el instanceof Element) && hasMultipleRoots(target) && checkMultipleRoots(target, event)) - return; - if (!el || el === event.target || event.composedPath().includes(el)) - return; - if ("detail" in event && event.detail === 0) - shouldListen = !shouldIgnore(event); - if (!shouldListen) { - shouldListen = true; - return; - } - handler(event); - }; - let isProcessingClick = false; - const cleanup = [ - useEventListener(window2, "click", (event) => { - if (!isProcessingClick) { - isProcessingClick = true; - setTimeout(() => { - isProcessingClick = false; - }, 0); - listener(event); - } - }, { passive: true, capture }), - useEventListener(window2, "pointerdown", (e) => { - const el = unrefElement(target); - shouldListen = !shouldIgnore(e) && !!(el && !e.composedPath().includes(el)); - }, { passive: true }), - detectIframe && useEventListener(window2, "blur", (event) => { - setTimeout(() => { - var _a; - const el = unrefElement(target); - if (((_a = window2.document.activeElement) == null ? void 0 : _a.tagName) === "IFRAME" && !(el == null ? void 0 : el.contains(window2.document.activeElement))) { - handler(event); - } - }, 0); - }, { passive: true }) - ].filter(Boolean); - const stop = () => cleanup.forEach((fn) => fn()); - if (controls) { - return { - stop, - cancel: () => { - shouldListen = false; - }, - trigger: (event) => { - shouldListen = true; - listener(event); - shouldListen = false; - } - }; - } - return stop; -} -function useMounted() { - const isMounted = shallowRef(false); - const instance = getCurrentInstance(); - if (instance) { - onMounted(() => { - isMounted.value = true; - }, instance); - } - return isMounted; -} -function useSupported(callback) { - const isMounted = useMounted(); - return computed(() => { - isMounted.value; - return Boolean(callback()); - }); -} -function useMutationObserver(target, callback, options = {}) { - const { window: window2 = defaultWindow, ...mutationOptions } = options; - let observer; - const isSupported = useSupported(() => window2 && "MutationObserver" in window2); - const cleanup = () => { - if (observer) { - observer.disconnect(); - observer = void 0; - } - }; - const targets = computed(() => { - const value = toValue(target); - const items = toArray(value).map(unrefElement).filter(notNullish); - return new Set(items); - }); - const stopWatch = watch( - () => targets.value, - (targets2) => { - cleanup(); - if (isSupported.value && targets2.size) { - observer = new MutationObserver(callback); - targets2.forEach((el) => observer.observe(el, mutationOptions)); - } - }, - { immediate: true, flush: "post" } - ); - const takeRecords = () => { - return observer == null ? void 0 : observer.takeRecords(); - }; - const stop = () => { - stopWatch(); - cleanup(); - }; - tryOnScopeDispose(stop); - return { - isSupported, - stop, - takeRecords - }; -} -function onElementRemoval(target, callback, options = {}) { - const { - window: window2 = defaultWindow, - document: document2 = window2 == null ? void 0 : window2.document, - flush = "sync" - } = options; - if (!window2 || !document2) - return noop; - let stopFn; - const cleanupAndUpdate = (fn) => { - stopFn == null ? void 0 : stopFn(); - stopFn = fn; - }; - const stopWatch = watchEffect(() => { - const el = unrefElement(target); - if (el) { - const { stop } = useMutationObserver( - document2, - (mutationsList) => { - const targetRemoved = mutationsList.map((mutation) => [...mutation.removedNodes]).flat().some((node) => node === el || node.contains(el)); - if (targetRemoved) { - callback(mutationsList); - } - }, - { - window: window2, - childList: true, - subtree: true - } - ); - cleanupAndUpdate(stop); - } - }, { flush }); - const stopHandle = () => { - stopWatch(); - cleanupAndUpdate(); - }; - tryOnScopeDispose(stopHandle); - return stopHandle; -} -function createKeyPredicate(keyFilter) { - if (typeof keyFilter === "function") - return keyFilter; - else if (typeof keyFilter === "string") - return (event) => event.key === keyFilter; - else if (Array.isArray(keyFilter)) - return (event) => keyFilter.includes(event.key); - return () => true; -} -function onKeyStroke(...args) { - let key; - let handler; - let options = {}; - if (args.length === 3) { - key = args[0]; - handler = args[1]; - options = args[2]; - } else if (args.length === 2) { - if (typeof args[1] === "object") { - key = true; - handler = args[0]; - options = args[1]; - } else { - key = args[0]; - handler = args[1]; - } - } else { - key = true; - handler = args[0]; - } - const { - target = defaultWindow, - eventName = "keydown", - passive = false, - dedupe = false - } = options; - const predicate = createKeyPredicate(key); - const listener = (e) => { - if (e.repeat && toValue(dedupe)) - return; - if (predicate(e)) - handler(e); - }; - return useEventListener(target, eventName, listener, passive); -} -function onKeyDown(key, handler, options = {}) { - return onKeyStroke(key, handler, { ...options, eventName: "keydown" }); -} -function onKeyPressed(key, handler, options = {}) { - return onKeyStroke(key, handler, { ...options, eventName: "keypress" }); -} -function onKeyUp(key, handler, options = {}) { - return onKeyStroke(key, handler, { ...options, eventName: "keyup" }); -} -var DEFAULT_DELAY = 500; -var DEFAULT_THRESHOLD = 10; -function onLongPress(target, handler, options) { - var _a, _b; - const elementRef = computed(() => unrefElement(target)); - let timeout; - let posStart; - let startTimestamp; - let hasLongPressed = false; - function clear() { - if (timeout) { - clearTimeout(timeout); - timeout = void 0; - } - posStart = void 0; - startTimestamp = void 0; - hasLongPressed = false; - } - function onRelease(ev) { - var _a2, _b2, _c; - const [_startTimestamp, _posStart, _hasLongPressed] = [startTimestamp, posStart, hasLongPressed]; - clear(); - if (!(options == null ? void 0 : options.onMouseUp) || !_posStart || !_startTimestamp) - return; - if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value) - return; - if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent) - ev.preventDefault(); - if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop) - ev.stopPropagation(); - const dx = ev.x - _posStart.x; - const dy = ev.y - _posStart.y; - const distance = Math.sqrt(dx * dx + dy * dy); - options.onMouseUp(ev.timeStamp - _startTimestamp, distance, _hasLongPressed); - } - function onDown(ev) { - var _a2, _b2, _c, _d; - if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value) - return; - clear(); - if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent) - ev.preventDefault(); - if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop) - ev.stopPropagation(); - posStart = { - x: ev.x, - y: ev.y - }; - startTimestamp = ev.timeStamp; - timeout = setTimeout( - () => { - hasLongPressed = true; - handler(ev); - }, - (_d = options == null ? void 0 : options.delay) != null ? _d : DEFAULT_DELAY - ); - } - function onMove(ev) { - var _a2, _b2, _c, _d; - if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value) - return; - if (!posStart || (options == null ? void 0 : options.distanceThreshold) === false) - return; - if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent) - ev.preventDefault(); - if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop) - ev.stopPropagation(); - const dx = ev.x - posStart.x; - const dy = ev.y - posStart.y; - const distance = Math.sqrt(dx * dx + dy * dy); - if (distance >= ((_d = options == null ? void 0 : options.distanceThreshold) != null ? _d : DEFAULT_THRESHOLD)) - clear(); - } - const listenerOptions = { - capture: (_a = options == null ? void 0 : options.modifiers) == null ? void 0 : _a.capture, - once: (_b = options == null ? void 0 : options.modifiers) == null ? void 0 : _b.once - }; - const cleanup = [ - useEventListener(elementRef, "pointerdown", onDown, listenerOptions), - useEventListener(elementRef, "pointermove", onMove, listenerOptions), - useEventListener(elementRef, ["pointerup", "pointerleave"], onRelease, listenerOptions) - ]; - const stop = () => cleanup.forEach((fn) => fn()); - return stop; -} -function isFocusedElementEditable() { - const { activeElement, body } = document; - if (!activeElement) - return false; - if (activeElement === body) - return false; - switch (activeElement.tagName) { - case "INPUT": - case "TEXTAREA": - return true; - } - return activeElement.hasAttribute("contenteditable"); -} -function isTypedCharValid({ - keyCode, - metaKey, - ctrlKey, - altKey -}) { - if (metaKey || ctrlKey || altKey) - return false; - if (keyCode >= 48 && keyCode <= 57 || keyCode >= 96 && keyCode <= 105) - return true; - if (keyCode >= 65 && keyCode <= 90) - return true; - return false; -} -function onStartTyping(callback, options = {}) { - const { document: document2 = defaultDocument } = options; - const keydown = (event) => { - if (!isFocusedElementEditable() && isTypedCharValid(event)) { - callback(event); - } - }; - if (document2) - useEventListener(document2, "keydown", keydown, { passive: true }); -} -function templateRef(key, initialValue = null) { - const instance = getCurrentInstance(); - let _trigger = () => { - }; - const element = customRef((track, trigger) => { - _trigger = trigger; - return { - get() { - var _a, _b; - track(); - return (_b = (_a = instance == null ? void 0 : instance.proxy) == null ? void 0 : _a.$refs[key]) != null ? _b : initialValue; - }, - set() { - } - }; - }); - tryOnMounted(_trigger); - onUpdated(_trigger); - return element; -} -function useActiveElement(options = {}) { - var _a; - const { - window: window2 = defaultWindow, - deep = true, - triggerOnRemoval = false - } = options; - const document2 = (_a = options.document) != null ? _a : window2 == null ? void 0 : window2.document; - const getDeepActiveElement = () => { - var _a2; - let element = document2 == null ? void 0 : document2.activeElement; - if (deep) { - while (element == null ? void 0 : element.shadowRoot) - element = (_a2 = element == null ? void 0 : element.shadowRoot) == null ? void 0 : _a2.activeElement; - } - return element; - }; - const activeElement = shallowRef(); - const trigger = () => { - activeElement.value = getDeepActiveElement(); - }; - if (window2) { - const listenerOptions = { - capture: true, - passive: true - }; - useEventListener( - window2, - "blur", - (event) => { - if (event.relatedTarget !== null) - return; - trigger(); - }, - listenerOptions - ); - useEventListener( - window2, - "focus", - trigger, - listenerOptions - ); - } - if (triggerOnRemoval) { - onElementRemoval(activeElement, trigger, { document: document2 }); - } - trigger(); - return activeElement; -} -function useRafFn(fn, options = {}) { - const { - immediate = true, - fpsLimit = void 0, - window: window2 = defaultWindow, - once = false - } = options; - const isActive = shallowRef(false); - const intervalLimit = computed(() => { - return fpsLimit ? 1e3 / toValue(fpsLimit) : null; - }); - let previousFrameTimestamp = 0; - let rafId = null; - function loop(timestamp2) { - if (!isActive.value || !window2) - return; - if (!previousFrameTimestamp) - previousFrameTimestamp = timestamp2; - const delta = timestamp2 - previousFrameTimestamp; - if (intervalLimit.value && delta < intervalLimit.value) { - rafId = window2.requestAnimationFrame(loop); - return; - } - previousFrameTimestamp = timestamp2; - fn({ delta, timestamp: timestamp2 }); - if (once) { - isActive.value = false; - rafId = null; - return; - } - rafId = window2.requestAnimationFrame(loop); - } - function resume() { - if (!isActive.value && window2) { - isActive.value = true; - previousFrameTimestamp = 0; - rafId = window2.requestAnimationFrame(loop); - } - } - function pause() { - isActive.value = false; - if (rafId != null && window2) { - window2.cancelAnimationFrame(rafId); - rafId = null; - } - } - if (immediate) - resume(); - tryOnScopeDispose(pause); - return { - isActive: readonly(isActive), - pause, - resume - }; -} -function useAnimate(target, keyframes, options) { - let config; - let animateOptions; - if (isObject(options)) { - config = options; - animateOptions = objectOmit(options, ["window", "immediate", "commitStyles", "persist", "onReady", "onError"]); - } else { - config = { duration: options }; - animateOptions = options; - } - const { - window: window2 = defaultWindow, - immediate = true, - commitStyles, - persist, - playbackRate: _playbackRate = 1, - onReady, - onError = (e) => { - console.error(e); - } - } = config; - const isSupported = useSupported(() => window2 && HTMLElement && "animate" in HTMLElement.prototype); - const animate = shallowRef(void 0); - const store = shallowReactive({ - startTime: null, - currentTime: null, - timeline: null, - playbackRate: _playbackRate, - pending: false, - playState: immediate ? "idle" : "paused", - replaceState: "active" - }); - const pending = computed(() => store.pending); - const playState = computed(() => store.playState); - const replaceState = computed(() => store.replaceState); - const startTime = computed({ - get() { - return store.startTime; - }, - set(value) { - store.startTime = value; - if (animate.value) - animate.value.startTime = value; - } - }); - const currentTime = computed({ - get() { - return store.currentTime; - }, - set(value) { - store.currentTime = value; - if (animate.value) { - animate.value.currentTime = value; - syncResume(); - } - } - }); - const timeline = computed({ - get() { - return store.timeline; - }, - set(value) { - store.timeline = value; - if (animate.value) - animate.value.timeline = value; - } - }); - const playbackRate = computed({ - get() { - return store.playbackRate; - }, - set(value) { - store.playbackRate = value; - if (animate.value) - animate.value.playbackRate = value; - } - }); - const play = () => { - if (animate.value) { - try { - animate.value.play(); - syncResume(); - } catch (e) { - syncPause(); - onError(e); - } - } else { - update(); - } - }; - const pause = () => { - var _a; - try { - (_a = animate.value) == null ? void 0 : _a.pause(); - syncPause(); - } catch (e) { - onError(e); - } - }; - const reverse = () => { - var _a; - if (!animate.value) - update(); - try { - (_a = animate.value) == null ? void 0 : _a.reverse(); - syncResume(); - } catch (e) { - syncPause(); - onError(e); - } - }; - const finish = () => { - var _a; - try { - (_a = animate.value) == null ? void 0 : _a.finish(); - syncPause(); - } catch (e) { - onError(e); - } - }; - const cancel = () => { - var _a; - try { - (_a = animate.value) == null ? void 0 : _a.cancel(); - syncPause(); - } catch (e) { - onError(e); - } - }; - watch(() => unrefElement(target), (el) => { - if (el) { - update(); - } else { - animate.value = void 0; - } - }); - watch(() => keyframes, (value) => { - if (animate.value) { - update(); - const targetEl = unrefElement(target); - if (targetEl) { - animate.value.effect = new KeyframeEffect( - targetEl, - toValue(value), - animateOptions - ); - } - } - }, { deep: true }); - tryOnMounted(() => update(true), false); - tryOnScopeDispose(cancel); - function update(init) { - const el = unrefElement(target); - if (!isSupported.value || !el) - return; - if (!animate.value) - animate.value = el.animate(toValue(keyframes), animateOptions); - if (persist) - animate.value.persist(); - if (_playbackRate !== 1) - animate.value.playbackRate = _playbackRate; - if (init && !immediate) - animate.value.pause(); - else - syncResume(); - onReady == null ? void 0 : onReady(animate.value); - } - const listenerOptions = { passive: true }; - useEventListener(animate, ["cancel", "finish", "remove"], syncPause, listenerOptions); - useEventListener(animate, "finish", () => { - var _a; - if (commitStyles) - (_a = animate.value) == null ? void 0 : _a.commitStyles(); - }, listenerOptions); - const { resume: resumeRef, pause: pauseRef } = useRafFn(() => { - if (!animate.value) - return; - store.pending = animate.value.pending; - store.playState = animate.value.playState; - store.replaceState = animate.value.replaceState; - store.startTime = animate.value.startTime; - store.currentTime = animate.value.currentTime; - store.timeline = animate.value.timeline; - store.playbackRate = animate.value.playbackRate; - }, { immediate: false }); - function syncResume() { - if (isSupported.value) - resumeRef(); - } - function syncPause() { - if (isSupported.value && window2) - window2.requestAnimationFrame(pauseRef); - } - return { - isSupported, - animate, - // actions - play, - pause, - reverse, - finish, - cancel, - // state - pending, - playState, - replaceState, - startTime, - currentTime, - timeline, - playbackRate - }; -} -function useAsyncQueue(tasks, options) { - const { - interrupt = true, - onError = noop, - onFinished = noop, - signal - } = options || {}; - const promiseState = { - aborted: "aborted", - fulfilled: "fulfilled", - pending: "pending", - rejected: "rejected" - }; - const initialResult = Array.from(Array.from({ length: tasks.length }), () => ({ state: promiseState.pending, data: null })); - const result = reactive(initialResult); - const activeIndex = shallowRef(-1); - if (!tasks || tasks.length === 0) { - onFinished(); - return { - activeIndex, - result - }; - } - function updateResult(state, res) { - activeIndex.value++; - result[activeIndex.value].data = res; - result[activeIndex.value].state = state; - } - tasks.reduce((prev, curr) => { - return prev.then((prevRes) => { - var _a; - if (signal == null ? void 0 : signal.aborted) { - updateResult(promiseState.aborted, new Error("aborted")); - return; - } - if (((_a = result[activeIndex.value]) == null ? void 0 : _a.state) === promiseState.rejected && interrupt) { - onFinished(); - return; - } - const done = curr(prevRes).then((currentRes) => { - updateResult(promiseState.fulfilled, currentRes); - if (activeIndex.value === tasks.length - 1) - onFinished(); - return currentRes; - }); - if (!signal) - return done; - return Promise.race([done, whenAborted(signal)]); - }).catch((e) => { - if (signal == null ? void 0 : signal.aborted) { - updateResult(promiseState.aborted, e); - return e; - } - updateResult(promiseState.rejected, e); - onError(); - return e; - }); - }, Promise.resolve()); - return { - activeIndex, - result - }; -} -function whenAborted(signal) { - return new Promise((resolve, reject) => { - const error = new Error("aborted"); - if (signal.aborted) - reject(error); - else - signal.addEventListener("abort", () => reject(error), { once: true }); - }); -} -function useAsyncState(promise, initialState, options) { - const { - immediate = true, - delay = 0, - onError = noop, - onSuccess = noop, - resetOnExecute = true, - shallow = true, - throwError - } = options != null ? options : {}; - const state = shallow ? shallowRef(initialState) : ref(initialState); - const isReady = shallowRef(false); - const isLoading = shallowRef(false); - const error = shallowRef(void 0); - async function execute(delay2 = 0, ...args) { - if (resetOnExecute) - state.value = initialState; - error.value = void 0; - isReady.value = false; - isLoading.value = true; - if (delay2 > 0) - await promiseTimeout(delay2); - const _promise = typeof promise === "function" ? promise(...args) : promise; - try { - const data = await _promise; - state.value = data; - isReady.value = true; - onSuccess(data); - } catch (e) { - error.value = e; - onError(e); - if (throwError) - throw e; - } finally { - isLoading.value = false; - } - return state.value; - } - if (immediate) { - execute(delay); - } - const shell = { - state, - isReady, - isLoading, - error, - execute - }; - function waitUntilIsLoaded() { - return new Promise((resolve, reject) => { - until(isLoading).toBe(false).then(() => resolve(shell)).catch(reject); - }); - } - return { - ...shell, - then(onFulfilled, onRejected) { - return waitUntilIsLoaded().then(onFulfilled, onRejected); - } - }; -} -var defaults = { - array: (v) => JSON.stringify(v), - object: (v) => JSON.stringify(v), - set: (v) => JSON.stringify(Array.from(v)), - map: (v) => JSON.stringify(Object.fromEntries(v)), - null: () => "" -}; -function getDefaultSerialization(target) { - if (!target) - return defaults.null; - if (target instanceof Map) - return defaults.map; - else if (target instanceof Set) - return defaults.set; - else if (Array.isArray(target)) - return defaults.array; - else - return defaults.object; -} -function useBase64(target, options) { - const base64 = shallowRef(""); - const promise = shallowRef(); - function execute() { - if (!isClient) - return; - promise.value = new Promise((resolve, reject) => { - try { - const _target = toValue(target); - if (_target == null) { - resolve(""); - } else if (typeof _target === "string") { - resolve(blobToBase64(new Blob([_target], { type: "text/plain" }))); - } else if (_target instanceof Blob) { - resolve(blobToBase64(_target)); - } else if (_target instanceof ArrayBuffer) { - resolve(window.btoa(String.fromCharCode(...new Uint8Array(_target)))); - } else if (_target instanceof HTMLCanvasElement) { - resolve(_target.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality)); - } else if (_target instanceof HTMLImageElement) { - const img = _target.cloneNode(false); - img.crossOrigin = "Anonymous"; - imgLoaded(img).then(() => { - const canvas = document.createElement("canvas"); - const ctx = canvas.getContext("2d"); - canvas.width = img.width; - canvas.height = img.height; - ctx.drawImage(img, 0, 0, canvas.width, canvas.height); - resolve(canvas.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality)); - }).catch(reject); - } else if (typeof _target === "object") { - const _serializeFn = (options == null ? void 0 : options.serializer) || getDefaultSerialization(_target); - const serialized = _serializeFn(_target); - return resolve(blobToBase64(new Blob([serialized], { type: "application/json" }))); - } else { - reject(new Error("target is unsupported types")); - } - } catch (error) { - reject(error); - } - }); - promise.value.then((res) => { - base64.value = (options == null ? void 0 : options.dataUrl) === false ? res.replace(/^data:.*?;base64,/, "") : res; - }); - return promise.value; - } - if (isRef(target) || typeof target === "function") - watch(target, execute, { immediate: true }); - else - execute(); - return { - base64, - promise, - execute - }; -} -function imgLoaded(img) { - return new Promise((resolve, reject) => { - if (!img.complete) { - img.onload = () => { - resolve(); - }; - img.onerror = reject; - } else { - resolve(); - } - }); -} -function blobToBase64(blob) { - return new Promise((resolve, reject) => { - const fr = new FileReader(); - fr.onload = (e) => { - resolve(e.target.result); - }; - fr.onerror = reject; - fr.readAsDataURL(blob); - }); -} -function useBattery(options = {}) { - const { navigator: navigator2 = defaultNavigator } = options; - const events2 = ["chargingchange", "chargingtimechange", "dischargingtimechange", "levelchange"]; - const isSupported = useSupported(() => navigator2 && "getBattery" in navigator2 && typeof navigator2.getBattery === "function"); - const charging = shallowRef(false); - const chargingTime = shallowRef(0); - const dischargingTime = shallowRef(0); - const level = shallowRef(1); - let battery; - function updateBatteryInfo() { - charging.value = this.charging; - chargingTime.value = this.chargingTime || 0; - dischargingTime.value = this.dischargingTime || 0; - level.value = this.level; - } - if (isSupported.value) { - navigator2.getBattery().then((_battery) => { - battery = _battery; - updateBatteryInfo.call(battery); - useEventListener(battery, events2, updateBatteryInfo, { passive: true }); - }); - } - return { - isSupported, - charging, - chargingTime, - dischargingTime, - level - }; -} -function useBluetooth(options) { - let { - acceptAllDevices = false - } = options || {}; - const { - filters = void 0, - optionalServices = void 0, - navigator: navigator2 = defaultNavigator - } = options || {}; - const isSupported = useSupported(() => navigator2 && "bluetooth" in navigator2); - const device = shallowRef(); - const error = shallowRef(null); - watch(device, () => { - connectToBluetoothGATTServer(); - }); - async function requestDevice() { - if (!isSupported.value) - return; - error.value = null; - if (filters && filters.length > 0) - acceptAllDevices = false; - try { - device.value = await (navigator2 == null ? void 0 : navigator2.bluetooth.requestDevice({ - acceptAllDevices, - filters, - optionalServices - })); - } catch (err) { - error.value = err; - } - } - const server = shallowRef(); - const isConnected = shallowRef(false); - function reset() { - isConnected.value = false; - device.value = void 0; - server.value = void 0; - } - async function connectToBluetoothGATTServer() { - error.value = null; - if (device.value && device.value.gatt) { - useEventListener(device, "gattserverdisconnected", reset, { passive: true }); - try { - server.value = await device.value.gatt.connect(); - isConnected.value = server.value.connected; - } catch (err) { - error.value = err; - } - } - } - tryOnMounted(() => { - var _a; - if (device.value) - (_a = device.value.gatt) == null ? void 0 : _a.connect(); - }); - tryOnScopeDispose(() => { - var _a; - if (device.value) - (_a = device.value.gatt) == null ? void 0 : _a.disconnect(); - }); - return { - isSupported, - isConnected: readonly(isConnected), - // Device: - device, - requestDevice, - // Server: - server, - // Errors: - error - }; -} -var ssrWidthSymbol = Symbol("vueuse-ssr-width"); -function useSSRWidth() { - const ssrWidth = hasInjectionContext() ? injectLocal(ssrWidthSymbol, null) : null; - return typeof ssrWidth === "number" ? ssrWidth : void 0; -} -function provideSSRWidth(width, app) { - if (app !== void 0) { - app.provide(ssrWidthSymbol, width); - } else { - provideLocal(ssrWidthSymbol, width); - } -} -function useMediaQuery(query, options = {}) { - const { window: window2 = defaultWindow, ssrWidth = useSSRWidth() } = options; - const isSupported = useSupported(() => window2 && "matchMedia" in window2 && typeof window2.matchMedia === "function"); - const ssrSupport = shallowRef(typeof ssrWidth === "number"); - const mediaQuery = shallowRef(); - const matches = shallowRef(false); - const handler = (event) => { - matches.value = event.matches; - }; - watchEffect(() => { - if (ssrSupport.value) { - ssrSupport.value = !isSupported.value; - const queryStrings = toValue(query).split(","); - matches.value = queryStrings.some((queryString) => { - const not = queryString.includes("not all"); - const minWidth = queryString.match(/\(\s*min-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/); - const maxWidth = queryString.match(/\(\s*max-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/); - let res = Boolean(minWidth || maxWidth); - if (minWidth && res) { - res = ssrWidth >= pxValue(minWidth[1]); - } - if (maxWidth && res) { - res = ssrWidth <= pxValue(maxWidth[1]); - } - return not ? !res : res; - }); - return; - } - if (!isSupported.value) - return; - mediaQuery.value = window2.matchMedia(toValue(query)); - matches.value = mediaQuery.value.matches; - }); - useEventListener(mediaQuery, "change", handler, { passive: true }); - return computed(() => matches.value); -} -var breakpointsTailwind = { - "sm": 640, - "md": 768, - "lg": 1024, - "xl": 1280, - "2xl": 1536 -}; -var breakpointsBootstrapV5 = { - xs: 0, - sm: 576, - md: 768, - lg: 992, - xl: 1200, - xxl: 1400 -}; -var breakpointsVuetifyV2 = { - xs: 0, - sm: 600, - md: 960, - lg: 1264, - xl: 1904 -}; -var breakpointsVuetifyV3 = { - xs: 0, - sm: 600, - md: 960, - lg: 1280, - xl: 1920, - xxl: 2560 -}; -var breakpointsVuetify = breakpointsVuetifyV2; -var breakpointsAntDesign = { - xs: 480, - sm: 576, - md: 768, - lg: 992, - xl: 1200, - xxl: 1600 -}; -var breakpointsQuasar = { - xs: 0, - sm: 600, - md: 1024, - lg: 1440, - xl: 1920 -}; -var breakpointsSematic = { - mobileS: 320, - mobileM: 375, - mobileL: 425, - tablet: 768, - laptop: 1024, - laptopL: 1440, - desktop4K: 2560 -}; -var breakpointsMasterCss = { - "3xs": 360, - "2xs": 480, - "xs": 600, - "sm": 768, - "md": 1024, - "lg": 1280, - "xl": 1440, - "2xl": 1600, - "3xl": 1920, - "4xl": 2560 -}; -var breakpointsPrimeFlex = { - sm: 576, - md: 768, - lg: 992, - xl: 1200 -}; -var breakpointsElement = { - xs: 0, - sm: 768, - md: 992, - lg: 1200, - xl: 1920 -}; -function useBreakpoints(breakpoints, options = {}) { - function getValue2(k, delta) { - let v = toValue(breakpoints[toValue(k)]); - if (delta != null) - v = increaseWithUnit(v, delta); - if (typeof v === "number") - v = `${v}px`; - return v; - } - const { window: window2 = defaultWindow, strategy = "min-width", ssrWidth = useSSRWidth() } = options; - const ssrSupport = typeof ssrWidth === "number"; - const mounted = ssrSupport ? shallowRef(false) : { value: true }; - if (ssrSupport) { - tryOnMounted(() => mounted.value = !!window2); - } - function match(query, size) { - if (!mounted.value && ssrSupport) { - return query === "min" ? ssrWidth >= pxValue(size) : ssrWidth <= pxValue(size); - } - if (!window2) - return false; - return window2.matchMedia(`(${query}-width: ${size})`).matches; - } - const greaterOrEqual = (k) => { - return useMediaQuery(() => `(min-width: ${getValue2(k)})`, options); - }; - const smallerOrEqual = (k) => { - return useMediaQuery(() => `(max-width: ${getValue2(k)})`, options); - }; - const shortcutMethods = Object.keys(breakpoints).reduce((shortcuts, k) => { - Object.defineProperty(shortcuts, k, { - get: () => strategy === "min-width" ? greaterOrEqual(k) : smallerOrEqual(k), - enumerable: true, - configurable: true - }); - return shortcuts; - }, {}); - function current() { - const points = Object.keys(breakpoints).map((k) => [k, shortcutMethods[k], pxValue(getValue2(k))]).sort((a, b) => a[2] - b[2]); - return computed(() => points.filter(([, v]) => v.value).map(([k]) => k)); - } - return Object.assign(shortcutMethods, { - greaterOrEqual, - smallerOrEqual, - greater(k) { - return useMediaQuery(() => `(min-width: ${getValue2(k, 0.1)})`, options); - }, - smaller(k) { - return useMediaQuery(() => `(max-width: ${getValue2(k, -0.1)})`, options); - }, - between(a, b) { - return useMediaQuery(() => `(min-width: ${getValue2(a)}) and (max-width: ${getValue2(b, -0.1)})`, options); - }, - isGreater(k) { - return match("min", getValue2(k, 0.1)); - }, - isGreaterOrEqual(k) { - return match("min", getValue2(k)); - }, - isSmaller(k) { - return match("max", getValue2(k, -0.1)); - }, - isSmallerOrEqual(k) { - return match("max", getValue2(k)); - }, - isInBetween(a, b) { - return match("min", getValue2(a)) && match("max", getValue2(b, -0.1)); - }, - current, - active() { - const bps = current(); - return computed(() => bps.value.length === 0 ? "" : bps.value.at(strategy === "min-width" ? -1 : 0)); - } - }); -} -function useBroadcastChannel(options) { - const { - name, - window: window2 = defaultWindow - } = options; - const isSupported = useSupported(() => window2 && "BroadcastChannel" in window2); - const isClosed = shallowRef(false); - const channel = ref(); - const data = ref(); - const error = shallowRef(null); - const post = (data2) => { - if (channel.value) - channel.value.postMessage(data2); - }; - const close = () => { - if (channel.value) - channel.value.close(); - isClosed.value = true; - }; - if (isSupported.value) { - tryOnMounted(() => { - error.value = null; - channel.value = new BroadcastChannel(name); - const listenerOptions = { - passive: true - }; - useEventListener(channel, "message", (e) => { - data.value = e.data; - }, listenerOptions); - useEventListener(channel, "messageerror", (e) => { - error.value = e; - }, listenerOptions); - useEventListener(channel, "close", () => { - isClosed.value = true; - }, listenerOptions); - }); - } - tryOnScopeDispose(() => { - close(); - }); - return { - isSupported, - channel, - data, - post, - close, - error, - isClosed - }; -} -var WRITABLE_PROPERTIES = [ - "hash", - "host", - "hostname", - "href", - "pathname", - "port", - "protocol", - "search" -]; -function useBrowserLocation(options = {}) { - const { window: window2 = defaultWindow } = options; - const refs = Object.fromEntries( - WRITABLE_PROPERTIES.map((key) => [key, ref()]) - ); - for (const [key, ref2] of objectEntries(refs)) { - watch(ref2, (value) => { - if (!(window2 == null ? void 0 : window2.location) || window2.location[key] === value) - return; - window2.location[key] = value; - }); - } - const buildState = (trigger) => { - var _a; - const { state: state2, length } = (window2 == null ? void 0 : window2.history) || {}; - const { origin } = (window2 == null ? void 0 : window2.location) || {}; - for (const key of WRITABLE_PROPERTIES) - refs[key].value = (_a = window2 == null ? void 0 : window2.location) == null ? void 0 : _a[key]; - return reactive({ - trigger, - state: state2, - length, - origin, - ...refs - }); - }; - const state = ref(buildState("load")); - if (window2) { - const listenerOptions = { passive: true }; - useEventListener(window2, "popstate", () => state.value = buildState("popstate"), listenerOptions); - useEventListener(window2, "hashchange", () => state.value = buildState("hashchange"), listenerOptions); - } - return state; -} -function useCached(refValue, comparator = (a, b) => a === b, options) { - const { deepRefs = true, ...watchOptions } = options || {}; - const cachedValue = createRef(refValue.value, deepRefs); - watch(() => refValue.value, (value) => { - if (!comparator(value, cachedValue.value)) - cachedValue.value = value; - }, watchOptions); - return cachedValue; -} -function usePermission(permissionDesc, options = {}) { - const { - controls = false, - navigator: navigator2 = defaultNavigator - } = options; - const isSupported = useSupported(() => navigator2 && "permissions" in navigator2); - const permissionStatus = shallowRef(); - const desc = typeof permissionDesc === "string" ? { name: permissionDesc } : permissionDesc; - const state = shallowRef(); - const update = () => { - var _a, _b; - state.value = (_b = (_a = permissionStatus.value) == null ? void 0 : _a.state) != null ? _b : "prompt"; - }; - useEventListener(permissionStatus, "change", update, { passive: true }); - const query = createSingletonPromise(async () => { - if (!isSupported.value) - return; - if (!permissionStatus.value) { - try { - permissionStatus.value = await navigator2.permissions.query(desc); - } catch (e) { - permissionStatus.value = void 0; - } finally { - update(); - } - } - if (controls) - return toRaw(permissionStatus.value); - }); - query(); - if (controls) { - return { - state, - isSupported, - query - }; - } else { - return state; - } -} -function useClipboard(options = {}) { - const { - navigator: navigator2 = defaultNavigator, - read = false, - source, - copiedDuring = 1500, - legacy = false - } = options; - const isClipboardApiSupported = useSupported(() => navigator2 && "clipboard" in navigator2); - const permissionRead = usePermission("clipboard-read"); - const permissionWrite = usePermission("clipboard-write"); - const isSupported = computed(() => isClipboardApiSupported.value || legacy); - const text = shallowRef(""); - const copied = shallowRef(false); - const timeout = useTimeoutFn(() => copied.value = false, copiedDuring, { immediate: false }); - async function updateText() { - let useLegacy = !(isClipboardApiSupported.value && isAllowed(permissionRead.value)); - if (!useLegacy) { - try { - text.value = await navigator2.clipboard.readText(); - } catch (e) { - useLegacy = true; - } - } - if (useLegacy) { - text.value = legacyRead(); - } - } - if (isSupported.value && read) - useEventListener(["copy", "cut"], updateText, { passive: true }); - async function copy(value = toValue(source)) { - if (isSupported.value && value != null) { - let useLegacy = !(isClipboardApiSupported.value && isAllowed(permissionWrite.value)); - if (!useLegacy) { - try { - await navigator2.clipboard.writeText(value); - } catch (e) { - useLegacy = true; - } - } - if (useLegacy) - legacyCopy(value); - text.value = value; - copied.value = true; - timeout.start(); - } - } - function legacyCopy(value) { - const ta = document.createElement("textarea"); - ta.value = value != null ? value : ""; - ta.style.position = "absolute"; - ta.style.opacity = "0"; - document.body.appendChild(ta); - ta.select(); - document.execCommand("copy"); - ta.remove(); - } - function legacyRead() { - var _a, _b, _c; - return (_c = (_b = (_a = document == null ? void 0 : document.getSelection) == null ? void 0 : _a.call(document)) == null ? void 0 : _b.toString()) != null ? _c : ""; - } - function isAllowed(status) { - return status === "granted" || status === "prompt"; - } - return { - isSupported, - text, - copied, - copy - }; -} -function useClipboardItems(options = {}) { - const { - navigator: navigator2 = defaultNavigator, - read = false, - source, - copiedDuring = 1500 - } = options; - const isSupported = useSupported(() => navigator2 && "clipboard" in navigator2); - const content = ref([]); - const copied = shallowRef(false); - const timeout = useTimeoutFn(() => copied.value = false, copiedDuring, { immediate: false }); - function updateContent() { - if (isSupported.value) { - navigator2.clipboard.read().then((items) => { - content.value = items; - }); - } - } - if (isSupported.value && read) - useEventListener(["copy", "cut"], updateContent, { passive: true }); - async function copy(value = toValue(source)) { - if (isSupported.value && value != null) { - await navigator2.clipboard.write(value); - content.value = value; - copied.value = true; - timeout.start(); - } - } - return { - isSupported, - content, - copied, - copy - }; -} -function cloneFnJSON(source) { - return JSON.parse(JSON.stringify(source)); -} -function useCloned(source, options = {}) { - const cloned = ref({}); - const isModified = shallowRef(false); - let _lastSync = false; - const { - manual, - clone = cloneFnJSON, - // watch options - deep = true, - immediate = true - } = options; - watch(cloned, () => { - if (_lastSync) { - _lastSync = false; - return; - } - isModified.value = true; - }, { - deep: true, - flush: "sync" - }); - function sync() { - _lastSync = true; - isModified.value = false; - cloned.value = clone(toValue(source)); - } - if (!manual && (isRef(source) || typeof source === "function")) { - watch(source, sync, { - ...options, - deep, - immediate - }); - } else { - sync(); - } - return { cloned, isModified, sync }; -} -var _global = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {}; -var globalKey = "__vueuse_ssr_handlers__"; -var handlers = getHandlers(); -function getHandlers() { - if (!(globalKey in _global)) - _global[globalKey] = _global[globalKey] || {}; - return _global[globalKey]; -} -function getSSRHandler(key, fallback) { - return handlers[key] || fallback; -} -function setSSRHandler(key, fn) { - handlers[key] = fn; -} -function usePreferredDark(options) { - return useMediaQuery("(prefers-color-scheme: dark)", options); -} -function guessSerializerType(rawInit) { - return rawInit == null ? "any" : rawInit instanceof Set ? "set" : rawInit instanceof Map ? "map" : rawInit instanceof Date ? "date" : typeof rawInit === "boolean" ? "boolean" : typeof rawInit === "string" ? "string" : typeof rawInit === "object" ? "object" : !Number.isNaN(rawInit) ? "number" : "any"; -} -var StorageSerializers = { - boolean: { - read: (v) => v === "true", - write: (v) => String(v) - }, - object: { - read: (v) => JSON.parse(v), - write: (v) => JSON.stringify(v) - }, - number: { - read: (v) => Number.parseFloat(v), - write: (v) => String(v) - }, - any: { - read: (v) => v, - write: (v) => String(v) - }, - string: { - read: (v) => v, - write: (v) => String(v) - }, - map: { - read: (v) => new Map(JSON.parse(v)), - write: (v) => JSON.stringify(Array.from(v.entries())) - }, - set: { - read: (v) => new Set(JSON.parse(v)), - write: (v) => JSON.stringify(Array.from(v)) - }, - date: { - read: (v) => new Date(v), - write: (v) => v.toISOString() - } -}; -var customStorageEventName = "vueuse-storage"; -function useStorage(key, defaults2, storage, options = {}) { - var _a; - const { - flush = "pre", - deep = true, - listenToStorageChanges = true, - writeDefaults = true, - mergeDefaults = false, - shallow, - window: window2 = defaultWindow, - eventFilter, - onError = (e) => { - console.error(e); - }, - initOnMounted - } = options; - const data = (shallow ? shallowRef : ref)(typeof defaults2 === "function" ? defaults2() : defaults2); - const keyComputed = computed(() => toValue(key)); - if (!storage) { - try { - storage = getSSRHandler("getDefaultStorage", () => { - var _a2; - return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage; - })(); - } catch (e) { - onError(e); - } - } - if (!storage) - return data; - const rawInit = toValue(defaults2); - const type = guessSerializerType(rawInit); - const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type]; - const { pause: pauseWatch, resume: resumeWatch } = watchPausable( - data, - () => write(data.value), - { flush, deep, eventFilter } - ); - watch(keyComputed, () => update(), { flush }); - if (window2 && listenToStorageChanges) { - tryOnMounted(() => { - if (storage instanceof Storage) - useEventListener(window2, "storage", update, { passive: true }); - else - useEventListener(window2, customStorageEventName, updateFromCustomEvent); - if (initOnMounted) - update(); - }); - } - if (!initOnMounted) - update(); - function dispatchWriteEvent(oldValue, newValue) { - if (window2) { - const payload = { - key: keyComputed.value, - oldValue, - newValue, - storageArea: storage - }; - window2.dispatchEvent(storage instanceof Storage ? new StorageEvent("storage", payload) : new CustomEvent(customStorageEventName, { - detail: payload - })); - } - } - function write(v) { - try { - const oldValue = storage.getItem(keyComputed.value); - if (v == null) { - dispatchWriteEvent(oldValue, null); - storage.removeItem(keyComputed.value); - } else { - const serialized = serializer.write(v); - if (oldValue !== serialized) { - storage.setItem(keyComputed.value, serialized); - dispatchWriteEvent(oldValue, serialized); - } - } - } catch (e) { - onError(e); - } - } - function read(event) { - const rawValue = event ? event.newValue : storage.getItem(keyComputed.value); - if (rawValue == null) { - if (writeDefaults && rawInit != null) - storage.setItem(keyComputed.value, serializer.write(rawInit)); - return rawInit; - } else if (!event && mergeDefaults) { - const value = serializer.read(rawValue); - if (typeof mergeDefaults === "function") - return mergeDefaults(value, rawInit); - else if (type === "object" && !Array.isArray(value)) - return { ...rawInit, ...value }; - return value; - } else if (typeof rawValue !== "string") { - return rawValue; - } else { - return serializer.read(rawValue); - } - } - function update(event) { - if (event && event.storageArea !== storage) - return; - if (event && event.key == null) { - data.value = rawInit; - return; - } - if (event && event.key !== keyComputed.value) - return; - pauseWatch(); - try { - if ((event == null ? void 0 : event.newValue) !== serializer.write(data.value)) - data.value = read(event); - } catch (e) { - onError(e); - } finally { - if (event) - nextTick(resumeWatch); - else - resumeWatch(); - } - } - function updateFromCustomEvent(event) { - update(event.detail); - } - return data; -} -var CSS_DISABLE_TRANS = "*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}"; -function useColorMode(options = {}) { - const { - selector = "html", - attribute = "class", - initialValue = "auto", - window: window2 = defaultWindow, - storage, - storageKey = "vueuse-color-scheme", - listenToStorageChanges = true, - storageRef, - emitAuto, - disableTransition = true - } = options; - const modes = { - auto: "", - light: "light", - dark: "dark", - ...options.modes || {} - }; - const preferredDark = usePreferredDark({ window: window2 }); - const system = computed(() => preferredDark.value ? "dark" : "light"); - const store = storageRef || (storageKey == null ? toRef2(initialValue) : useStorage(storageKey, initialValue, storage, { window: window2, listenToStorageChanges })); - const state = computed(() => store.value === "auto" ? system.value : store.value); - const updateHTMLAttrs = getSSRHandler( - "updateHTMLAttrs", - (selector2, attribute2, value) => { - const el = typeof selector2 === "string" ? window2 == null ? void 0 : window2.document.querySelector(selector2) : unrefElement(selector2); - if (!el) - return; - const classesToAdd = /* @__PURE__ */ new Set(); - const classesToRemove = /* @__PURE__ */ new Set(); - let attributeToChange = null; - if (attribute2 === "class") { - const current = value.split(/\s/g); - Object.values(modes).flatMap((i) => (i || "").split(/\s/g)).filter(Boolean).forEach((v) => { - if (current.includes(v)) - classesToAdd.add(v); - else - classesToRemove.add(v); - }); - } else { - attributeToChange = { key: attribute2, value }; - } - if (classesToAdd.size === 0 && classesToRemove.size === 0 && attributeToChange === null) - return; - let style; - if (disableTransition) { - style = window2.document.createElement("style"); - style.appendChild(document.createTextNode(CSS_DISABLE_TRANS)); - window2.document.head.appendChild(style); - } - for (const c of classesToAdd) { - el.classList.add(c); - } - for (const c of classesToRemove) { - el.classList.remove(c); - } - if (attributeToChange) { - el.setAttribute(attributeToChange.key, attributeToChange.value); - } - if (disableTransition) { - window2.getComputedStyle(style).opacity; - document.head.removeChild(style); - } - } - ); - function defaultOnChanged(mode) { - var _a; - updateHTMLAttrs(selector, attribute, (_a = modes[mode]) != null ? _a : mode); - } - function onChanged(mode) { - if (options.onChanged) - options.onChanged(mode, defaultOnChanged); - else - defaultOnChanged(mode); - } - watch(state, onChanged, { flush: "post", immediate: true }); - tryOnMounted(() => onChanged(state.value)); - const auto = computed({ - get() { - return emitAuto ? store.value : state.value; - }, - set(v) { - store.value = v; - } - }); - return Object.assign(auto, { store, system, state }); -} -function useConfirmDialog(revealed = shallowRef(false)) { - const confirmHook = createEventHook(); - const cancelHook = createEventHook(); - const revealHook = createEventHook(); - let _resolve = noop; - const reveal = (data) => { - revealHook.trigger(data); - revealed.value = true; - return new Promise((resolve) => { - _resolve = resolve; - }); - }; - const confirm = (data) => { - revealed.value = false; - confirmHook.trigger(data); - _resolve({ data, isCanceled: false }); - }; - const cancel = (data) => { - revealed.value = false; - cancelHook.trigger(data); - _resolve({ data, isCanceled: true }); - }; - return { - isRevealed: computed(() => revealed.value), - reveal, - confirm, - cancel, - onReveal: revealHook.on, - onConfirm: confirmHook.on, - onCancel: cancelHook.on - }; -} -function useCountdown(initialCountdown, options) { - var _a, _b; - const remaining = shallowRef(toValue(initialCountdown)); - const intervalController = useIntervalFn(() => { - var _a2, _b2; - const value = remaining.value - 1; - remaining.value = value < 0 ? 0 : value; - (_a2 = options == null ? void 0 : options.onTick) == null ? void 0 : _a2.call(options); - if (remaining.value <= 0) { - intervalController.pause(); - (_b2 = options == null ? void 0 : options.onComplete) == null ? void 0 : _b2.call(options); - } - }, (_a = options == null ? void 0 : options.interval) != null ? _a : 1e3, { immediate: (_b = options == null ? void 0 : options.immediate) != null ? _b : false }); - const reset = (countdown) => { - var _a2; - remaining.value = (_a2 = toValue(countdown)) != null ? _a2 : toValue(initialCountdown); - }; - const stop = () => { - intervalController.pause(); - reset(); - }; - const resume = () => { - if (!intervalController.isActive.value) { - if (remaining.value > 0) { - intervalController.resume(); - } - } - }; - const start = (countdown) => { - reset(countdown); - intervalController.resume(); - }; - return { - remaining, - reset, - stop, - start, - pause: intervalController.pause, - resume, - isActive: intervalController.isActive - }; -} -function useCssVar(prop, target, options = {}) { - const { window: window2 = defaultWindow, initialValue, observe = false } = options; - const variable = shallowRef(initialValue); - const elRef = computed(() => { - var _a; - return unrefElement(target) || ((_a = window2 == null ? void 0 : window2.document) == null ? void 0 : _a.documentElement); - }); - function updateCssVar() { - var _a; - const key = toValue(prop); - const el = toValue(elRef); - if (el && window2 && key) { - const value = (_a = window2.getComputedStyle(el).getPropertyValue(key)) == null ? void 0 : _a.trim(); - variable.value = value || variable.value || initialValue; - } - } - if (observe) { - useMutationObserver(elRef, updateCssVar, { - attributeFilter: ["style", "class"], - window: window2 - }); - } - watch( - [elRef, () => toValue(prop)], - (_, old) => { - if (old[0] && old[1]) - old[0].style.removeProperty(old[1]); - updateCssVar(); - }, - { immediate: true } - ); - watch( - [variable, elRef], - ([val, el]) => { - const raw_prop = toValue(prop); - if ((el == null ? void 0 : el.style) && raw_prop) { - if (val == null) - el.style.removeProperty(raw_prop); - else - el.style.setProperty(raw_prop, val); - } - }, - { immediate: true } - ); - return variable; -} -function useCurrentElement(rootComponent) { - const vm = getCurrentInstance(); - const currentElement = computedWithControl( - () => null, - () => rootComponent ? unrefElement(rootComponent) : vm.proxy.$el - ); - onUpdated(currentElement.trigger); - onMounted(currentElement.trigger); - return currentElement; -} -function useCycleList(list, options) { - const state = shallowRef(getInitialValue()); - const listRef = toRef2(list); - const index = computed({ - get() { - var _a; - const targetList = listRef.value; - let index2 = (options == null ? void 0 : options.getIndexOf) ? options.getIndexOf(state.value, targetList) : targetList.indexOf(state.value); - if (index2 < 0) - index2 = (_a = options == null ? void 0 : options.fallbackIndex) != null ? _a : 0; - return index2; - }, - set(v) { - set2(v); - } - }); - function set2(i) { - const targetList = listRef.value; - const length = targetList.length; - const index2 = (i % length + length) % length; - const value = targetList[index2]; - state.value = value; - return value; - } - function shift(delta = 1) { - return set2(index.value + delta); - } - function next(n = 1) { - return shift(n); - } - function prev(n = 1) { - return shift(-n); - } - function getInitialValue() { - var _a, _b; - return (_b = toValue((_a = options == null ? void 0 : options.initialValue) != null ? _a : toValue(list)[0])) != null ? _b : void 0; - } - watch(listRef, () => set2(index.value)); - return { - state, - index, - next, - prev, - go: set2 - }; -} -function useDark(options = {}) { - const { - valueDark = "dark", - valueLight = "" - } = options; - const mode = useColorMode({ - ...options, - onChanged: (mode2, defaultHandler) => { - var _a; - if (options.onChanged) - (_a = options.onChanged) == null ? void 0 : _a.call(options, mode2 === "dark", defaultHandler, mode2); - else - defaultHandler(mode2); - }, - modes: { - dark: valueDark, - light: valueLight - } - }); - const system = computed(() => mode.system.value); - const isDark = computed({ - get() { - return mode.value === "dark"; - }, - set(v) { - const modeVal = v ? "dark" : "light"; - if (system.value === modeVal) - mode.value = "auto"; - else - mode.value = modeVal; - } - }); - return isDark; -} -function fnBypass(v) { - return v; -} -function fnSetSource(source, value) { - return source.value = value; -} -function defaultDump(clone) { - return clone ? typeof clone === "function" ? clone : cloneFnJSON : fnBypass; -} -function defaultParse(clone) { - return clone ? typeof clone === "function" ? clone : cloneFnJSON : fnBypass; -} -function useManualRefHistory(source, options = {}) { - const { - clone = false, - dump = defaultDump(clone), - parse = defaultParse(clone), - setSource = fnSetSource - } = options; - function _createHistoryRecord() { - return markRaw({ - snapshot: dump(source.value), - timestamp: timestamp() - }); - } - const last = ref(_createHistoryRecord()); - const undoStack = ref([]); - const redoStack = ref([]); - const _setSource = (record) => { - setSource(source, parse(record.snapshot)); - last.value = record; - }; - const commit = () => { - undoStack.value.unshift(last.value); - last.value = _createHistoryRecord(); - if (options.capacity && undoStack.value.length > options.capacity) - undoStack.value.splice(options.capacity, Number.POSITIVE_INFINITY); - if (redoStack.value.length) - redoStack.value.splice(0, redoStack.value.length); - }; - const clear = () => { - undoStack.value.splice(0, undoStack.value.length); - redoStack.value.splice(0, redoStack.value.length); - }; - const undo = () => { - const state = undoStack.value.shift(); - if (state) { - redoStack.value.unshift(last.value); - _setSource(state); - } - }; - const redo = () => { - const state = redoStack.value.shift(); - if (state) { - undoStack.value.unshift(last.value); - _setSource(state); - } - }; - const reset = () => { - _setSource(last.value); - }; - const history = computed(() => [last.value, ...undoStack.value]); - const canUndo = computed(() => undoStack.value.length > 0); - const canRedo = computed(() => redoStack.value.length > 0); - return { - source, - undoStack, - redoStack, - last, - history, - canUndo, - canRedo, - clear, - commit, - reset, - undo, - redo - }; -} -function useRefHistory(source, options = {}) { - const { - deep = false, - flush = "pre", - eventFilter - } = options; - const { - eventFilter: composedFilter, - pause, - resume: resumeTracking, - isActive: isTracking - } = pausableFilter(eventFilter); - const { - ignoreUpdates, - ignorePrevAsyncUpdates, - stop - } = watchIgnorable( - source, - commit, - { deep, flush, eventFilter: composedFilter } - ); - function setSource(source2, value) { - ignorePrevAsyncUpdates(); - ignoreUpdates(() => { - source2.value = value; - }); - } - const manualHistory = useManualRefHistory(source, { ...options, clone: options.clone || deep, setSource }); - const { clear, commit: manualCommit } = manualHistory; - function commit() { - ignorePrevAsyncUpdates(); - manualCommit(); - } - function resume(commitNow) { - resumeTracking(); - if (commitNow) - commit(); - } - function batch(fn) { - let canceled = false; - const cancel = () => canceled = true; - ignoreUpdates(() => { - fn(cancel); - }); - if (!canceled) - commit(); - } - function dispose() { - stop(); - clear(); - } - return { - ...manualHistory, - isTracking, - pause, - resume, - commit, - batch, - dispose - }; -} -function useDebouncedRefHistory(source, options = {}) { - const filter = options.debounce ? debounceFilter(options.debounce) : void 0; - const history = useRefHistory(source, { ...options, eventFilter: filter }); - return { - ...history - }; -} -function useDeviceMotion(options = {}) { - const { - window: window2 = defaultWindow, - requestPermissions = false, - eventFilter = bypassFilter - } = options; - const isSupported = useSupported(() => typeof DeviceMotionEvent !== "undefined"); - const requirePermissions = useSupported(() => isSupported.value && "requestPermission" in DeviceMotionEvent && typeof DeviceMotionEvent.requestPermission === "function"); - const permissionGranted = shallowRef(false); - const acceleration = ref({ x: null, y: null, z: null }); - const rotationRate = ref({ alpha: null, beta: null, gamma: null }); - const interval = shallowRef(0); - const accelerationIncludingGravity = ref({ - x: null, - y: null, - z: null - }); - function init() { - if (window2) { - const onDeviceMotion = createFilterWrapper( - eventFilter, - (event) => { - var _a, _b, _c, _d, _e, _f, _g, _h, _i; - acceleration.value = { - x: ((_a = event.acceleration) == null ? void 0 : _a.x) || null, - y: ((_b = event.acceleration) == null ? void 0 : _b.y) || null, - z: ((_c = event.acceleration) == null ? void 0 : _c.z) || null - }; - accelerationIncludingGravity.value = { - x: ((_d = event.accelerationIncludingGravity) == null ? void 0 : _d.x) || null, - y: ((_e = event.accelerationIncludingGravity) == null ? void 0 : _e.y) || null, - z: ((_f = event.accelerationIncludingGravity) == null ? void 0 : _f.z) || null - }; - rotationRate.value = { - alpha: ((_g = event.rotationRate) == null ? void 0 : _g.alpha) || null, - beta: ((_h = event.rotationRate) == null ? void 0 : _h.beta) || null, - gamma: ((_i = event.rotationRate) == null ? void 0 : _i.gamma) || null - }; - interval.value = event.interval; - } - ); - useEventListener(window2, "devicemotion", onDeviceMotion, { passive: true }); - } - } - const ensurePermissions = async () => { - if (!requirePermissions.value) - permissionGranted.value = true; - if (permissionGranted.value) - return; - if (requirePermissions.value) { - const requestPermission = DeviceMotionEvent.requestPermission; - try { - const response = await requestPermission(); - if (response === "granted") { - permissionGranted.value = true; - init(); - } - } catch (error) { - console.error(error); - } - } - }; - if (isSupported.value) { - if (requestPermissions && requirePermissions.value) { - ensurePermissions().then(() => init()); - } else { - init(); - } - } - return { - acceleration, - accelerationIncludingGravity, - rotationRate, - interval, - isSupported, - requirePermissions, - ensurePermissions, - permissionGranted - }; -} -function useDeviceOrientation(options = {}) { - const { window: window2 = defaultWindow } = options; - const isSupported = useSupported(() => window2 && "DeviceOrientationEvent" in window2); - const isAbsolute = shallowRef(false); - const alpha = shallowRef(null); - const beta = shallowRef(null); - const gamma = shallowRef(null); - if (window2 && isSupported.value) { - useEventListener(window2, "deviceorientation", (event) => { - isAbsolute.value = event.absolute; - alpha.value = event.alpha; - beta.value = event.beta; - gamma.value = event.gamma; - }, { passive: true }); - } - return { - isSupported, - isAbsolute, - alpha, - beta, - gamma - }; -} -function useDevicePixelRatio(options = {}) { - const { - window: window2 = defaultWindow - } = options; - const pixelRatio = shallowRef(1); - const query = useMediaQuery(() => `(resolution: ${pixelRatio.value}dppx)`, options); - let stop = noop; - if (window2) { - stop = watchImmediate(query, () => pixelRatio.value = window2.devicePixelRatio); - } - return { - pixelRatio: readonly(pixelRatio), - stop - }; -} -function useDevicesList(options = {}) { - const { - navigator: navigator2 = defaultNavigator, - requestPermissions = false, - constraints = { audio: true, video: true }, - onUpdated: onUpdated2 - } = options; - const devices = ref([]); - const videoInputs = computed(() => devices.value.filter((i) => i.kind === "videoinput")); - const audioInputs = computed(() => devices.value.filter((i) => i.kind === "audioinput")); - const audioOutputs = computed(() => devices.value.filter((i) => i.kind === "audiooutput")); - const isSupported = useSupported(() => navigator2 && navigator2.mediaDevices && navigator2.mediaDevices.enumerateDevices); - const permissionGranted = shallowRef(false); - let stream; - async function update() { - if (!isSupported.value) - return; - devices.value = await navigator2.mediaDevices.enumerateDevices(); - onUpdated2 == null ? void 0 : onUpdated2(devices.value); - if (stream) { - stream.getTracks().forEach((t) => t.stop()); - stream = null; - } - } - async function ensurePermissions() { - const deviceName = constraints.video ? "camera" : "microphone"; - if (!isSupported.value) - return false; - if (permissionGranted.value) - return true; - const { state, query } = usePermission(deviceName, { controls: true }); - await query(); - if (state.value !== "granted") { - let granted = true; - try { - stream = await navigator2.mediaDevices.getUserMedia(constraints); - } catch (e) { - stream = null; - granted = false; - } - update(); - permissionGranted.value = granted; - } else { - permissionGranted.value = true; - } - return permissionGranted.value; - } - if (isSupported.value) { - if (requestPermissions) - ensurePermissions(); - useEventListener(navigator2.mediaDevices, "devicechange", update, { passive: true }); - update(); - } - return { - devices, - ensurePermissions, - permissionGranted, - videoInputs, - audioInputs, - audioOutputs, - isSupported - }; -} -function useDisplayMedia(options = {}) { - var _a; - const enabled = shallowRef((_a = options.enabled) != null ? _a : false); - const video = options.video; - const audio = options.audio; - const { navigator: navigator2 = defaultNavigator } = options; - const isSupported = useSupported(() => { - var _a2; - return (_a2 = navigator2 == null ? void 0 : navigator2.mediaDevices) == null ? void 0 : _a2.getDisplayMedia; - }); - const constraint = { audio, video }; - const stream = shallowRef(); - async function _start() { - var _a2; - if (!isSupported.value || stream.value) - return; - stream.value = await navigator2.mediaDevices.getDisplayMedia(constraint); - (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => useEventListener(t, "ended", stop, { passive: true })); - return stream.value; - } - async function _stop() { - var _a2; - (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop()); - stream.value = void 0; - } - function stop() { - _stop(); - enabled.value = false; - } - async function start() { - await _start(); - if (stream.value) - enabled.value = true; - return stream.value; - } - watch( - enabled, - (v) => { - if (v) - _start(); - else - _stop(); - }, - { immediate: true } - ); - return { - isSupported, - stream, - start, - stop, - enabled - }; -} -function useDocumentVisibility(options = {}) { - const { document: document2 = defaultDocument } = options; - if (!document2) - return shallowRef("visible"); - const visibility = shallowRef(document2.visibilityState); - useEventListener(document2, "visibilitychange", () => { - visibility.value = document2.visibilityState; - }, { passive: true }); - return visibility; -} -function useDraggable(target, options = {}) { - var _a; - const { - pointerTypes, - preventDefault: preventDefault2, - stopPropagation, - exact, - onMove, - onEnd, - onStart, - initialValue, - axis = "both", - draggingElement = defaultWindow, - containerElement, - handle: draggingHandle = target, - buttons = [0] - } = options; - const position = ref( - (_a = toValue(initialValue)) != null ? _a : { x: 0, y: 0 } - ); - const pressedDelta = ref(); - const filterEvent = (e) => { - if (pointerTypes) - return pointerTypes.includes(e.pointerType); - return true; - }; - const handleEvent = (e) => { - if (toValue(preventDefault2)) - e.preventDefault(); - if (toValue(stopPropagation)) - e.stopPropagation(); - }; - const start = (e) => { - var _a2; - if (!toValue(buttons).includes(e.button)) - return; - if (toValue(options.disabled) || !filterEvent(e)) - return; - if (toValue(exact) && e.target !== toValue(target)) - return; - const container = toValue(containerElement); - const containerRect = (_a2 = container == null ? void 0 : container.getBoundingClientRect) == null ? void 0 : _a2.call(container); - const targetRect = toValue(target).getBoundingClientRect(); - const pos = { - x: e.clientX - (container ? targetRect.left - containerRect.left + container.scrollLeft : targetRect.left), - y: e.clientY - (container ? targetRect.top - containerRect.top + container.scrollTop : targetRect.top) - }; - if ((onStart == null ? void 0 : onStart(pos, e)) === false) - return; - pressedDelta.value = pos; - handleEvent(e); - }; - const move = (e) => { - if (toValue(options.disabled) || !filterEvent(e)) - return; - if (!pressedDelta.value) - return; - const container = toValue(containerElement); - const targetRect = toValue(target).getBoundingClientRect(); - let { x, y } = position.value; - if (axis === "x" || axis === "both") { - x = e.clientX - pressedDelta.value.x; - if (container) - x = Math.min(Math.max(0, x), container.scrollWidth - targetRect.width); - } - if (axis === "y" || axis === "both") { - y = e.clientY - pressedDelta.value.y; - if (container) - y = Math.min(Math.max(0, y), container.scrollHeight - targetRect.height); - } - position.value = { - x, - y - }; - onMove == null ? void 0 : onMove(position.value, e); - handleEvent(e); - }; - const end = (e) => { - if (toValue(options.disabled) || !filterEvent(e)) - return; - if (!pressedDelta.value) - return; - pressedDelta.value = void 0; - onEnd == null ? void 0 : onEnd(position.value, e); - handleEvent(e); - }; - if (isClient) { - const config = () => { - var _a2; - return { - capture: (_a2 = options.capture) != null ? _a2 : true, - passive: !toValue(preventDefault2) - }; - }; - useEventListener(draggingHandle, "pointerdown", start, config); - useEventListener(draggingElement, "pointermove", move, config); - useEventListener(draggingElement, "pointerup", end, config); - } - return { - ...toRefs2(position), - position, - isDragging: computed(() => !!pressedDelta.value), - style: computed( - () => `left:${position.value.x}px;top:${position.value.y}px;` - ) - }; -} -function useDropZone(target, options = {}) { - var _a, _b; - const isOverDropZone = shallowRef(false); - const files = shallowRef(null); - let counter = 0; - let isValid = true; - if (isClient) { - const _options = typeof options === "function" ? { onDrop: options } : options; - const multiple = (_a = _options.multiple) != null ? _a : true; - const preventDefaultForUnhandled = (_b = _options.preventDefaultForUnhandled) != null ? _b : false; - const getFiles = (event) => { - var _a2, _b2; - const list = Array.from((_b2 = (_a2 = event.dataTransfer) == null ? void 0 : _a2.files) != null ? _b2 : []); - return list.length === 0 ? null : multiple ? list : [list[0]]; - }; - const checkDataTypes = (types) => { - const dataTypes = unref(_options.dataTypes); - if (typeof dataTypes === "function") - return dataTypes(types); - if (!(dataTypes == null ? void 0 : dataTypes.length)) - return true; - if (types.length === 0) - return false; - return types.every( - (type) => dataTypes.some((allowedType) => type.includes(allowedType)) - ); - }; - const checkValidity = (items) => { - const types = Array.from(items != null ? items : []).map((item) => item.type); - const dataTypesValid = checkDataTypes(types); - const multipleFilesValid = multiple || items.length <= 1; - return dataTypesValid && multipleFilesValid; - }; - const isSafari = () => /^(?:(?!chrome|android).)*safari/i.test(navigator.userAgent) && !("chrome" in window); - const handleDragEvent = (event, eventType) => { - var _a2, _b2, _c, _d, _e, _f; - const dataTransferItemList = (_a2 = event.dataTransfer) == null ? void 0 : _a2.items; - isValid = (_b2 = dataTransferItemList && checkValidity(dataTransferItemList)) != null ? _b2 : false; - if (preventDefaultForUnhandled) { - event.preventDefault(); - } - if (!isSafari() && !isValid) { - if (event.dataTransfer) { - event.dataTransfer.dropEffect = "none"; - } - return; - } - event.preventDefault(); - if (event.dataTransfer) { - event.dataTransfer.dropEffect = "copy"; - } - const currentFiles = getFiles(event); - switch (eventType) { - case "enter": - counter += 1; - isOverDropZone.value = true; - (_c = _options.onEnter) == null ? void 0 : _c.call(_options, null, event); - break; - case "over": - (_d = _options.onOver) == null ? void 0 : _d.call(_options, null, event); - break; - case "leave": - counter -= 1; - if (counter === 0) - isOverDropZone.value = false; - (_e = _options.onLeave) == null ? void 0 : _e.call(_options, null, event); - break; - case "drop": - counter = 0; - isOverDropZone.value = false; - if (isValid) { - files.value = currentFiles; - (_f = _options.onDrop) == null ? void 0 : _f.call(_options, currentFiles, event); - } - break; - } - }; - useEventListener(target, "dragenter", (event) => handleDragEvent(event, "enter")); - useEventListener(target, "dragover", (event) => handleDragEvent(event, "over")); - useEventListener(target, "dragleave", (event) => handleDragEvent(event, "leave")); - useEventListener(target, "drop", (event) => handleDragEvent(event, "drop")); - } - return { - files, - isOverDropZone - }; -} -function useResizeObserver(target, callback, options = {}) { - const { window: window2 = defaultWindow, ...observerOptions } = options; - let observer; - const isSupported = useSupported(() => window2 && "ResizeObserver" in window2); - const cleanup = () => { - if (observer) { - observer.disconnect(); - observer = void 0; - } - }; - const targets = computed(() => { - const _targets = toValue(target); - return Array.isArray(_targets) ? _targets.map((el) => unrefElement(el)) : [unrefElement(_targets)]; - }); - const stopWatch = watch( - targets, - (els) => { - cleanup(); - if (isSupported.value && window2) { - observer = new ResizeObserver(callback); - for (const _el of els) { - if (_el) - observer.observe(_el, observerOptions); - } - } - }, - { immediate: true, flush: "post" } - ); - const stop = () => { - cleanup(); - stopWatch(); - }; - tryOnScopeDispose(stop); - return { - isSupported, - stop - }; -} -function useElementBounding(target, options = {}) { - const { - reset = true, - windowResize = true, - windowScroll = true, - immediate = true, - updateTiming = "sync" - } = options; - const height = shallowRef(0); - const bottom = shallowRef(0); - const left = shallowRef(0); - const right = shallowRef(0); - const top = shallowRef(0); - const width = shallowRef(0); - const x = shallowRef(0); - const y = shallowRef(0); - function recalculate() { - const el = unrefElement(target); - if (!el) { - if (reset) { - height.value = 0; - bottom.value = 0; - left.value = 0; - right.value = 0; - top.value = 0; - width.value = 0; - x.value = 0; - y.value = 0; - } - return; - } - const rect = el.getBoundingClientRect(); - height.value = rect.height; - bottom.value = rect.bottom; - left.value = rect.left; - right.value = rect.right; - top.value = rect.top; - width.value = rect.width; - x.value = rect.x; - y.value = rect.y; - } - function update() { - if (updateTiming === "sync") - recalculate(); - else if (updateTiming === "next-frame") - requestAnimationFrame(() => recalculate()); - } - useResizeObserver(target, update); - watch(() => unrefElement(target), (ele) => !ele && update()); - useMutationObserver(target, update, { - attributeFilter: ["style", "class"] - }); - if (windowScroll) - useEventListener("scroll", update, { capture: true, passive: true }); - if (windowResize) - useEventListener("resize", update, { passive: true }); - tryOnMounted(() => { - if (immediate) - update(); - }); - return { - height, - bottom, - left, - right, - top, - width, - x, - y, - update - }; -} -function useElementByPoint(options) { - const { - x, - y, - document: document2 = defaultDocument, - multiple, - interval = "requestAnimationFrame", - immediate = true - } = options; - const isSupported = useSupported(() => { - if (toValue(multiple)) - return document2 && "elementsFromPoint" in document2; - return document2 && "elementFromPoint" in document2; - }); - const element = shallowRef(null); - const cb = () => { - var _a, _b; - element.value = toValue(multiple) ? (_a = document2 == null ? void 0 : document2.elementsFromPoint(toValue(x), toValue(y))) != null ? _a : [] : (_b = document2 == null ? void 0 : document2.elementFromPoint(toValue(x), toValue(y))) != null ? _b : null; - }; - const controls = interval === "requestAnimationFrame" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate }); - return { - isSupported, - element, - ...controls - }; -} -function useElementHover(el, options = {}) { - const { - delayEnter = 0, - delayLeave = 0, - triggerOnRemoval = false, - window: window2 = defaultWindow - } = options; - const isHovered = shallowRef(false); - let timer; - const toggle = (entering) => { - const delay = entering ? delayEnter : delayLeave; - if (timer) { - clearTimeout(timer); - timer = void 0; - } - if (delay) - timer = setTimeout(() => isHovered.value = entering, delay); - else - isHovered.value = entering; - }; - if (!window2) - return isHovered; - useEventListener(el, "mouseenter", () => toggle(true), { passive: true }); - useEventListener(el, "mouseleave", () => toggle(false), { passive: true }); - if (triggerOnRemoval) { - onElementRemoval( - computed(() => unrefElement(el)), - () => toggle(false) - ); - } - return isHovered; -} -function useElementSize(target, initialSize = { width: 0, height: 0 }, options = {}) { - const { window: window2 = defaultWindow, box = "content-box" } = options; - const isSVG = computed(() => { - var _a, _b; - return (_b = (_a = unrefElement(target)) == null ? void 0 : _a.namespaceURI) == null ? void 0 : _b.includes("svg"); - }); - const width = shallowRef(initialSize.width); - const height = shallowRef(initialSize.height); - const { stop: stop1 } = useResizeObserver( - target, - ([entry]) => { - const boxSize = box === "border-box" ? entry.borderBoxSize : box === "content-box" ? entry.contentBoxSize : entry.devicePixelContentBoxSize; - if (window2 && isSVG.value) { - const $elem = unrefElement(target); - if ($elem) { - const rect = $elem.getBoundingClientRect(); - width.value = rect.width; - height.value = rect.height; - } - } else { - if (boxSize) { - const formatBoxSize = toArray(boxSize); - width.value = formatBoxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0); - height.value = formatBoxSize.reduce((acc, { blockSize }) => acc + blockSize, 0); - } else { - width.value = entry.contentRect.width; - height.value = entry.contentRect.height; - } - } - }, - options - ); - tryOnMounted(() => { - const ele = unrefElement(target); - if (ele) { - width.value = "offsetWidth" in ele ? ele.offsetWidth : initialSize.width; - height.value = "offsetHeight" in ele ? ele.offsetHeight : initialSize.height; - } - }); - const stop2 = watch( - () => unrefElement(target), - (ele) => { - width.value = ele ? initialSize.width : 0; - height.value = ele ? initialSize.height : 0; - } - ); - function stop() { - stop1(); - stop2(); - } - return { - width, - height, - stop - }; -} -function useIntersectionObserver(target, callback, options = {}) { - const { - root, - rootMargin = "0px", - threshold = 0, - window: window2 = defaultWindow, - immediate = true - } = options; - const isSupported = useSupported(() => window2 && "IntersectionObserver" in window2); - const targets = computed(() => { - const _target = toValue(target); - return toArray(_target).map(unrefElement).filter(notNullish); - }); - let cleanup = noop; - const isActive = shallowRef(immediate); - const stopWatch = isSupported.value ? watch( - () => [targets.value, unrefElement(root), isActive.value], - ([targets2, root2]) => { - cleanup(); - if (!isActive.value) - return; - if (!targets2.length) - return; - const observer = new IntersectionObserver( - callback, - { - root: unrefElement(root2), - rootMargin, - threshold - } - ); - targets2.forEach((el) => el && observer.observe(el)); - cleanup = () => { - observer.disconnect(); - cleanup = noop; - }; - }, - { immediate, flush: "post" } - ) : noop; - const stop = () => { - cleanup(); - stopWatch(); - isActive.value = false; - }; - tryOnScopeDispose(stop); - return { - isSupported, - isActive, - pause() { - cleanup(); - isActive.value = false; - }, - resume() { - isActive.value = true; - }, - stop - }; -} -function useElementVisibility(element, options = {}) { - const { - window: window2 = defaultWindow, - scrollTarget, - threshold = 0, - rootMargin, - once = false - } = options; - const elementIsVisible = shallowRef(false); - const { stop } = useIntersectionObserver( - element, - (intersectionObserverEntries) => { - let isIntersecting = elementIsVisible.value; - let latestTime = 0; - for (const entry of intersectionObserverEntries) { - if (entry.time >= latestTime) { - latestTime = entry.time; - isIntersecting = entry.isIntersecting; - } - } - elementIsVisible.value = isIntersecting; - if (once) { - watchOnce(elementIsVisible, () => { - stop(); - }); - } - }, - { - root: scrollTarget, - window: window2, - threshold, - rootMargin: toValue(rootMargin) - } - ); - return elementIsVisible; -} -var events = /* @__PURE__ */ new Map(); -function useEventBus(key) { - const scope = getCurrentScope(); - function on(listener) { - var _a; - const listeners = events.get(key) || /* @__PURE__ */ new Set(); - listeners.add(listener); - events.set(key, listeners); - const _off = () => off(listener); - (_a = scope == null ? void 0 : scope.cleanups) == null ? void 0 : _a.push(_off); - return _off; - } - function once(listener) { - function _listener(...args) { - off(_listener); - listener(...args); - } - return on(_listener); - } - function off(listener) { - const listeners = events.get(key); - if (!listeners) - return; - listeners.delete(listener); - if (!listeners.size) - reset(); - } - function reset() { - events.delete(key); - } - function emit(event, payload) { - var _a; - (_a = events.get(key)) == null ? void 0 : _a.forEach((v) => v(event, payload)); - } - return { on, once, off, emit, reset }; -} -function resolveNestedOptions$1(options) { - if (options === true) - return {}; - return options; -} -function useEventSource(url, events2 = [], options = {}) { - const event = shallowRef(null); - const data = shallowRef(null); - const status = shallowRef("CONNECTING"); - const eventSource = ref(null); - const error = shallowRef(null); - const urlRef = toRef2(url); - const lastEventId = shallowRef(null); - let explicitlyClosed = false; - let retried = 0; - const { - withCredentials = false, - immediate = true, - autoConnect = true, - autoReconnect - } = options; - const close = () => { - if (isClient && eventSource.value) { - eventSource.value.close(); - eventSource.value = null; - status.value = "CLOSED"; - explicitlyClosed = true; - } - }; - const _init = () => { - if (explicitlyClosed || typeof urlRef.value === "undefined") - return; - const es = new EventSource(urlRef.value, { withCredentials }); - status.value = "CONNECTING"; - eventSource.value = es; - es.onopen = () => { - status.value = "OPEN"; - error.value = null; - }; - es.onerror = (e) => { - status.value = "CLOSED"; - error.value = e; - if (es.readyState === 2 && !explicitlyClosed && autoReconnect) { - es.close(); - const { - retries = -1, - delay = 1e3, - onFailed - } = resolveNestedOptions$1(autoReconnect); - retried += 1; - if (typeof retries === "number" && (retries < 0 || retried < retries)) - setTimeout(_init, delay); - else if (typeof retries === "function" && retries()) - setTimeout(_init, delay); - else - onFailed == null ? void 0 : onFailed(); - } - }; - es.onmessage = (e) => { - event.value = null; - data.value = e.data; - lastEventId.value = e.lastEventId; - }; - for (const event_name of events2) { - useEventListener(es, event_name, (e) => { - event.value = event_name; - data.value = e.data || null; - }, { passive: true }); - } - }; - const open = () => { - if (!isClient) - return; - close(); - explicitlyClosed = false; - retried = 0; - _init(); - }; - if (immediate) - open(); - if (autoConnect) - watch(urlRef, open); - tryOnScopeDispose(close); - return { - eventSource, - event, - data, - status, - error, - open, - close, - lastEventId - }; -} -function useEyeDropper(options = {}) { - const { initialValue = "" } = options; - const isSupported = useSupported(() => typeof window !== "undefined" && "EyeDropper" in window); - const sRGBHex = shallowRef(initialValue); - async function open(openOptions) { - if (!isSupported.value) - return; - const eyeDropper = new window.EyeDropper(); - const result = await eyeDropper.open(openOptions); - sRGBHex.value = result.sRGBHex; - return result; - } - return { isSupported, sRGBHex, open }; -} -function useFavicon(newIcon = null, options = {}) { - const { - baseUrl = "", - rel = "icon", - document: document2 = defaultDocument - } = options; - const favicon = toRef2(newIcon); - const applyIcon = (icon) => { - const elements = document2 == null ? void 0 : document2.head.querySelectorAll(`link[rel*="${rel}"]`); - if (!elements || elements.length === 0) { - const link = document2 == null ? void 0 : document2.createElement("link"); - if (link) { - link.rel = rel; - link.href = `${baseUrl}${icon}`; - link.type = `image/${icon.split(".").pop()}`; - document2 == null ? void 0 : document2.head.append(link); - } - return; - } - elements == null ? void 0 : elements.forEach((el) => el.href = `${baseUrl}${icon}`); - }; - watch( - favicon, - (i, o) => { - if (typeof i === "string" && i !== o) - applyIcon(i); - }, - { immediate: true } - ); - return favicon; -} -var payloadMapping = { - json: "application/json", - text: "text/plain" -}; -function isFetchOptions(obj) { - return obj && containsProp(obj, "immediate", "refetch", "initialData", "timeout", "beforeFetch", "afterFetch", "onFetchError", "fetch", "updateDataOnError"); -} -var reAbsolute = /^(?:[a-z][a-z\d+\-.]*:)?\/\//i; -function isAbsoluteURL(url) { - return reAbsolute.test(url); -} -function headersToObject(headers) { - if (typeof Headers !== "undefined" && headers instanceof Headers) - return Object.fromEntries(headers.entries()); - return headers; -} -function combineCallbacks(combination, ...callbacks) { - if (combination === "overwrite") { - return async (ctx) => { - let callback; - for (let i = callbacks.length - 1; i >= 0; i--) { - if (callbacks[i] != null) { - callback = callbacks[i]; - break; - } - } - if (callback) - return { ...ctx, ...await callback(ctx) }; - return ctx; - }; - } else { - return async (ctx) => { - for (const callback of callbacks) { - if (callback) - ctx = { ...ctx, ...await callback(ctx) }; - } - return ctx; - }; - } -} -function createFetch(config = {}) { - const _combination = config.combination || "chain"; - const _options = config.options || {}; - const _fetchOptions = config.fetchOptions || {}; - function useFactoryFetch(url, ...args) { - const computedUrl = computed(() => { - const baseUrl = toValue(config.baseUrl); - const targetUrl = toValue(url); - return baseUrl && !isAbsoluteURL(targetUrl) ? joinPaths(baseUrl, targetUrl) : targetUrl; - }); - let options = _options; - let fetchOptions = _fetchOptions; - if (args.length > 0) { - if (isFetchOptions(args[0])) { - options = { - ...options, - ...args[0], - beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[0].beforeFetch), - afterFetch: combineCallbacks(_combination, _options.afterFetch, args[0].afterFetch), - onFetchError: combineCallbacks(_combination, _options.onFetchError, args[0].onFetchError) - }; - } else { - fetchOptions = { - ...fetchOptions, - ...args[0], - headers: { - ...headersToObject(fetchOptions.headers) || {}, - ...headersToObject(args[0].headers) || {} - } - }; - } - } - if (args.length > 1 && isFetchOptions(args[1])) { - options = { - ...options, - ...args[1], - beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[1].beforeFetch), - afterFetch: combineCallbacks(_combination, _options.afterFetch, args[1].afterFetch), - onFetchError: combineCallbacks(_combination, _options.onFetchError, args[1].onFetchError) - }; - } - return useFetch(computedUrl, fetchOptions, options); - } - return useFactoryFetch; -} -function useFetch(url, ...args) { - var _a; - const supportsAbort = typeof AbortController === "function"; - let fetchOptions = {}; - let options = { - immediate: true, - refetch: false, - timeout: 0, - updateDataOnError: false - }; - const config = { - method: "GET", - type: "text", - payload: void 0 - }; - if (args.length > 0) { - if (isFetchOptions(args[0])) - options = { ...options, ...args[0] }; - else - fetchOptions = args[0]; - } - if (args.length > 1) { - if (isFetchOptions(args[1])) - options = { ...options, ...args[1] }; - } - const { - fetch = (_a = defaultWindow) == null ? void 0 : _a.fetch, - initialData, - timeout - } = options; - const responseEvent = createEventHook(); - const errorEvent = createEventHook(); - const finallyEvent = createEventHook(); - const isFinished = shallowRef(false); - const isFetching = shallowRef(false); - const aborted = shallowRef(false); - const statusCode = shallowRef(null); - const response = shallowRef(null); - const error = shallowRef(null); - const data = shallowRef(initialData || null); - const canAbort = computed(() => supportsAbort && isFetching.value); - let controller; - let timer; - const abort = () => { - if (supportsAbort) { - controller == null ? void 0 : controller.abort(); - controller = new AbortController(); - controller.signal.onabort = () => aborted.value = true; - fetchOptions = { - ...fetchOptions, - signal: controller.signal - }; - } - }; - const loading = (isLoading) => { - isFetching.value = isLoading; - isFinished.value = !isLoading; - }; - if (timeout) - timer = useTimeoutFn(abort, timeout, { immediate: false }); - let executeCounter = 0; - const execute = async (throwOnFailed = false) => { - var _a2, _b; - abort(); - loading(true); - error.value = null; - statusCode.value = null; - aborted.value = false; - executeCounter += 1; - const currentExecuteCounter = executeCounter; - const defaultFetchOptions = { - method: config.method, - headers: {} - }; - const payload = toValue(config.payload); - if (payload) { - const headers = headersToObject(defaultFetchOptions.headers); - const proto = Object.getPrototypeOf(payload); - if (!config.payloadType && payload && (proto === Object.prototype || Array.isArray(proto)) && !(payload instanceof FormData)) - config.payloadType = "json"; - if (config.payloadType) - headers["Content-Type"] = (_a2 = payloadMapping[config.payloadType]) != null ? _a2 : config.payloadType; - defaultFetchOptions.body = config.payloadType === "json" ? JSON.stringify(payload) : payload; - } - let isCanceled = false; - const context = { - url: toValue(url), - options: { - ...defaultFetchOptions, - ...fetchOptions - }, - cancel: () => { - isCanceled = true; - } - }; - if (options.beforeFetch) - Object.assign(context, await options.beforeFetch(context)); - if (isCanceled || !fetch) { - loading(false); - return Promise.resolve(null); - } - let responseData = null; - if (timer) - timer.start(); - return fetch( - context.url, - { - ...defaultFetchOptions, - ...context.options, - headers: { - ...headersToObject(defaultFetchOptions.headers), - ...headersToObject((_b = context.options) == null ? void 0 : _b.headers) - } - } - ).then(async (fetchResponse) => { - response.value = fetchResponse; - statusCode.value = fetchResponse.status; - responseData = await fetchResponse.clone()[config.type](); - if (!fetchResponse.ok) { - data.value = initialData || null; - throw new Error(fetchResponse.statusText); - } - if (options.afterFetch) { - ({ data: responseData } = await options.afterFetch({ - data: responseData, - response: fetchResponse, - context, - execute - })); - } - data.value = responseData; - responseEvent.trigger(fetchResponse); - return fetchResponse; - }).catch(async (fetchError) => { - let errorData = fetchError.message || fetchError.name; - if (options.onFetchError) { - ({ error: errorData, data: responseData } = await options.onFetchError({ - data: responseData, - error: fetchError, - response: response.value, - context, - execute - })); - } - error.value = errorData; - if (options.updateDataOnError) - data.value = responseData; - errorEvent.trigger(fetchError); - if (throwOnFailed) - throw fetchError; - return null; - }).finally(() => { - if (currentExecuteCounter === executeCounter) - loading(false); - if (timer) - timer.stop(); - finallyEvent.trigger(null); - }); - }; - const refetch = toRef2(options.refetch); - watch( - [ - refetch, - toRef2(url) - ], - ([refetch2]) => refetch2 && execute(), - { deep: true } - ); - const shell = { - isFinished: readonly(isFinished), - isFetching: readonly(isFetching), - statusCode, - response, - error, - data, - canAbort, - aborted, - abort, - execute, - onFetchResponse: responseEvent.on, - onFetchError: errorEvent.on, - onFetchFinally: finallyEvent.on, - // method - get: setMethod("GET"), - put: setMethod("PUT"), - post: setMethod("POST"), - delete: setMethod("DELETE"), - patch: setMethod("PATCH"), - head: setMethod("HEAD"), - options: setMethod("OPTIONS"), - // type - json: setType("json"), - text: setType("text"), - blob: setType("blob"), - arrayBuffer: setType("arrayBuffer"), - formData: setType("formData") - }; - function setMethod(method) { - return (payload, payloadType) => { - if (!isFetching.value) { - config.method = method; - config.payload = payload; - config.payloadType = payloadType; - if (isRef(config.payload)) { - watch( - [ - refetch, - toRef2(config.payload) - ], - ([refetch2]) => refetch2 && execute(), - { deep: true } - ); - } - return { - ...shell, - then(onFulfilled, onRejected) { - return waitUntilFinished().then(onFulfilled, onRejected); - } - }; - } - return void 0; - }; - } - function waitUntilFinished() { - return new Promise((resolve, reject) => { - until(isFinished).toBe(true).then(() => resolve(shell)).catch(reject); - }); - } - function setType(type) { - return () => { - if (!isFetching.value) { - config.type = type; - return { - ...shell, - then(onFulfilled, onRejected) { - return waitUntilFinished().then(onFulfilled, onRejected); - } - }; - } - return void 0; - }; - } - if (options.immediate) - Promise.resolve().then(() => execute()); - return { - ...shell, - then(onFulfilled, onRejected) { - return waitUntilFinished().then(onFulfilled, onRejected); - } - }; -} -function joinPaths(start, end) { - if (!start.endsWith("/") && !end.startsWith("/")) { - return `${start}/${end}`; - } - if (start.endsWith("/") && end.startsWith("/")) { - return `${start.slice(0, -1)}${end}`; - } - return `${start}${end}`; -} -var DEFAULT_OPTIONS = { - multiple: true, - accept: "*", - reset: false, - directory: false -}; -function prepareInitialFiles(files) { - if (!files) - return null; - if (files instanceof FileList) - return files; - const dt = new DataTransfer(); - for (const file of files) { - dt.items.add(file); - } - return dt.files; -} -function useFileDialog(options = {}) { - const { - document: document2 = defaultDocument - } = options; - const files = ref(prepareInitialFiles(options.initialFiles)); - const { on: onChange, trigger: changeTrigger } = createEventHook(); - const { on: onCancel, trigger: cancelTrigger } = createEventHook(); - let input; - if (document2) { - input = document2.createElement("input"); - input.type = "file"; - input.onchange = (event) => { - const result = event.target; - files.value = result.files; - changeTrigger(files.value); - }; - input.oncancel = () => { - cancelTrigger(); - }; - } - const reset = () => { - files.value = null; - if (input && input.value) { - input.value = ""; - changeTrigger(null); - } - }; - const open = (localOptions) => { - if (!input) - return; - const _options = { - ...DEFAULT_OPTIONS, - ...options, - ...localOptions - }; - input.multiple = _options.multiple; - input.accept = _options.accept; - input.webkitdirectory = _options.directory; - if (hasOwn(_options, "capture")) - input.capture = _options.capture; - if (_options.reset) - reset(); - input.click(); - }; - return { - files: readonly(files), - open, - reset, - onCancel, - onChange - }; -} -function useFileSystemAccess(options = {}) { - const { - window: _window = defaultWindow, - dataType = "Text" - } = options; - const window2 = _window; - const isSupported = useSupported(() => window2 && "showSaveFilePicker" in window2 && "showOpenFilePicker" in window2); - const fileHandle = shallowRef(); - const data = shallowRef(); - const file = shallowRef(); - const fileName = computed(() => { - var _a, _b; - return (_b = (_a = file.value) == null ? void 0 : _a.name) != null ? _b : ""; - }); - const fileMIME = computed(() => { - var _a, _b; - return (_b = (_a = file.value) == null ? void 0 : _a.type) != null ? _b : ""; - }); - const fileSize = computed(() => { - var _a, _b; - return (_b = (_a = file.value) == null ? void 0 : _a.size) != null ? _b : 0; - }); - const fileLastModified = computed(() => { - var _a, _b; - return (_b = (_a = file.value) == null ? void 0 : _a.lastModified) != null ? _b : 0; - }); - async function open(_options = {}) { - if (!isSupported.value) - return; - const [handle] = await window2.showOpenFilePicker({ ...toValue(options), ..._options }); - fileHandle.value = handle; - await updateData(); - } - async function create(_options = {}) { - if (!isSupported.value) - return; - fileHandle.value = await window2.showSaveFilePicker({ ...options, ..._options }); - data.value = void 0; - await updateData(); - } - async function save(_options = {}) { - if (!isSupported.value) - return; - if (!fileHandle.value) - return saveAs(_options); - if (data.value) { - const writableStream = await fileHandle.value.createWritable(); - await writableStream.write(data.value); - await writableStream.close(); - } - await updateFile(); - } - async function saveAs(_options = {}) { - if (!isSupported.value) - return; - fileHandle.value = await window2.showSaveFilePicker({ ...options, ..._options }); - if (data.value) { - const writableStream = await fileHandle.value.createWritable(); - await writableStream.write(data.value); - await writableStream.close(); - } - await updateFile(); - } - async function updateFile() { - var _a; - file.value = await ((_a = fileHandle.value) == null ? void 0 : _a.getFile()); - } - async function updateData() { - var _a, _b; - await updateFile(); - const type = toValue(dataType); - if (type === "Text") - data.value = await ((_a = file.value) == null ? void 0 : _a.text()); - else if (type === "ArrayBuffer") - data.value = await ((_b = file.value) == null ? void 0 : _b.arrayBuffer()); - else if (type === "Blob") - data.value = file.value; - } - watch(() => toValue(dataType), updateData); - return { - isSupported, - data, - file, - fileName, - fileMIME, - fileSize, - fileLastModified, - open, - create, - save, - saveAs, - updateData - }; -} -function useFocus(target, options = {}) { - const { initialValue = false, focusVisible = false, preventScroll = false } = options; - const innerFocused = shallowRef(false); - const targetElement = computed(() => unrefElement(target)); - const listenerOptions = { passive: true }; - useEventListener(targetElement, "focus", (event) => { - var _a, _b; - if (!focusVisible || ((_b = (_a = event.target).matches) == null ? void 0 : _b.call(_a, ":focus-visible"))) - innerFocused.value = true; - }, listenerOptions); - useEventListener(targetElement, "blur", () => innerFocused.value = false, listenerOptions); - const focused = computed({ - get: () => innerFocused.value, - set(value) { - var _a, _b; - if (!value && innerFocused.value) - (_a = targetElement.value) == null ? void 0 : _a.blur(); - else if (value && !innerFocused.value) - (_b = targetElement.value) == null ? void 0 : _b.focus({ preventScroll }); - } - }); - watch( - targetElement, - () => { - focused.value = initialValue; - }, - { immediate: true, flush: "post" } - ); - return { focused }; -} -var EVENT_FOCUS_IN = "focusin"; -var EVENT_FOCUS_OUT = "focusout"; -var PSEUDO_CLASS_FOCUS_WITHIN = ":focus-within"; -function useFocusWithin(target, options = {}) { - const { window: window2 = defaultWindow } = options; - const targetElement = computed(() => unrefElement(target)); - const _focused = shallowRef(false); - const focused = computed(() => _focused.value); - const activeElement = useActiveElement(options); - if (!window2 || !activeElement.value) { - return { focused }; - } - const listenerOptions = { passive: true }; - useEventListener(targetElement, EVENT_FOCUS_IN, () => _focused.value = true, listenerOptions); - useEventListener(targetElement, EVENT_FOCUS_OUT, () => { - var _a, _b, _c; - return _focused.value = (_c = (_b = (_a = targetElement.value) == null ? void 0 : _a.matches) == null ? void 0 : _b.call(_a, PSEUDO_CLASS_FOCUS_WITHIN)) != null ? _c : false; - }, listenerOptions); - return { focused }; -} -function useFps(options) { - var _a; - const fps = shallowRef(0); - if (typeof performance === "undefined") - return fps; - const every = (_a = options == null ? void 0 : options.every) != null ? _a : 10; - let last = performance.now(); - let ticks = 0; - useRafFn(() => { - ticks += 1; - if (ticks >= every) { - const now2 = performance.now(); - const diff = now2 - last; - fps.value = Math.round(1e3 / (diff / ticks)); - last = now2; - ticks = 0; - } - }); - return fps; -} -var eventHandlers = [ - "fullscreenchange", - "webkitfullscreenchange", - "webkitendfullscreen", - "mozfullscreenchange", - "MSFullscreenChange" -]; -function useFullscreen(target, options = {}) { - const { - document: document2 = defaultDocument, - autoExit = false - } = options; - const targetRef = computed(() => { - var _a; - return (_a = unrefElement(target)) != null ? _a : document2 == null ? void 0 : document2.documentElement; - }); - const isFullscreen = shallowRef(false); - const requestMethod = computed(() => { - return [ - "requestFullscreen", - "webkitRequestFullscreen", - "webkitEnterFullscreen", - "webkitEnterFullScreen", - "webkitRequestFullScreen", - "mozRequestFullScreen", - "msRequestFullscreen" - ].find((m) => document2 && m in document2 || targetRef.value && m in targetRef.value); - }); - const exitMethod = computed(() => { - return [ - "exitFullscreen", - "webkitExitFullscreen", - "webkitExitFullScreen", - "webkitCancelFullScreen", - "mozCancelFullScreen", - "msExitFullscreen" - ].find((m) => document2 && m in document2 || targetRef.value && m in targetRef.value); - }); - const fullscreenEnabled = computed(() => { - return [ - "fullScreen", - "webkitIsFullScreen", - "webkitDisplayingFullscreen", - "mozFullScreen", - "msFullscreenElement" - ].find((m) => document2 && m in document2 || targetRef.value && m in targetRef.value); - }); - const fullscreenElementMethod = [ - "fullscreenElement", - "webkitFullscreenElement", - "mozFullScreenElement", - "msFullscreenElement" - ].find((m) => document2 && m in document2); - const isSupported = useSupported(() => targetRef.value && document2 && requestMethod.value !== void 0 && exitMethod.value !== void 0 && fullscreenEnabled.value !== void 0); - const isCurrentElementFullScreen = () => { - if (fullscreenElementMethod) - return (document2 == null ? void 0 : document2[fullscreenElementMethod]) === targetRef.value; - return false; - }; - const isElementFullScreen = () => { - if (fullscreenEnabled.value) { - if (document2 && document2[fullscreenEnabled.value] != null) { - return document2[fullscreenEnabled.value]; - } else { - const target2 = targetRef.value; - if ((target2 == null ? void 0 : target2[fullscreenEnabled.value]) != null) { - return Boolean(target2[fullscreenEnabled.value]); - } - } - } - return false; - }; - async function exit() { - if (!isSupported.value || !isFullscreen.value) - return; - if (exitMethod.value) { - if ((document2 == null ? void 0 : document2[exitMethod.value]) != null) { - await document2[exitMethod.value](); - } else { - const target2 = targetRef.value; - if ((target2 == null ? void 0 : target2[exitMethod.value]) != null) - await target2[exitMethod.value](); - } - } - isFullscreen.value = false; - } - async function enter() { - if (!isSupported.value || isFullscreen.value) - return; - if (isElementFullScreen()) - await exit(); - const target2 = targetRef.value; - if (requestMethod.value && (target2 == null ? void 0 : target2[requestMethod.value]) != null) { - await target2[requestMethod.value](); - isFullscreen.value = true; - } - } - async function toggle() { - await (isFullscreen.value ? exit() : enter()); - } - const handlerCallback = () => { - const isElementFullScreenValue = isElementFullScreen(); - if (!isElementFullScreenValue || isElementFullScreenValue && isCurrentElementFullScreen()) - isFullscreen.value = isElementFullScreenValue; - }; - const listenerOptions = { capture: false, passive: true }; - useEventListener(document2, eventHandlers, handlerCallback, listenerOptions); - useEventListener(() => unrefElement(targetRef), eventHandlers, handlerCallback, listenerOptions); - if (autoExit) - tryOnScopeDispose(exit); - return { - isSupported, - isFullscreen, - enter, - exit, - toggle - }; -} -function mapGamepadToXbox360Controller(gamepad) { - return computed(() => { - if (gamepad.value) { - return { - buttons: { - a: gamepad.value.buttons[0], - b: gamepad.value.buttons[1], - x: gamepad.value.buttons[2], - y: gamepad.value.buttons[3] - }, - bumper: { - left: gamepad.value.buttons[4], - right: gamepad.value.buttons[5] - }, - triggers: { - left: gamepad.value.buttons[6], - right: gamepad.value.buttons[7] - }, - stick: { - left: { - horizontal: gamepad.value.axes[0], - vertical: gamepad.value.axes[1], - button: gamepad.value.buttons[10] - }, - right: { - horizontal: gamepad.value.axes[2], - vertical: gamepad.value.axes[3], - button: gamepad.value.buttons[11] - } - }, - dpad: { - up: gamepad.value.buttons[12], - down: gamepad.value.buttons[13], - left: gamepad.value.buttons[14], - right: gamepad.value.buttons[15] - }, - back: gamepad.value.buttons[8], - start: gamepad.value.buttons[9] - }; - } - return null; - }); -} -function useGamepad(options = {}) { - const { - navigator: navigator2 = defaultNavigator - } = options; - const isSupported = useSupported(() => navigator2 && "getGamepads" in navigator2); - const gamepads = ref([]); - const onConnectedHook = createEventHook(); - const onDisconnectedHook = createEventHook(); - const stateFromGamepad = (gamepad) => { - const hapticActuators = []; - const vibrationActuator = "vibrationActuator" in gamepad ? gamepad.vibrationActuator : null; - if (vibrationActuator) - hapticActuators.push(vibrationActuator); - if (gamepad.hapticActuators) - hapticActuators.push(...gamepad.hapticActuators); - return { - id: gamepad.id, - index: gamepad.index, - connected: gamepad.connected, - mapping: gamepad.mapping, - timestamp: gamepad.timestamp, - vibrationActuator: gamepad.vibrationActuator, - hapticActuators, - axes: gamepad.axes.map((axes) => axes), - buttons: gamepad.buttons.map((button) => ({ pressed: button.pressed, touched: button.touched, value: button.value })) - }; - }; - const updateGamepadState = () => { - const _gamepads = (navigator2 == null ? void 0 : navigator2.getGamepads()) || []; - for (const gamepad of _gamepads) { - if (gamepad && gamepads.value[gamepad.index]) - gamepads.value[gamepad.index] = stateFromGamepad(gamepad); - } - }; - const { isActive, pause, resume } = useRafFn(updateGamepadState); - const onGamepadConnected = (gamepad) => { - if (!gamepads.value.some(({ index }) => index === gamepad.index)) { - gamepads.value.push(stateFromGamepad(gamepad)); - onConnectedHook.trigger(gamepad.index); - } - resume(); - }; - const onGamepadDisconnected = (gamepad) => { - gamepads.value = gamepads.value.filter((x) => x.index !== gamepad.index); - onDisconnectedHook.trigger(gamepad.index); - }; - const listenerOptions = { passive: true }; - useEventListener("gamepadconnected", (e) => onGamepadConnected(e.gamepad), listenerOptions); - useEventListener("gamepaddisconnected", (e) => onGamepadDisconnected(e.gamepad), listenerOptions); - tryOnMounted(() => { - const _gamepads = (navigator2 == null ? void 0 : navigator2.getGamepads()) || []; - for (const gamepad of _gamepads) { - if (gamepad && gamepads.value[gamepad.index]) - onGamepadConnected(gamepad); - } - }); - pause(); - return { - isSupported, - onConnected: onConnectedHook.on, - onDisconnected: onDisconnectedHook.on, - gamepads, - pause, - resume, - isActive - }; -} -function useGeolocation(options = {}) { - const { - enableHighAccuracy = true, - maximumAge = 3e4, - timeout = 27e3, - navigator: navigator2 = defaultNavigator, - immediate = true - } = options; - const isSupported = useSupported(() => navigator2 && "geolocation" in navigator2); - const locatedAt = shallowRef(null); - const error = shallowRef(null); - const coords = ref({ - accuracy: 0, - latitude: Number.POSITIVE_INFINITY, - longitude: Number.POSITIVE_INFINITY, - altitude: null, - altitudeAccuracy: null, - heading: null, - speed: null - }); - function updatePosition(position) { - locatedAt.value = position.timestamp; - coords.value = position.coords; - error.value = null; - } - let watcher; - function resume() { - if (isSupported.value) { - watcher = navigator2.geolocation.watchPosition( - updatePosition, - (err) => error.value = err, - { - enableHighAccuracy, - maximumAge, - timeout - } - ); - } - } - if (immediate) - resume(); - function pause() { - if (watcher && navigator2) - navigator2.geolocation.clearWatch(watcher); - } - tryOnScopeDispose(() => { - pause(); - }); - return { - isSupported, - coords, - locatedAt, - error, - resume, - pause - }; -} -var defaultEvents$1 = ["mousemove", "mousedown", "resize", "keydown", "touchstart", "wheel"]; -var oneMinute = 6e4; -function useIdle(timeout = oneMinute, options = {}) { - const { - initialState = false, - listenForVisibilityChange = true, - events: events2 = defaultEvents$1, - window: window2 = defaultWindow, - eventFilter = throttleFilter(50) - } = options; - const idle = shallowRef(initialState); - const lastActive = shallowRef(timestamp()); - let timer; - const reset = () => { - idle.value = false; - clearTimeout(timer); - timer = setTimeout(() => idle.value = true, timeout); - }; - const onEvent = createFilterWrapper( - eventFilter, - () => { - lastActive.value = timestamp(); - reset(); - } - ); - if (window2) { - const document2 = window2.document; - const listenerOptions = { passive: true }; - for (const event of events2) - useEventListener(window2, event, onEvent, listenerOptions); - if (listenForVisibilityChange) { - useEventListener(document2, "visibilitychange", () => { - if (!document2.hidden) - onEvent(); - }, listenerOptions); - } - reset(); - } - return { - idle, - lastActive, - reset - }; -} -async function loadImage(options) { - return new Promise((resolve, reject) => { - const img = new Image(); - const { src, srcset, sizes, class: clazz, loading, crossorigin, referrerPolicy, width, height, decoding, fetchPriority, ismap, usemap } = options; - img.src = src; - if (srcset != null) - img.srcset = srcset; - if (sizes != null) - img.sizes = sizes; - if (clazz != null) - img.className = clazz; - if (loading != null) - img.loading = loading; - if (crossorigin != null) - img.crossOrigin = crossorigin; - if (referrerPolicy != null) - img.referrerPolicy = referrerPolicy; - if (width != null) - img.width = width; - if (height != null) - img.height = height; - if (decoding != null) - img.decoding = decoding; - if (fetchPriority != null) - img.fetchPriority = fetchPriority; - if (ismap != null) - img.isMap = ismap; - if (usemap != null) - img.useMap = usemap; - img.onload = () => resolve(img); - img.onerror = reject; - }); -} -function useImage(options, asyncStateOptions = {}) { - const state = useAsyncState( - () => loadImage(toValue(options)), - void 0, - { - resetOnExecute: true, - ...asyncStateOptions - } - ); - watch( - () => toValue(options), - () => state.execute(asyncStateOptions.delay), - { deep: true } - ); - return state; -} -function resolveElement(el) { - if (typeof Window !== "undefined" && el instanceof Window) - return el.document.documentElement; - if (typeof Document !== "undefined" && el instanceof Document) - return el.documentElement; - return el; -} -var ARRIVED_STATE_THRESHOLD_PIXELS = 1; -function useScroll(element, options = {}) { - const { - throttle = 0, - idle = 200, - onStop = noop, - onScroll = noop, - offset = { - left: 0, - right: 0, - top: 0, - bottom: 0 - }, - eventListenerOptions = { - capture: false, - passive: true - }, - behavior = "auto", - window: window2 = defaultWindow, - onError = (e) => { - console.error(e); - } - } = options; - const internalX = shallowRef(0); - const internalY = shallowRef(0); - const x = computed({ - get() { - return internalX.value; - }, - set(x2) { - scrollTo(x2, void 0); - } - }); - const y = computed({ - get() { - return internalY.value; - }, - set(y2) { - scrollTo(void 0, y2); - } - }); - function scrollTo(_x, _y) { - var _a, _b, _c, _d; - if (!window2) - return; - const _element = toValue(element); - if (!_element) - return; - (_c = _element instanceof Document ? window2.document.body : _element) == null ? void 0 : _c.scrollTo({ - top: (_a = toValue(_y)) != null ? _a : y.value, - left: (_b = toValue(_x)) != null ? _b : x.value, - behavior: toValue(behavior) - }); - const scrollContainer = ((_d = _element == null ? void 0 : _element.document) == null ? void 0 : _d.documentElement) || (_element == null ? void 0 : _element.documentElement) || _element; - if (x != null) - internalX.value = scrollContainer.scrollLeft; - if (y != null) - internalY.value = scrollContainer.scrollTop; - } - const isScrolling = shallowRef(false); - const arrivedState = reactive({ - left: true, - right: false, - top: true, - bottom: false - }); - const directions = reactive({ - left: false, - right: false, - top: false, - bottom: false - }); - const onScrollEnd = (e) => { - if (!isScrolling.value) - return; - isScrolling.value = false; - directions.left = false; - directions.right = false; - directions.top = false; - directions.bottom = false; - onStop(e); - }; - const onScrollEndDebounced = useDebounceFn(onScrollEnd, throttle + idle); - const setArrivedState = (target) => { - var _a; - if (!window2) - return; - const el = ((_a = target == null ? void 0 : target.document) == null ? void 0 : _a.documentElement) || (target == null ? void 0 : target.documentElement) || unrefElement(target); - const { display, flexDirection, direction } = getComputedStyle(el); - const directionMultipler = direction === "rtl" ? -1 : 1; - const scrollLeft = el.scrollLeft; - directions.left = scrollLeft < internalX.value; - directions.right = scrollLeft > internalX.value; - const left = Math.abs(scrollLeft * directionMultipler) <= (offset.left || 0); - const right = Math.abs(scrollLeft * directionMultipler) + el.clientWidth >= el.scrollWidth - (offset.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS; - if (display === "flex" && flexDirection === "row-reverse") { - arrivedState.left = right; - arrivedState.right = left; - } else { - arrivedState.left = left; - arrivedState.right = right; - } - internalX.value = scrollLeft; - let scrollTop = el.scrollTop; - if (target === window2.document && !scrollTop) - scrollTop = window2.document.body.scrollTop; - directions.top = scrollTop < internalY.value; - directions.bottom = scrollTop > internalY.value; - const top = Math.abs(scrollTop) <= (offset.top || 0); - const bottom = Math.abs(scrollTop) + el.clientHeight >= el.scrollHeight - (offset.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS; - if (display === "flex" && flexDirection === "column-reverse") { - arrivedState.top = bottom; - arrivedState.bottom = top; - } else { - arrivedState.top = top; - arrivedState.bottom = bottom; - } - internalY.value = scrollTop; - }; - const onScrollHandler = (e) => { - var _a; - if (!window2) - return; - const eventTarget = (_a = e.target.documentElement) != null ? _a : e.target; - setArrivedState(eventTarget); - isScrolling.value = true; - onScrollEndDebounced(e); - onScroll(e); - }; - useEventListener( - element, - "scroll", - throttle ? useThrottleFn(onScrollHandler, throttle, true, false) : onScrollHandler, - eventListenerOptions - ); - tryOnMounted(() => { - try { - const _element = toValue(element); - if (!_element) - return; - setArrivedState(_element); - } catch (e) { - onError(e); - } - }); - useEventListener( - element, - "scrollend", - onScrollEnd, - eventListenerOptions - ); - return { - x, - y, - isScrolling, - arrivedState, - directions, - measure() { - const _element = toValue(element); - if (window2 && _element) - setArrivedState(_element); - } - }; -} -function useInfiniteScroll(element, onLoadMore, options = {}) { - var _a; - const { - direction = "bottom", - interval = 100, - canLoadMore = () => true - } = options; - const state = reactive(useScroll( - element, - { - ...options, - offset: { - [direction]: (_a = options.distance) != null ? _a : 0, - ...options.offset - } - } - )); - const promise = ref(); - const isLoading = computed(() => !!promise.value); - const observedElement = computed(() => { - return resolveElement(toValue(element)); - }); - const isElementVisible = useElementVisibility(observedElement); - function checkAndLoad() { - state.measure(); - if (!observedElement.value || !isElementVisible.value || !canLoadMore(observedElement.value)) - return; - const { scrollHeight, clientHeight, scrollWidth, clientWidth } = observedElement.value; - const isNarrower = direction === "bottom" || direction === "top" ? scrollHeight <= clientHeight : scrollWidth <= clientWidth; - if (state.arrivedState[direction] || isNarrower) { - if (!promise.value) { - promise.value = Promise.all([ - onLoadMore(state), - new Promise((resolve) => setTimeout(resolve, interval)) - ]).finally(() => { - promise.value = null; - nextTick(() => checkAndLoad()); - }); - } - } - } - const stop = watch( - () => [state.arrivedState[direction], isElementVisible.value], - checkAndLoad, - { immediate: true } - ); - tryOnUnmounted(stop); - return { - isLoading, - reset() { - nextTick(() => checkAndLoad()); - } - }; -} -var defaultEvents = ["mousedown", "mouseup", "keydown", "keyup"]; -function useKeyModifier(modifier, options = {}) { - const { - events: events2 = defaultEvents, - document: document2 = defaultDocument, - initial = null - } = options; - const state = shallowRef(initial); - if (document2) { - events2.forEach((listenerEvent) => { - useEventListener(document2, listenerEvent, (evt) => { - if (typeof evt.getModifierState === "function") - state.value = evt.getModifierState(modifier); - }, { passive: true }); - }); - } - return state; -} -function useLocalStorage(key, initialValue, options = {}) { - const { window: window2 = defaultWindow } = options; - return useStorage(key, initialValue, window2 == null ? void 0 : window2.localStorage, options); -} -var DefaultMagicKeysAliasMap = { - ctrl: "control", - command: "meta", - cmd: "meta", - option: "alt", - up: "arrowup", - down: "arrowdown", - left: "arrowleft", - right: "arrowright" -}; -function useMagicKeys(options = {}) { - const { - reactive: useReactive = false, - target = defaultWindow, - aliasMap = DefaultMagicKeysAliasMap, - passive = true, - onEventFired = noop - } = options; - const current = reactive(/* @__PURE__ */ new Set()); - const obj = { - toJSON() { - return {}; - }, - current - }; - const refs = useReactive ? reactive(obj) : obj; - const metaDeps = /* @__PURE__ */ new Set(); - const usedKeys = /* @__PURE__ */ new Set(); - function setRefs(key, value) { - if (key in refs) { - if (useReactive) - refs[key] = value; - else - refs[key].value = value; - } - } - function reset() { - current.clear(); - for (const key of usedKeys) - setRefs(key, false); - } - function updateRefs(e, value) { - var _a, _b; - const key = (_a = e.key) == null ? void 0 : _a.toLowerCase(); - const code = (_b = e.code) == null ? void 0 : _b.toLowerCase(); - const values = [code, key].filter(Boolean); - if (key) { - if (value) - current.add(key); - else - current.delete(key); - } - for (const key2 of values) { - usedKeys.add(key2); - setRefs(key2, value); - } - if (key === "meta" && !value) { - metaDeps.forEach((key2) => { - current.delete(key2); - setRefs(key2, false); - }); - metaDeps.clear(); - } else if (typeof e.getModifierState === "function" && e.getModifierState("Meta") && value) { - [...current, ...values].forEach((key2) => metaDeps.add(key2)); - } - } - useEventListener(target, "keydown", (e) => { - updateRefs(e, true); - return onEventFired(e); - }, { passive }); - useEventListener(target, "keyup", (e) => { - updateRefs(e, false); - return onEventFired(e); - }, { passive }); - useEventListener("blur", reset, { passive }); - useEventListener("focus", reset, { passive }); - const proxy = new Proxy( - refs, - { - get(target2, prop, rec) { - if (typeof prop !== "string") - return Reflect.get(target2, prop, rec); - prop = prop.toLowerCase(); - if (prop in aliasMap) - prop = aliasMap[prop]; - if (!(prop in refs)) { - if (/[+_-]/.test(prop)) { - const keys2 = prop.split(/[+_-]/g).map((i) => i.trim()); - refs[prop] = computed(() => keys2.map((key) => toValue(proxy[key])).every(Boolean)); - } else { - refs[prop] = shallowRef(false); - } - } - const r = Reflect.get(target2, prop, rec); - return useReactive ? toValue(r) : r; - } - } - ); - return proxy; -} -function usingElRef(source, cb) { - if (toValue(source)) - cb(toValue(source)); -} -function timeRangeToArray(timeRanges) { - let ranges = []; - for (let i = 0; i < timeRanges.length; ++i) - ranges = [...ranges, [timeRanges.start(i), timeRanges.end(i)]]; - return ranges; -} -function tracksToArray(tracks) { - return Array.from(tracks).map(({ label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }, id) => ({ id, label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType })); -} -var defaultOptions = { - src: "", - tracks: [] -}; -function useMediaControls(target, options = {}) { - target = toRef2(target); - options = { - ...defaultOptions, - ...options - }; - const { - document: document2 = defaultDocument - } = options; - const listenerOptions = { passive: true }; - const currentTime = shallowRef(0); - const duration = shallowRef(0); - const seeking = shallowRef(false); - const volume = shallowRef(1); - const waiting = shallowRef(false); - const ended = shallowRef(false); - const playing = shallowRef(false); - const rate = shallowRef(1); - const stalled = shallowRef(false); - const buffered = ref([]); - const tracks = ref([]); - const selectedTrack = shallowRef(-1); - const isPictureInPicture = shallowRef(false); - const muted = shallowRef(false); - const supportsPictureInPicture = document2 && "pictureInPictureEnabled" in document2; - const sourceErrorEvent = createEventHook(); - const playbackErrorEvent = createEventHook(); - const disableTrack = (track) => { - usingElRef(target, (el) => { - if (track) { - const id = typeof track === "number" ? track : track.id; - el.textTracks[id].mode = "disabled"; - } else { - for (let i = 0; i < el.textTracks.length; ++i) - el.textTracks[i].mode = "disabled"; - } - selectedTrack.value = -1; - }); - }; - const enableTrack = (track, disableTracks = true) => { - usingElRef(target, (el) => { - const id = typeof track === "number" ? track : track.id; - if (disableTracks) - disableTrack(); - el.textTracks[id].mode = "showing"; - selectedTrack.value = id; - }); - }; - const togglePictureInPicture = () => { - return new Promise((resolve, reject) => { - usingElRef(target, async (el) => { - if (supportsPictureInPicture) { - if (!isPictureInPicture.value) { - el.requestPictureInPicture().then(resolve).catch(reject); - } else { - document2.exitPictureInPicture().then(resolve).catch(reject); - } - } - }); - }); - }; - watchEffect(() => { - if (!document2) - return; - const el = toValue(target); - if (!el) - return; - const src = toValue(options.src); - let sources = []; - if (!src) - return; - if (typeof src === "string") - sources = [{ src }]; - else if (Array.isArray(src)) - sources = src; - else if (isObject(src)) - sources = [src]; - el.querySelectorAll("source").forEach((e) => { - e.remove(); - }); - sources.forEach(({ src: src2, type, media }) => { - const source = document2.createElement("source"); - source.setAttribute("src", src2); - source.setAttribute("type", type || ""); - source.setAttribute("media", media || ""); - useEventListener(source, "error", sourceErrorEvent.trigger, listenerOptions); - el.appendChild(source); - }); - el.load(); - }); - watch([target, volume], () => { - const el = toValue(target); - if (!el) - return; - el.volume = volume.value; - }); - watch([target, muted], () => { - const el = toValue(target); - if (!el) - return; - el.muted = muted.value; - }); - watch([target, rate], () => { - const el = toValue(target); - if (!el) - return; - el.playbackRate = rate.value; - }); - watchEffect(() => { - if (!document2) - return; - const textTracks = toValue(options.tracks); - const el = toValue(target); - if (!textTracks || !textTracks.length || !el) - return; - el.querySelectorAll("track").forEach((e) => e.remove()); - textTracks.forEach(({ default: isDefault, kind, label, src, srcLang }, i) => { - const track = document2.createElement("track"); - track.default = isDefault || false; - track.kind = kind; - track.label = label; - track.src = src; - track.srclang = srcLang; - if (track.default) - selectedTrack.value = i; - el.appendChild(track); - }); - }); - const { ignoreUpdates: ignoreCurrentTimeUpdates } = watchIgnorable(currentTime, (time) => { - const el = toValue(target); - if (!el) - return; - el.currentTime = time; - }); - const { ignoreUpdates: ignorePlayingUpdates } = watchIgnorable(playing, (isPlaying) => { - const el = toValue(target); - if (!el) - return; - if (isPlaying) { - el.play().catch((e) => { - playbackErrorEvent.trigger(e); - throw e; - }); - } else { - el.pause(); - } - }); - useEventListener( - target, - "timeupdate", - () => ignoreCurrentTimeUpdates(() => currentTime.value = toValue(target).currentTime), - listenerOptions - ); - useEventListener( - target, - "durationchange", - () => duration.value = toValue(target).duration, - listenerOptions - ); - useEventListener( - target, - "progress", - () => buffered.value = timeRangeToArray(toValue(target).buffered), - listenerOptions - ); - useEventListener( - target, - "seeking", - () => seeking.value = true, - listenerOptions - ); - useEventListener( - target, - "seeked", - () => seeking.value = false, - listenerOptions - ); - useEventListener( - target, - ["waiting", "loadstart"], - () => { - waiting.value = true; - ignorePlayingUpdates(() => playing.value = false); - }, - listenerOptions - ); - useEventListener( - target, - "loadeddata", - () => waiting.value = false, - listenerOptions - ); - useEventListener( - target, - "playing", - () => { - waiting.value = false; - ended.value = false; - ignorePlayingUpdates(() => playing.value = true); - }, - listenerOptions - ); - useEventListener( - target, - "ratechange", - () => rate.value = toValue(target).playbackRate, - listenerOptions - ); - useEventListener( - target, - "stalled", - () => stalled.value = true, - listenerOptions - ); - useEventListener( - target, - "ended", - () => ended.value = true, - listenerOptions - ); - useEventListener( - target, - "pause", - () => ignorePlayingUpdates(() => playing.value = false), - listenerOptions - ); - useEventListener( - target, - "play", - () => ignorePlayingUpdates(() => playing.value = true), - listenerOptions - ); - useEventListener( - target, - "enterpictureinpicture", - () => isPictureInPicture.value = true, - listenerOptions - ); - useEventListener( - target, - "leavepictureinpicture", - () => isPictureInPicture.value = false, - listenerOptions - ); - useEventListener( - target, - "volumechange", - () => { - const el = toValue(target); - if (!el) - return; - volume.value = el.volume; - muted.value = el.muted; - }, - listenerOptions - ); - const listeners = []; - const stop = watch([target], () => { - const el = toValue(target); - if (!el) - return; - stop(); - listeners[0] = useEventListener(el.textTracks, "addtrack", () => tracks.value = tracksToArray(el.textTracks), listenerOptions); - listeners[1] = useEventListener(el.textTracks, "removetrack", () => tracks.value = tracksToArray(el.textTracks), listenerOptions); - listeners[2] = useEventListener(el.textTracks, "change", () => tracks.value = tracksToArray(el.textTracks), listenerOptions); - }); - tryOnScopeDispose(() => listeners.forEach((listener) => listener())); - return { - currentTime, - duration, - waiting, - seeking, - ended, - stalled, - buffered, - playing, - rate, - // Volume - volume, - muted, - // Tracks - tracks, - selectedTrack, - enableTrack, - disableTrack, - // Picture in Picture - supportsPictureInPicture, - togglePictureInPicture, - isPictureInPicture, - // Events - onSourceError: sourceErrorEvent.on, - onPlaybackError: playbackErrorEvent.on - }; -} -function useMemoize(resolver, options) { - const initCache = () => { - if (options == null ? void 0 : options.cache) - return shallowReactive(options.cache); - return shallowReactive(/* @__PURE__ */ new Map()); - }; - const cache = initCache(); - const generateKey = (...args) => (options == null ? void 0 : options.getKey) ? options.getKey(...args) : JSON.stringify(args); - const _loadData = (key, ...args) => { - cache.set(key, resolver(...args)); - return cache.get(key); - }; - const loadData = (...args) => _loadData(generateKey(...args), ...args); - const deleteData = (...args) => { - cache.delete(generateKey(...args)); - }; - const clearData = () => { - cache.clear(); - }; - const memoized = (...args) => { - const key = generateKey(...args); - if (cache.has(key)) - return cache.get(key); - return _loadData(key, ...args); - }; - memoized.load = loadData; - memoized.delete = deleteData; - memoized.clear = clearData; - memoized.generateKey = generateKey; - memoized.cache = cache; - return memoized; -} -function useMemory(options = {}) { - const memory = ref(); - const isSupported = useSupported(() => typeof performance !== "undefined" && "memory" in performance); - if (isSupported.value) { - const { interval = 1e3 } = options; - useIntervalFn(() => { - memory.value = performance.memory; - }, interval, { immediate: options.immediate, immediateCallback: options.immediateCallback }); - } - return { isSupported, memory }; -} -var UseMouseBuiltinExtractors = { - page: (event) => [event.pageX, event.pageY], - client: (event) => [event.clientX, event.clientY], - screen: (event) => [event.screenX, event.screenY], - movement: (event) => event instanceof MouseEvent ? [event.movementX, event.movementY] : null -}; -function useMouse(options = {}) { - const { - type = "page", - touch = true, - resetOnTouchEnds = false, - initialValue = { x: 0, y: 0 }, - window: window2 = defaultWindow, - target = window2, - scroll = true, - eventFilter - } = options; - let _prevMouseEvent = null; - let _prevScrollX = 0; - let _prevScrollY = 0; - const x = shallowRef(initialValue.x); - const y = shallowRef(initialValue.y); - const sourceType = shallowRef(null); - const extractor = typeof type === "function" ? type : UseMouseBuiltinExtractors[type]; - const mouseHandler = (event) => { - const result = extractor(event); - _prevMouseEvent = event; - if (result) { - [x.value, y.value] = result; - sourceType.value = "mouse"; - } - if (window2) { - _prevScrollX = window2.scrollX; - _prevScrollY = window2.scrollY; - } - }; - const touchHandler = (event) => { - if (event.touches.length > 0) { - const result = extractor(event.touches[0]); - if (result) { - [x.value, y.value] = result; - sourceType.value = "touch"; - } - } - }; - const scrollHandler = () => { - if (!_prevMouseEvent || !window2) - return; - const pos = extractor(_prevMouseEvent); - if (_prevMouseEvent instanceof MouseEvent && pos) { - x.value = pos[0] + window2.scrollX - _prevScrollX; - y.value = pos[1] + window2.scrollY - _prevScrollY; - } - }; - const reset = () => { - x.value = initialValue.x; - y.value = initialValue.y; - }; - const mouseHandlerWrapper = eventFilter ? (event) => eventFilter(() => mouseHandler(event), {}) : (event) => mouseHandler(event); - const touchHandlerWrapper = eventFilter ? (event) => eventFilter(() => touchHandler(event), {}) : (event) => touchHandler(event); - const scrollHandlerWrapper = eventFilter ? () => eventFilter(() => scrollHandler(), {}) : () => scrollHandler(); - if (target) { - const listenerOptions = { passive: true }; - useEventListener(target, ["mousemove", "dragover"], mouseHandlerWrapper, listenerOptions); - if (touch && type !== "movement") { - useEventListener(target, ["touchstart", "touchmove"], touchHandlerWrapper, listenerOptions); - if (resetOnTouchEnds) - useEventListener(target, "touchend", reset, listenerOptions); - } - if (scroll && type === "page") - useEventListener(window2, "scroll", scrollHandlerWrapper, listenerOptions); - } - return { - x, - y, - sourceType - }; -} -function useMouseInElement(target, options = {}) { - const { - handleOutside = true, - window: window2 = defaultWindow - } = options; - const type = options.type || "page"; - const { x, y, sourceType } = useMouse(options); - const targetRef = shallowRef(target != null ? target : window2 == null ? void 0 : window2.document.body); - const elementX = shallowRef(0); - const elementY = shallowRef(0); - const elementPositionX = shallowRef(0); - const elementPositionY = shallowRef(0); - const elementHeight = shallowRef(0); - const elementWidth = shallowRef(0); - const isOutside = shallowRef(true); - let stop = () => { - }; - if (window2) { - stop = watch( - [targetRef, x, y], - () => { - const el = unrefElement(targetRef); - if (!el || !(el instanceof Element)) - return; - const { - left, - top, - width, - height - } = el.getBoundingClientRect(); - elementPositionX.value = left + (type === "page" ? window2.pageXOffset : 0); - elementPositionY.value = top + (type === "page" ? window2.pageYOffset : 0); - elementHeight.value = height; - elementWidth.value = width; - const elX = x.value - elementPositionX.value; - const elY = y.value - elementPositionY.value; - isOutside.value = width === 0 || height === 0 || elX < 0 || elY < 0 || elX > width || elY > height; - if (handleOutside || !isOutside.value) { - elementX.value = elX; - elementY.value = elY; - } - }, - { immediate: true } - ); - useEventListener( - document, - "mouseleave", - () => isOutside.value = true, - { passive: true } - ); - } - return { - x, - y, - sourceType, - elementX, - elementY, - elementPositionX, - elementPositionY, - elementHeight, - elementWidth, - isOutside, - stop - }; -} -function useMousePressed(options = {}) { - const { - touch = true, - drag = true, - capture = false, - initialValue = false, - window: window2 = defaultWindow - } = options; - const pressed = shallowRef(initialValue); - const sourceType = shallowRef(null); - if (!window2) { - return { - pressed, - sourceType - }; - } - const onPressed = (srcType) => (event) => { - var _a; - pressed.value = true; - sourceType.value = srcType; - (_a = options.onPressed) == null ? void 0 : _a.call(options, event); - }; - const onReleased = (event) => { - var _a; - pressed.value = false; - sourceType.value = null; - (_a = options.onReleased) == null ? void 0 : _a.call(options, event); - }; - const target = computed(() => unrefElement(options.target) || window2); - const listenerOptions = { passive: true, capture }; - useEventListener(target, "mousedown", onPressed("mouse"), listenerOptions); - useEventListener(window2, "mouseleave", onReleased, listenerOptions); - useEventListener(window2, "mouseup", onReleased, listenerOptions); - if (drag) { - useEventListener(target, "dragstart", onPressed("mouse"), listenerOptions); - useEventListener(window2, "drop", onReleased, listenerOptions); - useEventListener(window2, "dragend", onReleased, listenerOptions); - } - if (touch) { - useEventListener(target, "touchstart", onPressed("touch"), listenerOptions); - useEventListener(window2, "touchend", onReleased, listenerOptions); - useEventListener(window2, "touchcancel", onReleased, listenerOptions); - } - return { - pressed, - sourceType - }; -} -function useNavigatorLanguage(options = {}) { - const { window: window2 = defaultWindow } = options; - const navigator2 = window2 == null ? void 0 : window2.navigator; - const isSupported = useSupported(() => navigator2 && "language" in navigator2); - const language = shallowRef(navigator2 == null ? void 0 : navigator2.language); - useEventListener(window2, "languagechange", () => { - if (navigator2) - language.value = navigator2.language; - }, { passive: true }); - return { - isSupported, - language - }; -} -function useNetwork(options = {}) { - const { window: window2 = defaultWindow } = options; - const navigator2 = window2 == null ? void 0 : window2.navigator; - const isSupported = useSupported(() => navigator2 && "connection" in navigator2); - const isOnline = shallowRef(true); - const saveData = shallowRef(false); - const offlineAt = shallowRef(void 0); - const onlineAt = shallowRef(void 0); - const downlink = shallowRef(void 0); - const downlinkMax = shallowRef(void 0); - const rtt = shallowRef(void 0); - const effectiveType = shallowRef(void 0); - const type = shallowRef("unknown"); - const connection = isSupported.value && navigator2.connection; - function updateNetworkInformation() { - if (!navigator2) - return; - isOnline.value = navigator2.onLine; - offlineAt.value = isOnline.value ? void 0 : Date.now(); - onlineAt.value = isOnline.value ? Date.now() : void 0; - if (connection) { - downlink.value = connection.downlink; - downlinkMax.value = connection.downlinkMax; - effectiveType.value = connection.effectiveType; - rtt.value = connection.rtt; - saveData.value = connection.saveData; - type.value = connection.type; - } - } - const listenerOptions = { passive: true }; - if (window2) { - useEventListener(window2, "offline", () => { - isOnline.value = false; - offlineAt.value = Date.now(); - }, listenerOptions); - useEventListener(window2, "online", () => { - isOnline.value = true; - onlineAt.value = Date.now(); - }, listenerOptions); - } - if (connection) - useEventListener(connection, "change", updateNetworkInformation, listenerOptions); - updateNetworkInformation(); - return { - isSupported, - isOnline: readonly(isOnline), - saveData: readonly(saveData), - offlineAt: readonly(offlineAt), - onlineAt: readonly(onlineAt), - downlink: readonly(downlink), - downlinkMax: readonly(downlinkMax), - effectiveType: readonly(effectiveType), - rtt: readonly(rtt), - type: readonly(type) - }; -} -function useNow(options = {}) { - const { - controls: exposeControls = false, - interval = "requestAnimationFrame" - } = options; - const now2 = ref(/* @__PURE__ */ new Date()); - const update = () => now2.value = /* @__PURE__ */ new Date(); - const controls = interval === "requestAnimationFrame" ? useRafFn(update, { immediate: true }) : useIntervalFn(update, interval, { immediate: true }); - if (exposeControls) { - return { - now: now2, - ...controls - }; - } else { - return now2; - } -} -function useObjectUrl(object) { - const url = shallowRef(); - const release = () => { - if (url.value) - URL.revokeObjectURL(url.value); - url.value = void 0; - }; - watch( - () => toValue(object), - (newObject) => { - release(); - if (newObject) - url.value = URL.createObjectURL(newObject); - }, - { immediate: true } - ); - tryOnScopeDispose(release); - return readonly(url); -} -function useClamp(value, min, max) { - if (typeof value === "function" || isReadonly(value)) - return computed(() => clamp(toValue(value), toValue(min), toValue(max))); - const _value = ref(value); - return computed({ - get() { - return _value.value = clamp(_value.value, toValue(min), toValue(max)); - }, - set(value2) { - _value.value = clamp(value2, toValue(min), toValue(max)); - } - }); -} -function useOffsetPagination(options) { - const { - total = Number.POSITIVE_INFINITY, - pageSize = 10, - page = 1, - onPageChange = noop, - onPageSizeChange = noop, - onPageCountChange = noop - } = options; - const currentPageSize = useClamp(pageSize, 1, Number.POSITIVE_INFINITY); - const pageCount = computed(() => Math.max( - 1, - Math.ceil(toValue(total) / toValue(currentPageSize)) - )); - const currentPage = useClamp(page, 1, pageCount); - const isFirstPage = computed(() => currentPage.value === 1); - const isLastPage = computed(() => currentPage.value === pageCount.value); - if (isRef(page)) { - syncRef(page, currentPage, { - direction: isReadonly(page) ? "ltr" : "both" - }); - } - if (isRef(pageSize)) { - syncRef(pageSize, currentPageSize, { - direction: isReadonly(pageSize) ? "ltr" : "both" - }); - } - function prev() { - currentPage.value--; - } - function next() { - currentPage.value++; - } - const returnValue = { - currentPage, - currentPageSize, - pageCount, - isFirstPage, - isLastPage, - prev, - next - }; - watch(currentPage, () => { - onPageChange(reactive(returnValue)); - }); - watch(currentPageSize, () => { - onPageSizeChange(reactive(returnValue)); - }); - watch(pageCount, () => { - onPageCountChange(reactive(returnValue)); - }); - return returnValue; -} -function useOnline(options = {}) { - const { isOnline } = useNetwork(options); - return isOnline; -} -function usePageLeave(options = {}) { - const { window: window2 = defaultWindow } = options; - const isLeft = shallowRef(false); - const handler = (event) => { - if (!window2) - return; - event = event || window2.event; - const from = event.relatedTarget || event.toElement; - isLeft.value = !from; - }; - if (window2) { - const listenerOptions = { passive: true }; - useEventListener(window2, "mouseout", handler, listenerOptions); - useEventListener(window2.document, "mouseleave", handler, listenerOptions); - useEventListener(window2.document, "mouseenter", handler, listenerOptions); - } - return isLeft; -} -function useScreenOrientation(options = {}) { - const { - window: window2 = defaultWindow - } = options; - const isSupported = useSupported(() => window2 && "screen" in window2 && "orientation" in window2.screen); - const screenOrientation = isSupported.value ? window2.screen.orientation : {}; - const orientation = ref(screenOrientation.type); - const angle = shallowRef(screenOrientation.angle || 0); - if (isSupported.value) { - useEventListener(window2, "orientationchange", () => { - orientation.value = screenOrientation.type; - angle.value = screenOrientation.angle; - }, { passive: true }); - } - const lockOrientation = (type) => { - if (isSupported.value && typeof screenOrientation.lock === "function") - return screenOrientation.lock(type); - return Promise.reject(new Error("Not supported")); - }; - const unlockOrientation = () => { - if (isSupported.value && typeof screenOrientation.unlock === "function") - screenOrientation.unlock(); - }; - return { - isSupported, - orientation, - angle, - lockOrientation, - unlockOrientation - }; -} -function useParallax(target, options = {}) { - const { - deviceOrientationTiltAdjust = (i) => i, - deviceOrientationRollAdjust = (i) => i, - mouseTiltAdjust = (i) => i, - mouseRollAdjust = (i) => i, - window: window2 = defaultWindow - } = options; - const orientation = reactive(useDeviceOrientation({ window: window2 })); - const screenOrientation = reactive(useScreenOrientation({ window: window2 })); - const { - elementX: x, - elementY: y, - elementWidth: width, - elementHeight: height - } = useMouseInElement(target, { handleOutside: false, window: window2 }); - const source = computed(() => { - if (orientation.isSupported && (orientation.alpha != null && orientation.alpha !== 0 || orientation.gamma != null && orientation.gamma !== 0)) { - return "deviceOrientation"; - } - return "mouse"; - }); - const roll = computed(() => { - if (source.value === "deviceOrientation") { - let value; - switch (screenOrientation.orientation) { - case "landscape-primary": - value = orientation.gamma / 90; - break; - case "landscape-secondary": - value = -orientation.gamma / 90; - break; - case "portrait-primary": - value = -orientation.beta / 90; - break; - case "portrait-secondary": - value = orientation.beta / 90; - break; - default: - value = -orientation.beta / 90; - } - return deviceOrientationRollAdjust(value); - } else { - const value = -(y.value - height.value / 2) / height.value; - return mouseRollAdjust(value); - } - }); - const tilt = computed(() => { - if (source.value === "deviceOrientation") { - let value; - switch (screenOrientation.orientation) { - case "landscape-primary": - value = orientation.beta / 90; - break; - case "landscape-secondary": - value = -orientation.beta / 90; - break; - case "portrait-primary": - value = orientation.gamma / 90; - break; - case "portrait-secondary": - value = -orientation.gamma / 90; - break; - default: - value = orientation.gamma / 90; - } - return deviceOrientationTiltAdjust(value); - } else { - const value = (x.value - width.value / 2) / width.value; - return mouseTiltAdjust(value); - } - }); - return { roll, tilt, source }; -} -function useParentElement(element = useCurrentElement()) { - const parentElement = shallowRef(); - const update = () => { - const el = unrefElement(element); - if (el) - parentElement.value = el.parentElement; - }; - tryOnMounted(update); - watch(() => toValue(element), update); - return parentElement; -} -function usePerformanceObserver(options, callback) { - const { - window: window2 = defaultWindow, - immediate = true, - ...performanceOptions - } = options; - const isSupported = useSupported(() => window2 && "PerformanceObserver" in window2); - let observer; - const stop = () => { - observer == null ? void 0 : observer.disconnect(); - }; - const start = () => { - if (isSupported.value) { - stop(); - observer = new PerformanceObserver(callback); - observer.observe(performanceOptions); - } - }; - tryOnScopeDispose(stop); - if (immediate) - start(); - return { - isSupported, - start, - stop - }; -} -var defaultState = { - x: 0, - y: 0, - pointerId: 0, - pressure: 0, - tiltX: 0, - tiltY: 0, - width: 0, - height: 0, - twist: 0, - pointerType: null -}; -var keys = Object.keys(defaultState); -function usePointer(options = {}) { - const { - target = defaultWindow - } = options; - const isInside = shallowRef(false); - const state = ref(options.initialValue || {}); - Object.assign(state.value, defaultState, state.value); - const handler = (event) => { - isInside.value = true; - if (options.pointerTypes && !options.pointerTypes.includes(event.pointerType)) - return; - state.value = objectPick(event, keys, false); - }; - if (target) { - const listenerOptions = { passive: true }; - useEventListener(target, ["pointerdown", "pointermove", "pointerup"], handler, listenerOptions); - useEventListener(target, "pointerleave", () => isInside.value = false, listenerOptions); - } - return { - ...toRefs2(state), - isInside - }; -} -function usePointerLock(target, options = {}) { - const { document: document2 = defaultDocument } = options; - const isSupported = useSupported(() => document2 && "pointerLockElement" in document2); - const element = shallowRef(); - const triggerElement = shallowRef(); - let targetElement; - if (isSupported.value) { - const listenerOptions = { passive: true }; - useEventListener(document2, "pointerlockchange", () => { - var _a; - const currentElement = (_a = document2.pointerLockElement) != null ? _a : element.value; - if (targetElement && currentElement === targetElement) { - element.value = document2.pointerLockElement; - if (!element.value) - targetElement = triggerElement.value = null; - } - }, listenerOptions); - useEventListener(document2, "pointerlockerror", () => { - var _a; - const currentElement = (_a = document2.pointerLockElement) != null ? _a : element.value; - if (targetElement && currentElement === targetElement) { - const action = document2.pointerLockElement ? "release" : "acquire"; - throw new Error(`Failed to ${action} pointer lock.`); - } - }, listenerOptions); - } - async function lock(e) { - var _a; - if (!isSupported.value) - throw new Error("Pointer Lock API is not supported by your browser."); - triggerElement.value = e instanceof Event ? e.currentTarget : null; - targetElement = e instanceof Event ? (_a = unrefElement(target)) != null ? _a : triggerElement.value : unrefElement(e); - if (!targetElement) - throw new Error("Target element undefined."); - targetElement.requestPointerLock(); - return await until(element).toBe(targetElement); - } - async function unlock() { - if (!element.value) - return false; - document2.exitPointerLock(); - await until(element).toBeNull(); - return true; - } - return { - isSupported, - element, - triggerElement, - lock, - unlock - }; -} -function usePointerSwipe(target, options = {}) { - const targetRef = toRef2(target); - const { - threshold = 50, - onSwipe, - onSwipeEnd, - onSwipeStart, - disableTextSelect = false - } = options; - const posStart = reactive({ x: 0, y: 0 }); - const updatePosStart = (x, y) => { - posStart.x = x; - posStart.y = y; - }; - const posEnd = reactive({ x: 0, y: 0 }); - const updatePosEnd = (x, y) => { - posEnd.x = x; - posEnd.y = y; - }; - const distanceX = computed(() => posStart.x - posEnd.x); - const distanceY = computed(() => posStart.y - posEnd.y); - const { max, abs } = Math; - const isThresholdExceeded = computed(() => max(abs(distanceX.value), abs(distanceY.value)) >= threshold); - const isSwiping = shallowRef(false); - const isPointerDown = shallowRef(false); - const direction = computed(() => { - if (!isThresholdExceeded.value) - return "none"; - if (abs(distanceX.value) > abs(distanceY.value)) { - return distanceX.value > 0 ? "left" : "right"; - } else { - return distanceY.value > 0 ? "up" : "down"; - } - }); - const eventIsAllowed = (e) => { - var _a, _b, _c; - const isReleasingButton = e.buttons === 0; - const isPrimaryButton = e.buttons === 1; - return (_c = (_b = (_a = options.pointerTypes) == null ? void 0 : _a.includes(e.pointerType)) != null ? _b : isReleasingButton || isPrimaryButton) != null ? _c : true; - }; - const listenerOptions = { passive: true }; - const stops = [ - useEventListener(target, "pointerdown", (e) => { - if (!eventIsAllowed(e)) - return; - isPointerDown.value = true; - const eventTarget = e.target; - eventTarget == null ? void 0 : eventTarget.setPointerCapture(e.pointerId); - const { clientX: x, clientY: y } = e; - updatePosStart(x, y); - updatePosEnd(x, y); - onSwipeStart == null ? void 0 : onSwipeStart(e); - }, listenerOptions), - useEventListener(target, "pointermove", (e) => { - if (!eventIsAllowed(e)) - return; - if (!isPointerDown.value) - return; - const { clientX: x, clientY: y } = e; - updatePosEnd(x, y); - if (!isSwiping.value && isThresholdExceeded.value) - isSwiping.value = true; - if (isSwiping.value) - onSwipe == null ? void 0 : onSwipe(e); - }, listenerOptions), - useEventListener(target, "pointerup", (e) => { - if (!eventIsAllowed(e)) - return; - if (isSwiping.value) - onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value); - isPointerDown.value = false; - isSwiping.value = false; - }, listenerOptions) - ]; - tryOnMounted(() => { - var _a, _b, _c, _d, _e, _f, _g, _h; - (_b = (_a = targetRef.value) == null ? void 0 : _a.style) == null ? void 0 : _b.setProperty("touch-action", "none"); - if (disableTextSelect) { - (_d = (_c = targetRef.value) == null ? void 0 : _c.style) == null ? void 0 : _d.setProperty("-webkit-user-select", "none"); - (_f = (_e = targetRef.value) == null ? void 0 : _e.style) == null ? void 0 : _f.setProperty("-ms-user-select", "none"); - (_h = (_g = targetRef.value) == null ? void 0 : _g.style) == null ? void 0 : _h.setProperty("user-select", "none"); - } - }); - const stop = () => stops.forEach((s) => s()); - return { - isSwiping: readonly(isSwiping), - direction: readonly(direction), - posStart: readonly(posStart), - posEnd: readonly(posEnd), - distanceX, - distanceY, - stop - }; -} -function usePreferredColorScheme(options) { - const isLight = useMediaQuery("(prefers-color-scheme: light)", options); - const isDark = useMediaQuery("(prefers-color-scheme: dark)", options); - return computed(() => { - if (isDark.value) - return "dark"; - if (isLight.value) - return "light"; - return "no-preference"; - }); -} -function usePreferredContrast(options) { - const isMore = useMediaQuery("(prefers-contrast: more)", options); - const isLess = useMediaQuery("(prefers-contrast: less)", options); - const isCustom = useMediaQuery("(prefers-contrast: custom)", options); - return computed(() => { - if (isMore.value) - return "more"; - if (isLess.value) - return "less"; - if (isCustom.value) - return "custom"; - return "no-preference"; - }); -} -function usePreferredLanguages(options = {}) { - const { window: window2 = defaultWindow } = options; - if (!window2) - return ref(["en"]); - const navigator2 = window2.navigator; - const value = ref(navigator2.languages); - useEventListener(window2, "languagechange", () => { - value.value = navigator2.languages; - }, { passive: true }); - return value; -} -function usePreferredReducedMotion(options) { - const isReduced = useMediaQuery("(prefers-reduced-motion: reduce)", options); - return computed(() => { - if (isReduced.value) - return "reduce"; - return "no-preference"; - }); -} -function usePreferredReducedTransparency(options) { - const isReduced = useMediaQuery("(prefers-reduced-transparency: reduce)", options); - return computed(() => { - if (isReduced.value) - return "reduce"; - return "no-preference"; - }); -} -function usePrevious(value, initialValue) { - const previous = shallowRef(initialValue); - watch( - toRef2(value), - (_, oldValue) => { - previous.value = oldValue; - }, - { flush: "sync" } - ); - return readonly(previous); -} -var topVarName = "--vueuse-safe-area-top"; -var rightVarName = "--vueuse-safe-area-right"; -var bottomVarName = "--vueuse-safe-area-bottom"; -var leftVarName = "--vueuse-safe-area-left"; -function useScreenSafeArea() { - const top = shallowRef(""); - const right = shallowRef(""); - const bottom = shallowRef(""); - const left = shallowRef(""); - if (isClient) { - const topCssVar = useCssVar(topVarName); - const rightCssVar = useCssVar(rightVarName); - const bottomCssVar = useCssVar(bottomVarName); - const leftCssVar = useCssVar(leftVarName); - topCssVar.value = "env(safe-area-inset-top, 0px)"; - rightCssVar.value = "env(safe-area-inset-right, 0px)"; - bottomCssVar.value = "env(safe-area-inset-bottom, 0px)"; - leftCssVar.value = "env(safe-area-inset-left, 0px)"; - update(); - useEventListener("resize", useDebounceFn(update), { passive: true }); - } - function update() { - top.value = getValue(topVarName); - right.value = getValue(rightVarName); - bottom.value = getValue(bottomVarName); - left.value = getValue(leftVarName); - } - return { - top, - right, - bottom, - left, - update - }; -} -function getValue(position) { - return getComputedStyle(document.documentElement).getPropertyValue(position); -} -function useScriptTag(src, onLoaded = noop, options = {}) { - const { - immediate = true, - manual = false, - type = "text/javascript", - async = true, - crossOrigin, - referrerPolicy, - noModule, - defer, - document: document2 = defaultDocument, - attrs = {} - } = options; - const scriptTag = shallowRef(null); - let _promise = null; - const loadScript = (waitForScriptLoad) => new Promise((resolve, reject) => { - const resolveWithElement = (el2) => { - scriptTag.value = el2; - resolve(el2); - return el2; - }; - if (!document2) { - resolve(false); - return; - } - let shouldAppend = false; - let el = document2.querySelector(`script[src="${toValue(src)}"]`); - if (!el) { - el = document2.createElement("script"); - el.type = type; - el.async = async; - el.src = toValue(src); - if (defer) - el.defer = defer; - if (crossOrigin) - el.crossOrigin = crossOrigin; - if (noModule) - el.noModule = noModule; - if (referrerPolicy) - el.referrerPolicy = referrerPolicy; - Object.entries(attrs).forEach(([name, value]) => el == null ? void 0 : el.setAttribute(name, value)); - shouldAppend = true; - } else if (el.hasAttribute("data-loaded")) { - resolveWithElement(el); - } - const listenerOptions = { - passive: true - }; - useEventListener(el, "error", (event) => reject(event), listenerOptions); - useEventListener(el, "abort", (event) => reject(event), listenerOptions); - useEventListener(el, "load", () => { - el.setAttribute("data-loaded", "true"); - onLoaded(el); - resolveWithElement(el); - }, listenerOptions); - if (shouldAppend) - el = document2.head.appendChild(el); - if (!waitForScriptLoad) - resolveWithElement(el); - }); - const load = (waitForScriptLoad = true) => { - if (!_promise) - _promise = loadScript(waitForScriptLoad); - return _promise; - }; - const unload = () => { - if (!document2) - return; - _promise = null; - if (scriptTag.value) - scriptTag.value = null; - const el = document2.querySelector(`script[src="${toValue(src)}"]`); - if (el) - document2.head.removeChild(el); - }; - if (immediate && !manual) - tryOnMounted(load); - if (!manual) - tryOnUnmounted(unload); - return { scriptTag, load, unload }; -} -function checkOverflowScroll(ele) { - const style = window.getComputedStyle(ele); - if (style.overflowX === "scroll" || style.overflowY === "scroll" || style.overflowX === "auto" && ele.clientWidth < ele.scrollWidth || style.overflowY === "auto" && ele.clientHeight < ele.scrollHeight) { - return true; - } else { - const parent = ele.parentNode; - if (!parent || parent.tagName === "BODY") - return false; - return checkOverflowScroll(parent); - } -} -function preventDefault(rawEvent) { - const e = rawEvent || window.event; - const _target = e.target; - if (checkOverflowScroll(_target)) - return false; - if (e.touches.length > 1) - return true; - if (e.preventDefault) - e.preventDefault(); - return false; -} -var elInitialOverflow = /* @__PURE__ */ new WeakMap(); -function useScrollLock(element, initialState = false) { - const isLocked = shallowRef(initialState); - let stopTouchMoveListener = null; - let initialOverflow = ""; - watch(toRef2(element), (el) => { - const target = resolveElement(toValue(el)); - if (target) { - const ele = target; - if (!elInitialOverflow.get(ele)) - elInitialOverflow.set(ele, ele.style.overflow); - if (ele.style.overflow !== "hidden") - initialOverflow = ele.style.overflow; - if (ele.style.overflow === "hidden") - return isLocked.value = true; - if (isLocked.value) - return ele.style.overflow = "hidden"; - } - }, { - immediate: true - }); - const lock = () => { - const el = resolveElement(toValue(element)); - if (!el || isLocked.value) - return; - if (isIOS) { - stopTouchMoveListener = useEventListener( - el, - "touchmove", - (e) => { - preventDefault(e); - }, - { passive: false } - ); - } - el.style.overflow = "hidden"; - isLocked.value = true; - }; - const unlock = () => { - const el = resolveElement(toValue(element)); - if (!el || !isLocked.value) - return; - if (isIOS) - stopTouchMoveListener == null ? void 0 : stopTouchMoveListener(); - el.style.overflow = initialOverflow; - elInitialOverflow.delete(el); - isLocked.value = false; - }; - tryOnScopeDispose(unlock); - return computed({ - get() { - return isLocked.value; - }, - set(v) { - if (v) - lock(); - else unlock(); - } - }); -} -function useSessionStorage(key, initialValue, options = {}) { - const { window: window2 = defaultWindow } = options; - return useStorage(key, initialValue, window2 == null ? void 0 : window2.sessionStorage, options); -} -function useShare(shareOptions = {}, options = {}) { - const { navigator: navigator2 = defaultNavigator } = options; - const _navigator = navigator2; - const isSupported = useSupported(() => _navigator && "canShare" in _navigator); - const share = async (overrideOptions = {}) => { - if (isSupported.value) { - const data = { - ...toValue(shareOptions), - ...toValue(overrideOptions) - }; - let granted = true; - if (data.files && _navigator.canShare) - granted = _navigator.canShare({ files: data.files }); - if (granted) - return _navigator.share(data); - } - }; - return { - isSupported, - share - }; -} -var defaultSortFn = (source, compareFn) => source.sort(compareFn); -var defaultCompare = (a, b) => a - b; -function useSorted(...args) { - var _a, _b, _c, _d; - const [source] = args; - let compareFn = defaultCompare; - let options = {}; - if (args.length === 2) { - if (typeof args[1] === "object") { - options = args[1]; - compareFn = (_a = options.compareFn) != null ? _a : defaultCompare; - } else { - compareFn = (_b = args[1]) != null ? _b : defaultCompare; - } - } else if (args.length > 2) { - compareFn = (_c = args[1]) != null ? _c : defaultCompare; - options = (_d = args[2]) != null ? _d : {}; - } - const { - dirty = false, - sortFn = defaultSortFn - } = options; - if (!dirty) - return computed(() => sortFn([...toValue(source)], compareFn)); - watchEffect(() => { - const result = sortFn(toValue(source), compareFn); - if (isRef(source)) - source.value = result; - else - source.splice(0, source.length, ...result); - }); - return source; -} -function useSpeechRecognition(options = {}) { - const { - interimResults = true, - continuous = true, - maxAlternatives = 1, - window: window2 = defaultWindow - } = options; - const lang = toRef2(options.lang || "en-US"); - const isListening = shallowRef(false); - const isFinal = shallowRef(false); - const result = shallowRef(""); - const error = shallowRef(void 0); - let recognition; - const start = () => { - isListening.value = true; - }; - const stop = () => { - isListening.value = false; - }; - const toggle = (value = !isListening.value) => { - if (value) { - start(); - } else { - stop(); - } - }; - const SpeechRecognition = window2 && (window2.SpeechRecognition || window2.webkitSpeechRecognition); - const isSupported = useSupported(() => SpeechRecognition); - if (isSupported.value) { - recognition = new SpeechRecognition(); - recognition.continuous = continuous; - recognition.interimResults = interimResults; - recognition.lang = toValue(lang); - recognition.maxAlternatives = maxAlternatives; - recognition.onstart = () => { - isListening.value = true; - isFinal.value = false; - }; - watch(lang, (lang2) => { - if (recognition && !isListening.value) - recognition.lang = lang2; - }); - recognition.onresult = (event) => { - const currentResult = event.results[event.resultIndex]; - const { transcript } = currentResult[0]; - isFinal.value = currentResult.isFinal; - result.value = transcript; - error.value = void 0; - }; - recognition.onerror = (event) => { - error.value = event; - }; - recognition.onend = () => { - isListening.value = false; - recognition.lang = toValue(lang); - }; - watch(isListening, (newValue, oldValue) => { - if (newValue === oldValue) - return; - if (newValue) - recognition.start(); - else - recognition.stop(); - }); - } - tryOnScopeDispose(() => { - stop(); - }); - return { - isSupported, - isListening, - isFinal, - recognition, - result, - error, - toggle, - start, - stop - }; -} -function useSpeechSynthesis(text, options = {}) { - const { - pitch = 1, - rate = 1, - volume = 1, - window: window2 = defaultWindow - } = options; - const synth = window2 && window2.speechSynthesis; - const isSupported = useSupported(() => synth); - const isPlaying = shallowRef(false); - const status = shallowRef("init"); - const spokenText = toRef2(text || ""); - const lang = toRef2(options.lang || "en-US"); - const error = shallowRef(void 0); - const toggle = (value = !isPlaying.value) => { - isPlaying.value = value; - }; - const bindEventsForUtterance = (utterance2) => { - utterance2.lang = toValue(lang); - utterance2.voice = toValue(options.voice) || null; - utterance2.pitch = toValue(pitch); - utterance2.rate = toValue(rate); - utterance2.volume = volume; - utterance2.onstart = () => { - isPlaying.value = true; - status.value = "play"; - }; - utterance2.onpause = () => { - isPlaying.value = false; - status.value = "pause"; - }; - utterance2.onresume = () => { - isPlaying.value = true; - status.value = "play"; - }; - utterance2.onend = () => { - isPlaying.value = false; - status.value = "end"; - }; - utterance2.onerror = (event) => { - error.value = event; - }; - }; - const utterance = computed(() => { - isPlaying.value = false; - status.value = "init"; - const newUtterance = new SpeechSynthesisUtterance(spokenText.value); - bindEventsForUtterance(newUtterance); - return newUtterance; - }); - const speak = () => { - synth.cancel(); - if (utterance) - synth.speak(utterance.value); - }; - const stop = () => { - synth.cancel(); - isPlaying.value = false; - }; - if (isSupported.value) { - bindEventsForUtterance(utterance.value); - watch(lang, (lang2) => { - if (utterance.value && !isPlaying.value) - utterance.value.lang = lang2; - }); - if (options.voice) { - watch(options.voice, () => { - synth.cancel(); - }); - } - watch(isPlaying, () => { - if (isPlaying.value) - synth.resume(); - else - synth.pause(); - }); - } - tryOnScopeDispose(() => { - isPlaying.value = false; - }); - return { - isSupported, - isPlaying, - status, - utterance, - error, - stop, - toggle, - speak - }; -} -function useStepper(steps, initialStep) { - const stepsRef = ref(steps); - const stepNames = computed(() => Array.isArray(stepsRef.value) ? stepsRef.value : Object.keys(stepsRef.value)); - const index = ref(stepNames.value.indexOf(initialStep != null ? initialStep : stepNames.value[0])); - const current = computed(() => at(index.value)); - const isFirst = computed(() => index.value === 0); - const isLast = computed(() => index.value === stepNames.value.length - 1); - const next = computed(() => stepNames.value[index.value + 1]); - const previous = computed(() => stepNames.value[index.value - 1]); - function at(index2) { - if (Array.isArray(stepsRef.value)) - return stepsRef.value[index2]; - return stepsRef.value[stepNames.value[index2]]; - } - function get2(step) { - if (!stepNames.value.includes(step)) - return; - return at(stepNames.value.indexOf(step)); - } - function goTo(step) { - if (stepNames.value.includes(step)) - index.value = stepNames.value.indexOf(step); - } - function goToNext() { - if (isLast.value) - return; - index.value++; - } - function goToPrevious() { - if (isFirst.value) - return; - index.value--; - } - function goBackTo(step) { - if (isAfter(step)) - goTo(step); - } - function isNext(step) { - return stepNames.value.indexOf(step) === index.value + 1; - } - function isPrevious(step) { - return stepNames.value.indexOf(step) === index.value - 1; - } - function isCurrent(step) { - return stepNames.value.indexOf(step) === index.value; - } - function isBefore(step) { - return index.value < stepNames.value.indexOf(step); - } - function isAfter(step) { - return index.value > stepNames.value.indexOf(step); - } - return { - steps: stepsRef, - stepNames, - index, - current, - next, - previous, - isFirst, - isLast, - at, - get: get2, - goTo, - goToNext, - goToPrevious, - goBackTo, - isNext, - isPrevious, - isCurrent, - isBefore, - isAfter - }; -} -function useStorageAsync(key, initialValue, storage, options = {}) { - var _a; - const { - flush = "pre", - deep = true, - listenToStorageChanges = true, - writeDefaults = true, - mergeDefaults = false, - shallow, - window: window2 = defaultWindow, - eventFilter, - onError = (e) => { - console.error(e); - } - } = options; - const rawInit = toValue(initialValue); - const type = guessSerializerType(rawInit); - const data = (shallow ? shallowRef : ref)(toValue(initialValue)); - const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type]; - if (!storage) { - try { - storage = getSSRHandler("getDefaultStorageAsync", () => { - var _a2; - return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage; - })(); - } catch (e) { - onError(e); - } - } - async function read(event) { - if (!storage || event && event.key !== key) - return; - try { - const rawValue = event ? event.newValue : await storage.getItem(key); - if (rawValue == null) { - data.value = rawInit; - if (writeDefaults && rawInit !== null) - await storage.setItem(key, await serializer.write(rawInit)); - } else if (mergeDefaults) { - const value = await serializer.read(rawValue); - if (typeof mergeDefaults === "function") - data.value = mergeDefaults(value, rawInit); - else if (type === "object" && !Array.isArray(value)) - data.value = { ...rawInit, ...value }; - else data.value = value; - } else { - data.value = await serializer.read(rawValue); - } - } catch (e) { - onError(e); - } - } - read(); - if (window2 && listenToStorageChanges) - useEventListener(window2, "storage", (e) => Promise.resolve().then(() => read(e)), { passive: true }); - if (storage) { - watchWithFilter( - data, - async () => { - try { - if (data.value == null) - await storage.removeItem(key); - else - await storage.setItem(key, await serializer.write(data.value)); - } catch (e) { - onError(e); - } - }, - { - flush, - deep, - eventFilter - } - ); - } - return data; -} -var _id = 0; -function useStyleTag(css, options = {}) { - const isLoaded = shallowRef(false); - const { - document: document2 = defaultDocument, - immediate = true, - manual = false, - id = `vueuse_styletag_${++_id}` - } = options; - const cssRef = shallowRef(css); - let stop = () => { - }; - const load = () => { - if (!document2) - return; - const el = document2.getElementById(id) || document2.createElement("style"); - if (!el.isConnected) { - el.id = id; - if (options.media) - el.media = options.media; - document2.head.appendChild(el); - } - if (isLoaded.value) - return; - stop = watch( - cssRef, - (value) => { - el.textContent = value; - }, - { immediate: true } - ); - isLoaded.value = true; - }; - const unload = () => { - if (!document2 || !isLoaded.value) - return; - stop(); - document2.head.removeChild(document2.getElementById(id)); - isLoaded.value = false; - }; - if (immediate && !manual) - tryOnMounted(load); - if (!manual) - tryOnScopeDispose(unload); - return { - id, - css: cssRef, - unload, - load, - isLoaded: readonly(isLoaded) - }; -} -function useSwipe(target, options = {}) { - const { - threshold = 50, - onSwipe, - onSwipeEnd, - onSwipeStart, - passive = true - } = options; - const coordsStart = reactive({ x: 0, y: 0 }); - const coordsEnd = reactive({ x: 0, y: 0 }); - const diffX = computed(() => coordsStart.x - coordsEnd.x); - const diffY = computed(() => coordsStart.y - coordsEnd.y); - const { max, abs } = Math; - const isThresholdExceeded = computed(() => max(abs(diffX.value), abs(diffY.value)) >= threshold); - const isSwiping = shallowRef(false); - const direction = computed(() => { - if (!isThresholdExceeded.value) - return "none"; - if (abs(diffX.value) > abs(diffY.value)) { - return diffX.value > 0 ? "left" : "right"; - } else { - return diffY.value > 0 ? "up" : "down"; - } - }); - const getTouchEventCoords = (e) => [e.touches[0].clientX, e.touches[0].clientY]; - const updateCoordsStart = (x, y) => { - coordsStart.x = x; - coordsStart.y = y; - }; - const updateCoordsEnd = (x, y) => { - coordsEnd.x = x; - coordsEnd.y = y; - }; - const listenerOptions = { passive, capture: !passive }; - const onTouchEnd = (e) => { - if (isSwiping.value) - onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value); - isSwiping.value = false; - }; - const stops = [ - useEventListener(target, "touchstart", (e) => { - if (e.touches.length !== 1) - return; - const [x, y] = getTouchEventCoords(e); - updateCoordsStart(x, y); - updateCoordsEnd(x, y); - onSwipeStart == null ? void 0 : onSwipeStart(e); - }, listenerOptions), - useEventListener(target, "touchmove", (e) => { - if (e.touches.length !== 1) - return; - const [x, y] = getTouchEventCoords(e); - updateCoordsEnd(x, y); - if (listenerOptions.capture && !listenerOptions.passive && Math.abs(diffX.value) > Math.abs(diffY.value)) - e.preventDefault(); - if (!isSwiping.value && isThresholdExceeded.value) - isSwiping.value = true; - if (isSwiping.value) - onSwipe == null ? void 0 : onSwipe(e); - }, listenerOptions), - useEventListener(target, ["touchend", "touchcancel"], onTouchEnd, listenerOptions) - ]; - const stop = () => stops.forEach((s) => s()); - return { - isSwiping, - direction, - coordsStart, - coordsEnd, - lengthX: diffX, - lengthY: diffY, - stop, - // TODO: Remove in the next major version - isPassiveEventSupported: true - }; -} -function useTemplateRefsList() { - const refs = ref([]); - refs.value.set = (el) => { - if (el) - refs.value.push(el); - }; - onBeforeUpdate(() => { - refs.value.length = 0; - }); - return refs; -} -function useTextDirection(options = {}) { - const { - document: document2 = defaultDocument, - selector = "html", - observe = false, - initialValue = "ltr" - } = options; - function getValue2() { - var _a, _b; - return (_b = (_a = document2 == null ? void 0 : document2.querySelector(selector)) == null ? void 0 : _a.getAttribute("dir")) != null ? _b : initialValue; - } - const dir = ref(getValue2()); - tryOnMounted(() => dir.value = getValue2()); - if (observe && document2) { - useMutationObserver( - document2.querySelector(selector), - () => dir.value = getValue2(), - { attributes: true } - ); - } - return computed({ - get() { - return dir.value; - }, - set(v) { - var _a, _b; - dir.value = v; - if (!document2) - return; - if (dir.value) - (_a = document2.querySelector(selector)) == null ? void 0 : _a.setAttribute("dir", dir.value); - else - (_b = document2.querySelector(selector)) == null ? void 0 : _b.removeAttribute("dir"); - } - }); -} -function getRangesFromSelection(selection) { - var _a; - const rangeCount = (_a = selection.rangeCount) != null ? _a : 0; - return Array.from({ length: rangeCount }, (_, i) => selection.getRangeAt(i)); -} -function useTextSelection(options = {}) { - const { - window: window2 = defaultWindow - } = options; - const selection = ref(null); - const text = computed(() => { - var _a, _b; - return (_b = (_a = selection.value) == null ? void 0 : _a.toString()) != null ? _b : ""; - }); - const ranges = computed(() => selection.value ? getRangesFromSelection(selection.value) : []); - const rects = computed(() => ranges.value.map((range) => range.getBoundingClientRect())); - function onSelectionChange() { - selection.value = null; - if (window2) - selection.value = window2.getSelection(); - } - if (window2) - useEventListener(window2.document, "selectionchange", onSelectionChange, { passive: true }); - return { - text, - rects, - ranges, - selection - }; -} -function tryRequestAnimationFrame(window2 = defaultWindow, fn) { - if (window2 && typeof window2.requestAnimationFrame === "function") { - window2.requestAnimationFrame(fn); - } else { - fn(); - } -} -function useTextareaAutosize(options = {}) { - var _a, _b; - const { window: window2 = defaultWindow } = options; - const textarea = toRef2(options == null ? void 0 : options.element); - const input = toRef2((_a = options == null ? void 0 : options.input) != null ? _a : ""); - const styleProp = (_b = options == null ? void 0 : options.styleProp) != null ? _b : "height"; - const textareaScrollHeight = shallowRef(1); - const textareaOldWidth = shallowRef(0); - function triggerResize() { - var _a2; - if (!textarea.value) - return; - let height = ""; - textarea.value.style[styleProp] = "1px"; - textareaScrollHeight.value = (_a2 = textarea.value) == null ? void 0 : _a2.scrollHeight; - const _styleTarget = toValue(options == null ? void 0 : options.styleTarget); - if (_styleTarget) - _styleTarget.style[styleProp] = `${textareaScrollHeight.value}px`; - else - height = `${textareaScrollHeight.value}px`; - textarea.value.style[styleProp] = height; - } - watch([input, textarea], () => nextTick(triggerResize), { immediate: true }); - watch(textareaScrollHeight, () => { - var _a2; - return (_a2 = options == null ? void 0 : options.onResize) == null ? void 0 : _a2.call(options); - }); - useResizeObserver(textarea, ([{ contentRect }]) => { - if (textareaOldWidth.value === contentRect.width) - return; - tryRequestAnimationFrame(window2, () => { - textareaOldWidth.value = contentRect.width; - triggerResize(); - }); - }); - if (options == null ? void 0 : options.watch) - watch(options.watch, triggerResize, { immediate: true, deep: true }); - return { - textarea, - input, - triggerResize - }; -} -function useThrottledRefHistory(source, options = {}) { - const { throttle = 200, trailing = true } = options; - const filter = throttleFilter(throttle, trailing); - const history = useRefHistory(source, { ...options, eventFilter: filter }); - return { - ...history - }; -} -var DEFAULT_UNITS = [ - { max: 6e4, value: 1e3, name: "second" }, - { max: 276e4, value: 6e4, name: "minute" }, - { max: 72e6, value: 36e5, name: "hour" }, - { max: 5184e5, value: 864e5, name: "day" }, - { max: 24192e5, value: 6048e5, name: "week" }, - { max: 28512e6, value: 2592e6, name: "month" }, - { max: Number.POSITIVE_INFINITY, value: 31536e6, name: "year" } -]; -var DEFAULT_MESSAGES = { - justNow: "just now", - past: (n) => n.match(/\d/) ? `${n} ago` : n, - future: (n) => n.match(/\d/) ? `in ${n}` : n, - month: (n, past) => n === 1 ? past ? "last month" : "next month" : `${n} month${n > 1 ? "s" : ""}`, - year: (n, past) => n === 1 ? past ? "last year" : "next year" : `${n} year${n > 1 ? "s" : ""}`, - day: (n, past) => n === 1 ? past ? "yesterday" : "tomorrow" : `${n} day${n > 1 ? "s" : ""}`, - week: (n, past) => n === 1 ? past ? "last week" : "next week" : `${n} week${n > 1 ? "s" : ""}`, - hour: (n) => `${n} hour${n > 1 ? "s" : ""}`, - minute: (n) => `${n} minute${n > 1 ? "s" : ""}`, - second: (n) => `${n} second${n > 1 ? "s" : ""}`, - invalid: "" -}; -function DEFAULT_FORMATTER(date) { - return date.toISOString().slice(0, 10); -} -function useTimeAgo(time, options = {}) { - const { - controls: exposeControls = false, - updateInterval = 3e4 - } = options; - const { now: now2, ...controls } = useNow({ interval: updateInterval, controls: true }); - const timeAgo = computed(() => formatTimeAgo(new Date(toValue(time)), options, toValue(now2))); - if (exposeControls) { - return { - timeAgo, - ...controls - }; - } else { - return timeAgo; - } -} -function formatTimeAgo(from, options = {}, now2 = Date.now()) { - var _a; - const { - max, - messages = DEFAULT_MESSAGES, - fullDateFormatter = DEFAULT_FORMATTER, - units = DEFAULT_UNITS, - showSecond = false, - rounding = "round" - } = options; - const roundFn = typeof rounding === "number" ? (n) => +n.toFixed(rounding) : Math[rounding]; - const diff = +now2 - +from; - const absDiff = Math.abs(diff); - function getValue2(diff2, unit) { - return roundFn(Math.abs(diff2) / unit.value); - } - function format(diff2, unit) { - const val = getValue2(diff2, unit); - const past = diff2 > 0; - const str = applyFormat(unit.name, val, past); - return applyFormat(past ? "past" : "future", str, past); - } - function applyFormat(name, val, isPast) { - const formatter = messages[name]; - if (typeof formatter === "function") - return formatter(val, isPast); - return formatter.replace("{0}", val.toString()); - } - if (absDiff < 6e4 && !showSecond) - return messages.justNow; - if (typeof max === "number" && absDiff > max) - return fullDateFormatter(new Date(from)); - if (typeof max === "string") { - const unitMax = (_a = units.find((i) => i.name === max)) == null ? void 0 : _a.max; - if (unitMax && absDiff > unitMax) - return fullDateFormatter(new Date(from)); - } - for (const [idx, unit] of units.entries()) { - const val = getValue2(diff, unit); - if (val <= 0 && units[idx - 1]) - return format(diff, units[idx - 1]); - if (absDiff < unit.max) - return format(diff, unit); - } - return messages.invalid; -} -function useTimeoutPoll(fn, interval, options = {}) { - const { - immediate = true, - immediateCallback = false - } = options; - const { start } = useTimeoutFn(loop, interval, { immediate }); - const isActive = shallowRef(false); - async function loop() { - if (!isActive.value) - return; - await fn(); - start(); - } - function resume() { - if (!isActive.value) { - isActive.value = true; - if (immediateCallback) - fn(); - start(); - } - } - function pause() { - isActive.value = false; - } - if (immediate && isClient) - resume(); - tryOnScopeDispose(pause); - return { - isActive, - pause, - resume - }; -} -function useTimestamp(options = {}) { - const { - controls: exposeControls = false, - offset = 0, - immediate = true, - interval = "requestAnimationFrame", - callback - } = options; - const ts = shallowRef(timestamp() + offset); - const update = () => ts.value = timestamp() + offset; - const cb = callback ? () => { - update(); - callback(ts.value); - } : update; - const controls = interval === "requestAnimationFrame" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate }); - if (exposeControls) { - return { - timestamp: ts, - ...controls - }; - } else { - return ts; - } -} -function useTitle(newTitle = null, options = {}) { - var _a, _b, _c; - const { - document: document2 = defaultDocument, - restoreOnUnmount = (t) => t - } = options; - const originalTitle = (_a = document2 == null ? void 0 : document2.title) != null ? _a : ""; - const title = toRef2((_b = newTitle != null ? newTitle : document2 == null ? void 0 : document2.title) != null ? _b : null); - const isReadonly2 = !!(newTitle && typeof newTitle === "function"); - function format(t) { - if (!("titleTemplate" in options)) - return t; - const template = options.titleTemplate || "%s"; - return typeof template === "function" ? template(t) : toValue(template).replace(/%s/g, t); - } - watch( - title, - (newValue, oldValue) => { - if (newValue !== oldValue && document2) - document2.title = format(newValue != null ? newValue : ""); - }, - { immediate: true } - ); - if (options.observe && !options.titleTemplate && document2 && !isReadonly2) { - useMutationObserver( - (_c = document2.head) == null ? void 0 : _c.querySelector("title"), - () => { - if (document2 && document2.title !== title.value) - title.value = format(document2.title); - }, - { childList: true } - ); - } - tryOnScopeDispose(() => { - if (restoreOnUnmount) { - const restoredTitle = restoreOnUnmount(originalTitle, title.value || ""); - if (restoredTitle != null && document2) - document2.title = restoredTitle; - } - }); - return title; -} -var _TransitionPresets = { - easeInSine: [0.12, 0, 0.39, 0], - easeOutSine: [0.61, 1, 0.88, 1], - easeInOutSine: [0.37, 0, 0.63, 1], - easeInQuad: [0.11, 0, 0.5, 0], - easeOutQuad: [0.5, 1, 0.89, 1], - easeInOutQuad: [0.45, 0, 0.55, 1], - easeInCubic: [0.32, 0, 0.67, 0], - easeOutCubic: [0.33, 1, 0.68, 1], - easeInOutCubic: [0.65, 0, 0.35, 1], - easeInQuart: [0.5, 0, 0.75, 0], - easeOutQuart: [0.25, 1, 0.5, 1], - easeInOutQuart: [0.76, 0, 0.24, 1], - easeInQuint: [0.64, 0, 0.78, 0], - easeOutQuint: [0.22, 1, 0.36, 1], - easeInOutQuint: [0.83, 0, 0.17, 1], - easeInExpo: [0.7, 0, 0.84, 0], - easeOutExpo: [0.16, 1, 0.3, 1], - easeInOutExpo: [0.87, 0, 0.13, 1], - easeInCirc: [0.55, 0, 1, 0.45], - easeOutCirc: [0, 0.55, 0.45, 1], - easeInOutCirc: [0.85, 0, 0.15, 1], - easeInBack: [0.36, 0, 0.66, -0.56], - easeOutBack: [0.34, 1.56, 0.64, 1], - easeInOutBack: [0.68, -0.6, 0.32, 1.6] -}; -var TransitionPresets = Object.assign({}, { linear: identity }, _TransitionPresets); -function createEasingFunction([p0, p1, p2, p3]) { - const a = (a1, a2) => 1 - 3 * a2 + 3 * a1; - const b = (a1, a2) => 3 * a2 - 6 * a1; - const c = (a1) => 3 * a1; - const calcBezier = (t, a1, a2) => ((a(a1, a2) * t + b(a1, a2)) * t + c(a1)) * t; - const getSlope = (t, a1, a2) => 3 * a(a1, a2) * t * t + 2 * b(a1, a2) * t + c(a1); - const getTforX = (x) => { - let aGuessT = x; - for (let i = 0; i < 4; ++i) { - const currentSlope = getSlope(aGuessT, p0, p2); - if (currentSlope === 0) - return aGuessT; - const currentX = calcBezier(aGuessT, p0, p2) - x; - aGuessT -= currentX / currentSlope; - } - return aGuessT; - }; - return (x) => p0 === p1 && p2 === p3 ? x : calcBezier(getTforX(x), p1, p3); -} -function lerp(a, b, alpha) { - return a + alpha * (b - a); -} -function toVec(t) { - return (typeof t === "number" ? [t] : t) || []; -} -function executeTransition(source, from, to, options = {}) { - var _a, _b; - const fromVal = toValue(from); - const toVal = toValue(to); - const v1 = toVec(fromVal); - const v2 = toVec(toVal); - const duration = (_a = toValue(options.duration)) != null ? _a : 1e3; - const startedAt = Date.now(); - const endAt = Date.now() + duration; - const trans = typeof options.transition === "function" ? options.transition : (_b = toValue(options.transition)) != null ? _b : identity; - const ease = typeof trans === "function" ? trans : createEasingFunction(trans); - return new Promise((resolve) => { - source.value = fromVal; - const tick = () => { - var _a2; - if ((_a2 = options.abort) == null ? void 0 : _a2.call(options)) { - resolve(); - return; - } - const now2 = Date.now(); - const alpha = ease((now2 - startedAt) / duration); - const arr = toVec(source.value).map((n, i) => lerp(v1[i], v2[i], alpha)); - if (Array.isArray(source.value)) - source.value = arr.map((n, i) => { - var _a3, _b2; - return lerp((_a3 = v1[i]) != null ? _a3 : 0, (_b2 = v2[i]) != null ? _b2 : 0, alpha); - }); - else if (typeof source.value === "number") - source.value = arr[0]; - if (now2 < endAt) { - requestAnimationFrame(tick); - } else { - source.value = toVal; - resolve(); - } - }; - tick(); - }); -} -function useTransition(source, options = {}) { - let currentId = 0; - const sourceVal = () => { - const v = toValue(source); - return typeof v === "number" ? v : v.map(toValue); - }; - const outputRef = ref(sourceVal()); - watch(sourceVal, async (to) => { - var _a, _b; - if (toValue(options.disabled)) - return; - const id = ++currentId; - if (options.delay) - await promiseTimeout(toValue(options.delay)); - if (id !== currentId) - return; - const toVal = Array.isArray(to) ? to.map(toValue) : toValue(to); - (_a = options.onStarted) == null ? void 0 : _a.call(options); - await executeTransition(outputRef, outputRef.value, toVal, { - ...options, - abort: () => { - var _a2; - return id !== currentId || ((_a2 = options.abort) == null ? void 0 : _a2.call(options)); - } - }); - (_b = options.onFinished) == null ? void 0 : _b.call(options); - }, { deep: true }); - watch(() => toValue(options.disabled), (disabled) => { - if (disabled) { - currentId++; - outputRef.value = sourceVal(); - } - }); - tryOnScopeDispose(() => { - currentId++; - }); - return computed(() => toValue(options.disabled) ? sourceVal() : outputRef.value); -} -function useUrlSearchParams(mode = "history", options = {}) { - const { - initialValue = {}, - removeNullishValues = true, - removeFalsyValues = false, - write: enableWrite = true, - writeMode = "replace", - window: window2 = defaultWindow - } = options; - if (!window2) - return reactive(initialValue); - const state = reactive({}); - function getRawParams() { - if (mode === "history") { - return window2.location.search || ""; - } else if (mode === "hash") { - const hash = window2.location.hash || ""; - const index = hash.indexOf("?"); - return index > 0 ? hash.slice(index) : ""; - } else { - return (window2.location.hash || "").replace(/^#/, ""); - } - } - function constructQuery(params) { - const stringified = params.toString(); - if (mode === "history") - return `${stringified ? `?${stringified}` : ""}${window2.location.hash || ""}`; - if (mode === "hash-params") - return `${window2.location.search || ""}${stringified ? `#${stringified}` : ""}`; - const hash = window2.location.hash || "#"; - const index = hash.indexOf("?"); - if (index > 0) - return `${window2.location.search || ""}${hash.slice(0, index)}${stringified ? `?${stringified}` : ""}`; - return `${window2.location.search || ""}${hash}${stringified ? `?${stringified}` : ""}`; - } - function read() { - return new URLSearchParams(getRawParams()); - } - function updateState(params) { - const unusedKeys = new Set(Object.keys(state)); - for (const key of params.keys()) { - const paramsForKey = params.getAll(key); - state[key] = paramsForKey.length > 1 ? paramsForKey : params.get(key) || ""; - unusedKeys.delete(key); - } - Array.from(unusedKeys).forEach((key) => delete state[key]); - } - const { pause, resume } = watchPausable( - state, - () => { - const params = new URLSearchParams(""); - Object.keys(state).forEach((key) => { - const mapEntry = state[key]; - if (Array.isArray(mapEntry)) - mapEntry.forEach((value) => params.append(key, value)); - else if (removeNullishValues && mapEntry == null) - params.delete(key); - else if (removeFalsyValues && !mapEntry) - params.delete(key); - else - params.set(key, mapEntry); - }); - write(params, false); - }, - { deep: true } - ); - function write(params, shouldUpdate) { - pause(); - if (shouldUpdate) - updateState(params); - if (writeMode === "replace") { - window2.history.replaceState( - window2.history.state, - window2.document.title, - window2.location.pathname + constructQuery(params) - ); - } else { - window2.history.pushState( - window2.history.state, - window2.document.title, - window2.location.pathname + constructQuery(params) - ); - } - resume(); - } - function onChanged() { - if (!enableWrite) - return; - write(read(), true); - } - const listenerOptions = { passive: true }; - useEventListener(window2, "popstate", onChanged, listenerOptions); - if (mode !== "history") - useEventListener(window2, "hashchange", onChanged, listenerOptions); - const initial = read(); - if (initial.keys().next().value) - updateState(initial); - else - Object.assign(state, initialValue); - return state; -} -function useUserMedia(options = {}) { - var _a, _b; - const enabled = shallowRef((_a = options.enabled) != null ? _a : false); - const autoSwitch = shallowRef((_b = options.autoSwitch) != null ? _b : true); - const constraints = ref(options.constraints); - const { navigator: navigator2 = defaultNavigator } = options; - const isSupported = useSupported(() => { - var _a2; - return (_a2 = navigator2 == null ? void 0 : navigator2.mediaDevices) == null ? void 0 : _a2.getUserMedia; - }); - const stream = shallowRef(); - function getDeviceOptions(type) { - switch (type) { - case "video": { - if (constraints.value) - return constraints.value.video || false; - break; - } - case "audio": { - if (constraints.value) - return constraints.value.audio || false; - break; - } - } - } - async function _start() { - if (!isSupported.value || stream.value) - return; - stream.value = await navigator2.mediaDevices.getUserMedia({ - video: getDeviceOptions("video"), - audio: getDeviceOptions("audio") - }); - return stream.value; - } - function _stop() { - var _a2; - (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop()); - stream.value = void 0; - } - function stop() { - _stop(); - enabled.value = false; - } - async function start() { - await _start(); - if (stream.value) - enabled.value = true; - return stream.value; - } - async function restart() { - _stop(); - return await start(); - } - watch( - enabled, - (v) => { - if (v) - _start(); - else _stop(); - }, - { immediate: true } - ); - watch( - constraints, - () => { - if (autoSwitch.value && stream.value) - restart(); - }, - { immediate: true } - ); - tryOnScopeDispose(() => { - stop(); - }); - return { - isSupported, - stream, - start, - stop, - restart, - constraints, - enabled, - autoSwitch - }; -} -function useVModel(props, key, emit, options = {}) { - var _a, _b, _c; - const { - clone = false, - passive = false, - eventName, - deep = false, - defaultValue, - shouldEmit - } = options; - const vm = getCurrentInstance(); - const _emit = emit || (vm == null ? void 0 : vm.emit) || ((_a = vm == null ? void 0 : vm.$emit) == null ? void 0 : _a.bind(vm)) || ((_c = (_b = vm == null ? void 0 : vm.proxy) == null ? void 0 : _b.$emit) == null ? void 0 : _c.bind(vm == null ? void 0 : vm.proxy)); - let event = eventName; - if (!key) { - key = "modelValue"; - } - event = event || `update:${key.toString()}`; - const cloneFn = (val) => !clone ? val : typeof clone === "function" ? clone(val) : cloneFnJSON(val); - const getValue2 = () => isDef(props[key]) ? cloneFn(props[key]) : defaultValue; - const triggerEmit = (value) => { - if (shouldEmit) { - if (shouldEmit(value)) - _emit(event, value); - } else { - _emit(event, value); - } - }; - if (passive) { - const initialValue = getValue2(); - const proxy = ref(initialValue); - let isUpdating = false; - watch( - () => props[key], - (v) => { - if (!isUpdating) { - isUpdating = true; - proxy.value = cloneFn(v); - nextTick(() => isUpdating = false); - } - } - ); - watch( - proxy, - (v) => { - if (!isUpdating && (v !== props[key] || deep)) - triggerEmit(v); - }, - { deep } - ); - return proxy; - } else { - return computed({ - get() { - return getValue2(); - }, - set(value) { - triggerEmit(value); - } - }); - } -} -function useVModels(props, emit, options = {}) { - const ret = {}; - for (const key in props) { - ret[key] = useVModel( - props, - key, - emit, - options - ); - } - return ret; -} -function useVibrate(options) { - const { - pattern = [], - interval = 0, - navigator: navigator2 = defaultNavigator - } = options || {}; - const isSupported = useSupported(() => typeof navigator2 !== "undefined" && "vibrate" in navigator2); - const patternRef = toRef2(pattern); - let intervalControls; - const vibrate = (pattern2 = patternRef.value) => { - if (isSupported.value) - navigator2.vibrate(pattern2); - }; - const stop = () => { - if (isSupported.value) - navigator2.vibrate(0); - intervalControls == null ? void 0 : intervalControls.pause(); - }; - if (interval > 0) { - intervalControls = useIntervalFn( - vibrate, - interval, - { - immediate: false, - immediateCallback: false - } - ); - } - return { - isSupported, - pattern, - intervalControls, - vibrate, - stop - }; -} -function useVirtualList(list, options) { - const { containerStyle, wrapperProps, scrollTo, calculateRange, currentList, containerRef } = "itemHeight" in options ? useVerticalVirtualList(options, list) : useHorizontalVirtualList(options, list); - return { - list: currentList, - scrollTo, - containerProps: { - ref: containerRef, - onScroll: () => { - calculateRange(); - }, - style: containerStyle - }, - wrapperProps - }; -} -function useVirtualListResources(list) { - const containerRef = shallowRef(null); - const size = useElementSize(containerRef); - const currentList = ref([]); - const source = shallowRef(list); - const state = ref({ start: 0, end: 10 }); - return { state, source, currentList, size, containerRef }; -} -function createGetViewCapacity(state, source, itemSize) { - return (containerSize) => { - if (typeof itemSize === "number") - return Math.ceil(containerSize / itemSize); - const { start = 0 } = state.value; - let sum = 0; - let capacity = 0; - for (let i = start; i < source.value.length; i++) { - const size = itemSize(i); - sum += size; - capacity = i; - if (sum > containerSize) - break; - } - return capacity - start; - }; -} -function createGetOffset(source, itemSize) { - return (scrollDirection) => { - if (typeof itemSize === "number") - return Math.floor(scrollDirection / itemSize) + 1; - let sum = 0; - let offset = 0; - for (let i = 0; i < source.value.length; i++) { - const size = itemSize(i); - sum += size; - if (sum >= scrollDirection) { - offset = i; - break; - } - } - return offset + 1; - }; -} -function createCalculateRange(type, overscan, getOffset, getViewCapacity, { containerRef, state, currentList, source }) { - return () => { - const element = containerRef.value; - if (element) { - const offset = getOffset(type === "vertical" ? element.scrollTop : element.scrollLeft); - const viewCapacity = getViewCapacity(type === "vertical" ? element.clientHeight : element.clientWidth); - const from = offset - overscan; - const to = offset + viewCapacity + overscan; - state.value = { - start: from < 0 ? 0 : from, - end: to > source.value.length ? source.value.length : to - }; - currentList.value = source.value.slice(state.value.start, state.value.end).map((ele, index) => ({ - data: ele, - index: index + state.value.start - })); - } - }; -} -function createGetDistance(itemSize, source) { - return (index) => { - if (typeof itemSize === "number") { - const size2 = index * itemSize; - return size2; - } - const size = source.value.slice(0, index).reduce((sum, _, i) => sum + itemSize(i), 0); - return size; - }; -} -function useWatchForSizes(size, list, containerRef, calculateRange) { - watch([size.width, size.height, list, containerRef], () => { - calculateRange(); - }); -} -function createComputedTotalSize(itemSize, source) { - return computed(() => { - if (typeof itemSize === "number") - return source.value.length * itemSize; - return source.value.reduce((sum, _, index) => sum + itemSize(index), 0); - }); -} -var scrollToDictionaryForElementScrollKey = { - horizontal: "scrollLeft", - vertical: "scrollTop" -}; -function createScrollTo(type, calculateRange, getDistance, containerRef) { - return (index) => { - if (containerRef.value) { - containerRef.value[scrollToDictionaryForElementScrollKey[type]] = getDistance(index); - calculateRange(); - } - }; -} -function useHorizontalVirtualList(options, list) { - const resources = useVirtualListResources(list); - const { state, source, currentList, size, containerRef } = resources; - const containerStyle = { overflowX: "auto" }; - const { itemWidth, overscan = 5 } = options; - const getViewCapacity = createGetViewCapacity(state, source, itemWidth); - const getOffset = createGetOffset(source, itemWidth); - const calculateRange = createCalculateRange("horizontal", overscan, getOffset, getViewCapacity, resources); - const getDistanceLeft = createGetDistance(itemWidth, source); - const offsetLeft = computed(() => getDistanceLeft(state.value.start)); - const totalWidth = createComputedTotalSize(itemWidth, source); - useWatchForSizes(size, list, containerRef, calculateRange); - const scrollTo = createScrollTo("horizontal", calculateRange, getDistanceLeft, containerRef); - const wrapperProps = computed(() => { - return { - style: { - height: "100%", - width: `${totalWidth.value - offsetLeft.value}px`, - marginLeft: `${offsetLeft.value}px`, - display: "flex" - } - }; - }); - return { - scrollTo, - calculateRange, - wrapperProps, - containerStyle, - currentList, - containerRef - }; -} -function useVerticalVirtualList(options, list) { - const resources = useVirtualListResources(list); - const { state, source, currentList, size, containerRef } = resources; - const containerStyle = { overflowY: "auto" }; - const { itemHeight, overscan = 5 } = options; - const getViewCapacity = createGetViewCapacity(state, source, itemHeight); - const getOffset = createGetOffset(source, itemHeight); - const calculateRange = createCalculateRange("vertical", overscan, getOffset, getViewCapacity, resources); - const getDistanceTop = createGetDistance(itemHeight, source); - const offsetTop = computed(() => getDistanceTop(state.value.start)); - const totalHeight = createComputedTotalSize(itemHeight, source); - useWatchForSizes(size, list, containerRef, calculateRange); - const scrollTo = createScrollTo("vertical", calculateRange, getDistanceTop, containerRef); - const wrapperProps = computed(() => { - return { - style: { - width: "100%", - height: `${totalHeight.value - offsetTop.value}px`, - marginTop: `${offsetTop.value}px` - } - }; - }); - return { - calculateRange, - scrollTo, - containerStyle, - wrapperProps, - currentList, - containerRef - }; -} -function useWakeLock(options = {}) { - const { - navigator: navigator2 = defaultNavigator, - document: document2 = defaultDocument - } = options; - const requestedType = shallowRef(false); - const sentinel = shallowRef(null); - const documentVisibility = useDocumentVisibility({ document: document2 }); - const isSupported = useSupported(() => navigator2 && "wakeLock" in navigator2); - const isActive = computed(() => !!sentinel.value && documentVisibility.value === "visible"); - if (isSupported.value) { - useEventListener(sentinel, "release", () => { - var _a, _b; - requestedType.value = (_b = (_a = sentinel.value) == null ? void 0 : _a.type) != null ? _b : false; - }, { passive: true }); - whenever( - () => documentVisibility.value === "visible" && (document2 == null ? void 0 : document2.visibilityState) === "visible" && requestedType.value, - (type) => { - requestedType.value = false; - forceRequest(type); - } - ); - } - async function forceRequest(type) { - var _a; - await ((_a = sentinel.value) == null ? void 0 : _a.release()); - sentinel.value = isSupported.value ? await navigator2.wakeLock.request(type) : null; - } - async function request(type) { - if (documentVisibility.value === "visible") - await forceRequest(type); - else - requestedType.value = type; - } - async function release() { - requestedType.value = false; - const s = sentinel.value; - sentinel.value = null; - await (s == null ? void 0 : s.release()); - } - return { - sentinel, - isSupported, - isActive, - request, - forceRequest, - release - }; -} -function useWebNotification(options = {}) { - const { - window: window2 = defaultWindow, - requestPermissions: _requestForPermissions = true - } = options; - const defaultWebNotificationOptions = options; - const isSupported = useSupported(() => { - if (!window2 || !("Notification" in window2)) - return false; - if (Notification.permission === "granted") - return true; - try { - const notification2 = new Notification(""); - notification2.onshow = () => { - notification2.close(); - }; - } catch (e) { - if (e.name === "TypeError") - return false; - } - return true; - }); - const permissionGranted = shallowRef(isSupported.value && "permission" in Notification && Notification.permission === "granted"); - const notification = ref(null); - const ensurePermissions = async () => { - if (!isSupported.value) - return; - if (!permissionGranted.value && Notification.permission !== "denied") { - const result = await Notification.requestPermission(); - if (result === "granted") - permissionGranted.value = true; - } - return permissionGranted.value; - }; - const { on: onClick, trigger: clickTrigger } = createEventHook(); - const { on: onShow, trigger: showTrigger } = createEventHook(); - const { on: onError, trigger: errorTrigger } = createEventHook(); - const { on: onClose, trigger: closeTrigger } = createEventHook(); - const show = async (overrides) => { - if (!isSupported.value || !permissionGranted.value) - return; - const options2 = Object.assign({}, defaultWebNotificationOptions, overrides); - notification.value = new Notification(options2.title || "", options2); - notification.value.onclick = clickTrigger; - notification.value.onshow = showTrigger; - notification.value.onerror = errorTrigger; - notification.value.onclose = closeTrigger; - return notification.value; - }; - const close = () => { - if (notification.value) - notification.value.close(); - notification.value = null; - }; - if (_requestForPermissions) - tryOnMounted(ensurePermissions); - tryOnScopeDispose(close); - if (isSupported.value && window2) { - const document2 = window2.document; - useEventListener(document2, "visibilitychange", (e) => { - e.preventDefault(); - if (document2.visibilityState === "visible") { - close(); - } - }); - } - return { - isSupported, - notification, - ensurePermissions, - permissionGranted, - show, - close, - onClick, - onShow, - onError, - onClose - }; -} -var DEFAULT_PING_MESSAGE = "ping"; -function resolveNestedOptions(options) { - if (options === true) - return {}; - return options; -} -function useWebSocket(url, options = {}) { - const { - onConnected, - onDisconnected, - onError, - onMessage, - immediate = true, - autoConnect = true, - autoClose = true, - protocols = [] - } = options; - const data = ref(null); - const status = shallowRef("CLOSED"); - const wsRef = ref(); - const urlRef = toRef2(url); - let heartbeatPause; - let heartbeatResume; - let explicitlyClosed = false; - let retried = 0; - let bufferedData = []; - let retryTimeout; - let pongTimeoutWait; - const _sendBuffer = () => { - if (bufferedData.length && wsRef.value && status.value === "OPEN") { - for (const buffer of bufferedData) - wsRef.value.send(buffer); - bufferedData = []; - } - }; - const resetRetry = () => { - if (retryTimeout != null) { - clearTimeout(retryTimeout); - retryTimeout = void 0; - } - }; - const resetHeartbeat = () => { - clearTimeout(pongTimeoutWait); - pongTimeoutWait = void 0; - }; - const close = (code = 1e3, reason) => { - resetRetry(); - if (!isClient && !isWorker || !wsRef.value) - return; - explicitlyClosed = true; - resetHeartbeat(); - heartbeatPause == null ? void 0 : heartbeatPause(); - wsRef.value.close(code, reason); - wsRef.value = void 0; - }; - const send = (data2, useBuffer = true) => { - if (!wsRef.value || status.value !== "OPEN") { - if (useBuffer) - bufferedData.push(data2); - return false; - } - _sendBuffer(); - wsRef.value.send(data2); - return true; - }; - const _init = () => { - if (explicitlyClosed || typeof urlRef.value === "undefined") - return; - const ws = new WebSocket(urlRef.value, protocols); - wsRef.value = ws; - status.value = "CONNECTING"; - ws.onopen = () => { - status.value = "OPEN"; - retried = 0; - onConnected == null ? void 0 : onConnected(ws); - heartbeatResume == null ? void 0 : heartbeatResume(); - _sendBuffer(); - }; - ws.onclose = (ev) => { - status.value = "CLOSED"; - resetHeartbeat(); - heartbeatPause == null ? void 0 : heartbeatPause(); - onDisconnected == null ? void 0 : onDisconnected(ws, ev); - if (!explicitlyClosed && options.autoReconnect && (wsRef.value == null || ws === wsRef.value)) { - const { - retries = -1, - delay = 1e3, - onFailed - } = resolveNestedOptions(options.autoReconnect); - const checkRetires = typeof retries === "function" ? retries : () => typeof retries === "number" && (retries < 0 || retried < retries); - if (checkRetires(retried)) { - retried += 1; - retryTimeout = setTimeout(_init, delay); - } else { - onFailed == null ? void 0 : onFailed(); - } - } - }; - ws.onerror = (e) => { - onError == null ? void 0 : onError(ws, e); - }; - ws.onmessage = (e) => { - if (options.heartbeat) { - resetHeartbeat(); - const { - message = DEFAULT_PING_MESSAGE, - responseMessage = message - } = resolveNestedOptions(options.heartbeat); - if (e.data === toValue(responseMessage)) - return; - } - data.value = e.data; - onMessage == null ? void 0 : onMessage(ws, e); - }; - }; - if (options.heartbeat) { - const { - message = DEFAULT_PING_MESSAGE, - interval = 1e3, - pongTimeout = 1e3 - } = resolveNestedOptions(options.heartbeat); - const { pause, resume } = useIntervalFn( - () => { - send(toValue(message), false); - if (pongTimeoutWait != null) - return; - pongTimeoutWait = setTimeout(() => { - close(); - explicitlyClosed = false; - }, pongTimeout); - }, - interval, - { immediate: false } - ); - heartbeatPause = pause; - heartbeatResume = resume; - } - if (autoClose) { - if (isClient) - useEventListener("beforeunload", () => close(), { passive: true }); - tryOnScopeDispose(close); - } - const open = () => { - if (!isClient && !isWorker) - return; - close(); - explicitlyClosed = false; - retried = 0; - _init(); - }; - if (immediate) - open(); - if (autoConnect) - watch(urlRef, open); - return { - data, - status, - close, - send, - open, - ws: wsRef - }; -} -function useWebWorker(arg0, workerOptions, options) { - const { - window: window2 = defaultWindow - } = options != null ? options : {}; - const data = ref(null); - const worker = shallowRef(); - const post = (...args) => { - if (!worker.value) - return; - worker.value.postMessage(...args); - }; - const terminate = function terminate2() { - if (!worker.value) - return; - worker.value.terminate(); - }; - if (window2) { - if (typeof arg0 === "string") - worker.value = new Worker(arg0, workerOptions); - else if (typeof arg0 === "function") - worker.value = arg0(); - else - worker.value = arg0; - worker.value.onmessage = (e) => { - data.value = e.data; - }; - tryOnScopeDispose(() => { - if (worker.value) - worker.value.terminate(); - }); - } - return { - data, - post, - terminate, - worker - }; -} -function depsParser(deps, localDeps) { - if (deps.length === 0 && localDeps.length === 0) - return ""; - const depsString = deps.map((dep) => `'${dep}'`).toString(); - const depsFunctionString = localDeps.filter((dep) => typeof dep === "function").map((fn) => { - const str = fn.toString(); - if (str.trim().startsWith("function")) { - return str; - } else { - const name = fn.name; - return `const ${name} = ${str}`; - } - }).join(";"); - const importString = `importScripts(${depsString});`; - return `${depsString.trim() === "" ? "" : importString} ${depsFunctionString}`; -} -function jobRunner(userFunc) { - return (e) => { - const userFuncArgs = e.data[0]; - return Promise.resolve(userFunc.apply(void 0, userFuncArgs)).then((result) => { - postMessage(["SUCCESS", result]); - }).catch((error) => { - postMessage(["ERROR", error]); - }); - }; -} -function createWorkerBlobUrl(fn, deps, localDeps) { - const blobCode = `${depsParser(deps, localDeps)}; onmessage=(${jobRunner})(${fn})`; - const blob = new Blob([blobCode], { type: "text/javascript" }); - const url = URL.createObjectURL(blob); - return url; -} -function useWebWorkerFn(fn, options = {}) { - const { - dependencies = [], - localDependencies = [], - timeout, - window: window2 = defaultWindow - } = options; - const worker = ref(); - const workerStatus = shallowRef("PENDING"); - const promise = ref({}); - const timeoutId = shallowRef(); - const workerTerminate = (status = "PENDING") => { - if (worker.value && worker.value._url && window2) { - worker.value.terminate(); - URL.revokeObjectURL(worker.value._url); - promise.value = {}; - worker.value = void 0; - window2.clearTimeout(timeoutId.value); - workerStatus.value = status; - } - }; - workerTerminate(); - tryOnScopeDispose(workerTerminate); - const generateWorker = () => { - const blobUrl = createWorkerBlobUrl(fn, dependencies, localDependencies); - const newWorker = new Worker(blobUrl); - newWorker._url = blobUrl; - newWorker.onmessage = (e) => { - const { resolve = () => { - }, reject = () => { - } } = promise.value; - const [status, result] = e.data; - switch (status) { - case "SUCCESS": - resolve(result); - workerTerminate(status); - break; - default: - reject(result); - workerTerminate("ERROR"); - break; - } - }; - newWorker.onerror = (e) => { - const { reject = () => { - } } = promise.value; - e.preventDefault(); - reject(e); - workerTerminate("ERROR"); - }; - if (timeout) { - timeoutId.value = setTimeout( - () => workerTerminate("TIMEOUT_EXPIRED"), - timeout - ); - } - return newWorker; - }; - const callWorker = (...fnArgs) => new Promise((resolve, reject) => { - var _a; - promise.value = { - resolve, - reject - }; - (_a = worker.value) == null ? void 0 : _a.postMessage([[...fnArgs]]); - workerStatus.value = "RUNNING"; - }); - const workerFn = (...fnArgs) => { - if (workerStatus.value === "RUNNING") { - console.error( - "[useWebWorkerFn] You can only run one instance of the worker at a time." - ); - return Promise.reject(); - } - worker.value = generateWorker(); - return callWorker(...fnArgs); - }; - return { - workerFn, - workerStatus, - workerTerminate - }; -} -function useWindowFocus(options = {}) { - const { window: window2 = defaultWindow } = options; - if (!window2) - return shallowRef(false); - const focused = shallowRef(window2.document.hasFocus()); - const listenerOptions = { passive: true }; - useEventListener(window2, "blur", () => { - focused.value = false; - }, listenerOptions); - useEventListener(window2, "focus", () => { - focused.value = true; - }, listenerOptions); - return focused; -} -function useWindowScroll(options = {}) { - const { window: window2 = defaultWindow, ...rest } = options; - return useScroll(window2, rest); -} -function useWindowSize(options = {}) { - const { - window: window2 = defaultWindow, - initialWidth = Number.POSITIVE_INFINITY, - initialHeight = Number.POSITIVE_INFINITY, - listenOrientation = true, - includeScrollbar = true, - type = "inner" - } = options; - const width = shallowRef(initialWidth); - const height = shallowRef(initialHeight); - const update = () => { - if (window2) { - if (type === "outer") { - width.value = window2.outerWidth; - height.value = window2.outerHeight; - } else if (type === "visual" && window2.visualViewport) { - const { width: visualViewportWidth, height: visualViewportHeight, scale } = window2.visualViewport; - width.value = Math.round(visualViewportWidth * scale); - height.value = Math.round(visualViewportHeight * scale); - } else if (includeScrollbar) { - width.value = window2.innerWidth; - height.value = window2.innerHeight; - } else { - width.value = window2.document.documentElement.clientWidth; - height.value = window2.document.documentElement.clientHeight; - } - } - }; - update(); - tryOnMounted(update); - const listenerOptions = { passive: true }; - useEventListener("resize", update, listenerOptions); - if (window2 && type === "visual" && window2.visualViewport) { - useEventListener(window2.visualViewport, "resize", update, listenerOptions); - } - if (listenOrientation) { - const matches = useMediaQuery("(orientation: portrait)"); - watch(matches, () => update()); - } - return { width, height }; -} - -export { - computedEager, - computedWithControl, - tryOnScopeDispose, - createEventHook, - createGlobalState, - injectLocal, - provideLocal, - createInjectionState, - createRef, - createSharedComposable, - extendRef, - get, - isDefined, - makeDestructurable, - reactify, - reactifyObject, - toReactive, - reactiveComputed, - reactiveOmit, - isClient, - isWorker, - isDef, - notNullish, - assert, - isObject, - now, - timestamp, - clamp, - noop, - rand, - hasOwn, - isIOS, - createFilterWrapper, - bypassFilter, - debounceFilter, - throttleFilter, - pausableFilter, - hyphenate, - camelize, - promiseTimeout, - identity, - createSingletonPromise, - invoke, - containsProp, - increaseWithUnit, - pxValue, - objectPick, - objectOmit, - objectEntries, - getLifeCycleTarget, - toArray, - toRef2 as toRef, - resolveRef, - reactivePick, - refAutoReset, - useDebounceFn, - refDebounced, - refDefault, - useThrottleFn, - refThrottled, - refWithControl, - controlledRef, - set, - watchWithFilter, - watchPausable, - syncRef, - syncRefs, - toRefs2 as toRefs, - toValue2 as toValue, - resolveUnref, - tryOnBeforeMount, - tryOnBeforeUnmount, - tryOnMounted, - tryOnUnmounted, - until, - useArrayDifference, - useArrayEvery, - useArrayFilter, - useArrayFind, - useArrayFindIndex, - useArrayFindLast, - useArrayIncludes, - useArrayJoin, - useArrayMap, - useArrayReduce, - useArraySome, - useArrayUnique, - useCounter, - formatDate, - normalizeDate, - useDateFormat, - useIntervalFn, - useInterval, - useLastChanged, - useTimeoutFn, - useTimeout, - useToNumber, - useToString, - useToggle, - watchArray, - watchAtMost, - watchDebounced, - watchDeep, - watchIgnorable, - watchImmediate, - watchOnce, - watchThrottled, - watchTriggerable, - whenever, - computedAsync, - computedInject, - createReusableTemplate, - createTemplatePromise, - createUnrefFn, - defaultWindow, - defaultDocument, - defaultNavigator, - defaultLocation, - unrefElement, - useEventListener, - onClickOutside, - useMounted, - useSupported, - useMutationObserver, - onElementRemoval, - onKeyStroke, - onKeyDown, - onKeyPressed, - onKeyUp, - onLongPress, - onStartTyping, - templateRef, - useActiveElement, - useRafFn, - useAnimate, - useAsyncQueue, - useAsyncState, - useBase64, - useBattery, - useBluetooth, - useSSRWidth, - provideSSRWidth, - useMediaQuery, - breakpointsTailwind, - breakpointsBootstrapV5, - breakpointsVuetifyV2, - breakpointsVuetifyV3, - breakpointsVuetify, - breakpointsAntDesign, - breakpointsQuasar, - breakpointsSematic, - breakpointsMasterCss, - breakpointsPrimeFlex, - breakpointsElement, - useBreakpoints, - useBroadcastChannel, - useBrowserLocation, - useCached, - usePermission, - useClipboard, - useClipboardItems, - cloneFnJSON, - useCloned, - getSSRHandler, - setSSRHandler, - usePreferredDark, - StorageSerializers, - customStorageEventName, - useStorage, - useColorMode, - useConfirmDialog, - useCountdown, - useCssVar, - useCurrentElement, - useCycleList, - useDark, - useManualRefHistory, - useRefHistory, - useDebouncedRefHistory, - useDeviceMotion, - useDeviceOrientation, - useDevicePixelRatio, - useDevicesList, - useDisplayMedia, - useDocumentVisibility, - useDraggable, - useDropZone, - useResizeObserver, - useElementBounding, - useElementByPoint, - useElementHover, - useElementSize, - useIntersectionObserver, - useElementVisibility, - useEventBus, - useEventSource, - useEyeDropper, - useFavicon, - createFetch, - useFetch, - useFileDialog, - useFileSystemAccess, - useFocus, - useFocusWithin, - useFps, - useFullscreen, - mapGamepadToXbox360Controller, - useGamepad, - useGeolocation, - useIdle, - useImage, - useScroll, - useInfiniteScroll, - useKeyModifier, - useLocalStorage, - DefaultMagicKeysAliasMap, - useMagicKeys, - useMediaControls, - useMemoize, - useMemory, - useMouse, - useMouseInElement, - useMousePressed, - useNavigatorLanguage, - useNetwork, - useNow, - useObjectUrl, - useOffsetPagination, - useOnline, - usePageLeave, - useScreenOrientation, - useParallax, - useParentElement, - usePerformanceObserver, - usePointer, - usePointerLock, - usePointerSwipe, - usePreferredColorScheme, - usePreferredContrast, - usePreferredLanguages, - usePreferredReducedMotion, - usePreferredReducedTransparency, - usePrevious, - useScreenSafeArea, - useScriptTag, - useScrollLock, - useSessionStorage, - useShare, - useSorted, - useSpeechRecognition, - useSpeechSynthesis, - useStepper, - useStorageAsync, - useStyleTag, - useSwipe, - useTemplateRefsList, - useTextDirection, - useTextSelection, - useTextareaAutosize, - useThrottledRefHistory, - useTimeAgo, - formatTimeAgo, - useTimeoutPoll, - useTimestamp, - useTitle, - TransitionPresets, - executeTransition, - useTransition, - useUrlSearchParams, - useUserMedia, - useVModel, - useVModels, - useVibrate, - useVirtualList, - useWakeLock, - useWebNotification, - useWebSocket, - useWebWorker, - useWebWorkerFn, - useWindowFocus, - useWindowScroll, - useWindowSize -}; -//# sourceMappingURL=chunk-Q2AYPHVK.js.map diff --git a/packages/documentation/docs/.vitepress/cache/deps/chunk-Q2AYPHVK.js.map b/packages/documentation/docs/.vitepress/cache/deps/chunk-Q2AYPHVK.js.map deleted file mode 100644 index 64aea30e7c..0000000000 --- a/packages/documentation/docs/.vitepress/cache/deps/chunk-Q2AYPHVK.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../../../../node_modules/@vueuse/shared/index.mjs", "../../../../node_modules/@vueuse/core/index.mjs"], - "sourcesContent": ["import { shallowRef, watchEffect, readonly, watch, customRef, getCurrentScope, onScopeDispose, effectScope, getCurrentInstance, hasInjectionContext, inject, provide, ref, isRef, unref, toValue as toValue$1, computed, reactive, toRefs as toRefs$1, toRef as toRef$1, onBeforeMount, nextTick, onBeforeUnmount, onMounted, onUnmounted, isReactive } from 'vue';\n\nfunction computedEager(fn, options) {\n var _a;\n const result = shallowRef();\n watchEffect(() => {\n result.value = fn();\n }, {\n ...options,\n flush: (_a = options == null ? void 0 : options.flush) != null ? _a : \"sync\"\n });\n return readonly(result);\n}\n\nfunction computedWithControl(source, fn) {\n let v = void 0;\n let track;\n let trigger;\n const dirty = shallowRef(true);\n const update = () => {\n dirty.value = true;\n trigger();\n };\n watch(source, update, { flush: \"sync\" });\n const get = typeof fn === \"function\" ? fn : fn.get;\n const set = typeof fn === \"function\" ? void 0 : fn.set;\n const result = customRef((_track, _trigger) => {\n track = _track;\n trigger = _trigger;\n return {\n get() {\n if (dirty.value) {\n v = get(v);\n dirty.value = false;\n }\n track();\n return v;\n },\n set(v2) {\n set == null ? void 0 : set(v2);\n }\n };\n });\n if (Object.isExtensible(result))\n result.trigger = update;\n return result;\n}\n\nfunction tryOnScopeDispose(fn) {\n if (getCurrentScope()) {\n onScopeDispose(fn);\n return true;\n }\n return false;\n}\n\nfunction createEventHook() {\n const fns = /* @__PURE__ */ new Set();\n const off = (fn) => {\n fns.delete(fn);\n };\n const clear = () => {\n fns.clear();\n };\n const on = (fn) => {\n fns.add(fn);\n const offFn = () => off(fn);\n tryOnScopeDispose(offFn);\n return {\n off: offFn\n };\n };\n const trigger = (...args) => {\n return Promise.all(Array.from(fns).map((fn) => fn(...args)));\n };\n return {\n on,\n off,\n trigger,\n clear\n };\n}\n\nfunction createGlobalState(stateFactory) {\n let initialized = false;\n let state;\n const scope = effectScope(true);\n return (...args) => {\n if (!initialized) {\n state = scope.run(() => stateFactory(...args));\n initialized = true;\n }\n return state;\n };\n}\n\nconst localProvidedStateMap = /* @__PURE__ */ new WeakMap();\n\nconst injectLocal = (...args) => {\n var _a;\n const key = args[0];\n const instance = (_a = getCurrentInstance()) == null ? void 0 : _a.proxy;\n if (instance == null && !hasInjectionContext())\n throw new Error(\"injectLocal must be called in setup\");\n if (instance && localProvidedStateMap.has(instance) && key in localProvidedStateMap.get(instance))\n return localProvidedStateMap.get(instance)[key];\n return inject(...args);\n};\n\nconst provideLocal = (key, value) => {\n var _a;\n const instance = (_a = getCurrentInstance()) == null ? void 0 : _a.proxy;\n if (instance == null)\n throw new Error(\"provideLocal must be called in setup\");\n if (!localProvidedStateMap.has(instance))\n localProvidedStateMap.set(instance, /* @__PURE__ */ Object.create(null));\n const localProvidedState = localProvidedStateMap.get(instance);\n localProvidedState[key] = value;\n provide(key, value);\n};\n\nfunction createInjectionState(composable, options) {\n const key = (options == null ? void 0 : options.injectionKey) || Symbol(composable.name || \"InjectionState\");\n const defaultValue = options == null ? void 0 : options.defaultValue;\n const useProvidingState = (...args) => {\n const state = composable(...args);\n provideLocal(key, state);\n return state;\n };\n const useInjectedState = () => injectLocal(key, defaultValue);\n return [useProvidingState, useInjectedState];\n}\n\nfunction createRef(value, deep) {\n if (deep === true) {\n return ref(value);\n } else {\n return shallowRef(value);\n }\n}\n\nfunction createSharedComposable(composable) {\n let subscribers = 0;\n let state;\n let scope;\n const dispose = () => {\n subscribers -= 1;\n if (scope && subscribers <= 0) {\n scope.stop();\n state = void 0;\n scope = void 0;\n }\n };\n return (...args) => {\n subscribers += 1;\n if (!scope) {\n scope = effectScope(true);\n state = scope.run(() => composable(...args));\n }\n tryOnScopeDispose(dispose);\n return state;\n };\n}\n\nfunction extendRef(ref, extend, { enumerable = false, unwrap = true } = {}) {\n for (const [key, value] of Object.entries(extend)) {\n if (key === \"value\")\n continue;\n if (isRef(value) && unwrap) {\n Object.defineProperty(ref, key, {\n get() {\n return value.value;\n },\n set(v) {\n value.value = v;\n },\n enumerable\n });\n } else {\n Object.defineProperty(ref, key, { value, enumerable });\n }\n }\n return ref;\n}\n\nfunction get(obj, key) {\n if (key == null)\n return unref(obj);\n return unref(obj)[key];\n}\n\nfunction isDefined(v) {\n return unref(v) != null;\n}\n\nfunction makeDestructurable(obj, arr) {\n if (typeof Symbol !== \"undefined\") {\n const clone = { ...obj };\n Object.defineProperty(clone, Symbol.iterator, {\n enumerable: false,\n value() {\n let index = 0;\n return {\n next: () => ({\n value: arr[index++],\n done: index > arr.length\n })\n };\n }\n });\n return clone;\n } else {\n return Object.assign([...arr], obj);\n }\n}\n\nfunction reactify(fn, options) {\n const unrefFn = (options == null ? void 0 : options.computedGetter) === false ? unref : toValue$1;\n return function(...args) {\n return computed(() => fn.apply(this, args.map((i) => unrefFn(i))));\n };\n}\n\nfunction reactifyObject(obj, optionsOrKeys = {}) {\n let keys = [];\n let options;\n if (Array.isArray(optionsOrKeys)) {\n keys = optionsOrKeys;\n } else {\n options = optionsOrKeys;\n const { includeOwnProperties = true } = optionsOrKeys;\n keys.push(...Object.keys(obj));\n if (includeOwnProperties)\n keys.push(...Object.getOwnPropertyNames(obj));\n }\n return Object.fromEntries(\n keys.map((key) => {\n const value = obj[key];\n return [\n key,\n typeof value === \"function\" ? reactify(value.bind(obj), options) : value\n ];\n })\n );\n}\n\nfunction toReactive(objectRef) {\n if (!isRef(objectRef))\n return reactive(objectRef);\n const proxy = new Proxy({}, {\n get(_, p, receiver) {\n return unref(Reflect.get(objectRef.value, p, receiver));\n },\n set(_, p, value) {\n if (isRef(objectRef.value[p]) && !isRef(value))\n objectRef.value[p].value = value;\n else\n objectRef.value[p] = value;\n return true;\n },\n deleteProperty(_, p) {\n return Reflect.deleteProperty(objectRef.value, p);\n },\n has(_, p) {\n return Reflect.has(objectRef.value, p);\n },\n ownKeys() {\n return Object.keys(objectRef.value);\n },\n getOwnPropertyDescriptor() {\n return {\n enumerable: true,\n configurable: true\n };\n }\n });\n return reactive(proxy);\n}\n\nfunction reactiveComputed(fn) {\n return toReactive(computed(fn));\n}\n\nfunction reactiveOmit(obj, ...keys) {\n const flatKeys = keys.flat();\n const predicate = flatKeys[0];\n return reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => !predicate(toValue$1(v), k))) : Object.fromEntries(Object.entries(toRefs$1(obj)).filter((e) => !flatKeys.includes(e[0]))));\n}\n\nconst isClient = typeof window !== \"undefined\" && typeof document !== \"undefined\";\nconst isWorker = typeof WorkerGlobalScope !== \"undefined\" && globalThis instanceof WorkerGlobalScope;\nconst isDef = (val) => typeof val !== \"undefined\";\nconst notNullish = (val) => val != null;\nconst assert = (condition, ...infos) => {\n if (!condition)\n console.warn(...infos);\n};\nconst toString = Object.prototype.toString;\nconst isObject = (val) => toString.call(val) === \"[object Object]\";\nconst now = () => Date.now();\nconst timestamp = () => +Date.now();\nconst clamp = (n, min, max) => Math.min(max, Math.max(min, n));\nconst noop = () => {\n};\nconst rand = (min, max) => {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min + 1)) + min;\n};\nconst hasOwn = (val, key) => Object.prototype.hasOwnProperty.call(val, key);\nconst isIOS = /* @__PURE__ */ getIsIOS();\nfunction getIsIOS() {\n var _a, _b;\n return isClient && ((_a = window == null ? void 0 : window.navigator) == null ? void 0 : _a.userAgent) && (/iP(?:ad|hone|od)/.test(window.navigator.userAgent) || ((_b = window == null ? void 0 : window.navigator) == null ? void 0 : _b.maxTouchPoints) > 2 && /iPad|Macintosh/.test(window == null ? void 0 : window.navigator.userAgent));\n}\n\nfunction createFilterWrapper(filter, fn) {\n function wrapper(...args) {\n return new Promise((resolve, reject) => {\n Promise.resolve(filter(() => fn.apply(this, args), { fn, thisArg: this, args })).then(resolve).catch(reject);\n });\n }\n return wrapper;\n}\nconst bypassFilter = (invoke) => {\n return invoke();\n};\nfunction debounceFilter(ms, options = {}) {\n let timer;\n let maxTimer;\n let lastRejector = noop;\n const _clearTimeout = (timer2) => {\n clearTimeout(timer2);\n lastRejector();\n lastRejector = noop;\n };\n let lastInvoker;\n const filter = (invoke) => {\n const duration = toValue$1(ms);\n const maxDuration = toValue$1(options.maxWait);\n if (timer)\n _clearTimeout(timer);\n if (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) {\n if (maxTimer) {\n _clearTimeout(maxTimer);\n maxTimer = null;\n }\n return Promise.resolve(invoke());\n }\n return new Promise((resolve, reject) => {\n lastRejector = options.rejectOnCancel ? reject : resolve;\n lastInvoker = invoke;\n if (maxDuration && !maxTimer) {\n maxTimer = setTimeout(() => {\n if (timer)\n _clearTimeout(timer);\n maxTimer = null;\n resolve(lastInvoker());\n }, maxDuration);\n }\n timer = setTimeout(() => {\n if (maxTimer)\n _clearTimeout(maxTimer);\n maxTimer = null;\n resolve(invoke());\n }, duration);\n });\n };\n return filter;\n}\nfunction throttleFilter(...args) {\n let lastExec = 0;\n let timer;\n let isLeading = true;\n let lastRejector = noop;\n let lastValue;\n let ms;\n let trailing;\n let leading;\n let rejectOnCancel;\n if (!isRef(args[0]) && typeof args[0] === \"object\")\n ({ delay: ms, trailing = true, leading = true, rejectOnCancel = false } = args[0]);\n else\n [ms, trailing = true, leading = true, rejectOnCancel = false] = args;\n const clear = () => {\n if (timer) {\n clearTimeout(timer);\n timer = void 0;\n lastRejector();\n lastRejector = noop;\n }\n };\n const filter = (_invoke) => {\n const duration = toValue$1(ms);\n const elapsed = Date.now() - lastExec;\n const invoke = () => {\n return lastValue = _invoke();\n };\n clear();\n if (duration <= 0) {\n lastExec = Date.now();\n return invoke();\n }\n if (elapsed > duration && (leading || !isLeading)) {\n lastExec = Date.now();\n invoke();\n } else if (trailing) {\n lastValue = new Promise((resolve, reject) => {\n lastRejector = rejectOnCancel ? reject : resolve;\n timer = setTimeout(() => {\n lastExec = Date.now();\n isLeading = true;\n resolve(invoke());\n clear();\n }, Math.max(0, duration - elapsed));\n });\n }\n if (!leading && !timer)\n timer = setTimeout(() => isLeading = true, duration);\n isLeading = false;\n return lastValue;\n };\n return filter;\n}\nfunction pausableFilter(extendFilter = bypassFilter, options = {}) {\n const {\n initialState = \"active\"\n } = options;\n const isActive = toRef(initialState === \"active\");\n function pause() {\n isActive.value = false;\n }\n function resume() {\n isActive.value = true;\n }\n const eventFilter = (...args) => {\n if (isActive.value)\n extendFilter(...args);\n };\n return { isActive: readonly(isActive), pause, resume, eventFilter };\n}\n\nfunction cacheStringFunction(fn) {\n const cache = /* @__PURE__ */ Object.create(null);\n return (str) => {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n };\n}\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, \"-$1\").toLowerCase());\nconst camelizeRE = /-(\\w)/g;\nconst camelize = cacheStringFunction((str) => {\n return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : \"\");\n});\n\nfunction promiseTimeout(ms, throwOnTimeout = false, reason = \"Timeout\") {\n return new Promise((resolve, reject) => {\n if (throwOnTimeout)\n setTimeout(() => reject(reason), ms);\n else\n setTimeout(resolve, ms);\n });\n}\nfunction identity(arg) {\n return arg;\n}\nfunction createSingletonPromise(fn) {\n let _promise;\n function wrapper() {\n if (!_promise)\n _promise = fn();\n return _promise;\n }\n wrapper.reset = async () => {\n const _prev = _promise;\n _promise = void 0;\n if (_prev)\n await _prev;\n };\n return wrapper;\n}\nfunction invoke(fn) {\n return fn();\n}\nfunction containsProp(obj, ...props) {\n return props.some((k) => k in obj);\n}\nfunction increaseWithUnit(target, delta) {\n var _a;\n if (typeof target === \"number\")\n return target + delta;\n const value = ((_a = target.match(/^-?\\d+\\.?\\d*/)) == null ? void 0 : _a[0]) || \"\";\n const unit = target.slice(value.length);\n const result = Number.parseFloat(value) + delta;\n if (Number.isNaN(result))\n return target;\n return result + unit;\n}\nfunction pxValue(px) {\n return px.endsWith(\"rem\") ? Number.parseFloat(px) * 16 : Number.parseFloat(px);\n}\nfunction objectPick(obj, keys, omitUndefined = false) {\n return keys.reduce((n, k) => {\n if (k in obj) {\n if (!omitUndefined || obj[k] !== void 0)\n n[k] = obj[k];\n }\n return n;\n }, {});\n}\nfunction objectOmit(obj, keys, omitUndefined = false) {\n return Object.fromEntries(Object.entries(obj).filter(([key, value]) => {\n return (!omitUndefined || value !== void 0) && !keys.includes(key);\n }));\n}\nfunction objectEntries(obj) {\n return Object.entries(obj);\n}\nfunction getLifeCycleTarget(target) {\n return target || getCurrentInstance();\n}\nfunction toArray(value) {\n return Array.isArray(value) ? value : [value];\n}\n\nfunction toRef(...args) {\n if (args.length !== 1)\n return toRef$1(...args);\n const r = args[0];\n return typeof r === \"function\" ? readonly(customRef(() => ({ get: r, set: noop }))) : ref(r);\n}\nconst resolveRef = toRef;\n\nfunction reactivePick(obj, ...keys) {\n const flatKeys = keys.flat();\n const predicate = flatKeys[0];\n return reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => predicate(toValue$1(v), k))) : Object.fromEntries(flatKeys.map((k) => [k, toRef(obj, k)])));\n}\n\nfunction refAutoReset(defaultValue, afterMs = 1e4) {\n return customRef((track, trigger) => {\n let value = toValue$1(defaultValue);\n let timer;\n const resetAfter = () => setTimeout(() => {\n value = toValue$1(defaultValue);\n trigger();\n }, toValue$1(afterMs));\n tryOnScopeDispose(() => {\n clearTimeout(timer);\n });\n return {\n get() {\n track();\n return value;\n },\n set(newValue) {\n value = newValue;\n trigger();\n clearTimeout(timer);\n timer = resetAfter();\n }\n };\n });\n}\n\nfunction useDebounceFn(fn, ms = 200, options = {}) {\n return createFilterWrapper(\n debounceFilter(ms, options),\n fn\n );\n}\n\nfunction refDebounced(value, ms = 200, options = {}) {\n const debounced = ref(value.value);\n const updater = useDebounceFn(() => {\n debounced.value = value.value;\n }, ms, options);\n watch(value, () => updater());\n return debounced;\n}\n\nfunction refDefault(source, defaultValue) {\n return computed({\n get() {\n var _a;\n return (_a = source.value) != null ? _a : defaultValue;\n },\n set(value) {\n source.value = value;\n }\n });\n}\n\nfunction useThrottleFn(fn, ms = 200, trailing = false, leading = true, rejectOnCancel = false) {\n return createFilterWrapper(\n throttleFilter(ms, trailing, leading, rejectOnCancel),\n fn\n );\n}\n\nfunction refThrottled(value, delay = 200, trailing = true, leading = true) {\n if (delay <= 0)\n return value;\n const throttled = ref(value.value);\n const updater = useThrottleFn(() => {\n throttled.value = value.value;\n }, delay, trailing, leading);\n watch(value, () => updater());\n return throttled;\n}\n\nfunction refWithControl(initial, options = {}) {\n let source = initial;\n let track;\n let trigger;\n const ref = customRef((_track, _trigger) => {\n track = _track;\n trigger = _trigger;\n return {\n get() {\n return get();\n },\n set(v) {\n set(v);\n }\n };\n });\n function get(tracking = true) {\n if (tracking)\n track();\n return source;\n }\n function set(value, triggering = true) {\n var _a, _b;\n if (value === source)\n return;\n const old = source;\n if (((_a = options.onBeforeChange) == null ? void 0 : _a.call(options, value, old)) === false)\n return;\n source = value;\n (_b = options.onChanged) == null ? void 0 : _b.call(options, value, old);\n if (triggering)\n trigger();\n }\n const untrackedGet = () => get(false);\n const silentSet = (v) => set(v, false);\n const peek = () => get(false);\n const lay = (v) => set(v, false);\n return extendRef(\n ref,\n {\n get,\n set,\n untrackedGet,\n silentSet,\n peek,\n lay\n },\n { enumerable: true }\n );\n}\nconst controlledRef = refWithControl;\n\nfunction set(...args) {\n if (args.length === 2) {\n const [ref, value] = args;\n ref.value = value;\n }\n if (args.length === 3) {\n const [target, key, value] = args;\n target[key] = value;\n }\n}\n\nfunction watchWithFilter(source, cb, options = {}) {\n const {\n eventFilter = bypassFilter,\n ...watchOptions\n } = options;\n return watch(\n source,\n createFilterWrapper(\n eventFilter,\n cb\n ),\n watchOptions\n );\n}\n\nfunction watchPausable(source, cb, options = {}) {\n const {\n eventFilter: filter,\n initialState = \"active\",\n ...watchOptions\n } = options;\n const { eventFilter, pause, resume, isActive } = pausableFilter(filter, { initialState });\n const stop = watchWithFilter(\n source,\n cb,\n {\n ...watchOptions,\n eventFilter\n }\n );\n return { stop, pause, resume, isActive };\n}\n\nfunction syncRef(left, right, ...[options]) {\n const {\n flush = \"sync\",\n deep = false,\n immediate = true,\n direction = \"both\",\n transform = {}\n } = options || {};\n const watchers = [];\n const transformLTR = \"ltr\" in transform && transform.ltr || ((v) => v);\n const transformRTL = \"rtl\" in transform && transform.rtl || ((v) => v);\n if (direction === \"both\" || direction === \"ltr\") {\n watchers.push(watchPausable(\n left,\n (newValue) => {\n watchers.forEach((w) => w.pause());\n right.value = transformLTR(newValue);\n watchers.forEach((w) => w.resume());\n },\n { flush, deep, immediate }\n ));\n }\n if (direction === \"both\" || direction === \"rtl\") {\n watchers.push(watchPausable(\n right,\n (newValue) => {\n watchers.forEach((w) => w.pause());\n left.value = transformRTL(newValue);\n watchers.forEach((w) => w.resume());\n },\n { flush, deep, immediate }\n ));\n }\n const stop = () => {\n watchers.forEach((w) => w.stop());\n };\n return stop;\n}\n\nfunction syncRefs(source, targets, options = {}) {\n const {\n flush = \"sync\",\n deep = false,\n immediate = true\n } = options;\n const targetsArray = toArray(targets);\n return watch(\n source,\n (newValue) => targetsArray.forEach((target) => target.value = newValue),\n { flush, deep, immediate }\n );\n}\n\nfunction toRefs(objectRef, options = {}) {\n if (!isRef(objectRef))\n return toRefs$1(objectRef);\n const result = Array.isArray(objectRef.value) ? Array.from({ length: objectRef.value.length }) : {};\n for (const key in objectRef.value) {\n result[key] = customRef(() => ({\n get() {\n return objectRef.value[key];\n },\n set(v) {\n var _a;\n const replaceRef = (_a = toValue$1(options.replaceRef)) != null ? _a : true;\n if (replaceRef) {\n if (Array.isArray(objectRef.value)) {\n const copy = [...objectRef.value];\n copy[key] = v;\n objectRef.value = copy;\n } else {\n const newObject = { ...objectRef.value, [key]: v };\n Object.setPrototypeOf(newObject, Object.getPrototypeOf(objectRef.value));\n objectRef.value = newObject;\n }\n } else {\n objectRef.value[key] = v;\n }\n }\n }));\n }\n return result;\n}\n\nconst toValue = toValue$1;\nconst resolveUnref = toValue$1;\n\nfunction tryOnBeforeMount(fn, sync = true, target) {\n const instance = getLifeCycleTarget(target);\n if (instance)\n onBeforeMount(fn, target);\n else if (sync)\n fn();\n else\n nextTick(fn);\n}\n\nfunction tryOnBeforeUnmount(fn, target) {\n const instance = getLifeCycleTarget(target);\n if (instance)\n onBeforeUnmount(fn, target);\n}\n\nfunction tryOnMounted(fn, sync = true, target) {\n const instance = getLifeCycleTarget();\n if (instance)\n onMounted(fn, target);\n else if (sync)\n fn();\n else\n nextTick(fn);\n}\n\nfunction tryOnUnmounted(fn, target) {\n const instance = getLifeCycleTarget(target);\n if (instance)\n onUnmounted(fn, target);\n}\n\nfunction createUntil(r, isNot = false) {\n function toMatch(condition, { flush = \"sync\", deep = false, timeout, throwOnTimeout } = {}) {\n let stop = null;\n const watcher = new Promise((resolve) => {\n stop = watch(\n r,\n (v) => {\n if (condition(v) !== isNot) {\n if (stop)\n stop();\n else\n nextTick(() => stop == null ? void 0 : stop());\n resolve(v);\n }\n },\n {\n flush,\n deep,\n immediate: true\n }\n );\n });\n const promises = [watcher];\n if (timeout != null) {\n promises.push(\n promiseTimeout(timeout, throwOnTimeout).then(() => toValue$1(r)).finally(() => stop == null ? void 0 : stop())\n );\n }\n return Promise.race(promises);\n }\n function toBe(value, options) {\n if (!isRef(value))\n return toMatch((v) => v === value, options);\n const { flush = \"sync\", deep = false, timeout, throwOnTimeout } = options != null ? options : {};\n let stop = null;\n const watcher = new Promise((resolve) => {\n stop = watch(\n [r, value],\n ([v1, v2]) => {\n if (isNot !== (v1 === v2)) {\n if (stop)\n stop();\n else\n nextTick(() => stop == null ? void 0 : stop());\n resolve(v1);\n }\n },\n {\n flush,\n deep,\n immediate: true\n }\n );\n });\n const promises = [watcher];\n if (timeout != null) {\n promises.push(\n promiseTimeout(timeout, throwOnTimeout).then(() => toValue$1(r)).finally(() => {\n stop == null ? void 0 : stop();\n return toValue$1(r);\n })\n );\n }\n return Promise.race(promises);\n }\n function toBeTruthy(options) {\n return toMatch((v) => Boolean(v), options);\n }\n function toBeNull(options) {\n return toBe(null, options);\n }\n function toBeUndefined(options) {\n return toBe(void 0, options);\n }\n function toBeNaN(options) {\n return toMatch(Number.isNaN, options);\n }\n function toContains(value, options) {\n return toMatch((v) => {\n const array = Array.from(v);\n return array.includes(value) || array.includes(toValue$1(value));\n }, options);\n }\n function changed(options) {\n return changedTimes(1, options);\n }\n function changedTimes(n = 1, options) {\n let count = -1;\n return toMatch(() => {\n count += 1;\n return count >= n;\n }, options);\n }\n if (Array.isArray(toValue$1(r))) {\n const instance = {\n toMatch,\n toContains,\n changed,\n changedTimes,\n get not() {\n return createUntil(r, !isNot);\n }\n };\n return instance;\n } else {\n const instance = {\n toMatch,\n toBe,\n toBeTruthy,\n toBeNull,\n toBeNaN,\n toBeUndefined,\n changed,\n changedTimes,\n get not() {\n return createUntil(r, !isNot);\n }\n };\n return instance;\n }\n}\nfunction until(r) {\n return createUntil(r);\n}\n\nfunction defaultComparator(value, othVal) {\n return value === othVal;\n}\nfunction useArrayDifference(...args) {\n var _a, _b;\n const list = args[0];\n const values = args[1];\n let compareFn = (_a = args[2]) != null ? _a : defaultComparator;\n const {\n symmetric = false\n } = (_b = args[3]) != null ? _b : {};\n if (typeof compareFn === \"string\") {\n const key = compareFn;\n compareFn = (value, othVal) => value[key] === othVal[key];\n }\n const diff1 = computed(() => toValue$1(list).filter((x) => toValue$1(values).findIndex((y) => compareFn(x, y)) === -1));\n if (symmetric) {\n const diff2 = computed(() => toValue$1(values).filter((x) => toValue$1(list).findIndex((y) => compareFn(x, y)) === -1));\n return computed(() => symmetric ? [...toValue$1(diff1), ...toValue$1(diff2)] : toValue$1(diff1));\n } else {\n return diff1;\n }\n}\n\nfunction useArrayEvery(list, fn) {\n return computed(() => toValue$1(list).every((element, index, array) => fn(toValue$1(element), index, array)));\n}\n\nfunction useArrayFilter(list, fn) {\n return computed(() => toValue$1(list).map((i) => toValue$1(i)).filter(fn));\n}\n\nfunction useArrayFind(list, fn) {\n return computed(() => toValue$1(\n toValue$1(list).find((element, index, array) => fn(toValue$1(element), index, array))\n ));\n}\n\nfunction useArrayFindIndex(list, fn) {\n return computed(() => toValue$1(list).findIndex((element, index, array) => fn(toValue$1(element), index, array)));\n}\n\nfunction findLast(arr, cb) {\n let index = arr.length;\n while (index-- > 0) {\n if (cb(arr[index], index, arr))\n return arr[index];\n }\n return void 0;\n}\nfunction useArrayFindLast(list, fn) {\n return computed(() => toValue$1(\n !Array.prototype.findLast ? findLast(toValue$1(list), (element, index, array) => fn(toValue$1(element), index, array)) : toValue$1(list).findLast((element, index, array) => fn(toValue$1(element), index, array))\n ));\n}\n\nfunction isArrayIncludesOptions(obj) {\n return isObject(obj) && containsProp(obj, \"formIndex\", \"comparator\");\n}\nfunction useArrayIncludes(...args) {\n var _a;\n const list = args[0];\n const value = args[1];\n let comparator = args[2];\n let formIndex = 0;\n if (isArrayIncludesOptions(comparator)) {\n formIndex = (_a = comparator.fromIndex) != null ? _a : 0;\n comparator = comparator.comparator;\n }\n if (typeof comparator === \"string\") {\n const key = comparator;\n comparator = (element, value2) => element[key] === toValue$1(value2);\n }\n comparator = comparator != null ? comparator : (element, value2) => element === toValue$1(value2);\n return computed(() => toValue$1(list).slice(formIndex).some((element, index, array) => comparator(\n toValue$1(element),\n toValue$1(value),\n index,\n toValue$1(array)\n )));\n}\n\nfunction useArrayJoin(list, separator) {\n return computed(() => toValue$1(list).map((i) => toValue$1(i)).join(toValue$1(separator)));\n}\n\nfunction useArrayMap(list, fn) {\n return computed(() => toValue$1(list).map((i) => toValue$1(i)).map(fn));\n}\n\nfunction useArrayReduce(list, reducer, ...args) {\n const reduceCallback = (sum, value, index) => reducer(toValue$1(sum), toValue$1(value), index);\n return computed(() => {\n const resolved = toValue$1(list);\n return args.length ? resolved.reduce(reduceCallback, typeof args[0] === \"function\" ? toValue$1(args[0]()) : toValue$1(args[0])) : resolved.reduce(reduceCallback);\n });\n}\n\nfunction useArraySome(list, fn) {\n return computed(() => toValue$1(list).some((element, index, array) => fn(toValue$1(element), index, array)));\n}\n\nfunction uniq(array) {\n return Array.from(new Set(array));\n}\nfunction uniqueElementsBy(array, fn) {\n return array.reduce((acc, v) => {\n if (!acc.some((x) => fn(v, x, array)))\n acc.push(v);\n return acc;\n }, []);\n}\nfunction useArrayUnique(list, compareFn) {\n return computed(() => {\n const resolvedList = toValue$1(list).map((element) => toValue$1(element));\n return compareFn ? uniqueElementsBy(resolvedList, compareFn) : uniq(resolvedList);\n });\n}\n\nfunction useCounter(initialValue = 0, options = {}) {\n let _initialValue = unref(initialValue);\n const count = shallowRef(initialValue);\n const {\n max = Number.POSITIVE_INFINITY,\n min = Number.NEGATIVE_INFINITY\n } = options;\n const inc = (delta = 1) => count.value = Math.max(Math.min(max, count.value + delta), min);\n const dec = (delta = 1) => count.value = Math.min(Math.max(min, count.value - delta), max);\n const get = () => count.value;\n const set = (val) => count.value = Math.max(min, Math.min(max, val));\n const reset = (val = _initialValue) => {\n _initialValue = val;\n return set(val);\n };\n return { count, inc, dec, get, set, reset };\n}\n\nconst REGEX_PARSE = /^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[T\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/i;\nconst REGEX_FORMAT = /[YMDHhms]o|\\[([^\\]]+)\\]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a{1,2}|A{1,2}|m{1,2}|s{1,2}|Z{1,2}|z{1,4}|SSS/g;\nfunction defaultMeridiem(hours, minutes, isLowercase, hasPeriod) {\n let m = hours < 12 ? \"AM\" : \"PM\";\n if (hasPeriod)\n m = m.split(\"\").reduce((acc, curr) => acc += `${curr}.`, \"\");\n return isLowercase ? m.toLowerCase() : m;\n}\nfunction formatOrdinal(num) {\n const suffixes = [\"th\", \"st\", \"nd\", \"rd\"];\n const v = num % 100;\n return num + (suffixes[(v - 20) % 10] || suffixes[v] || suffixes[0]);\n}\nfunction formatDate(date, formatStr, options = {}) {\n var _a;\n const years = date.getFullYear();\n const month = date.getMonth();\n const days = date.getDate();\n const hours = date.getHours();\n const minutes = date.getMinutes();\n const seconds = date.getSeconds();\n const milliseconds = date.getMilliseconds();\n const day = date.getDay();\n const meridiem = (_a = options.customMeridiem) != null ? _a : defaultMeridiem;\n const stripTimeZone = (dateString) => {\n var _a2;\n return (_a2 = dateString.split(\" \")[1]) != null ? _a2 : \"\";\n };\n const matches = {\n Yo: () => formatOrdinal(years),\n YY: () => String(years).slice(-2),\n YYYY: () => years,\n M: () => month + 1,\n Mo: () => formatOrdinal(month + 1),\n MM: () => `${month + 1}`.padStart(2, \"0\"),\n MMM: () => date.toLocaleDateString(toValue$1(options.locales), { month: \"short\" }),\n MMMM: () => date.toLocaleDateString(toValue$1(options.locales), { month: \"long\" }),\n D: () => String(days),\n Do: () => formatOrdinal(days),\n DD: () => `${days}`.padStart(2, \"0\"),\n H: () => String(hours),\n Ho: () => formatOrdinal(hours),\n HH: () => `${hours}`.padStart(2, \"0\"),\n h: () => `${hours % 12 || 12}`.padStart(1, \"0\"),\n ho: () => formatOrdinal(hours % 12 || 12),\n hh: () => `${hours % 12 || 12}`.padStart(2, \"0\"),\n m: () => String(minutes),\n mo: () => formatOrdinal(minutes),\n mm: () => `${minutes}`.padStart(2, \"0\"),\n s: () => String(seconds),\n so: () => formatOrdinal(seconds),\n ss: () => `${seconds}`.padStart(2, \"0\"),\n SSS: () => `${milliseconds}`.padStart(3, \"0\"),\n d: () => day,\n dd: () => date.toLocaleDateString(toValue$1(options.locales), { weekday: \"narrow\" }),\n ddd: () => date.toLocaleDateString(toValue$1(options.locales), { weekday: \"short\" }),\n dddd: () => date.toLocaleDateString(toValue$1(options.locales), { weekday: \"long\" }),\n A: () => meridiem(hours, minutes),\n AA: () => meridiem(hours, minutes, false, true),\n a: () => meridiem(hours, minutes, true),\n aa: () => meridiem(hours, minutes, true, true),\n z: () => stripTimeZone(date.toLocaleDateString(toValue$1(options.locales), { timeZoneName: \"shortOffset\" })),\n zz: () => stripTimeZone(date.toLocaleDateString(toValue$1(options.locales), { timeZoneName: \"shortOffset\" })),\n zzz: () => stripTimeZone(date.toLocaleDateString(toValue$1(options.locales), { timeZoneName: \"shortOffset\" })),\n zzzz: () => stripTimeZone(date.toLocaleDateString(toValue$1(options.locales), { timeZoneName: \"longOffset\" }))\n };\n return formatStr.replace(REGEX_FORMAT, (match, $1) => {\n var _a2, _b;\n return (_b = $1 != null ? $1 : (_a2 = matches[match]) == null ? void 0 : _a2.call(matches)) != null ? _b : match;\n });\n}\nfunction normalizeDate(date) {\n if (date === null)\n return new Date(Number.NaN);\n if (date === void 0)\n return /* @__PURE__ */ new Date();\n if (date instanceof Date)\n return new Date(date);\n if (typeof date === \"string\" && !/Z$/i.test(date)) {\n const d = date.match(REGEX_PARSE);\n if (d) {\n const m = d[2] - 1 || 0;\n const ms = (d[7] || \"0\").substring(0, 3);\n return new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms);\n }\n }\n return new Date(date);\n}\nfunction useDateFormat(date, formatStr = \"HH:mm:ss\", options = {}) {\n return computed(() => formatDate(normalizeDate(toValue$1(date)), toValue$1(formatStr), options));\n}\n\nfunction useIntervalFn(cb, interval = 1e3, options = {}) {\n const {\n immediate = true,\n immediateCallback = false\n } = options;\n let timer = null;\n const isActive = shallowRef(false);\n function clean() {\n if (timer) {\n clearInterval(timer);\n timer = null;\n }\n }\n function pause() {\n isActive.value = false;\n clean();\n }\n function resume() {\n const intervalValue = toValue$1(interval);\n if (intervalValue <= 0)\n return;\n isActive.value = true;\n if (immediateCallback)\n cb();\n clean();\n if (isActive.value)\n timer = setInterval(cb, intervalValue);\n }\n if (immediate && isClient)\n resume();\n if (isRef(interval) || typeof interval === \"function\") {\n const stopWatch = watch(interval, () => {\n if (isActive.value && isClient)\n resume();\n });\n tryOnScopeDispose(stopWatch);\n }\n tryOnScopeDispose(pause);\n return {\n isActive,\n pause,\n resume\n };\n}\n\nfunction useInterval(interval = 1e3, options = {}) {\n const {\n controls: exposeControls = false,\n immediate = true,\n callback\n } = options;\n const counter = shallowRef(0);\n const update = () => counter.value += 1;\n const reset = () => {\n counter.value = 0;\n };\n const controls = useIntervalFn(\n callback ? () => {\n update();\n callback(counter.value);\n } : update,\n interval,\n { immediate }\n );\n if (exposeControls) {\n return {\n counter,\n reset,\n ...controls\n };\n } else {\n return counter;\n }\n}\n\nfunction useLastChanged(source, options = {}) {\n var _a;\n const ms = shallowRef((_a = options.initialValue) != null ? _a : null);\n watch(\n source,\n () => ms.value = timestamp(),\n options\n );\n return ms;\n}\n\nfunction useTimeoutFn(cb, interval, options = {}) {\n const {\n immediate = true,\n immediateCallback = false\n } = options;\n const isPending = shallowRef(false);\n let timer = null;\n function clear() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n }\n function stop() {\n isPending.value = false;\n clear();\n }\n function start(...args) {\n if (immediateCallback)\n cb();\n clear();\n isPending.value = true;\n timer = setTimeout(() => {\n isPending.value = false;\n timer = null;\n cb(...args);\n }, toValue$1(interval));\n }\n if (immediate) {\n isPending.value = true;\n if (isClient)\n start();\n }\n tryOnScopeDispose(stop);\n return {\n isPending: readonly(isPending),\n start,\n stop\n };\n}\n\nfunction useTimeout(interval = 1e3, options = {}) {\n const {\n controls: exposeControls = false,\n callback\n } = options;\n const controls = useTimeoutFn(\n callback != null ? callback : noop,\n interval,\n options\n );\n const ready = computed(() => !controls.isPending.value);\n if (exposeControls) {\n return {\n ready,\n ...controls\n };\n } else {\n return ready;\n }\n}\n\nfunction useToNumber(value, options = {}) {\n const {\n method = \"parseFloat\",\n radix,\n nanToZero\n } = options;\n return computed(() => {\n let resolved = toValue$1(value);\n if (typeof method === \"function\")\n resolved = method(resolved);\n else if (typeof resolved === \"string\")\n resolved = Number[method](resolved, radix);\n if (nanToZero && Number.isNaN(resolved))\n resolved = 0;\n return resolved;\n });\n}\n\nfunction useToString(value) {\n return computed(() => `${toValue$1(value)}`);\n}\n\nfunction useToggle(initialValue = false, options = {}) {\n const {\n truthyValue = true,\n falsyValue = false\n } = options;\n const valueIsRef = isRef(initialValue);\n const _value = shallowRef(initialValue);\n function toggle(value) {\n if (arguments.length) {\n _value.value = value;\n return _value.value;\n } else {\n const truthy = toValue$1(truthyValue);\n _value.value = _value.value === truthy ? toValue$1(falsyValue) : truthy;\n return _value.value;\n }\n }\n if (valueIsRef)\n return toggle;\n else\n return [_value, toggle];\n}\n\nfunction watchArray(source, cb, options) {\n let oldList = (options == null ? void 0 : options.immediate) ? [] : [...typeof source === \"function\" ? source() : Array.isArray(source) ? source : toValue$1(source)];\n return watch(source, (newList, _, onCleanup) => {\n const oldListRemains = Array.from({ length: oldList.length });\n const added = [];\n for (const obj of newList) {\n let found = false;\n for (let i = 0; i < oldList.length; i++) {\n if (!oldListRemains[i] && obj === oldList[i]) {\n oldListRemains[i] = true;\n found = true;\n break;\n }\n }\n if (!found)\n added.push(obj);\n }\n const removed = oldList.filter((_2, i) => !oldListRemains[i]);\n cb(newList, oldList, added, removed, onCleanup);\n oldList = [...newList];\n }, options);\n}\n\nfunction watchAtMost(source, cb, options) {\n const {\n count,\n ...watchOptions\n } = options;\n const current = shallowRef(0);\n const stop = watchWithFilter(\n source,\n (...args) => {\n current.value += 1;\n if (current.value >= toValue$1(count))\n nextTick(() => stop());\n cb(...args);\n },\n watchOptions\n );\n return { count: current, stop };\n}\n\nfunction watchDebounced(source, cb, options = {}) {\n const {\n debounce = 0,\n maxWait = void 0,\n ...watchOptions\n } = options;\n return watchWithFilter(\n source,\n cb,\n {\n ...watchOptions,\n eventFilter: debounceFilter(debounce, { maxWait })\n }\n );\n}\n\nfunction watchDeep(source, cb, options) {\n return watch(\n source,\n cb,\n {\n ...options,\n deep: true\n }\n );\n}\n\nfunction watchIgnorable(source, cb, options = {}) {\n const {\n eventFilter = bypassFilter,\n ...watchOptions\n } = options;\n const filteredCb = createFilterWrapper(\n eventFilter,\n cb\n );\n let ignoreUpdates;\n let ignorePrevAsyncUpdates;\n let stop;\n if (watchOptions.flush === \"sync\") {\n const ignore = shallowRef(false);\n ignorePrevAsyncUpdates = () => {\n };\n ignoreUpdates = (updater) => {\n ignore.value = true;\n updater();\n ignore.value = false;\n };\n stop = watch(\n source,\n (...args) => {\n if (!ignore.value)\n filteredCb(...args);\n },\n watchOptions\n );\n } else {\n const disposables = [];\n const ignoreCounter = shallowRef(0);\n const syncCounter = shallowRef(0);\n ignorePrevAsyncUpdates = () => {\n ignoreCounter.value = syncCounter.value;\n };\n disposables.push(\n watch(\n source,\n () => {\n syncCounter.value++;\n },\n { ...watchOptions, flush: \"sync\" }\n )\n );\n ignoreUpdates = (updater) => {\n const syncCounterPrev = syncCounter.value;\n updater();\n ignoreCounter.value += syncCounter.value - syncCounterPrev;\n };\n disposables.push(\n watch(\n source,\n (...args) => {\n const ignore = ignoreCounter.value > 0 && ignoreCounter.value === syncCounter.value;\n ignoreCounter.value = 0;\n syncCounter.value = 0;\n if (ignore)\n return;\n filteredCb(...args);\n },\n watchOptions\n )\n );\n stop = () => {\n disposables.forEach((fn) => fn());\n };\n }\n return { stop, ignoreUpdates, ignorePrevAsyncUpdates };\n}\n\nfunction watchImmediate(source, cb, options) {\n return watch(\n source,\n cb,\n {\n ...options,\n immediate: true\n }\n );\n}\n\nfunction watchOnce(source, cb, options) {\n const stop = watch(source, (...args) => {\n nextTick(() => stop());\n return cb(...args);\n }, options);\n return stop;\n}\n\nfunction watchThrottled(source, cb, options = {}) {\n const {\n throttle = 0,\n trailing = true,\n leading = true,\n ...watchOptions\n } = options;\n return watchWithFilter(\n source,\n cb,\n {\n ...watchOptions,\n eventFilter: throttleFilter(throttle, trailing, leading)\n }\n );\n}\n\nfunction watchTriggerable(source, cb, options = {}) {\n let cleanupFn;\n function onEffect() {\n if (!cleanupFn)\n return;\n const fn = cleanupFn;\n cleanupFn = void 0;\n fn();\n }\n function onCleanup(callback) {\n cleanupFn = callback;\n }\n const _cb = (value, oldValue) => {\n onEffect();\n return cb(value, oldValue, onCleanup);\n };\n const res = watchIgnorable(source, _cb, options);\n const { ignoreUpdates } = res;\n const trigger = () => {\n let res2;\n ignoreUpdates(() => {\n res2 = _cb(getWatchSources(source), getOldValue(source));\n });\n return res2;\n };\n return {\n ...res,\n trigger\n };\n}\nfunction getWatchSources(sources) {\n if (isReactive(sources))\n return sources;\n if (Array.isArray(sources))\n return sources.map((item) => toValue$1(item));\n return toValue$1(sources);\n}\nfunction getOldValue(source) {\n return Array.isArray(source) ? source.map(() => void 0) : void 0;\n}\n\nfunction whenever(source, cb, options) {\n const stop = watch(\n source,\n (v, ov, onInvalidate) => {\n if (v) {\n if (options == null ? void 0 : options.once)\n nextTick(() => stop());\n cb(v, ov, onInvalidate);\n }\n },\n {\n ...options,\n once: false\n }\n );\n return stop;\n}\n\nexport { assert, refAutoReset as autoResetRef, bypassFilter, camelize, clamp, computedEager, computedWithControl, containsProp, computedWithControl as controlledComputed, controlledRef, createEventHook, createFilterWrapper, createGlobalState, createInjectionState, reactify as createReactiveFn, createRef, createSharedComposable, createSingletonPromise, debounceFilter, refDebounced as debouncedRef, watchDebounced as debouncedWatch, computedEager as eagerComputed, extendRef, formatDate, get, getLifeCycleTarget, hasOwn, hyphenate, identity, watchIgnorable as ignorableWatch, increaseWithUnit, injectLocal, invoke, isClient, isDef, isDefined, isIOS, isObject, isWorker, makeDestructurable, noop, normalizeDate, notNullish, now, objectEntries, objectOmit, objectPick, pausableFilter, watchPausable as pausableWatch, promiseTimeout, provideLocal, pxValue, rand, reactify, reactifyObject, reactiveComputed, reactiveOmit, reactivePick, refAutoReset, refDebounced, refDefault, refThrottled, refWithControl, resolveRef, resolveUnref, set, syncRef, syncRefs, throttleFilter, refThrottled as throttledRef, watchThrottled as throttledWatch, timestamp, toArray, toReactive, toRef, toRefs, toValue, tryOnBeforeMount, tryOnBeforeUnmount, tryOnMounted, tryOnScopeDispose, tryOnUnmounted, until, useArrayDifference, useArrayEvery, useArrayFilter, useArrayFind, useArrayFindIndex, useArrayFindLast, useArrayIncludes, useArrayJoin, useArrayMap, useArrayReduce, useArraySome, useArrayUnique, useCounter, useDateFormat, refDebounced as useDebounce, useDebounceFn, useInterval, useIntervalFn, useLastChanged, refThrottled as useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useToNumber, useToString, useToggle, watchArray, watchAtMost, watchDebounced, watchDeep, watchIgnorable, watchImmediate, watchOnce, watchPausable, watchThrottled, watchTriggerable, watchWithFilter, whenever };\n", "import { noop, makeDestructurable, camelize, isClient, toArray, watchImmediate, isObject, tryOnScopeDispose, isIOS, notNullish, tryOnMounted, objectOmit, promiseTimeout, until, injectLocal, provideLocal, pxValue, increaseWithUnit, objectEntries, createRef, createSingletonPromise, useTimeoutFn, pausableWatch, toRef, createEventHook, useIntervalFn, computedWithControl, timestamp, pausableFilter, watchIgnorable, debounceFilter, bypassFilter, createFilterWrapper, toRefs, watchOnce, containsProp, hasOwn, throttleFilter, useDebounceFn, useThrottleFn, tryOnUnmounted, clamp, syncRef, objectPick, watchWithFilter, identity, isDef, whenever, isWorker } from '@vueuse/shared';\nexport * from '@vueuse/shared';\nimport { isRef, shallowRef, ref, watchEffect, computed, inject, defineComponent, h, TransitionGroup, shallowReactive, Fragment, toValue, unref, getCurrentInstance, onMounted, watch, customRef, onUpdated, readonly, reactive, hasInjectionContext, toRaw, nextTick, markRaw, getCurrentScope, isReadonly, onBeforeUpdate } from 'vue';\n\nfunction computedAsync(evaluationCallback, initialState, optionsOrRef) {\n let options;\n if (isRef(optionsOrRef)) {\n options = {\n evaluating: optionsOrRef\n };\n } else {\n options = optionsOrRef || {};\n }\n const {\n lazy = false,\n evaluating = void 0,\n shallow = true,\n onError = noop\n } = options;\n const started = shallowRef(!lazy);\n const current = shallow ? shallowRef(initialState) : ref(initialState);\n let counter = 0;\n watchEffect(async (onInvalidate) => {\n if (!started.value)\n return;\n counter++;\n const counterAtBeginning = counter;\n let hasFinished = false;\n if (evaluating) {\n Promise.resolve().then(() => {\n evaluating.value = true;\n });\n }\n try {\n const result = await evaluationCallback((cancelCallback) => {\n onInvalidate(() => {\n if (evaluating)\n evaluating.value = false;\n if (!hasFinished)\n cancelCallback();\n });\n });\n if (counterAtBeginning === counter)\n current.value = result;\n } catch (e) {\n onError(e);\n } finally {\n if (evaluating && counterAtBeginning === counter)\n evaluating.value = false;\n hasFinished = true;\n }\n });\n if (lazy) {\n return computed(() => {\n started.value = true;\n return current.value;\n });\n } else {\n return current;\n }\n}\n\nfunction computedInject(key, options, defaultSource, treatDefaultAsFactory) {\n let source = inject(key);\n if (defaultSource)\n source = inject(key, defaultSource);\n if (treatDefaultAsFactory)\n source = inject(key, defaultSource, treatDefaultAsFactory);\n if (typeof options === \"function\") {\n return computed((ctx) => options(source, ctx));\n } else {\n return computed({\n get: (ctx) => options.get(source, ctx),\n set: options.set\n });\n }\n}\n\nfunction createReusableTemplate(options = {}) {\n const {\n inheritAttrs = true\n } = options;\n const render = shallowRef();\n const define = /*@__PURE__*/ defineComponent({\n setup(_, { slots }) {\n return () => {\n render.value = slots.default;\n };\n }\n });\n const reuse = /*@__PURE__*/ defineComponent({\n inheritAttrs,\n props: options.props,\n setup(props, { attrs, slots }) {\n return () => {\n var _a;\n if (!render.value && process.env.NODE_ENV !== \"production\")\n throw new Error(\"[VueUse] Failed to find the definition of reusable template\");\n const vnode = (_a = render.value) == null ? void 0 : _a.call(render, {\n ...options.props == null ? keysToCamelKebabCase(attrs) : props,\n $slots: slots\n });\n return inheritAttrs && (vnode == null ? void 0 : vnode.length) === 1 ? vnode[0] : vnode;\n };\n }\n });\n return makeDestructurable(\n { define, reuse },\n [define, reuse]\n );\n}\nfunction keysToCamelKebabCase(obj) {\n const newObj = {};\n for (const key in obj)\n newObj[camelize(key)] = obj[key];\n return newObj;\n}\n\nfunction createTemplatePromise(options = {}) {\n let index = 0;\n const instances = ref([]);\n function create(...args) {\n const props = shallowReactive({\n key: index++,\n args,\n promise: void 0,\n resolve: () => {\n },\n reject: () => {\n },\n isResolving: false,\n options\n });\n instances.value.push(props);\n props.promise = new Promise((_resolve, _reject) => {\n props.resolve = (v) => {\n props.isResolving = true;\n return _resolve(v);\n };\n props.reject = _reject;\n }).finally(() => {\n props.promise = void 0;\n const index2 = instances.value.indexOf(props);\n if (index2 !== -1)\n instances.value.splice(index2, 1);\n });\n return props.promise;\n }\n function start(...args) {\n if (options.singleton && instances.value.length > 0)\n return instances.value[0].promise;\n return create(...args);\n }\n const component = /*@__PURE__*/ defineComponent((_, { slots }) => {\n const renderList = () => instances.value.map((props) => {\n var _a;\n return h(Fragment, { key: props.key }, (_a = slots.default) == null ? void 0 : _a.call(slots, props));\n });\n if (options.transition)\n return () => h(TransitionGroup, options.transition, renderList);\n return renderList;\n });\n component.start = start;\n return component;\n}\n\nfunction createUnrefFn(fn) {\n return function(...args) {\n return fn.apply(this, args.map((i) => toValue(i)));\n };\n}\n\nconst defaultWindow = isClient ? window : void 0;\nconst defaultDocument = isClient ? window.document : void 0;\nconst defaultNavigator = isClient ? window.navigator : void 0;\nconst defaultLocation = isClient ? window.location : void 0;\n\nfunction unrefElement(elRef) {\n var _a;\n const plain = toValue(elRef);\n return (_a = plain == null ? void 0 : plain.$el) != null ? _a : plain;\n}\n\nfunction useEventListener(...args) {\n const cleanups = [];\n const cleanup = () => {\n cleanups.forEach((fn) => fn());\n cleanups.length = 0;\n };\n const register = (el, event, listener, options) => {\n el.addEventListener(event, listener, options);\n return () => el.removeEventListener(event, listener, options);\n };\n const firstParamTargets = computed(() => {\n const test = toArray(toValue(args[0])).filter((e) => e != null);\n return test.every((e) => typeof e !== \"string\") ? test : void 0;\n });\n const stopWatch = watchImmediate(\n () => {\n var _a, _b;\n return [\n (_b = (_a = firstParamTargets.value) == null ? void 0 : _a.map((e) => unrefElement(e))) != null ? _b : [defaultWindow].filter((e) => e != null),\n toArray(toValue(firstParamTargets.value ? args[1] : args[0])),\n toArray(unref(firstParamTargets.value ? args[2] : args[1])),\n // @ts-expect-error - TypeScript gets the correct types, but somehow still complains\n toValue(firstParamTargets.value ? args[3] : args[2])\n ];\n },\n ([raw_targets, raw_events, raw_listeners, raw_options]) => {\n cleanup();\n if (!(raw_targets == null ? void 0 : raw_targets.length) || !(raw_events == null ? void 0 : raw_events.length) || !(raw_listeners == null ? void 0 : raw_listeners.length))\n return;\n const optionsClone = isObject(raw_options) ? { ...raw_options } : raw_options;\n cleanups.push(\n ...raw_targets.flatMap(\n (el) => raw_events.flatMap(\n (event) => raw_listeners.map((listener) => register(el, event, listener, optionsClone))\n )\n )\n );\n },\n { flush: \"post\" }\n );\n const stop = () => {\n stopWatch();\n cleanup();\n };\n tryOnScopeDispose(cleanup);\n return stop;\n}\n\nlet _iOSWorkaround = false;\nfunction onClickOutside(target, handler, options = {}) {\n const { window = defaultWindow, ignore = [], capture = true, detectIframe = false, controls = false } = options;\n if (!window) {\n return controls ? { stop: noop, cancel: noop, trigger: noop } : noop;\n }\n if (isIOS && !_iOSWorkaround) {\n _iOSWorkaround = true;\n const listenerOptions = { passive: true };\n Array.from(window.document.body.children).forEach((el) => useEventListener(el, \"click\", noop, listenerOptions));\n useEventListener(window.document.documentElement, \"click\", noop, listenerOptions);\n }\n let shouldListen = true;\n const shouldIgnore = (event) => {\n return toValue(ignore).some((target2) => {\n if (typeof target2 === \"string\") {\n return Array.from(window.document.querySelectorAll(target2)).some((el) => el === event.target || event.composedPath().includes(el));\n } else {\n const el = unrefElement(target2);\n return el && (event.target === el || event.composedPath().includes(el));\n }\n });\n };\n function hasMultipleRoots(target2) {\n const vm = toValue(target2);\n return vm && vm.$.subTree.shapeFlag === 16;\n }\n function checkMultipleRoots(target2, event) {\n const vm = toValue(target2);\n const children = vm.$.subTree && vm.$.subTree.children;\n if (children == null || !Array.isArray(children))\n return false;\n return children.some((child) => child.el === event.target || event.composedPath().includes(child.el));\n }\n const listener = (event) => {\n const el = unrefElement(target);\n if (event.target == null)\n return;\n if (!(el instanceof Element) && hasMultipleRoots(target) && checkMultipleRoots(target, event))\n return;\n if (!el || el === event.target || event.composedPath().includes(el))\n return;\n if (\"detail\" in event && event.detail === 0)\n shouldListen = !shouldIgnore(event);\n if (!shouldListen) {\n shouldListen = true;\n return;\n }\n handler(event);\n };\n let isProcessingClick = false;\n const cleanup = [\n useEventListener(window, \"click\", (event) => {\n if (!isProcessingClick) {\n isProcessingClick = true;\n setTimeout(() => {\n isProcessingClick = false;\n }, 0);\n listener(event);\n }\n }, { passive: true, capture }),\n useEventListener(window, \"pointerdown\", (e) => {\n const el = unrefElement(target);\n shouldListen = !shouldIgnore(e) && !!(el && !e.composedPath().includes(el));\n }, { passive: true }),\n detectIframe && useEventListener(window, \"blur\", (event) => {\n setTimeout(() => {\n var _a;\n const el = unrefElement(target);\n if (((_a = window.document.activeElement) == null ? void 0 : _a.tagName) === \"IFRAME\" && !(el == null ? void 0 : el.contains(window.document.activeElement))) {\n handler(event);\n }\n }, 0);\n }, { passive: true })\n ].filter(Boolean);\n const stop = () => cleanup.forEach((fn) => fn());\n if (controls) {\n return {\n stop,\n cancel: () => {\n shouldListen = false;\n },\n trigger: (event) => {\n shouldListen = true;\n listener(event);\n shouldListen = false;\n }\n };\n }\n return stop;\n}\n\nfunction useMounted() {\n const isMounted = shallowRef(false);\n const instance = getCurrentInstance();\n if (instance) {\n onMounted(() => {\n isMounted.value = true;\n }, instance);\n }\n return isMounted;\n}\n\nfunction useSupported(callback) {\n const isMounted = useMounted();\n return computed(() => {\n isMounted.value;\n return Boolean(callback());\n });\n}\n\nfunction useMutationObserver(target, callback, options = {}) {\n const { window = defaultWindow, ...mutationOptions } = options;\n let observer;\n const isSupported = useSupported(() => window && \"MutationObserver\" in window);\n const cleanup = () => {\n if (observer) {\n observer.disconnect();\n observer = void 0;\n }\n };\n const targets = computed(() => {\n const value = toValue(target);\n const items = toArray(value).map(unrefElement).filter(notNullish);\n return new Set(items);\n });\n const stopWatch = watch(\n () => targets.value,\n (targets2) => {\n cleanup();\n if (isSupported.value && targets2.size) {\n observer = new MutationObserver(callback);\n targets2.forEach((el) => observer.observe(el, mutationOptions));\n }\n },\n { immediate: true, flush: \"post\" }\n );\n const takeRecords = () => {\n return observer == null ? void 0 : observer.takeRecords();\n };\n const stop = () => {\n stopWatch();\n cleanup();\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n stop,\n takeRecords\n };\n}\n\nfunction onElementRemoval(target, callback, options = {}) {\n const {\n window = defaultWindow,\n document = window == null ? void 0 : window.document,\n flush = \"sync\"\n } = options;\n if (!window || !document)\n return noop;\n let stopFn;\n const cleanupAndUpdate = (fn) => {\n stopFn == null ? void 0 : stopFn();\n stopFn = fn;\n };\n const stopWatch = watchEffect(() => {\n const el = unrefElement(target);\n if (el) {\n const { stop } = useMutationObserver(\n document,\n (mutationsList) => {\n const targetRemoved = mutationsList.map((mutation) => [...mutation.removedNodes]).flat().some((node) => node === el || node.contains(el));\n if (targetRemoved) {\n callback(mutationsList);\n }\n },\n {\n window,\n childList: true,\n subtree: true\n }\n );\n cleanupAndUpdate(stop);\n }\n }, { flush });\n const stopHandle = () => {\n stopWatch();\n cleanupAndUpdate();\n };\n tryOnScopeDispose(stopHandle);\n return stopHandle;\n}\n\nfunction createKeyPredicate(keyFilter) {\n if (typeof keyFilter === \"function\")\n return keyFilter;\n else if (typeof keyFilter === \"string\")\n return (event) => event.key === keyFilter;\n else if (Array.isArray(keyFilter))\n return (event) => keyFilter.includes(event.key);\n return () => true;\n}\nfunction onKeyStroke(...args) {\n let key;\n let handler;\n let options = {};\n if (args.length === 3) {\n key = args[0];\n handler = args[1];\n options = args[2];\n } else if (args.length === 2) {\n if (typeof args[1] === \"object\") {\n key = true;\n handler = args[0];\n options = args[1];\n } else {\n key = args[0];\n handler = args[1];\n }\n } else {\n key = true;\n handler = args[0];\n }\n const {\n target = defaultWindow,\n eventName = \"keydown\",\n passive = false,\n dedupe = false\n } = options;\n const predicate = createKeyPredicate(key);\n const listener = (e) => {\n if (e.repeat && toValue(dedupe))\n return;\n if (predicate(e))\n handler(e);\n };\n return useEventListener(target, eventName, listener, passive);\n}\nfunction onKeyDown(key, handler, options = {}) {\n return onKeyStroke(key, handler, { ...options, eventName: \"keydown\" });\n}\nfunction onKeyPressed(key, handler, options = {}) {\n return onKeyStroke(key, handler, { ...options, eventName: \"keypress\" });\n}\nfunction onKeyUp(key, handler, options = {}) {\n return onKeyStroke(key, handler, { ...options, eventName: \"keyup\" });\n}\n\nconst DEFAULT_DELAY = 500;\nconst DEFAULT_THRESHOLD = 10;\nfunction onLongPress(target, handler, options) {\n var _a, _b;\n const elementRef = computed(() => unrefElement(target));\n let timeout;\n let posStart;\n let startTimestamp;\n let hasLongPressed = false;\n function clear() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = void 0;\n }\n posStart = void 0;\n startTimestamp = void 0;\n hasLongPressed = false;\n }\n function onRelease(ev) {\n var _a2, _b2, _c;\n const [_startTimestamp, _posStart, _hasLongPressed] = [startTimestamp, posStart, hasLongPressed];\n clear();\n if (!(options == null ? void 0 : options.onMouseUp) || !_posStart || !_startTimestamp)\n return;\n if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n return;\n if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n ev.preventDefault();\n if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n ev.stopPropagation();\n const dx = ev.x - _posStart.x;\n const dy = ev.y - _posStart.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n options.onMouseUp(ev.timeStamp - _startTimestamp, distance, _hasLongPressed);\n }\n function onDown(ev) {\n var _a2, _b2, _c, _d;\n if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n return;\n clear();\n if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n ev.preventDefault();\n if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n ev.stopPropagation();\n posStart = {\n x: ev.x,\n y: ev.y\n };\n startTimestamp = ev.timeStamp;\n timeout = setTimeout(\n () => {\n hasLongPressed = true;\n handler(ev);\n },\n (_d = options == null ? void 0 : options.delay) != null ? _d : DEFAULT_DELAY\n );\n }\n function onMove(ev) {\n var _a2, _b2, _c, _d;\n if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n return;\n if (!posStart || (options == null ? void 0 : options.distanceThreshold) === false)\n return;\n if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n ev.preventDefault();\n if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n ev.stopPropagation();\n const dx = ev.x - posStart.x;\n const dy = ev.y - posStart.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n if (distance >= ((_d = options == null ? void 0 : options.distanceThreshold) != null ? _d : DEFAULT_THRESHOLD))\n clear();\n }\n const listenerOptions = {\n capture: (_a = options == null ? void 0 : options.modifiers) == null ? void 0 : _a.capture,\n once: (_b = options == null ? void 0 : options.modifiers) == null ? void 0 : _b.once\n };\n const cleanup = [\n useEventListener(elementRef, \"pointerdown\", onDown, listenerOptions),\n useEventListener(elementRef, \"pointermove\", onMove, listenerOptions),\n useEventListener(elementRef, [\"pointerup\", \"pointerleave\"], onRelease, listenerOptions)\n ];\n const stop = () => cleanup.forEach((fn) => fn());\n return stop;\n}\n\nfunction isFocusedElementEditable() {\n const { activeElement, body } = document;\n if (!activeElement)\n return false;\n if (activeElement === body)\n return false;\n switch (activeElement.tagName) {\n case \"INPUT\":\n case \"TEXTAREA\":\n return true;\n }\n return activeElement.hasAttribute(\"contenteditable\");\n}\nfunction isTypedCharValid({\n keyCode,\n metaKey,\n ctrlKey,\n altKey\n}) {\n if (metaKey || ctrlKey || altKey)\n return false;\n if (keyCode >= 48 && keyCode <= 57 || keyCode >= 96 && keyCode <= 105)\n return true;\n if (keyCode >= 65 && keyCode <= 90)\n return true;\n return false;\n}\nfunction onStartTyping(callback, options = {}) {\n const { document: document2 = defaultDocument } = options;\n const keydown = (event) => {\n if (!isFocusedElementEditable() && isTypedCharValid(event)) {\n callback(event);\n }\n };\n if (document2)\n useEventListener(document2, \"keydown\", keydown, { passive: true });\n}\n\nfunction templateRef(key, initialValue = null) {\n const instance = getCurrentInstance();\n let _trigger = () => {\n };\n const element = customRef((track, trigger) => {\n _trigger = trigger;\n return {\n get() {\n var _a, _b;\n track();\n return (_b = (_a = instance == null ? void 0 : instance.proxy) == null ? void 0 : _a.$refs[key]) != null ? _b : initialValue;\n },\n set() {\n }\n };\n });\n tryOnMounted(_trigger);\n onUpdated(_trigger);\n return element;\n}\n\nfunction useActiveElement(options = {}) {\n var _a;\n const {\n window = defaultWindow,\n deep = true,\n triggerOnRemoval = false\n } = options;\n const document = (_a = options.document) != null ? _a : window == null ? void 0 : window.document;\n const getDeepActiveElement = () => {\n var _a2;\n let element = document == null ? void 0 : document.activeElement;\n if (deep) {\n while (element == null ? void 0 : element.shadowRoot)\n element = (_a2 = element == null ? void 0 : element.shadowRoot) == null ? void 0 : _a2.activeElement;\n }\n return element;\n };\n const activeElement = shallowRef();\n const trigger = () => {\n activeElement.value = getDeepActiveElement();\n };\n if (window) {\n const listenerOptions = {\n capture: true,\n passive: true\n };\n useEventListener(\n window,\n \"blur\",\n (event) => {\n if (event.relatedTarget !== null)\n return;\n trigger();\n },\n listenerOptions\n );\n useEventListener(\n window,\n \"focus\",\n trigger,\n listenerOptions\n );\n }\n if (triggerOnRemoval) {\n onElementRemoval(activeElement, trigger, { document });\n }\n trigger();\n return activeElement;\n}\n\nfunction useRafFn(fn, options = {}) {\n const {\n immediate = true,\n fpsLimit = void 0,\n window = defaultWindow,\n once = false\n } = options;\n const isActive = shallowRef(false);\n const intervalLimit = computed(() => {\n return fpsLimit ? 1e3 / toValue(fpsLimit) : null;\n });\n let previousFrameTimestamp = 0;\n let rafId = null;\n function loop(timestamp) {\n if (!isActive.value || !window)\n return;\n if (!previousFrameTimestamp)\n previousFrameTimestamp = timestamp;\n const delta = timestamp - previousFrameTimestamp;\n if (intervalLimit.value && delta < intervalLimit.value) {\n rafId = window.requestAnimationFrame(loop);\n return;\n }\n previousFrameTimestamp = timestamp;\n fn({ delta, timestamp });\n if (once) {\n isActive.value = false;\n rafId = null;\n return;\n }\n rafId = window.requestAnimationFrame(loop);\n }\n function resume() {\n if (!isActive.value && window) {\n isActive.value = true;\n previousFrameTimestamp = 0;\n rafId = window.requestAnimationFrame(loop);\n }\n }\n function pause() {\n isActive.value = false;\n if (rafId != null && window) {\n window.cancelAnimationFrame(rafId);\n rafId = null;\n }\n }\n if (immediate)\n resume();\n tryOnScopeDispose(pause);\n return {\n isActive: readonly(isActive),\n pause,\n resume\n };\n}\n\nfunction useAnimate(target, keyframes, options) {\n let config;\n let animateOptions;\n if (isObject(options)) {\n config = options;\n animateOptions = objectOmit(options, [\"window\", \"immediate\", \"commitStyles\", \"persist\", \"onReady\", \"onError\"]);\n } else {\n config = { duration: options };\n animateOptions = options;\n }\n const {\n window = defaultWindow,\n immediate = true,\n commitStyles,\n persist,\n playbackRate: _playbackRate = 1,\n onReady,\n onError = (e) => {\n console.error(e);\n }\n } = config;\n const isSupported = useSupported(() => window && HTMLElement && \"animate\" in HTMLElement.prototype);\n const animate = shallowRef(void 0);\n const store = shallowReactive({\n startTime: null,\n currentTime: null,\n timeline: null,\n playbackRate: _playbackRate,\n pending: false,\n playState: immediate ? \"idle\" : \"paused\",\n replaceState: \"active\"\n });\n const pending = computed(() => store.pending);\n const playState = computed(() => store.playState);\n const replaceState = computed(() => store.replaceState);\n const startTime = computed({\n get() {\n return store.startTime;\n },\n set(value) {\n store.startTime = value;\n if (animate.value)\n animate.value.startTime = value;\n }\n });\n const currentTime = computed({\n get() {\n return store.currentTime;\n },\n set(value) {\n store.currentTime = value;\n if (animate.value) {\n animate.value.currentTime = value;\n syncResume();\n }\n }\n });\n const timeline = computed({\n get() {\n return store.timeline;\n },\n set(value) {\n store.timeline = value;\n if (animate.value)\n animate.value.timeline = value;\n }\n });\n const playbackRate = computed({\n get() {\n return store.playbackRate;\n },\n set(value) {\n store.playbackRate = value;\n if (animate.value)\n animate.value.playbackRate = value;\n }\n });\n const play = () => {\n if (animate.value) {\n try {\n animate.value.play();\n syncResume();\n } catch (e) {\n syncPause();\n onError(e);\n }\n } else {\n update();\n }\n };\n const pause = () => {\n var _a;\n try {\n (_a = animate.value) == null ? void 0 : _a.pause();\n syncPause();\n } catch (e) {\n onError(e);\n }\n };\n const reverse = () => {\n var _a;\n if (!animate.value)\n update();\n try {\n (_a = animate.value) == null ? void 0 : _a.reverse();\n syncResume();\n } catch (e) {\n syncPause();\n onError(e);\n }\n };\n const finish = () => {\n var _a;\n try {\n (_a = animate.value) == null ? void 0 : _a.finish();\n syncPause();\n } catch (e) {\n onError(e);\n }\n };\n const cancel = () => {\n var _a;\n try {\n (_a = animate.value) == null ? void 0 : _a.cancel();\n syncPause();\n } catch (e) {\n onError(e);\n }\n };\n watch(() => unrefElement(target), (el) => {\n if (el) {\n update();\n } else {\n animate.value = void 0;\n }\n });\n watch(() => keyframes, (value) => {\n if (animate.value) {\n update();\n const targetEl = unrefElement(target);\n if (targetEl) {\n animate.value.effect = new KeyframeEffect(\n targetEl,\n toValue(value),\n animateOptions\n );\n }\n }\n }, { deep: true });\n tryOnMounted(() => update(true), false);\n tryOnScopeDispose(cancel);\n function update(init) {\n const el = unrefElement(target);\n if (!isSupported.value || !el)\n return;\n if (!animate.value)\n animate.value = el.animate(toValue(keyframes), animateOptions);\n if (persist)\n animate.value.persist();\n if (_playbackRate !== 1)\n animate.value.playbackRate = _playbackRate;\n if (init && !immediate)\n animate.value.pause();\n else\n syncResume();\n onReady == null ? void 0 : onReady(animate.value);\n }\n const listenerOptions = { passive: true };\n useEventListener(animate, [\"cancel\", \"finish\", \"remove\"], syncPause, listenerOptions);\n useEventListener(animate, \"finish\", () => {\n var _a;\n if (commitStyles)\n (_a = animate.value) == null ? void 0 : _a.commitStyles();\n }, listenerOptions);\n const { resume: resumeRef, pause: pauseRef } = useRafFn(() => {\n if (!animate.value)\n return;\n store.pending = animate.value.pending;\n store.playState = animate.value.playState;\n store.replaceState = animate.value.replaceState;\n store.startTime = animate.value.startTime;\n store.currentTime = animate.value.currentTime;\n store.timeline = animate.value.timeline;\n store.playbackRate = animate.value.playbackRate;\n }, { immediate: false });\n function syncResume() {\n if (isSupported.value)\n resumeRef();\n }\n function syncPause() {\n if (isSupported.value && window)\n window.requestAnimationFrame(pauseRef);\n }\n return {\n isSupported,\n animate,\n // actions\n play,\n pause,\n reverse,\n finish,\n cancel,\n // state\n pending,\n playState,\n replaceState,\n startTime,\n currentTime,\n timeline,\n playbackRate\n };\n}\n\nfunction useAsyncQueue(tasks, options) {\n const {\n interrupt = true,\n onError = noop,\n onFinished = noop,\n signal\n } = options || {};\n const promiseState = {\n aborted: \"aborted\",\n fulfilled: \"fulfilled\",\n pending: \"pending\",\n rejected: \"rejected\"\n };\n const initialResult = Array.from(Array.from({ length: tasks.length }), () => ({ state: promiseState.pending, data: null }));\n const result = reactive(initialResult);\n const activeIndex = shallowRef(-1);\n if (!tasks || tasks.length === 0) {\n onFinished();\n return {\n activeIndex,\n result\n };\n }\n function updateResult(state, res) {\n activeIndex.value++;\n result[activeIndex.value].data = res;\n result[activeIndex.value].state = state;\n }\n tasks.reduce((prev, curr) => {\n return prev.then((prevRes) => {\n var _a;\n if (signal == null ? void 0 : signal.aborted) {\n updateResult(promiseState.aborted, new Error(\"aborted\"));\n return;\n }\n if (((_a = result[activeIndex.value]) == null ? void 0 : _a.state) === promiseState.rejected && interrupt) {\n onFinished();\n return;\n }\n const done = curr(prevRes).then((currentRes) => {\n updateResult(promiseState.fulfilled, currentRes);\n if (activeIndex.value === tasks.length - 1)\n onFinished();\n return currentRes;\n });\n if (!signal)\n return done;\n return Promise.race([done, whenAborted(signal)]);\n }).catch((e) => {\n if (signal == null ? void 0 : signal.aborted) {\n updateResult(promiseState.aborted, e);\n return e;\n }\n updateResult(promiseState.rejected, e);\n onError();\n return e;\n });\n }, Promise.resolve());\n return {\n activeIndex,\n result\n };\n}\nfunction whenAborted(signal) {\n return new Promise((resolve, reject) => {\n const error = new Error(\"aborted\");\n if (signal.aborted)\n reject(error);\n else\n signal.addEventListener(\"abort\", () => reject(error), { once: true });\n });\n}\n\nfunction useAsyncState(promise, initialState, options) {\n const {\n immediate = true,\n delay = 0,\n onError = noop,\n onSuccess = noop,\n resetOnExecute = true,\n shallow = true,\n throwError\n } = options != null ? options : {};\n const state = shallow ? shallowRef(initialState) : ref(initialState);\n const isReady = shallowRef(false);\n const isLoading = shallowRef(false);\n const error = shallowRef(void 0);\n async function execute(delay2 = 0, ...args) {\n if (resetOnExecute)\n state.value = initialState;\n error.value = void 0;\n isReady.value = false;\n isLoading.value = true;\n if (delay2 > 0)\n await promiseTimeout(delay2);\n const _promise = typeof promise === \"function\" ? promise(...args) : promise;\n try {\n const data = await _promise;\n state.value = data;\n isReady.value = true;\n onSuccess(data);\n } catch (e) {\n error.value = e;\n onError(e);\n if (throwError)\n throw e;\n } finally {\n isLoading.value = false;\n }\n return state.value;\n }\n if (immediate) {\n execute(delay);\n }\n const shell = {\n state,\n isReady,\n isLoading,\n error,\n execute\n };\n function waitUntilIsLoaded() {\n return new Promise((resolve, reject) => {\n until(isLoading).toBe(false).then(() => resolve(shell)).catch(reject);\n });\n }\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilIsLoaded().then(onFulfilled, onRejected);\n }\n };\n}\n\nconst defaults = {\n array: (v) => JSON.stringify(v),\n object: (v) => JSON.stringify(v),\n set: (v) => JSON.stringify(Array.from(v)),\n map: (v) => JSON.stringify(Object.fromEntries(v)),\n null: () => \"\"\n};\nfunction getDefaultSerialization(target) {\n if (!target)\n return defaults.null;\n if (target instanceof Map)\n return defaults.map;\n else if (target instanceof Set)\n return defaults.set;\n else if (Array.isArray(target))\n return defaults.array;\n else\n return defaults.object;\n}\n\nfunction useBase64(target, options) {\n const base64 = shallowRef(\"\");\n const promise = shallowRef();\n function execute() {\n if (!isClient)\n return;\n promise.value = new Promise((resolve, reject) => {\n try {\n const _target = toValue(target);\n if (_target == null) {\n resolve(\"\");\n } else if (typeof _target === \"string\") {\n resolve(blobToBase64(new Blob([_target], { type: \"text/plain\" })));\n } else if (_target instanceof Blob) {\n resolve(blobToBase64(_target));\n } else if (_target instanceof ArrayBuffer) {\n resolve(window.btoa(String.fromCharCode(...new Uint8Array(_target))));\n } else if (_target instanceof HTMLCanvasElement) {\n resolve(_target.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n } else if (_target instanceof HTMLImageElement) {\n const img = _target.cloneNode(false);\n img.crossOrigin = \"Anonymous\";\n imgLoaded(img).then(() => {\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n resolve(canvas.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n }).catch(reject);\n } else if (typeof _target === \"object\") {\n const _serializeFn = (options == null ? void 0 : options.serializer) || getDefaultSerialization(_target);\n const serialized = _serializeFn(_target);\n return resolve(blobToBase64(new Blob([serialized], { type: \"application/json\" })));\n } else {\n reject(new Error(\"target is unsupported types\"));\n }\n } catch (error) {\n reject(error);\n }\n });\n promise.value.then((res) => {\n base64.value = (options == null ? void 0 : options.dataUrl) === false ? res.replace(/^data:.*?;base64,/, \"\") : res;\n });\n return promise.value;\n }\n if (isRef(target) || typeof target === \"function\")\n watch(target, execute, { immediate: true });\n else\n execute();\n return {\n base64,\n promise,\n execute\n };\n}\nfunction imgLoaded(img) {\n return new Promise((resolve, reject) => {\n if (!img.complete) {\n img.onload = () => {\n resolve();\n };\n img.onerror = reject;\n } else {\n resolve();\n }\n });\n}\nfunction blobToBase64(blob) {\n return new Promise((resolve, reject) => {\n const fr = new FileReader();\n fr.onload = (e) => {\n resolve(e.target.result);\n };\n fr.onerror = reject;\n fr.readAsDataURL(blob);\n });\n}\n\nfunction useBattery(options = {}) {\n const { navigator = defaultNavigator } = options;\n const events = [\"chargingchange\", \"chargingtimechange\", \"dischargingtimechange\", \"levelchange\"];\n const isSupported = useSupported(() => navigator && \"getBattery\" in navigator && typeof navigator.getBattery === \"function\");\n const charging = shallowRef(false);\n const chargingTime = shallowRef(0);\n const dischargingTime = shallowRef(0);\n const level = shallowRef(1);\n let battery;\n function updateBatteryInfo() {\n charging.value = this.charging;\n chargingTime.value = this.chargingTime || 0;\n dischargingTime.value = this.dischargingTime || 0;\n level.value = this.level;\n }\n if (isSupported.value) {\n navigator.getBattery().then((_battery) => {\n battery = _battery;\n updateBatteryInfo.call(battery);\n useEventListener(battery, events, updateBatteryInfo, { passive: true });\n });\n }\n return {\n isSupported,\n charging,\n chargingTime,\n dischargingTime,\n level\n };\n}\n\nfunction useBluetooth(options) {\n let {\n acceptAllDevices = false\n } = options || {};\n const {\n filters = void 0,\n optionalServices = void 0,\n navigator = defaultNavigator\n } = options || {};\n const isSupported = useSupported(() => navigator && \"bluetooth\" in navigator);\n const device = shallowRef();\n const error = shallowRef(null);\n watch(device, () => {\n connectToBluetoothGATTServer();\n });\n async function requestDevice() {\n if (!isSupported.value)\n return;\n error.value = null;\n if (filters && filters.length > 0)\n acceptAllDevices = false;\n try {\n device.value = await (navigator == null ? void 0 : navigator.bluetooth.requestDevice({\n acceptAllDevices,\n filters,\n optionalServices\n }));\n } catch (err) {\n error.value = err;\n }\n }\n const server = shallowRef();\n const isConnected = shallowRef(false);\n function reset() {\n isConnected.value = false;\n device.value = void 0;\n server.value = void 0;\n }\n async function connectToBluetoothGATTServer() {\n error.value = null;\n if (device.value && device.value.gatt) {\n useEventListener(device, \"gattserverdisconnected\", reset, { passive: true });\n try {\n server.value = await device.value.gatt.connect();\n isConnected.value = server.value.connected;\n } catch (err) {\n error.value = err;\n }\n }\n }\n tryOnMounted(() => {\n var _a;\n if (device.value)\n (_a = device.value.gatt) == null ? void 0 : _a.connect();\n });\n tryOnScopeDispose(() => {\n var _a;\n if (device.value)\n (_a = device.value.gatt) == null ? void 0 : _a.disconnect();\n });\n return {\n isSupported,\n isConnected: readonly(isConnected),\n // Device:\n device,\n requestDevice,\n // Server:\n server,\n // Errors:\n error\n };\n}\n\nconst ssrWidthSymbol = Symbol(\"vueuse-ssr-width\");\nfunction useSSRWidth() {\n const ssrWidth = hasInjectionContext() ? injectLocal(ssrWidthSymbol, null) : null;\n return typeof ssrWidth === \"number\" ? ssrWidth : void 0;\n}\nfunction provideSSRWidth(width, app) {\n if (app !== void 0) {\n app.provide(ssrWidthSymbol, width);\n } else {\n provideLocal(ssrWidthSymbol, width);\n }\n}\n\nfunction useMediaQuery(query, options = {}) {\n const { window = defaultWindow, ssrWidth = useSSRWidth() } = options;\n const isSupported = useSupported(() => window && \"matchMedia\" in window && typeof window.matchMedia === \"function\");\n const ssrSupport = shallowRef(typeof ssrWidth === \"number\");\n const mediaQuery = shallowRef();\n const matches = shallowRef(false);\n const handler = (event) => {\n matches.value = event.matches;\n };\n watchEffect(() => {\n if (ssrSupport.value) {\n ssrSupport.value = !isSupported.value;\n const queryStrings = toValue(query).split(\",\");\n matches.value = queryStrings.some((queryString) => {\n const not = queryString.includes(\"not all\");\n const minWidth = queryString.match(/\\(\\s*min-width:\\s*(-?\\d+(?:\\.\\d*)?[a-z]+\\s*)\\)/);\n const maxWidth = queryString.match(/\\(\\s*max-width:\\s*(-?\\d+(?:\\.\\d*)?[a-z]+\\s*)\\)/);\n let res = Boolean(minWidth || maxWidth);\n if (minWidth && res) {\n res = ssrWidth >= pxValue(minWidth[1]);\n }\n if (maxWidth && res) {\n res = ssrWidth <= pxValue(maxWidth[1]);\n }\n return not ? !res : res;\n });\n return;\n }\n if (!isSupported.value)\n return;\n mediaQuery.value = window.matchMedia(toValue(query));\n matches.value = mediaQuery.value.matches;\n });\n useEventListener(mediaQuery, \"change\", handler, { passive: true });\n return computed(() => matches.value);\n}\n\nconst breakpointsTailwind = {\n \"sm\": 640,\n \"md\": 768,\n \"lg\": 1024,\n \"xl\": 1280,\n \"2xl\": 1536\n};\nconst breakpointsBootstrapV5 = {\n xs: 0,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1400\n};\nconst breakpointsVuetifyV2 = {\n xs: 0,\n sm: 600,\n md: 960,\n lg: 1264,\n xl: 1904\n};\nconst breakpointsVuetifyV3 = {\n xs: 0,\n sm: 600,\n md: 960,\n lg: 1280,\n xl: 1920,\n xxl: 2560\n};\nconst breakpointsVuetify = breakpointsVuetifyV2;\nconst breakpointsAntDesign = {\n xs: 480,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1600\n};\nconst breakpointsQuasar = {\n xs: 0,\n sm: 600,\n md: 1024,\n lg: 1440,\n xl: 1920\n};\nconst breakpointsSematic = {\n mobileS: 320,\n mobileM: 375,\n mobileL: 425,\n tablet: 768,\n laptop: 1024,\n laptopL: 1440,\n desktop4K: 2560\n};\nconst breakpointsMasterCss = {\n \"3xs\": 360,\n \"2xs\": 480,\n \"xs\": 600,\n \"sm\": 768,\n \"md\": 1024,\n \"lg\": 1280,\n \"xl\": 1440,\n \"2xl\": 1600,\n \"3xl\": 1920,\n \"4xl\": 2560\n};\nconst breakpointsPrimeFlex = {\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200\n};\nconst breakpointsElement = {\n xs: 0,\n sm: 768,\n md: 992,\n lg: 1200,\n xl: 1920\n};\n\nfunction useBreakpoints(breakpoints, options = {}) {\n function getValue(k, delta) {\n let v = toValue(breakpoints[toValue(k)]);\n if (delta != null)\n v = increaseWithUnit(v, delta);\n if (typeof v === \"number\")\n v = `${v}px`;\n return v;\n }\n const { window = defaultWindow, strategy = \"min-width\", ssrWidth = useSSRWidth() } = options;\n const ssrSupport = typeof ssrWidth === \"number\";\n const mounted = ssrSupport ? shallowRef(false) : { value: true };\n if (ssrSupport) {\n tryOnMounted(() => mounted.value = !!window);\n }\n function match(query, size) {\n if (!mounted.value && ssrSupport) {\n return query === \"min\" ? ssrWidth >= pxValue(size) : ssrWidth <= pxValue(size);\n }\n if (!window)\n return false;\n return window.matchMedia(`(${query}-width: ${size})`).matches;\n }\n const greaterOrEqual = (k) => {\n return useMediaQuery(() => `(min-width: ${getValue(k)})`, options);\n };\n const smallerOrEqual = (k) => {\n return useMediaQuery(() => `(max-width: ${getValue(k)})`, options);\n };\n const shortcutMethods = Object.keys(breakpoints).reduce((shortcuts, k) => {\n Object.defineProperty(shortcuts, k, {\n get: () => strategy === \"min-width\" ? greaterOrEqual(k) : smallerOrEqual(k),\n enumerable: true,\n configurable: true\n });\n return shortcuts;\n }, {});\n function current() {\n const points = Object.keys(breakpoints).map((k) => [k, shortcutMethods[k], pxValue(getValue(k))]).sort((a, b) => a[2] - b[2]);\n return computed(() => points.filter(([, v]) => v.value).map(([k]) => k));\n }\n return Object.assign(shortcutMethods, {\n greaterOrEqual,\n smallerOrEqual,\n greater(k) {\n return useMediaQuery(() => `(min-width: ${getValue(k, 0.1)})`, options);\n },\n smaller(k) {\n return useMediaQuery(() => `(max-width: ${getValue(k, -0.1)})`, options);\n },\n between(a, b) {\n return useMediaQuery(() => `(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`, options);\n },\n isGreater(k) {\n return match(\"min\", getValue(k, 0.1));\n },\n isGreaterOrEqual(k) {\n return match(\"min\", getValue(k));\n },\n isSmaller(k) {\n return match(\"max\", getValue(k, -0.1));\n },\n isSmallerOrEqual(k) {\n return match(\"max\", getValue(k));\n },\n isInBetween(a, b) {\n return match(\"min\", getValue(a)) && match(\"max\", getValue(b, -0.1));\n },\n current,\n active() {\n const bps = current();\n return computed(() => bps.value.length === 0 ? \"\" : bps.value.at(strategy === \"min-width\" ? -1 : 0));\n }\n });\n}\n\nfunction useBroadcastChannel(options) {\n const {\n name,\n window = defaultWindow\n } = options;\n const isSupported = useSupported(() => window && \"BroadcastChannel\" in window);\n const isClosed = shallowRef(false);\n const channel = ref();\n const data = ref();\n const error = shallowRef(null);\n const post = (data2) => {\n if (channel.value)\n channel.value.postMessage(data2);\n };\n const close = () => {\n if (channel.value)\n channel.value.close();\n isClosed.value = true;\n };\n if (isSupported.value) {\n tryOnMounted(() => {\n error.value = null;\n channel.value = new BroadcastChannel(name);\n const listenerOptions = {\n passive: true\n };\n useEventListener(channel, \"message\", (e) => {\n data.value = e.data;\n }, listenerOptions);\n useEventListener(channel, \"messageerror\", (e) => {\n error.value = e;\n }, listenerOptions);\n useEventListener(channel, \"close\", () => {\n isClosed.value = true;\n }, listenerOptions);\n });\n }\n tryOnScopeDispose(() => {\n close();\n });\n return {\n isSupported,\n channel,\n data,\n post,\n close,\n error,\n isClosed\n };\n}\n\nconst WRITABLE_PROPERTIES = [\n \"hash\",\n \"host\",\n \"hostname\",\n \"href\",\n \"pathname\",\n \"port\",\n \"protocol\",\n \"search\"\n];\nfunction useBrowserLocation(options = {}) {\n const { window = defaultWindow } = options;\n const refs = Object.fromEntries(\n WRITABLE_PROPERTIES.map((key) => [key, ref()])\n );\n for (const [key, ref] of objectEntries(refs)) {\n watch(ref, (value) => {\n if (!(window == null ? void 0 : window.location) || window.location[key] === value)\n return;\n window.location[key] = value;\n });\n }\n const buildState = (trigger) => {\n var _a;\n const { state: state2, length } = (window == null ? void 0 : window.history) || {};\n const { origin } = (window == null ? void 0 : window.location) || {};\n for (const key of WRITABLE_PROPERTIES)\n refs[key].value = (_a = window == null ? void 0 : window.location) == null ? void 0 : _a[key];\n return reactive({\n trigger,\n state: state2,\n length,\n origin,\n ...refs\n });\n };\n const state = ref(buildState(\"load\"));\n if (window) {\n const listenerOptions = { passive: true };\n useEventListener(window, \"popstate\", () => state.value = buildState(\"popstate\"), listenerOptions);\n useEventListener(window, \"hashchange\", () => state.value = buildState(\"hashchange\"), listenerOptions);\n }\n return state;\n}\n\nfunction useCached(refValue, comparator = (a, b) => a === b, options) {\n const { deepRefs = true, ...watchOptions } = options || {};\n const cachedValue = createRef(refValue.value, deepRefs);\n watch(() => refValue.value, (value) => {\n if (!comparator(value, cachedValue.value))\n cachedValue.value = value;\n }, watchOptions);\n return cachedValue;\n}\n\nfunction usePermission(permissionDesc, options = {}) {\n const {\n controls = false,\n navigator = defaultNavigator\n } = options;\n const isSupported = useSupported(() => navigator && \"permissions\" in navigator);\n const permissionStatus = shallowRef();\n const desc = typeof permissionDesc === \"string\" ? { name: permissionDesc } : permissionDesc;\n const state = shallowRef();\n const update = () => {\n var _a, _b;\n state.value = (_b = (_a = permissionStatus.value) == null ? void 0 : _a.state) != null ? _b : \"prompt\";\n };\n useEventListener(permissionStatus, \"change\", update, { passive: true });\n const query = createSingletonPromise(async () => {\n if (!isSupported.value)\n return;\n if (!permissionStatus.value) {\n try {\n permissionStatus.value = await navigator.permissions.query(desc);\n } catch (e) {\n permissionStatus.value = void 0;\n } finally {\n update();\n }\n }\n if (controls)\n return toRaw(permissionStatus.value);\n });\n query();\n if (controls) {\n return {\n state,\n isSupported,\n query\n };\n } else {\n return state;\n }\n}\n\nfunction useClipboard(options = {}) {\n const {\n navigator = defaultNavigator,\n read = false,\n source,\n copiedDuring = 1500,\n legacy = false\n } = options;\n const isClipboardApiSupported = useSupported(() => navigator && \"clipboard\" in navigator);\n const permissionRead = usePermission(\"clipboard-read\");\n const permissionWrite = usePermission(\"clipboard-write\");\n const isSupported = computed(() => isClipboardApiSupported.value || legacy);\n const text = shallowRef(\"\");\n const copied = shallowRef(false);\n const timeout = useTimeoutFn(() => copied.value = false, copiedDuring, { immediate: false });\n async function updateText() {\n let useLegacy = !(isClipboardApiSupported.value && isAllowed(permissionRead.value));\n if (!useLegacy) {\n try {\n text.value = await navigator.clipboard.readText();\n } catch (e) {\n useLegacy = true;\n }\n }\n if (useLegacy) {\n text.value = legacyRead();\n }\n }\n if (isSupported.value && read)\n useEventListener([\"copy\", \"cut\"], updateText, { passive: true });\n async function copy(value = toValue(source)) {\n if (isSupported.value && value != null) {\n let useLegacy = !(isClipboardApiSupported.value && isAllowed(permissionWrite.value));\n if (!useLegacy) {\n try {\n await navigator.clipboard.writeText(value);\n } catch (e) {\n useLegacy = true;\n }\n }\n if (useLegacy)\n legacyCopy(value);\n text.value = value;\n copied.value = true;\n timeout.start();\n }\n }\n function legacyCopy(value) {\n const ta = document.createElement(\"textarea\");\n ta.value = value != null ? value : \"\";\n ta.style.position = \"absolute\";\n ta.style.opacity = \"0\";\n document.body.appendChild(ta);\n ta.select();\n document.execCommand(\"copy\");\n ta.remove();\n }\n function legacyRead() {\n var _a, _b, _c;\n return (_c = (_b = (_a = document == null ? void 0 : document.getSelection) == null ? void 0 : _a.call(document)) == null ? void 0 : _b.toString()) != null ? _c : \"\";\n }\n function isAllowed(status) {\n return status === \"granted\" || status === \"prompt\";\n }\n return {\n isSupported,\n text,\n copied,\n copy\n };\n}\n\nfunction useClipboardItems(options = {}) {\n const {\n navigator = defaultNavigator,\n read = false,\n source,\n copiedDuring = 1500\n } = options;\n const isSupported = useSupported(() => navigator && \"clipboard\" in navigator);\n const content = ref([]);\n const copied = shallowRef(false);\n const timeout = useTimeoutFn(() => copied.value = false, copiedDuring, { immediate: false });\n function updateContent() {\n if (isSupported.value) {\n navigator.clipboard.read().then((items) => {\n content.value = items;\n });\n }\n }\n if (isSupported.value && read)\n useEventListener([\"copy\", \"cut\"], updateContent, { passive: true });\n async function copy(value = toValue(source)) {\n if (isSupported.value && value != null) {\n await navigator.clipboard.write(value);\n content.value = value;\n copied.value = true;\n timeout.start();\n }\n }\n return {\n isSupported,\n content,\n copied,\n copy\n };\n}\n\nfunction cloneFnJSON(source) {\n return JSON.parse(JSON.stringify(source));\n}\nfunction useCloned(source, options = {}) {\n const cloned = ref({});\n const isModified = shallowRef(false);\n let _lastSync = false;\n const {\n manual,\n clone = cloneFnJSON,\n // watch options\n deep = true,\n immediate = true\n } = options;\n watch(cloned, () => {\n if (_lastSync) {\n _lastSync = false;\n return;\n }\n isModified.value = true;\n }, {\n deep: true,\n flush: \"sync\"\n });\n function sync() {\n _lastSync = true;\n isModified.value = false;\n cloned.value = clone(toValue(source));\n }\n if (!manual && (isRef(source) || typeof source === \"function\")) {\n watch(source, sync, {\n ...options,\n deep,\n immediate\n });\n } else {\n sync();\n }\n return { cloned, isModified, sync };\n}\n\nconst _global = typeof globalThis !== \"undefined\" ? globalThis : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : {};\nconst globalKey = \"__vueuse_ssr_handlers__\";\nconst handlers = /* @__PURE__ */ getHandlers();\nfunction getHandlers() {\n if (!(globalKey in _global))\n _global[globalKey] = _global[globalKey] || {};\n return _global[globalKey];\n}\nfunction getSSRHandler(key, fallback) {\n return handlers[key] || fallback;\n}\nfunction setSSRHandler(key, fn) {\n handlers[key] = fn;\n}\n\nfunction usePreferredDark(options) {\n return useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n}\n\nfunction guessSerializerType(rawInit) {\n return rawInit == null ? \"any\" : rawInit instanceof Set ? \"set\" : rawInit instanceof Map ? \"map\" : rawInit instanceof Date ? \"date\" : typeof rawInit === \"boolean\" ? \"boolean\" : typeof rawInit === \"string\" ? \"string\" : typeof rawInit === \"object\" ? \"object\" : !Number.isNaN(rawInit) ? \"number\" : \"any\";\n}\n\nconst StorageSerializers = {\n boolean: {\n read: (v) => v === \"true\",\n write: (v) => String(v)\n },\n object: {\n read: (v) => JSON.parse(v),\n write: (v) => JSON.stringify(v)\n },\n number: {\n read: (v) => Number.parseFloat(v),\n write: (v) => String(v)\n },\n any: {\n read: (v) => v,\n write: (v) => String(v)\n },\n string: {\n read: (v) => v,\n write: (v) => String(v)\n },\n map: {\n read: (v) => new Map(JSON.parse(v)),\n write: (v) => JSON.stringify(Array.from(v.entries()))\n },\n set: {\n read: (v) => new Set(JSON.parse(v)),\n write: (v) => JSON.stringify(Array.from(v))\n },\n date: {\n read: (v) => new Date(v),\n write: (v) => v.toISOString()\n }\n};\nconst customStorageEventName = \"vueuse-storage\";\nfunction useStorage(key, defaults, storage, options = {}) {\n var _a;\n const {\n flush = \"pre\",\n deep = true,\n listenToStorageChanges = true,\n writeDefaults = true,\n mergeDefaults = false,\n shallow,\n window = defaultWindow,\n eventFilter,\n onError = (e) => {\n console.error(e);\n },\n initOnMounted\n } = options;\n const data = (shallow ? shallowRef : ref)(typeof defaults === \"function\" ? defaults() : defaults);\n const keyComputed = computed(() => toValue(key));\n if (!storage) {\n try {\n storage = getSSRHandler(\"getDefaultStorage\", () => {\n var _a2;\n return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n })();\n } catch (e) {\n onError(e);\n }\n }\n if (!storage)\n return data;\n const rawInit = toValue(defaults);\n const type = guessSerializerType(rawInit);\n const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n const { pause: pauseWatch, resume: resumeWatch } = pausableWatch(\n data,\n () => write(data.value),\n { flush, deep, eventFilter }\n );\n watch(keyComputed, () => update(), { flush });\n if (window && listenToStorageChanges) {\n tryOnMounted(() => {\n if (storage instanceof Storage)\n useEventListener(window, \"storage\", update, { passive: true });\n else\n useEventListener(window, customStorageEventName, updateFromCustomEvent);\n if (initOnMounted)\n update();\n });\n }\n if (!initOnMounted)\n update();\n function dispatchWriteEvent(oldValue, newValue) {\n if (window) {\n const payload = {\n key: keyComputed.value,\n oldValue,\n newValue,\n storageArea: storage\n };\n window.dispatchEvent(storage instanceof Storage ? new StorageEvent(\"storage\", payload) : new CustomEvent(customStorageEventName, {\n detail: payload\n }));\n }\n }\n function write(v) {\n try {\n const oldValue = storage.getItem(keyComputed.value);\n if (v == null) {\n dispatchWriteEvent(oldValue, null);\n storage.removeItem(keyComputed.value);\n } else {\n const serialized = serializer.write(v);\n if (oldValue !== serialized) {\n storage.setItem(keyComputed.value, serialized);\n dispatchWriteEvent(oldValue, serialized);\n }\n }\n } catch (e) {\n onError(e);\n }\n }\n function read(event) {\n const rawValue = event ? event.newValue : storage.getItem(keyComputed.value);\n if (rawValue == null) {\n if (writeDefaults && rawInit != null)\n storage.setItem(keyComputed.value, serializer.write(rawInit));\n return rawInit;\n } else if (!event && mergeDefaults) {\n const value = serializer.read(rawValue);\n if (typeof mergeDefaults === \"function\")\n return mergeDefaults(value, rawInit);\n else if (type === \"object\" && !Array.isArray(value))\n return { ...rawInit, ...value };\n return value;\n } else if (typeof rawValue !== \"string\") {\n return rawValue;\n } else {\n return serializer.read(rawValue);\n }\n }\n function update(event) {\n if (event && event.storageArea !== storage)\n return;\n if (event && event.key == null) {\n data.value = rawInit;\n return;\n }\n if (event && event.key !== keyComputed.value)\n return;\n pauseWatch();\n try {\n if ((event == null ? void 0 : event.newValue) !== serializer.write(data.value))\n data.value = read(event);\n } catch (e) {\n onError(e);\n } finally {\n if (event)\n nextTick(resumeWatch);\n else\n resumeWatch();\n }\n }\n function updateFromCustomEvent(event) {\n update(event.detail);\n }\n return data;\n}\n\nconst CSS_DISABLE_TRANS = \"*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}\";\nfunction useColorMode(options = {}) {\n const {\n selector = \"html\",\n attribute = \"class\",\n initialValue = \"auto\",\n window = defaultWindow,\n storage,\n storageKey = \"vueuse-color-scheme\",\n listenToStorageChanges = true,\n storageRef,\n emitAuto,\n disableTransition = true\n } = options;\n const modes = {\n auto: \"\",\n light: \"light\",\n dark: \"dark\",\n ...options.modes || {}\n };\n const preferredDark = usePreferredDark({ window });\n const system = computed(() => preferredDark.value ? \"dark\" : \"light\");\n const store = storageRef || (storageKey == null ? toRef(initialValue) : useStorage(storageKey, initialValue, storage, { window, listenToStorageChanges }));\n const state = computed(() => store.value === \"auto\" ? system.value : store.value);\n const updateHTMLAttrs = getSSRHandler(\n \"updateHTMLAttrs\",\n (selector2, attribute2, value) => {\n const el = typeof selector2 === \"string\" ? window == null ? void 0 : window.document.querySelector(selector2) : unrefElement(selector2);\n if (!el)\n return;\n const classesToAdd = /* @__PURE__ */ new Set();\n const classesToRemove = /* @__PURE__ */ new Set();\n let attributeToChange = null;\n if (attribute2 === \"class\") {\n const current = value.split(/\\s/g);\n Object.values(modes).flatMap((i) => (i || \"\").split(/\\s/g)).filter(Boolean).forEach((v) => {\n if (current.includes(v))\n classesToAdd.add(v);\n else\n classesToRemove.add(v);\n });\n } else {\n attributeToChange = { key: attribute2, value };\n }\n if (classesToAdd.size === 0 && classesToRemove.size === 0 && attributeToChange === null)\n return;\n let style;\n if (disableTransition) {\n style = window.document.createElement(\"style\");\n style.appendChild(document.createTextNode(CSS_DISABLE_TRANS));\n window.document.head.appendChild(style);\n }\n for (const c of classesToAdd) {\n el.classList.add(c);\n }\n for (const c of classesToRemove) {\n el.classList.remove(c);\n }\n if (attributeToChange) {\n el.setAttribute(attributeToChange.key, attributeToChange.value);\n }\n if (disableTransition) {\n window.getComputedStyle(style).opacity;\n document.head.removeChild(style);\n }\n }\n );\n function defaultOnChanged(mode) {\n var _a;\n updateHTMLAttrs(selector, attribute, (_a = modes[mode]) != null ? _a : mode);\n }\n function onChanged(mode) {\n if (options.onChanged)\n options.onChanged(mode, defaultOnChanged);\n else\n defaultOnChanged(mode);\n }\n watch(state, onChanged, { flush: \"post\", immediate: true });\n tryOnMounted(() => onChanged(state.value));\n const auto = computed({\n get() {\n return emitAuto ? store.value : state.value;\n },\n set(v) {\n store.value = v;\n }\n });\n return Object.assign(auto, { store, system, state });\n}\n\nfunction useConfirmDialog(revealed = shallowRef(false)) {\n const confirmHook = createEventHook();\n const cancelHook = createEventHook();\n const revealHook = createEventHook();\n let _resolve = noop;\n const reveal = (data) => {\n revealHook.trigger(data);\n revealed.value = true;\n return new Promise((resolve) => {\n _resolve = resolve;\n });\n };\n const confirm = (data) => {\n revealed.value = false;\n confirmHook.trigger(data);\n _resolve({ data, isCanceled: false });\n };\n const cancel = (data) => {\n revealed.value = false;\n cancelHook.trigger(data);\n _resolve({ data, isCanceled: true });\n };\n return {\n isRevealed: computed(() => revealed.value),\n reveal,\n confirm,\n cancel,\n onReveal: revealHook.on,\n onConfirm: confirmHook.on,\n onCancel: cancelHook.on\n };\n}\n\nfunction useCountdown(initialCountdown, options) {\n var _a, _b;\n const remaining = shallowRef(toValue(initialCountdown));\n const intervalController = useIntervalFn(() => {\n var _a2, _b2;\n const value = remaining.value - 1;\n remaining.value = value < 0 ? 0 : value;\n (_a2 = options == null ? void 0 : options.onTick) == null ? void 0 : _a2.call(options);\n if (remaining.value <= 0) {\n intervalController.pause();\n (_b2 = options == null ? void 0 : options.onComplete) == null ? void 0 : _b2.call(options);\n }\n }, (_a = options == null ? void 0 : options.interval) != null ? _a : 1e3, { immediate: (_b = options == null ? void 0 : options.immediate) != null ? _b : false });\n const reset = (countdown) => {\n var _a2;\n remaining.value = (_a2 = toValue(countdown)) != null ? _a2 : toValue(initialCountdown);\n };\n const stop = () => {\n intervalController.pause();\n reset();\n };\n const resume = () => {\n if (!intervalController.isActive.value) {\n if (remaining.value > 0) {\n intervalController.resume();\n }\n }\n };\n const start = (countdown) => {\n reset(countdown);\n intervalController.resume();\n };\n return {\n remaining,\n reset,\n stop,\n start,\n pause: intervalController.pause,\n resume,\n isActive: intervalController.isActive\n };\n}\n\nfunction useCssVar(prop, target, options = {}) {\n const { window = defaultWindow, initialValue, observe = false } = options;\n const variable = shallowRef(initialValue);\n const elRef = computed(() => {\n var _a;\n return unrefElement(target) || ((_a = window == null ? void 0 : window.document) == null ? void 0 : _a.documentElement);\n });\n function updateCssVar() {\n var _a;\n const key = toValue(prop);\n const el = toValue(elRef);\n if (el && window && key) {\n const value = (_a = window.getComputedStyle(el).getPropertyValue(key)) == null ? void 0 : _a.trim();\n variable.value = value || variable.value || initialValue;\n }\n }\n if (observe) {\n useMutationObserver(elRef, updateCssVar, {\n attributeFilter: [\"style\", \"class\"],\n window\n });\n }\n watch(\n [elRef, () => toValue(prop)],\n (_, old) => {\n if (old[0] && old[1])\n old[0].style.removeProperty(old[1]);\n updateCssVar();\n },\n { immediate: true }\n );\n watch(\n [variable, elRef],\n ([val, el]) => {\n const raw_prop = toValue(prop);\n if ((el == null ? void 0 : el.style) && raw_prop) {\n if (val == null)\n el.style.removeProperty(raw_prop);\n else\n el.style.setProperty(raw_prop, val);\n }\n },\n { immediate: true }\n );\n return variable;\n}\n\nfunction useCurrentElement(rootComponent) {\n const vm = getCurrentInstance();\n const currentElement = computedWithControl(\n () => null,\n () => rootComponent ? unrefElement(rootComponent) : vm.proxy.$el\n );\n onUpdated(currentElement.trigger);\n onMounted(currentElement.trigger);\n return currentElement;\n}\n\nfunction useCycleList(list, options) {\n const state = shallowRef(getInitialValue());\n const listRef = toRef(list);\n const index = computed({\n get() {\n var _a;\n const targetList = listRef.value;\n let index2 = (options == null ? void 0 : options.getIndexOf) ? options.getIndexOf(state.value, targetList) : targetList.indexOf(state.value);\n if (index2 < 0)\n index2 = (_a = options == null ? void 0 : options.fallbackIndex) != null ? _a : 0;\n return index2;\n },\n set(v) {\n set(v);\n }\n });\n function set(i) {\n const targetList = listRef.value;\n const length = targetList.length;\n const index2 = (i % length + length) % length;\n const value = targetList[index2];\n state.value = value;\n return value;\n }\n function shift(delta = 1) {\n return set(index.value + delta);\n }\n function next(n = 1) {\n return shift(n);\n }\n function prev(n = 1) {\n return shift(-n);\n }\n function getInitialValue() {\n var _a, _b;\n return (_b = toValue((_a = options == null ? void 0 : options.initialValue) != null ? _a : toValue(list)[0])) != null ? _b : void 0;\n }\n watch(listRef, () => set(index.value));\n return {\n state,\n index,\n next,\n prev,\n go: set\n };\n}\n\nfunction useDark(options = {}) {\n const {\n valueDark = \"dark\",\n valueLight = \"\"\n } = options;\n const mode = useColorMode({\n ...options,\n onChanged: (mode2, defaultHandler) => {\n var _a;\n if (options.onChanged)\n (_a = options.onChanged) == null ? void 0 : _a.call(options, mode2 === \"dark\", defaultHandler, mode2);\n else\n defaultHandler(mode2);\n },\n modes: {\n dark: valueDark,\n light: valueLight\n }\n });\n const system = computed(() => mode.system.value);\n const isDark = computed({\n get() {\n return mode.value === \"dark\";\n },\n set(v) {\n const modeVal = v ? \"dark\" : \"light\";\n if (system.value === modeVal)\n mode.value = \"auto\";\n else\n mode.value = modeVal;\n }\n });\n return isDark;\n}\n\nfunction fnBypass(v) {\n return v;\n}\nfunction fnSetSource(source, value) {\n return source.value = value;\n}\nfunction defaultDump(clone) {\n return clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\nfunction defaultParse(clone) {\n return clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\nfunction useManualRefHistory(source, options = {}) {\n const {\n clone = false,\n dump = defaultDump(clone),\n parse = defaultParse(clone),\n setSource = fnSetSource\n } = options;\n function _createHistoryRecord() {\n return markRaw({\n snapshot: dump(source.value),\n timestamp: timestamp()\n });\n }\n const last = ref(_createHistoryRecord());\n const undoStack = ref([]);\n const redoStack = ref([]);\n const _setSource = (record) => {\n setSource(source, parse(record.snapshot));\n last.value = record;\n };\n const commit = () => {\n undoStack.value.unshift(last.value);\n last.value = _createHistoryRecord();\n if (options.capacity && undoStack.value.length > options.capacity)\n undoStack.value.splice(options.capacity, Number.POSITIVE_INFINITY);\n if (redoStack.value.length)\n redoStack.value.splice(0, redoStack.value.length);\n };\n const clear = () => {\n undoStack.value.splice(0, undoStack.value.length);\n redoStack.value.splice(0, redoStack.value.length);\n };\n const undo = () => {\n const state = undoStack.value.shift();\n if (state) {\n redoStack.value.unshift(last.value);\n _setSource(state);\n }\n };\n const redo = () => {\n const state = redoStack.value.shift();\n if (state) {\n undoStack.value.unshift(last.value);\n _setSource(state);\n }\n };\n const reset = () => {\n _setSource(last.value);\n };\n const history = computed(() => [last.value, ...undoStack.value]);\n const canUndo = computed(() => undoStack.value.length > 0);\n const canRedo = computed(() => redoStack.value.length > 0);\n return {\n source,\n undoStack,\n redoStack,\n last,\n history,\n canUndo,\n canRedo,\n clear,\n commit,\n reset,\n undo,\n redo\n };\n}\n\nfunction useRefHistory(source, options = {}) {\n const {\n deep = false,\n flush = \"pre\",\n eventFilter\n } = options;\n const {\n eventFilter: composedFilter,\n pause,\n resume: resumeTracking,\n isActive: isTracking\n } = pausableFilter(eventFilter);\n const {\n ignoreUpdates,\n ignorePrevAsyncUpdates,\n stop\n } = watchIgnorable(\n source,\n commit,\n { deep, flush, eventFilter: composedFilter }\n );\n function setSource(source2, value) {\n ignorePrevAsyncUpdates();\n ignoreUpdates(() => {\n source2.value = value;\n });\n }\n const manualHistory = useManualRefHistory(source, { ...options, clone: options.clone || deep, setSource });\n const { clear, commit: manualCommit } = manualHistory;\n function commit() {\n ignorePrevAsyncUpdates();\n manualCommit();\n }\n function resume(commitNow) {\n resumeTracking();\n if (commitNow)\n commit();\n }\n function batch(fn) {\n let canceled = false;\n const cancel = () => canceled = true;\n ignoreUpdates(() => {\n fn(cancel);\n });\n if (!canceled)\n commit();\n }\n function dispose() {\n stop();\n clear();\n }\n return {\n ...manualHistory,\n isTracking,\n pause,\n resume,\n commit,\n batch,\n dispose\n };\n}\n\nfunction useDebouncedRefHistory(source, options = {}) {\n const filter = options.debounce ? debounceFilter(options.debounce) : void 0;\n const history = useRefHistory(source, { ...options, eventFilter: filter });\n return {\n ...history\n };\n}\n\nfunction useDeviceMotion(options = {}) {\n const {\n window = defaultWindow,\n requestPermissions = false,\n eventFilter = bypassFilter\n } = options;\n const isSupported = useSupported(() => typeof DeviceMotionEvent !== \"undefined\");\n const requirePermissions = useSupported(() => isSupported.value && \"requestPermission\" in DeviceMotionEvent && typeof DeviceMotionEvent.requestPermission === \"function\");\n const permissionGranted = shallowRef(false);\n const acceleration = ref({ x: null, y: null, z: null });\n const rotationRate = ref({ alpha: null, beta: null, gamma: null });\n const interval = shallowRef(0);\n const accelerationIncludingGravity = ref({\n x: null,\n y: null,\n z: null\n });\n function init() {\n if (window) {\n const onDeviceMotion = createFilterWrapper(\n eventFilter,\n (event) => {\n var _a, _b, _c, _d, _e, _f, _g, _h, _i;\n acceleration.value = {\n x: ((_a = event.acceleration) == null ? void 0 : _a.x) || null,\n y: ((_b = event.acceleration) == null ? void 0 : _b.y) || null,\n z: ((_c = event.acceleration) == null ? void 0 : _c.z) || null\n };\n accelerationIncludingGravity.value = {\n x: ((_d = event.accelerationIncludingGravity) == null ? void 0 : _d.x) || null,\n y: ((_e = event.accelerationIncludingGravity) == null ? void 0 : _e.y) || null,\n z: ((_f = event.accelerationIncludingGravity) == null ? void 0 : _f.z) || null\n };\n rotationRate.value = {\n alpha: ((_g = event.rotationRate) == null ? void 0 : _g.alpha) || null,\n beta: ((_h = event.rotationRate) == null ? void 0 : _h.beta) || null,\n gamma: ((_i = event.rotationRate) == null ? void 0 : _i.gamma) || null\n };\n interval.value = event.interval;\n }\n );\n useEventListener(window, \"devicemotion\", onDeviceMotion, { passive: true });\n }\n }\n const ensurePermissions = async () => {\n if (!requirePermissions.value)\n permissionGranted.value = true;\n if (permissionGranted.value)\n return;\n if (requirePermissions.value) {\n const requestPermission = DeviceMotionEvent.requestPermission;\n try {\n const response = await requestPermission();\n if (response === \"granted\") {\n permissionGranted.value = true;\n init();\n }\n } catch (error) {\n console.error(error);\n }\n }\n };\n if (isSupported.value) {\n if (requestPermissions && requirePermissions.value) {\n ensurePermissions().then(() => init());\n } else {\n init();\n }\n }\n return {\n acceleration,\n accelerationIncludingGravity,\n rotationRate,\n interval,\n isSupported,\n requirePermissions,\n ensurePermissions,\n permissionGranted\n };\n}\n\nfunction useDeviceOrientation(options = {}) {\n const { window = defaultWindow } = options;\n const isSupported = useSupported(() => window && \"DeviceOrientationEvent\" in window);\n const isAbsolute = shallowRef(false);\n const alpha = shallowRef(null);\n const beta = shallowRef(null);\n const gamma = shallowRef(null);\n if (window && isSupported.value) {\n useEventListener(window, \"deviceorientation\", (event) => {\n isAbsolute.value = event.absolute;\n alpha.value = event.alpha;\n beta.value = event.beta;\n gamma.value = event.gamma;\n }, { passive: true });\n }\n return {\n isSupported,\n isAbsolute,\n alpha,\n beta,\n gamma\n };\n}\n\nfunction useDevicePixelRatio(options = {}) {\n const {\n window = defaultWindow\n } = options;\n const pixelRatio = shallowRef(1);\n const query = useMediaQuery(() => `(resolution: ${pixelRatio.value}dppx)`, options);\n let stop = noop;\n if (window) {\n stop = watchImmediate(query, () => pixelRatio.value = window.devicePixelRatio);\n }\n return {\n pixelRatio: readonly(pixelRatio),\n stop\n };\n}\n\nfunction useDevicesList(options = {}) {\n const {\n navigator = defaultNavigator,\n requestPermissions = false,\n constraints = { audio: true, video: true },\n onUpdated\n } = options;\n const devices = ref([]);\n const videoInputs = computed(() => devices.value.filter((i) => i.kind === \"videoinput\"));\n const audioInputs = computed(() => devices.value.filter((i) => i.kind === \"audioinput\"));\n const audioOutputs = computed(() => devices.value.filter((i) => i.kind === \"audiooutput\"));\n const isSupported = useSupported(() => navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices);\n const permissionGranted = shallowRef(false);\n let stream;\n async function update() {\n if (!isSupported.value)\n return;\n devices.value = await navigator.mediaDevices.enumerateDevices();\n onUpdated == null ? void 0 : onUpdated(devices.value);\n if (stream) {\n stream.getTracks().forEach((t) => t.stop());\n stream = null;\n }\n }\n async function ensurePermissions() {\n const deviceName = constraints.video ? \"camera\" : \"microphone\";\n if (!isSupported.value)\n return false;\n if (permissionGranted.value)\n return true;\n const { state, query } = usePermission(deviceName, { controls: true });\n await query();\n if (state.value !== \"granted\") {\n let granted = true;\n try {\n stream = await navigator.mediaDevices.getUserMedia(constraints);\n } catch (e) {\n stream = null;\n granted = false;\n }\n update();\n permissionGranted.value = granted;\n } else {\n permissionGranted.value = true;\n }\n return permissionGranted.value;\n }\n if (isSupported.value) {\n if (requestPermissions)\n ensurePermissions();\n useEventListener(navigator.mediaDevices, \"devicechange\", update, { passive: true });\n update();\n }\n return {\n devices,\n ensurePermissions,\n permissionGranted,\n videoInputs,\n audioInputs,\n audioOutputs,\n isSupported\n };\n}\n\nfunction useDisplayMedia(options = {}) {\n var _a;\n const enabled = shallowRef((_a = options.enabled) != null ? _a : false);\n const video = options.video;\n const audio = options.audio;\n const { navigator = defaultNavigator } = options;\n const isSupported = useSupported(() => {\n var _a2;\n return (_a2 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a2.getDisplayMedia;\n });\n const constraint = { audio, video };\n const stream = shallowRef();\n async function _start() {\n var _a2;\n if (!isSupported.value || stream.value)\n return;\n stream.value = await navigator.mediaDevices.getDisplayMedia(constraint);\n (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => useEventListener(t, \"ended\", stop, { passive: true }));\n return stream.value;\n }\n async function _stop() {\n var _a2;\n (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop());\n stream.value = void 0;\n }\n function stop() {\n _stop();\n enabled.value = false;\n }\n async function start() {\n await _start();\n if (stream.value)\n enabled.value = true;\n return stream.value;\n }\n watch(\n enabled,\n (v) => {\n if (v)\n _start();\n else\n _stop();\n },\n { immediate: true }\n );\n return {\n isSupported,\n stream,\n start,\n stop,\n enabled\n };\n}\n\nfunction useDocumentVisibility(options = {}) {\n const { document = defaultDocument } = options;\n if (!document)\n return shallowRef(\"visible\");\n const visibility = shallowRef(document.visibilityState);\n useEventListener(document, \"visibilitychange\", () => {\n visibility.value = document.visibilityState;\n }, { passive: true });\n return visibility;\n}\n\nfunction useDraggable(target, options = {}) {\n var _a;\n const {\n pointerTypes,\n preventDefault,\n stopPropagation,\n exact,\n onMove,\n onEnd,\n onStart,\n initialValue,\n axis = \"both\",\n draggingElement = defaultWindow,\n containerElement,\n handle: draggingHandle = target,\n buttons = [0]\n } = options;\n const position = ref(\n (_a = toValue(initialValue)) != null ? _a : { x: 0, y: 0 }\n );\n const pressedDelta = ref();\n const filterEvent = (e) => {\n if (pointerTypes)\n return pointerTypes.includes(e.pointerType);\n return true;\n };\n const handleEvent = (e) => {\n if (toValue(preventDefault))\n e.preventDefault();\n if (toValue(stopPropagation))\n e.stopPropagation();\n };\n const start = (e) => {\n var _a2;\n if (!toValue(buttons).includes(e.button))\n return;\n if (toValue(options.disabled) || !filterEvent(e))\n return;\n if (toValue(exact) && e.target !== toValue(target))\n return;\n const container = toValue(containerElement);\n const containerRect = (_a2 = container == null ? void 0 : container.getBoundingClientRect) == null ? void 0 : _a2.call(container);\n const targetRect = toValue(target).getBoundingClientRect();\n const pos = {\n x: e.clientX - (container ? targetRect.left - containerRect.left + container.scrollLeft : targetRect.left),\n y: e.clientY - (container ? targetRect.top - containerRect.top + container.scrollTop : targetRect.top)\n };\n if ((onStart == null ? void 0 : onStart(pos, e)) === false)\n return;\n pressedDelta.value = pos;\n handleEvent(e);\n };\n const move = (e) => {\n if (toValue(options.disabled) || !filterEvent(e))\n return;\n if (!pressedDelta.value)\n return;\n const container = toValue(containerElement);\n const targetRect = toValue(target).getBoundingClientRect();\n let { x, y } = position.value;\n if (axis === \"x\" || axis === \"both\") {\n x = e.clientX - pressedDelta.value.x;\n if (container)\n x = Math.min(Math.max(0, x), container.scrollWidth - targetRect.width);\n }\n if (axis === \"y\" || axis === \"both\") {\n y = e.clientY - pressedDelta.value.y;\n if (container)\n y = Math.min(Math.max(0, y), container.scrollHeight - targetRect.height);\n }\n position.value = {\n x,\n y\n };\n onMove == null ? void 0 : onMove(position.value, e);\n handleEvent(e);\n };\n const end = (e) => {\n if (toValue(options.disabled) || !filterEvent(e))\n return;\n if (!pressedDelta.value)\n return;\n pressedDelta.value = void 0;\n onEnd == null ? void 0 : onEnd(position.value, e);\n handleEvent(e);\n };\n if (isClient) {\n const config = () => {\n var _a2;\n return {\n capture: (_a2 = options.capture) != null ? _a2 : true,\n passive: !toValue(preventDefault)\n };\n };\n useEventListener(draggingHandle, \"pointerdown\", start, config);\n useEventListener(draggingElement, \"pointermove\", move, config);\n useEventListener(draggingElement, \"pointerup\", end, config);\n }\n return {\n ...toRefs(position),\n position,\n isDragging: computed(() => !!pressedDelta.value),\n style: computed(\n () => `left:${position.value.x}px;top:${position.value.y}px;`\n )\n };\n}\n\nfunction useDropZone(target, options = {}) {\n var _a, _b;\n const isOverDropZone = shallowRef(false);\n const files = shallowRef(null);\n let counter = 0;\n let isValid = true;\n if (isClient) {\n const _options = typeof options === \"function\" ? { onDrop: options } : options;\n const multiple = (_a = _options.multiple) != null ? _a : true;\n const preventDefaultForUnhandled = (_b = _options.preventDefaultForUnhandled) != null ? _b : false;\n const getFiles = (event) => {\n var _a2, _b2;\n const list = Array.from((_b2 = (_a2 = event.dataTransfer) == null ? void 0 : _a2.files) != null ? _b2 : []);\n return list.length === 0 ? null : multiple ? list : [list[0]];\n };\n const checkDataTypes = (types) => {\n const dataTypes = unref(_options.dataTypes);\n if (typeof dataTypes === \"function\")\n return dataTypes(types);\n if (!(dataTypes == null ? void 0 : dataTypes.length))\n return true;\n if (types.length === 0)\n return false;\n return types.every(\n (type) => dataTypes.some((allowedType) => type.includes(allowedType))\n );\n };\n const checkValidity = (items) => {\n const types = Array.from(items != null ? items : []).map((item) => item.type);\n const dataTypesValid = checkDataTypes(types);\n const multipleFilesValid = multiple || items.length <= 1;\n return dataTypesValid && multipleFilesValid;\n };\n const isSafari = () => /^(?:(?!chrome|android).)*safari/i.test(navigator.userAgent) && !(\"chrome\" in window);\n const handleDragEvent = (event, eventType) => {\n var _a2, _b2, _c, _d, _e, _f;\n const dataTransferItemList = (_a2 = event.dataTransfer) == null ? void 0 : _a2.items;\n isValid = (_b2 = dataTransferItemList && checkValidity(dataTransferItemList)) != null ? _b2 : false;\n if (preventDefaultForUnhandled) {\n event.preventDefault();\n }\n if (!isSafari() && !isValid) {\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = \"none\";\n }\n return;\n }\n event.preventDefault();\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = \"copy\";\n }\n const currentFiles = getFiles(event);\n switch (eventType) {\n case \"enter\":\n counter += 1;\n isOverDropZone.value = true;\n (_c = _options.onEnter) == null ? void 0 : _c.call(_options, null, event);\n break;\n case \"over\":\n (_d = _options.onOver) == null ? void 0 : _d.call(_options, null, event);\n break;\n case \"leave\":\n counter -= 1;\n if (counter === 0)\n isOverDropZone.value = false;\n (_e = _options.onLeave) == null ? void 0 : _e.call(_options, null, event);\n break;\n case \"drop\":\n counter = 0;\n isOverDropZone.value = false;\n if (isValid) {\n files.value = currentFiles;\n (_f = _options.onDrop) == null ? void 0 : _f.call(_options, currentFiles, event);\n }\n break;\n }\n };\n useEventListener(target, \"dragenter\", (event) => handleDragEvent(event, \"enter\"));\n useEventListener(target, \"dragover\", (event) => handleDragEvent(event, \"over\"));\n useEventListener(target, \"dragleave\", (event) => handleDragEvent(event, \"leave\"));\n useEventListener(target, \"drop\", (event) => handleDragEvent(event, \"drop\"));\n }\n return {\n files,\n isOverDropZone\n };\n}\n\nfunction useResizeObserver(target, callback, options = {}) {\n const { window = defaultWindow, ...observerOptions } = options;\n let observer;\n const isSupported = useSupported(() => window && \"ResizeObserver\" in window);\n const cleanup = () => {\n if (observer) {\n observer.disconnect();\n observer = void 0;\n }\n };\n const targets = computed(() => {\n const _targets = toValue(target);\n return Array.isArray(_targets) ? _targets.map((el) => unrefElement(el)) : [unrefElement(_targets)];\n });\n const stopWatch = watch(\n targets,\n (els) => {\n cleanup();\n if (isSupported.value && window) {\n observer = new ResizeObserver(callback);\n for (const _el of els) {\n if (_el)\n observer.observe(_el, observerOptions);\n }\n }\n },\n { immediate: true, flush: \"post\" }\n );\n const stop = () => {\n cleanup();\n stopWatch();\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n stop\n };\n}\n\nfunction useElementBounding(target, options = {}) {\n const {\n reset = true,\n windowResize = true,\n windowScroll = true,\n immediate = true,\n updateTiming = \"sync\"\n } = options;\n const height = shallowRef(0);\n const bottom = shallowRef(0);\n const left = shallowRef(0);\n const right = shallowRef(0);\n const top = shallowRef(0);\n const width = shallowRef(0);\n const x = shallowRef(0);\n const y = shallowRef(0);\n function recalculate() {\n const el = unrefElement(target);\n if (!el) {\n if (reset) {\n height.value = 0;\n bottom.value = 0;\n left.value = 0;\n right.value = 0;\n top.value = 0;\n width.value = 0;\n x.value = 0;\n y.value = 0;\n }\n return;\n }\n const rect = el.getBoundingClientRect();\n height.value = rect.height;\n bottom.value = rect.bottom;\n left.value = rect.left;\n right.value = rect.right;\n top.value = rect.top;\n width.value = rect.width;\n x.value = rect.x;\n y.value = rect.y;\n }\n function update() {\n if (updateTiming === \"sync\")\n recalculate();\n else if (updateTiming === \"next-frame\")\n requestAnimationFrame(() => recalculate());\n }\n useResizeObserver(target, update);\n watch(() => unrefElement(target), (ele) => !ele && update());\n useMutationObserver(target, update, {\n attributeFilter: [\"style\", \"class\"]\n });\n if (windowScroll)\n useEventListener(\"scroll\", update, { capture: true, passive: true });\n if (windowResize)\n useEventListener(\"resize\", update, { passive: true });\n tryOnMounted(() => {\n if (immediate)\n update();\n });\n return {\n height,\n bottom,\n left,\n right,\n top,\n width,\n x,\n y,\n update\n };\n}\n\nfunction useElementByPoint(options) {\n const {\n x,\n y,\n document = defaultDocument,\n multiple,\n interval = \"requestAnimationFrame\",\n immediate = true\n } = options;\n const isSupported = useSupported(() => {\n if (toValue(multiple))\n return document && \"elementsFromPoint\" in document;\n return document && \"elementFromPoint\" in document;\n });\n const element = shallowRef(null);\n const cb = () => {\n var _a, _b;\n element.value = toValue(multiple) ? (_a = document == null ? void 0 : document.elementsFromPoint(toValue(x), toValue(y))) != null ? _a : [] : (_b = document == null ? void 0 : document.elementFromPoint(toValue(x), toValue(y))) != null ? _b : null;\n };\n const controls = interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate });\n return {\n isSupported,\n element,\n ...controls\n };\n}\n\nfunction useElementHover(el, options = {}) {\n const {\n delayEnter = 0,\n delayLeave = 0,\n triggerOnRemoval = false,\n window = defaultWindow\n } = options;\n const isHovered = shallowRef(false);\n let timer;\n const toggle = (entering) => {\n const delay = entering ? delayEnter : delayLeave;\n if (timer) {\n clearTimeout(timer);\n timer = void 0;\n }\n if (delay)\n timer = setTimeout(() => isHovered.value = entering, delay);\n else\n isHovered.value = entering;\n };\n if (!window)\n return isHovered;\n useEventListener(el, \"mouseenter\", () => toggle(true), { passive: true });\n useEventListener(el, \"mouseleave\", () => toggle(false), { passive: true });\n if (triggerOnRemoval) {\n onElementRemoval(\n computed(() => unrefElement(el)),\n () => toggle(false)\n );\n }\n return isHovered;\n}\n\nfunction useElementSize(target, initialSize = { width: 0, height: 0 }, options = {}) {\n const { window = defaultWindow, box = \"content-box\" } = options;\n const isSVG = computed(() => {\n var _a, _b;\n return (_b = (_a = unrefElement(target)) == null ? void 0 : _a.namespaceURI) == null ? void 0 : _b.includes(\"svg\");\n });\n const width = shallowRef(initialSize.width);\n const height = shallowRef(initialSize.height);\n const { stop: stop1 } = useResizeObserver(\n target,\n ([entry]) => {\n const boxSize = box === \"border-box\" ? entry.borderBoxSize : box === \"content-box\" ? entry.contentBoxSize : entry.devicePixelContentBoxSize;\n if (window && isSVG.value) {\n const $elem = unrefElement(target);\n if ($elem) {\n const rect = $elem.getBoundingClientRect();\n width.value = rect.width;\n height.value = rect.height;\n }\n } else {\n if (boxSize) {\n const formatBoxSize = toArray(boxSize);\n width.value = formatBoxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0);\n height.value = formatBoxSize.reduce((acc, { blockSize }) => acc + blockSize, 0);\n } else {\n width.value = entry.contentRect.width;\n height.value = entry.contentRect.height;\n }\n }\n },\n options\n );\n tryOnMounted(() => {\n const ele = unrefElement(target);\n if (ele) {\n width.value = \"offsetWidth\" in ele ? ele.offsetWidth : initialSize.width;\n height.value = \"offsetHeight\" in ele ? ele.offsetHeight : initialSize.height;\n }\n });\n const stop2 = watch(\n () => unrefElement(target),\n (ele) => {\n width.value = ele ? initialSize.width : 0;\n height.value = ele ? initialSize.height : 0;\n }\n );\n function stop() {\n stop1();\n stop2();\n }\n return {\n width,\n height,\n stop\n };\n}\n\nfunction useIntersectionObserver(target, callback, options = {}) {\n const {\n root,\n rootMargin = \"0px\",\n threshold = 0,\n window = defaultWindow,\n immediate = true\n } = options;\n const isSupported = useSupported(() => window && \"IntersectionObserver\" in window);\n const targets = computed(() => {\n const _target = toValue(target);\n return toArray(_target).map(unrefElement).filter(notNullish);\n });\n let cleanup = noop;\n const isActive = shallowRef(immediate);\n const stopWatch = isSupported.value ? watch(\n () => [targets.value, unrefElement(root), isActive.value],\n ([targets2, root2]) => {\n cleanup();\n if (!isActive.value)\n return;\n if (!targets2.length)\n return;\n const observer = new IntersectionObserver(\n callback,\n {\n root: unrefElement(root2),\n rootMargin,\n threshold\n }\n );\n targets2.forEach((el) => el && observer.observe(el));\n cleanup = () => {\n observer.disconnect();\n cleanup = noop;\n };\n },\n { immediate, flush: \"post\" }\n ) : noop;\n const stop = () => {\n cleanup();\n stopWatch();\n isActive.value = false;\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n isActive,\n pause() {\n cleanup();\n isActive.value = false;\n },\n resume() {\n isActive.value = true;\n },\n stop\n };\n}\n\nfunction useElementVisibility(element, options = {}) {\n const {\n window = defaultWindow,\n scrollTarget,\n threshold = 0,\n rootMargin,\n once = false\n } = options;\n const elementIsVisible = shallowRef(false);\n const { stop } = useIntersectionObserver(\n element,\n (intersectionObserverEntries) => {\n let isIntersecting = elementIsVisible.value;\n let latestTime = 0;\n for (const entry of intersectionObserverEntries) {\n if (entry.time >= latestTime) {\n latestTime = entry.time;\n isIntersecting = entry.isIntersecting;\n }\n }\n elementIsVisible.value = isIntersecting;\n if (once) {\n watchOnce(elementIsVisible, () => {\n stop();\n });\n }\n },\n {\n root: scrollTarget,\n window,\n threshold,\n rootMargin: toValue(rootMargin)\n }\n );\n return elementIsVisible;\n}\n\nconst events = /* @__PURE__ */ new Map();\n\nfunction useEventBus(key) {\n const scope = getCurrentScope();\n function on(listener) {\n var _a;\n const listeners = events.get(key) || /* @__PURE__ */ new Set();\n listeners.add(listener);\n events.set(key, listeners);\n const _off = () => off(listener);\n (_a = scope == null ? void 0 : scope.cleanups) == null ? void 0 : _a.push(_off);\n return _off;\n }\n function once(listener) {\n function _listener(...args) {\n off(_listener);\n listener(...args);\n }\n return on(_listener);\n }\n function off(listener) {\n const listeners = events.get(key);\n if (!listeners)\n return;\n listeners.delete(listener);\n if (!listeners.size)\n reset();\n }\n function reset() {\n events.delete(key);\n }\n function emit(event, payload) {\n var _a;\n (_a = events.get(key)) == null ? void 0 : _a.forEach((v) => v(event, payload));\n }\n return { on, once, off, emit, reset };\n}\n\nfunction resolveNestedOptions$1(options) {\n if (options === true)\n return {};\n return options;\n}\nfunction useEventSource(url, events = [], options = {}) {\n const event = shallowRef(null);\n const data = shallowRef(null);\n const status = shallowRef(\"CONNECTING\");\n const eventSource = ref(null);\n const error = shallowRef(null);\n const urlRef = toRef(url);\n const lastEventId = shallowRef(null);\n let explicitlyClosed = false;\n let retried = 0;\n const {\n withCredentials = false,\n immediate = true,\n autoConnect = true,\n autoReconnect\n } = options;\n const close = () => {\n if (isClient && eventSource.value) {\n eventSource.value.close();\n eventSource.value = null;\n status.value = \"CLOSED\";\n explicitlyClosed = true;\n }\n };\n const _init = () => {\n if (explicitlyClosed || typeof urlRef.value === \"undefined\")\n return;\n const es = new EventSource(urlRef.value, { withCredentials });\n status.value = \"CONNECTING\";\n eventSource.value = es;\n es.onopen = () => {\n status.value = \"OPEN\";\n error.value = null;\n };\n es.onerror = (e) => {\n status.value = \"CLOSED\";\n error.value = e;\n if (es.readyState === 2 && !explicitlyClosed && autoReconnect) {\n es.close();\n const {\n retries = -1,\n delay = 1e3,\n onFailed\n } = resolveNestedOptions$1(autoReconnect);\n retried += 1;\n if (typeof retries === \"number\" && (retries < 0 || retried < retries))\n setTimeout(_init, delay);\n else if (typeof retries === \"function\" && retries())\n setTimeout(_init, delay);\n else\n onFailed == null ? void 0 : onFailed();\n }\n };\n es.onmessage = (e) => {\n event.value = null;\n data.value = e.data;\n lastEventId.value = e.lastEventId;\n };\n for (const event_name of events) {\n useEventListener(es, event_name, (e) => {\n event.value = event_name;\n data.value = e.data || null;\n }, { passive: true });\n }\n };\n const open = () => {\n if (!isClient)\n return;\n close();\n explicitlyClosed = false;\n retried = 0;\n _init();\n };\n if (immediate)\n open();\n if (autoConnect)\n watch(urlRef, open);\n tryOnScopeDispose(close);\n return {\n eventSource,\n event,\n data,\n status,\n error,\n open,\n close,\n lastEventId\n };\n}\n\nfunction useEyeDropper(options = {}) {\n const { initialValue = \"\" } = options;\n const isSupported = useSupported(() => typeof window !== \"undefined\" && \"EyeDropper\" in window);\n const sRGBHex = shallowRef(initialValue);\n async function open(openOptions) {\n if (!isSupported.value)\n return;\n const eyeDropper = new window.EyeDropper();\n const result = await eyeDropper.open(openOptions);\n sRGBHex.value = result.sRGBHex;\n return result;\n }\n return { isSupported, sRGBHex, open };\n}\n\nfunction useFavicon(newIcon = null, options = {}) {\n const {\n baseUrl = \"\",\n rel = \"icon\",\n document = defaultDocument\n } = options;\n const favicon = toRef(newIcon);\n const applyIcon = (icon) => {\n const elements = document == null ? void 0 : document.head.querySelectorAll(`link[rel*=\"${rel}\"]`);\n if (!elements || elements.length === 0) {\n const link = document == null ? void 0 : document.createElement(\"link\");\n if (link) {\n link.rel = rel;\n link.href = `${baseUrl}${icon}`;\n link.type = `image/${icon.split(\".\").pop()}`;\n document == null ? void 0 : document.head.append(link);\n }\n return;\n }\n elements == null ? void 0 : elements.forEach((el) => el.href = `${baseUrl}${icon}`);\n };\n watch(\n favicon,\n (i, o) => {\n if (typeof i === \"string\" && i !== o)\n applyIcon(i);\n },\n { immediate: true }\n );\n return favicon;\n}\n\nconst payloadMapping = {\n json: \"application/json\",\n text: \"text/plain\"\n};\nfunction isFetchOptions(obj) {\n return obj && containsProp(obj, \"immediate\", \"refetch\", \"initialData\", \"timeout\", \"beforeFetch\", \"afterFetch\", \"onFetchError\", \"fetch\", \"updateDataOnError\");\n}\nconst reAbsolute = /^(?:[a-z][a-z\\d+\\-.]*:)?\\/\\//i;\nfunction isAbsoluteURL(url) {\n return reAbsolute.test(url);\n}\nfunction headersToObject(headers) {\n if (typeof Headers !== \"undefined\" && headers instanceof Headers)\n return Object.fromEntries(headers.entries());\n return headers;\n}\nfunction combineCallbacks(combination, ...callbacks) {\n if (combination === \"overwrite\") {\n return async (ctx) => {\n let callback;\n for (let i = callbacks.length - 1; i >= 0; i--) {\n if (callbacks[i] != null) {\n callback = callbacks[i];\n break;\n }\n }\n if (callback)\n return { ...ctx, ...await callback(ctx) };\n return ctx;\n };\n } else {\n return async (ctx) => {\n for (const callback of callbacks) {\n if (callback)\n ctx = { ...ctx, ...await callback(ctx) };\n }\n return ctx;\n };\n }\n}\nfunction createFetch(config = {}) {\n const _combination = config.combination || \"chain\";\n const _options = config.options || {};\n const _fetchOptions = config.fetchOptions || {};\n function useFactoryFetch(url, ...args) {\n const computedUrl = computed(() => {\n const baseUrl = toValue(config.baseUrl);\n const targetUrl = toValue(url);\n return baseUrl && !isAbsoluteURL(targetUrl) ? joinPaths(baseUrl, targetUrl) : targetUrl;\n });\n let options = _options;\n let fetchOptions = _fetchOptions;\n if (args.length > 0) {\n if (isFetchOptions(args[0])) {\n options = {\n ...options,\n ...args[0],\n beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[0].beforeFetch),\n afterFetch: combineCallbacks(_combination, _options.afterFetch, args[0].afterFetch),\n onFetchError: combineCallbacks(_combination, _options.onFetchError, args[0].onFetchError)\n };\n } else {\n fetchOptions = {\n ...fetchOptions,\n ...args[0],\n headers: {\n ...headersToObject(fetchOptions.headers) || {},\n ...headersToObject(args[0].headers) || {}\n }\n };\n }\n }\n if (args.length > 1 && isFetchOptions(args[1])) {\n options = {\n ...options,\n ...args[1],\n beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[1].beforeFetch),\n afterFetch: combineCallbacks(_combination, _options.afterFetch, args[1].afterFetch),\n onFetchError: combineCallbacks(_combination, _options.onFetchError, args[1].onFetchError)\n };\n }\n return useFetch(computedUrl, fetchOptions, options);\n }\n return useFactoryFetch;\n}\nfunction useFetch(url, ...args) {\n var _a;\n const supportsAbort = typeof AbortController === \"function\";\n let fetchOptions = {};\n let options = {\n immediate: true,\n refetch: false,\n timeout: 0,\n updateDataOnError: false\n };\n const config = {\n method: \"GET\",\n type: \"text\",\n payload: void 0\n };\n if (args.length > 0) {\n if (isFetchOptions(args[0]))\n options = { ...options, ...args[0] };\n else\n fetchOptions = args[0];\n }\n if (args.length > 1) {\n if (isFetchOptions(args[1]))\n options = { ...options, ...args[1] };\n }\n const {\n fetch = (_a = defaultWindow) == null ? void 0 : _a.fetch,\n initialData,\n timeout\n } = options;\n const responseEvent = createEventHook();\n const errorEvent = createEventHook();\n const finallyEvent = createEventHook();\n const isFinished = shallowRef(false);\n const isFetching = shallowRef(false);\n const aborted = shallowRef(false);\n const statusCode = shallowRef(null);\n const response = shallowRef(null);\n const error = shallowRef(null);\n const data = shallowRef(initialData || null);\n const canAbort = computed(() => supportsAbort && isFetching.value);\n let controller;\n let timer;\n const abort = () => {\n if (supportsAbort) {\n controller == null ? void 0 : controller.abort();\n controller = new AbortController();\n controller.signal.onabort = () => aborted.value = true;\n fetchOptions = {\n ...fetchOptions,\n signal: controller.signal\n };\n }\n };\n const loading = (isLoading) => {\n isFetching.value = isLoading;\n isFinished.value = !isLoading;\n };\n if (timeout)\n timer = useTimeoutFn(abort, timeout, { immediate: false });\n let executeCounter = 0;\n const execute = async (throwOnFailed = false) => {\n var _a2, _b;\n abort();\n loading(true);\n error.value = null;\n statusCode.value = null;\n aborted.value = false;\n executeCounter += 1;\n const currentExecuteCounter = executeCounter;\n const defaultFetchOptions = {\n method: config.method,\n headers: {}\n };\n const payload = toValue(config.payload);\n if (payload) {\n const headers = headersToObject(defaultFetchOptions.headers);\n const proto = Object.getPrototypeOf(payload);\n if (!config.payloadType && payload && (proto === Object.prototype || Array.isArray(proto)) && !(payload instanceof FormData))\n config.payloadType = \"json\";\n if (config.payloadType)\n headers[\"Content-Type\"] = (_a2 = payloadMapping[config.payloadType]) != null ? _a2 : config.payloadType;\n defaultFetchOptions.body = config.payloadType === \"json\" ? JSON.stringify(payload) : payload;\n }\n let isCanceled = false;\n const context = {\n url: toValue(url),\n options: {\n ...defaultFetchOptions,\n ...fetchOptions\n },\n cancel: () => {\n isCanceled = true;\n }\n };\n if (options.beforeFetch)\n Object.assign(context, await options.beforeFetch(context));\n if (isCanceled || !fetch) {\n loading(false);\n return Promise.resolve(null);\n }\n let responseData = null;\n if (timer)\n timer.start();\n return fetch(\n context.url,\n {\n ...defaultFetchOptions,\n ...context.options,\n headers: {\n ...headersToObject(defaultFetchOptions.headers),\n ...headersToObject((_b = context.options) == null ? void 0 : _b.headers)\n }\n }\n ).then(async (fetchResponse) => {\n response.value = fetchResponse;\n statusCode.value = fetchResponse.status;\n responseData = await fetchResponse.clone()[config.type]();\n if (!fetchResponse.ok) {\n data.value = initialData || null;\n throw new Error(fetchResponse.statusText);\n }\n if (options.afterFetch) {\n ({ data: responseData } = await options.afterFetch({\n data: responseData,\n response: fetchResponse,\n context,\n execute\n }));\n }\n data.value = responseData;\n responseEvent.trigger(fetchResponse);\n return fetchResponse;\n }).catch(async (fetchError) => {\n let errorData = fetchError.message || fetchError.name;\n if (options.onFetchError) {\n ({ error: errorData, data: responseData } = await options.onFetchError({\n data: responseData,\n error: fetchError,\n response: response.value,\n context,\n execute\n }));\n }\n error.value = errorData;\n if (options.updateDataOnError)\n data.value = responseData;\n errorEvent.trigger(fetchError);\n if (throwOnFailed)\n throw fetchError;\n return null;\n }).finally(() => {\n if (currentExecuteCounter === executeCounter)\n loading(false);\n if (timer)\n timer.stop();\n finallyEvent.trigger(null);\n });\n };\n const refetch = toRef(options.refetch);\n watch(\n [\n refetch,\n toRef(url)\n ],\n ([refetch2]) => refetch2 && execute(),\n { deep: true }\n );\n const shell = {\n isFinished: readonly(isFinished),\n isFetching: readonly(isFetching),\n statusCode,\n response,\n error,\n data,\n canAbort,\n aborted,\n abort,\n execute,\n onFetchResponse: responseEvent.on,\n onFetchError: errorEvent.on,\n onFetchFinally: finallyEvent.on,\n // method\n get: setMethod(\"GET\"),\n put: setMethod(\"PUT\"),\n post: setMethod(\"POST\"),\n delete: setMethod(\"DELETE\"),\n patch: setMethod(\"PATCH\"),\n head: setMethod(\"HEAD\"),\n options: setMethod(\"OPTIONS\"),\n // type\n json: setType(\"json\"),\n text: setType(\"text\"),\n blob: setType(\"blob\"),\n arrayBuffer: setType(\"arrayBuffer\"),\n formData: setType(\"formData\")\n };\n function setMethod(method) {\n return (payload, payloadType) => {\n if (!isFetching.value) {\n config.method = method;\n config.payload = payload;\n config.payloadType = payloadType;\n if (isRef(config.payload)) {\n watch(\n [\n refetch,\n toRef(config.payload)\n ],\n ([refetch2]) => refetch2 && execute(),\n { deep: true }\n );\n }\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilFinished().then(onFulfilled, onRejected);\n }\n };\n }\n return void 0;\n };\n }\n function waitUntilFinished() {\n return new Promise((resolve, reject) => {\n until(isFinished).toBe(true).then(() => resolve(shell)).catch(reject);\n });\n }\n function setType(type) {\n return () => {\n if (!isFetching.value) {\n config.type = type;\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilFinished().then(onFulfilled, onRejected);\n }\n };\n }\n return void 0;\n };\n }\n if (options.immediate)\n Promise.resolve().then(() => execute());\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilFinished().then(onFulfilled, onRejected);\n }\n };\n}\nfunction joinPaths(start, end) {\n if (!start.endsWith(\"/\") && !end.startsWith(\"/\")) {\n return `${start}/${end}`;\n }\n if (start.endsWith(\"/\") && end.startsWith(\"/\")) {\n return `${start.slice(0, -1)}${end}`;\n }\n return `${start}${end}`;\n}\n\nconst DEFAULT_OPTIONS = {\n multiple: true,\n accept: \"*\",\n reset: false,\n directory: false\n};\nfunction prepareInitialFiles(files) {\n if (!files)\n return null;\n if (files instanceof FileList)\n return files;\n const dt = new DataTransfer();\n for (const file of files) {\n dt.items.add(file);\n }\n return dt.files;\n}\nfunction useFileDialog(options = {}) {\n const {\n document = defaultDocument\n } = options;\n const files = ref(prepareInitialFiles(options.initialFiles));\n const { on: onChange, trigger: changeTrigger } = createEventHook();\n const { on: onCancel, trigger: cancelTrigger } = createEventHook();\n let input;\n if (document) {\n input = document.createElement(\"input\");\n input.type = \"file\";\n input.onchange = (event) => {\n const result = event.target;\n files.value = result.files;\n changeTrigger(files.value);\n };\n input.oncancel = () => {\n cancelTrigger();\n };\n }\n const reset = () => {\n files.value = null;\n if (input && input.value) {\n input.value = \"\";\n changeTrigger(null);\n }\n };\n const open = (localOptions) => {\n if (!input)\n return;\n const _options = {\n ...DEFAULT_OPTIONS,\n ...options,\n ...localOptions\n };\n input.multiple = _options.multiple;\n input.accept = _options.accept;\n input.webkitdirectory = _options.directory;\n if (hasOwn(_options, \"capture\"))\n input.capture = _options.capture;\n if (_options.reset)\n reset();\n input.click();\n };\n return {\n files: readonly(files),\n open,\n reset,\n onCancel,\n onChange\n };\n}\n\nfunction useFileSystemAccess(options = {}) {\n const {\n window: _window = defaultWindow,\n dataType = \"Text\"\n } = options;\n const window = _window;\n const isSupported = useSupported(() => window && \"showSaveFilePicker\" in window && \"showOpenFilePicker\" in window);\n const fileHandle = shallowRef();\n const data = shallowRef();\n const file = shallowRef();\n const fileName = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.name) != null ? _b : \"\";\n });\n const fileMIME = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.type) != null ? _b : \"\";\n });\n const fileSize = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.size) != null ? _b : 0;\n });\n const fileLastModified = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.lastModified) != null ? _b : 0;\n });\n async function open(_options = {}) {\n if (!isSupported.value)\n return;\n const [handle] = await window.showOpenFilePicker({ ...toValue(options), ..._options });\n fileHandle.value = handle;\n await updateData();\n }\n async function create(_options = {}) {\n if (!isSupported.value)\n return;\n fileHandle.value = await window.showSaveFilePicker({ ...options, ..._options });\n data.value = void 0;\n await updateData();\n }\n async function save(_options = {}) {\n if (!isSupported.value)\n return;\n if (!fileHandle.value)\n return saveAs(_options);\n if (data.value) {\n const writableStream = await fileHandle.value.createWritable();\n await writableStream.write(data.value);\n await writableStream.close();\n }\n await updateFile();\n }\n async function saveAs(_options = {}) {\n if (!isSupported.value)\n return;\n fileHandle.value = await window.showSaveFilePicker({ ...options, ..._options });\n if (data.value) {\n const writableStream = await fileHandle.value.createWritable();\n await writableStream.write(data.value);\n await writableStream.close();\n }\n await updateFile();\n }\n async function updateFile() {\n var _a;\n file.value = await ((_a = fileHandle.value) == null ? void 0 : _a.getFile());\n }\n async function updateData() {\n var _a, _b;\n await updateFile();\n const type = toValue(dataType);\n if (type === \"Text\")\n data.value = await ((_a = file.value) == null ? void 0 : _a.text());\n else if (type === \"ArrayBuffer\")\n data.value = await ((_b = file.value) == null ? void 0 : _b.arrayBuffer());\n else if (type === \"Blob\")\n data.value = file.value;\n }\n watch(() => toValue(dataType), updateData);\n return {\n isSupported,\n data,\n file,\n fileName,\n fileMIME,\n fileSize,\n fileLastModified,\n open,\n create,\n save,\n saveAs,\n updateData\n };\n}\n\nfunction useFocus(target, options = {}) {\n const { initialValue = false, focusVisible = false, preventScroll = false } = options;\n const innerFocused = shallowRef(false);\n const targetElement = computed(() => unrefElement(target));\n const listenerOptions = { passive: true };\n useEventListener(targetElement, \"focus\", (event) => {\n var _a, _b;\n if (!focusVisible || ((_b = (_a = event.target).matches) == null ? void 0 : _b.call(_a, \":focus-visible\")))\n innerFocused.value = true;\n }, listenerOptions);\n useEventListener(targetElement, \"blur\", () => innerFocused.value = false, listenerOptions);\n const focused = computed({\n get: () => innerFocused.value,\n set(value) {\n var _a, _b;\n if (!value && innerFocused.value)\n (_a = targetElement.value) == null ? void 0 : _a.blur();\n else if (value && !innerFocused.value)\n (_b = targetElement.value) == null ? void 0 : _b.focus({ preventScroll });\n }\n });\n watch(\n targetElement,\n () => {\n focused.value = initialValue;\n },\n { immediate: true, flush: \"post\" }\n );\n return { focused };\n}\n\nconst EVENT_FOCUS_IN = \"focusin\";\nconst EVENT_FOCUS_OUT = \"focusout\";\nconst PSEUDO_CLASS_FOCUS_WITHIN = \":focus-within\";\nfunction useFocusWithin(target, options = {}) {\n const { window = defaultWindow } = options;\n const targetElement = computed(() => unrefElement(target));\n const _focused = shallowRef(false);\n const focused = computed(() => _focused.value);\n const activeElement = useActiveElement(options);\n if (!window || !activeElement.value) {\n return { focused };\n }\n const listenerOptions = { passive: true };\n useEventListener(targetElement, EVENT_FOCUS_IN, () => _focused.value = true, listenerOptions);\n useEventListener(targetElement, EVENT_FOCUS_OUT, () => {\n var _a, _b, _c;\n return _focused.value = (_c = (_b = (_a = targetElement.value) == null ? void 0 : _a.matches) == null ? void 0 : _b.call(_a, PSEUDO_CLASS_FOCUS_WITHIN)) != null ? _c : false;\n }, listenerOptions);\n return { focused };\n}\n\nfunction useFps(options) {\n var _a;\n const fps = shallowRef(0);\n if (typeof performance === \"undefined\")\n return fps;\n const every = (_a = options == null ? void 0 : options.every) != null ? _a : 10;\n let last = performance.now();\n let ticks = 0;\n useRafFn(() => {\n ticks += 1;\n if (ticks >= every) {\n const now = performance.now();\n const diff = now - last;\n fps.value = Math.round(1e3 / (diff / ticks));\n last = now;\n ticks = 0;\n }\n });\n return fps;\n}\n\nconst eventHandlers = [\n \"fullscreenchange\",\n \"webkitfullscreenchange\",\n \"webkitendfullscreen\",\n \"mozfullscreenchange\",\n \"MSFullscreenChange\"\n];\nfunction useFullscreen(target, options = {}) {\n const {\n document = defaultDocument,\n autoExit = false\n } = options;\n const targetRef = computed(() => {\n var _a;\n return (_a = unrefElement(target)) != null ? _a : document == null ? void 0 : document.documentElement;\n });\n const isFullscreen = shallowRef(false);\n const requestMethod = computed(() => {\n return [\n \"requestFullscreen\",\n \"webkitRequestFullscreen\",\n \"webkitEnterFullscreen\",\n \"webkitEnterFullScreen\",\n \"webkitRequestFullScreen\",\n \"mozRequestFullScreen\",\n \"msRequestFullscreen\"\n ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n });\n const exitMethod = computed(() => {\n return [\n \"exitFullscreen\",\n \"webkitExitFullscreen\",\n \"webkitExitFullScreen\",\n \"webkitCancelFullScreen\",\n \"mozCancelFullScreen\",\n \"msExitFullscreen\"\n ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n });\n const fullscreenEnabled = computed(() => {\n return [\n \"fullScreen\",\n \"webkitIsFullScreen\",\n \"webkitDisplayingFullscreen\",\n \"mozFullScreen\",\n \"msFullscreenElement\"\n ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n });\n const fullscreenElementMethod = [\n \"fullscreenElement\",\n \"webkitFullscreenElement\",\n \"mozFullScreenElement\",\n \"msFullscreenElement\"\n ].find((m) => document && m in document);\n const isSupported = useSupported(() => targetRef.value && document && requestMethod.value !== void 0 && exitMethod.value !== void 0 && fullscreenEnabled.value !== void 0);\n const isCurrentElementFullScreen = () => {\n if (fullscreenElementMethod)\n return (document == null ? void 0 : document[fullscreenElementMethod]) === targetRef.value;\n return false;\n };\n const isElementFullScreen = () => {\n if (fullscreenEnabled.value) {\n if (document && document[fullscreenEnabled.value] != null) {\n return document[fullscreenEnabled.value];\n } else {\n const target2 = targetRef.value;\n if ((target2 == null ? void 0 : target2[fullscreenEnabled.value]) != null) {\n return Boolean(target2[fullscreenEnabled.value]);\n }\n }\n }\n return false;\n };\n async function exit() {\n if (!isSupported.value || !isFullscreen.value)\n return;\n if (exitMethod.value) {\n if ((document == null ? void 0 : document[exitMethod.value]) != null) {\n await document[exitMethod.value]();\n } else {\n const target2 = targetRef.value;\n if ((target2 == null ? void 0 : target2[exitMethod.value]) != null)\n await target2[exitMethod.value]();\n }\n }\n isFullscreen.value = false;\n }\n async function enter() {\n if (!isSupported.value || isFullscreen.value)\n return;\n if (isElementFullScreen())\n await exit();\n const target2 = targetRef.value;\n if (requestMethod.value && (target2 == null ? void 0 : target2[requestMethod.value]) != null) {\n await target2[requestMethod.value]();\n isFullscreen.value = true;\n }\n }\n async function toggle() {\n await (isFullscreen.value ? exit() : enter());\n }\n const handlerCallback = () => {\n const isElementFullScreenValue = isElementFullScreen();\n if (!isElementFullScreenValue || isElementFullScreenValue && isCurrentElementFullScreen())\n isFullscreen.value = isElementFullScreenValue;\n };\n const listenerOptions = { capture: false, passive: true };\n useEventListener(document, eventHandlers, handlerCallback, listenerOptions);\n useEventListener(() => unrefElement(targetRef), eventHandlers, handlerCallback, listenerOptions);\n if (autoExit)\n tryOnScopeDispose(exit);\n return {\n isSupported,\n isFullscreen,\n enter,\n exit,\n toggle\n };\n}\n\nfunction mapGamepadToXbox360Controller(gamepad) {\n return computed(() => {\n if (gamepad.value) {\n return {\n buttons: {\n a: gamepad.value.buttons[0],\n b: gamepad.value.buttons[1],\n x: gamepad.value.buttons[2],\n y: gamepad.value.buttons[3]\n },\n bumper: {\n left: gamepad.value.buttons[4],\n right: gamepad.value.buttons[5]\n },\n triggers: {\n left: gamepad.value.buttons[6],\n right: gamepad.value.buttons[7]\n },\n stick: {\n left: {\n horizontal: gamepad.value.axes[0],\n vertical: gamepad.value.axes[1],\n button: gamepad.value.buttons[10]\n },\n right: {\n horizontal: gamepad.value.axes[2],\n vertical: gamepad.value.axes[3],\n button: gamepad.value.buttons[11]\n }\n },\n dpad: {\n up: gamepad.value.buttons[12],\n down: gamepad.value.buttons[13],\n left: gamepad.value.buttons[14],\n right: gamepad.value.buttons[15]\n },\n back: gamepad.value.buttons[8],\n start: gamepad.value.buttons[9]\n };\n }\n return null;\n });\n}\nfunction useGamepad(options = {}) {\n const {\n navigator = defaultNavigator\n } = options;\n const isSupported = useSupported(() => navigator && \"getGamepads\" in navigator);\n const gamepads = ref([]);\n const onConnectedHook = createEventHook();\n const onDisconnectedHook = createEventHook();\n const stateFromGamepad = (gamepad) => {\n const hapticActuators = [];\n const vibrationActuator = \"vibrationActuator\" in gamepad ? gamepad.vibrationActuator : null;\n if (vibrationActuator)\n hapticActuators.push(vibrationActuator);\n if (gamepad.hapticActuators)\n hapticActuators.push(...gamepad.hapticActuators);\n return {\n id: gamepad.id,\n index: gamepad.index,\n connected: gamepad.connected,\n mapping: gamepad.mapping,\n timestamp: gamepad.timestamp,\n vibrationActuator: gamepad.vibrationActuator,\n hapticActuators,\n axes: gamepad.axes.map((axes) => axes),\n buttons: gamepad.buttons.map((button) => ({ pressed: button.pressed, touched: button.touched, value: button.value }))\n };\n };\n const updateGamepadState = () => {\n const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];\n for (const gamepad of _gamepads) {\n if (gamepad && gamepads.value[gamepad.index])\n gamepads.value[gamepad.index] = stateFromGamepad(gamepad);\n }\n };\n const { isActive, pause, resume } = useRafFn(updateGamepadState);\n const onGamepadConnected = (gamepad) => {\n if (!gamepads.value.some(({ index }) => index === gamepad.index)) {\n gamepads.value.push(stateFromGamepad(gamepad));\n onConnectedHook.trigger(gamepad.index);\n }\n resume();\n };\n const onGamepadDisconnected = (gamepad) => {\n gamepads.value = gamepads.value.filter((x) => x.index !== gamepad.index);\n onDisconnectedHook.trigger(gamepad.index);\n };\n const listenerOptions = { passive: true };\n useEventListener(\"gamepadconnected\", (e) => onGamepadConnected(e.gamepad), listenerOptions);\n useEventListener(\"gamepaddisconnected\", (e) => onGamepadDisconnected(e.gamepad), listenerOptions);\n tryOnMounted(() => {\n const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];\n for (const gamepad of _gamepads) {\n if (gamepad && gamepads.value[gamepad.index])\n onGamepadConnected(gamepad);\n }\n });\n pause();\n return {\n isSupported,\n onConnected: onConnectedHook.on,\n onDisconnected: onDisconnectedHook.on,\n gamepads,\n pause,\n resume,\n isActive\n };\n}\n\nfunction useGeolocation(options = {}) {\n const {\n enableHighAccuracy = true,\n maximumAge = 3e4,\n timeout = 27e3,\n navigator = defaultNavigator,\n immediate = true\n } = options;\n const isSupported = useSupported(() => navigator && \"geolocation\" in navigator);\n const locatedAt = shallowRef(null);\n const error = shallowRef(null);\n const coords = ref({\n accuracy: 0,\n latitude: Number.POSITIVE_INFINITY,\n longitude: Number.POSITIVE_INFINITY,\n altitude: null,\n altitudeAccuracy: null,\n heading: null,\n speed: null\n });\n function updatePosition(position) {\n locatedAt.value = position.timestamp;\n coords.value = position.coords;\n error.value = null;\n }\n let watcher;\n function resume() {\n if (isSupported.value) {\n watcher = navigator.geolocation.watchPosition(\n updatePosition,\n (err) => error.value = err,\n {\n enableHighAccuracy,\n maximumAge,\n timeout\n }\n );\n }\n }\n if (immediate)\n resume();\n function pause() {\n if (watcher && navigator)\n navigator.geolocation.clearWatch(watcher);\n }\n tryOnScopeDispose(() => {\n pause();\n });\n return {\n isSupported,\n coords,\n locatedAt,\n error,\n resume,\n pause\n };\n}\n\nconst defaultEvents$1 = [\"mousemove\", \"mousedown\", \"resize\", \"keydown\", \"touchstart\", \"wheel\"];\nconst oneMinute = 6e4;\nfunction useIdle(timeout = oneMinute, options = {}) {\n const {\n initialState = false,\n listenForVisibilityChange = true,\n events = defaultEvents$1,\n window = defaultWindow,\n eventFilter = throttleFilter(50)\n } = options;\n const idle = shallowRef(initialState);\n const lastActive = shallowRef(timestamp());\n let timer;\n const reset = () => {\n idle.value = false;\n clearTimeout(timer);\n timer = setTimeout(() => idle.value = true, timeout);\n };\n const onEvent = createFilterWrapper(\n eventFilter,\n () => {\n lastActive.value = timestamp();\n reset();\n }\n );\n if (window) {\n const document = window.document;\n const listenerOptions = { passive: true };\n for (const event of events)\n useEventListener(window, event, onEvent, listenerOptions);\n if (listenForVisibilityChange) {\n useEventListener(document, \"visibilitychange\", () => {\n if (!document.hidden)\n onEvent();\n }, listenerOptions);\n }\n reset();\n }\n return {\n idle,\n lastActive,\n reset\n };\n}\n\nasync function loadImage(options) {\n return new Promise((resolve, reject) => {\n const img = new Image();\n const { src, srcset, sizes, class: clazz, loading, crossorigin, referrerPolicy, width, height, decoding, fetchPriority, ismap, usemap } = options;\n img.src = src;\n if (srcset != null)\n img.srcset = srcset;\n if (sizes != null)\n img.sizes = sizes;\n if (clazz != null)\n img.className = clazz;\n if (loading != null)\n img.loading = loading;\n if (crossorigin != null)\n img.crossOrigin = crossorigin;\n if (referrerPolicy != null)\n img.referrerPolicy = referrerPolicy;\n if (width != null)\n img.width = width;\n if (height != null)\n img.height = height;\n if (decoding != null)\n img.decoding = decoding;\n if (fetchPriority != null)\n img.fetchPriority = fetchPriority;\n if (ismap != null)\n img.isMap = ismap;\n if (usemap != null)\n img.useMap = usemap;\n img.onload = () => resolve(img);\n img.onerror = reject;\n });\n}\nfunction useImage(options, asyncStateOptions = {}) {\n const state = useAsyncState(\n () => loadImage(toValue(options)),\n void 0,\n {\n resetOnExecute: true,\n ...asyncStateOptions\n }\n );\n watch(\n () => toValue(options),\n () => state.execute(asyncStateOptions.delay),\n { deep: true }\n );\n return state;\n}\n\nfunction resolveElement(el) {\n if (typeof Window !== \"undefined\" && el instanceof Window)\n return el.document.documentElement;\n if (typeof Document !== \"undefined\" && el instanceof Document)\n return el.documentElement;\n return el;\n}\n\nconst ARRIVED_STATE_THRESHOLD_PIXELS = 1;\nfunction useScroll(element, options = {}) {\n const {\n throttle = 0,\n idle = 200,\n onStop = noop,\n onScroll = noop,\n offset = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n },\n eventListenerOptions = {\n capture: false,\n passive: true\n },\n behavior = \"auto\",\n window = defaultWindow,\n onError = (e) => {\n console.error(e);\n }\n } = options;\n const internalX = shallowRef(0);\n const internalY = shallowRef(0);\n const x = computed({\n get() {\n return internalX.value;\n },\n set(x2) {\n scrollTo(x2, void 0);\n }\n });\n const y = computed({\n get() {\n return internalY.value;\n },\n set(y2) {\n scrollTo(void 0, y2);\n }\n });\n function scrollTo(_x, _y) {\n var _a, _b, _c, _d;\n if (!window)\n return;\n const _element = toValue(element);\n if (!_element)\n return;\n (_c = _element instanceof Document ? window.document.body : _element) == null ? void 0 : _c.scrollTo({\n top: (_a = toValue(_y)) != null ? _a : y.value,\n left: (_b = toValue(_x)) != null ? _b : x.value,\n behavior: toValue(behavior)\n });\n const scrollContainer = ((_d = _element == null ? void 0 : _element.document) == null ? void 0 : _d.documentElement) || (_element == null ? void 0 : _element.documentElement) || _element;\n if (x != null)\n internalX.value = scrollContainer.scrollLeft;\n if (y != null)\n internalY.value = scrollContainer.scrollTop;\n }\n const isScrolling = shallowRef(false);\n const arrivedState = reactive({\n left: true,\n right: false,\n top: true,\n bottom: false\n });\n const directions = reactive({\n left: false,\n right: false,\n top: false,\n bottom: false\n });\n const onScrollEnd = (e) => {\n if (!isScrolling.value)\n return;\n isScrolling.value = false;\n directions.left = false;\n directions.right = false;\n directions.top = false;\n directions.bottom = false;\n onStop(e);\n };\n const onScrollEndDebounced = useDebounceFn(onScrollEnd, throttle + idle);\n const setArrivedState = (target) => {\n var _a;\n if (!window)\n return;\n const el = ((_a = target == null ? void 0 : target.document) == null ? void 0 : _a.documentElement) || (target == null ? void 0 : target.documentElement) || unrefElement(target);\n const { display, flexDirection, direction } = getComputedStyle(el);\n const directionMultipler = direction === \"rtl\" ? -1 : 1;\n const scrollLeft = el.scrollLeft;\n directions.left = scrollLeft < internalX.value;\n directions.right = scrollLeft > internalX.value;\n const left = Math.abs(scrollLeft * directionMultipler) <= (offset.left || 0);\n const right = Math.abs(scrollLeft * directionMultipler) + el.clientWidth >= el.scrollWidth - (offset.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n if (display === \"flex\" && flexDirection === \"row-reverse\") {\n arrivedState.left = right;\n arrivedState.right = left;\n } else {\n arrivedState.left = left;\n arrivedState.right = right;\n }\n internalX.value = scrollLeft;\n let scrollTop = el.scrollTop;\n if (target === window.document && !scrollTop)\n scrollTop = window.document.body.scrollTop;\n directions.top = scrollTop < internalY.value;\n directions.bottom = scrollTop > internalY.value;\n const top = Math.abs(scrollTop) <= (offset.top || 0);\n const bottom = Math.abs(scrollTop) + el.clientHeight >= el.scrollHeight - (offset.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n if (display === \"flex\" && flexDirection === \"column-reverse\") {\n arrivedState.top = bottom;\n arrivedState.bottom = top;\n } else {\n arrivedState.top = top;\n arrivedState.bottom = bottom;\n }\n internalY.value = scrollTop;\n };\n const onScrollHandler = (e) => {\n var _a;\n if (!window)\n return;\n const eventTarget = (_a = e.target.documentElement) != null ? _a : e.target;\n setArrivedState(eventTarget);\n isScrolling.value = true;\n onScrollEndDebounced(e);\n onScroll(e);\n };\n useEventListener(\n element,\n \"scroll\",\n throttle ? useThrottleFn(onScrollHandler, throttle, true, false) : onScrollHandler,\n eventListenerOptions\n );\n tryOnMounted(() => {\n try {\n const _element = toValue(element);\n if (!_element)\n return;\n setArrivedState(_element);\n } catch (e) {\n onError(e);\n }\n });\n useEventListener(\n element,\n \"scrollend\",\n onScrollEnd,\n eventListenerOptions\n );\n return {\n x,\n y,\n isScrolling,\n arrivedState,\n directions,\n measure() {\n const _element = toValue(element);\n if (window && _element)\n setArrivedState(_element);\n }\n };\n}\n\nfunction useInfiniteScroll(element, onLoadMore, options = {}) {\n var _a;\n const {\n direction = \"bottom\",\n interval = 100,\n canLoadMore = () => true\n } = options;\n const state = reactive(useScroll(\n element,\n {\n ...options,\n offset: {\n [direction]: (_a = options.distance) != null ? _a : 0,\n ...options.offset\n }\n }\n ));\n const promise = ref();\n const isLoading = computed(() => !!promise.value);\n const observedElement = computed(() => {\n return resolveElement(toValue(element));\n });\n const isElementVisible = useElementVisibility(observedElement);\n function checkAndLoad() {\n state.measure();\n if (!observedElement.value || !isElementVisible.value || !canLoadMore(observedElement.value))\n return;\n const { scrollHeight, clientHeight, scrollWidth, clientWidth } = observedElement.value;\n const isNarrower = direction === \"bottom\" || direction === \"top\" ? scrollHeight <= clientHeight : scrollWidth <= clientWidth;\n if (state.arrivedState[direction] || isNarrower) {\n if (!promise.value) {\n promise.value = Promise.all([\n onLoadMore(state),\n new Promise((resolve) => setTimeout(resolve, interval))\n ]).finally(() => {\n promise.value = null;\n nextTick(() => checkAndLoad());\n });\n }\n }\n }\n const stop = watch(\n () => [state.arrivedState[direction], isElementVisible.value],\n checkAndLoad,\n { immediate: true }\n );\n tryOnUnmounted(stop);\n return {\n isLoading,\n reset() {\n nextTick(() => checkAndLoad());\n }\n };\n}\n\nconst defaultEvents = [\"mousedown\", \"mouseup\", \"keydown\", \"keyup\"];\nfunction useKeyModifier(modifier, options = {}) {\n const {\n events = defaultEvents,\n document = defaultDocument,\n initial = null\n } = options;\n const state = shallowRef(initial);\n if (document) {\n events.forEach((listenerEvent) => {\n useEventListener(document, listenerEvent, (evt) => {\n if (typeof evt.getModifierState === \"function\")\n state.value = evt.getModifierState(modifier);\n }, { passive: true });\n });\n }\n return state;\n}\n\nfunction useLocalStorage(key, initialValue, options = {}) {\n const { window = defaultWindow } = options;\n return useStorage(key, initialValue, window == null ? void 0 : window.localStorage, options);\n}\n\nconst DefaultMagicKeysAliasMap = {\n ctrl: \"control\",\n command: \"meta\",\n cmd: \"meta\",\n option: \"alt\",\n up: \"arrowup\",\n down: \"arrowdown\",\n left: \"arrowleft\",\n right: \"arrowright\"\n};\n\nfunction useMagicKeys(options = {}) {\n const {\n reactive: useReactive = false,\n target = defaultWindow,\n aliasMap = DefaultMagicKeysAliasMap,\n passive = true,\n onEventFired = noop\n } = options;\n const current = reactive(/* @__PURE__ */ new Set());\n const obj = {\n toJSON() {\n return {};\n },\n current\n };\n const refs = useReactive ? reactive(obj) : obj;\n const metaDeps = /* @__PURE__ */ new Set();\n const usedKeys = /* @__PURE__ */ new Set();\n function setRefs(key, value) {\n if (key in refs) {\n if (useReactive)\n refs[key] = value;\n else\n refs[key].value = value;\n }\n }\n function reset() {\n current.clear();\n for (const key of usedKeys)\n setRefs(key, false);\n }\n function updateRefs(e, value) {\n var _a, _b;\n const key = (_a = e.key) == null ? void 0 : _a.toLowerCase();\n const code = (_b = e.code) == null ? void 0 : _b.toLowerCase();\n const values = [code, key].filter(Boolean);\n if (key) {\n if (value)\n current.add(key);\n else\n current.delete(key);\n }\n for (const key2 of values) {\n usedKeys.add(key2);\n setRefs(key2, value);\n }\n if (key === \"meta\" && !value) {\n metaDeps.forEach((key2) => {\n current.delete(key2);\n setRefs(key2, false);\n });\n metaDeps.clear();\n } else if (typeof e.getModifierState === \"function\" && e.getModifierState(\"Meta\") && value) {\n [...current, ...values].forEach((key2) => metaDeps.add(key2));\n }\n }\n useEventListener(target, \"keydown\", (e) => {\n updateRefs(e, true);\n return onEventFired(e);\n }, { passive });\n useEventListener(target, \"keyup\", (e) => {\n updateRefs(e, false);\n return onEventFired(e);\n }, { passive });\n useEventListener(\"blur\", reset, { passive });\n useEventListener(\"focus\", reset, { passive });\n const proxy = new Proxy(\n refs,\n {\n get(target2, prop, rec) {\n if (typeof prop !== \"string\")\n return Reflect.get(target2, prop, rec);\n prop = prop.toLowerCase();\n if (prop in aliasMap)\n prop = aliasMap[prop];\n if (!(prop in refs)) {\n if (/[+_-]/.test(prop)) {\n const keys = prop.split(/[+_-]/g).map((i) => i.trim());\n refs[prop] = computed(() => keys.map((key) => toValue(proxy[key])).every(Boolean));\n } else {\n refs[prop] = shallowRef(false);\n }\n }\n const r = Reflect.get(target2, prop, rec);\n return useReactive ? toValue(r) : r;\n }\n }\n );\n return proxy;\n}\n\nfunction usingElRef(source, cb) {\n if (toValue(source))\n cb(toValue(source));\n}\nfunction timeRangeToArray(timeRanges) {\n let ranges = [];\n for (let i = 0; i < timeRanges.length; ++i)\n ranges = [...ranges, [timeRanges.start(i), timeRanges.end(i)]];\n return ranges;\n}\nfunction tracksToArray(tracks) {\n return Array.from(tracks).map(({ label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }, id) => ({ id, label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }));\n}\nconst defaultOptions = {\n src: \"\",\n tracks: []\n};\nfunction useMediaControls(target, options = {}) {\n target = toRef(target);\n options = {\n ...defaultOptions,\n ...options\n };\n const {\n document = defaultDocument\n } = options;\n const listenerOptions = { passive: true };\n const currentTime = shallowRef(0);\n const duration = shallowRef(0);\n const seeking = shallowRef(false);\n const volume = shallowRef(1);\n const waiting = shallowRef(false);\n const ended = shallowRef(false);\n const playing = shallowRef(false);\n const rate = shallowRef(1);\n const stalled = shallowRef(false);\n const buffered = ref([]);\n const tracks = ref([]);\n const selectedTrack = shallowRef(-1);\n const isPictureInPicture = shallowRef(false);\n const muted = shallowRef(false);\n const supportsPictureInPicture = document && \"pictureInPictureEnabled\" in document;\n const sourceErrorEvent = createEventHook();\n const playbackErrorEvent = createEventHook();\n const disableTrack = (track) => {\n usingElRef(target, (el) => {\n if (track) {\n const id = typeof track === \"number\" ? track : track.id;\n el.textTracks[id].mode = \"disabled\";\n } else {\n for (let i = 0; i < el.textTracks.length; ++i)\n el.textTracks[i].mode = \"disabled\";\n }\n selectedTrack.value = -1;\n });\n };\n const enableTrack = (track, disableTracks = true) => {\n usingElRef(target, (el) => {\n const id = typeof track === \"number\" ? track : track.id;\n if (disableTracks)\n disableTrack();\n el.textTracks[id].mode = \"showing\";\n selectedTrack.value = id;\n });\n };\n const togglePictureInPicture = () => {\n return new Promise((resolve, reject) => {\n usingElRef(target, async (el) => {\n if (supportsPictureInPicture) {\n if (!isPictureInPicture.value) {\n el.requestPictureInPicture().then(resolve).catch(reject);\n } else {\n document.exitPictureInPicture().then(resolve).catch(reject);\n }\n }\n });\n });\n };\n watchEffect(() => {\n if (!document)\n return;\n const el = toValue(target);\n if (!el)\n return;\n const src = toValue(options.src);\n let sources = [];\n if (!src)\n return;\n if (typeof src === \"string\")\n sources = [{ src }];\n else if (Array.isArray(src))\n sources = src;\n else if (isObject(src))\n sources = [src];\n el.querySelectorAll(\"source\").forEach((e) => {\n e.remove();\n });\n sources.forEach(({ src: src2, type, media }) => {\n const source = document.createElement(\"source\");\n source.setAttribute(\"src\", src2);\n source.setAttribute(\"type\", type || \"\");\n source.setAttribute(\"media\", media || \"\");\n useEventListener(source, \"error\", sourceErrorEvent.trigger, listenerOptions);\n el.appendChild(source);\n });\n el.load();\n });\n watch([target, volume], () => {\n const el = toValue(target);\n if (!el)\n return;\n el.volume = volume.value;\n });\n watch([target, muted], () => {\n const el = toValue(target);\n if (!el)\n return;\n el.muted = muted.value;\n });\n watch([target, rate], () => {\n const el = toValue(target);\n if (!el)\n return;\n el.playbackRate = rate.value;\n });\n watchEffect(() => {\n if (!document)\n return;\n const textTracks = toValue(options.tracks);\n const el = toValue(target);\n if (!textTracks || !textTracks.length || !el)\n return;\n el.querySelectorAll(\"track\").forEach((e) => e.remove());\n textTracks.forEach(({ default: isDefault, kind, label, src, srcLang }, i) => {\n const track = document.createElement(\"track\");\n track.default = isDefault || false;\n track.kind = kind;\n track.label = label;\n track.src = src;\n track.srclang = srcLang;\n if (track.default)\n selectedTrack.value = i;\n el.appendChild(track);\n });\n });\n const { ignoreUpdates: ignoreCurrentTimeUpdates } = watchIgnorable(currentTime, (time) => {\n const el = toValue(target);\n if (!el)\n return;\n el.currentTime = time;\n });\n const { ignoreUpdates: ignorePlayingUpdates } = watchIgnorable(playing, (isPlaying) => {\n const el = toValue(target);\n if (!el)\n return;\n if (isPlaying) {\n el.play().catch((e) => {\n playbackErrorEvent.trigger(e);\n throw e;\n });\n } else {\n el.pause();\n }\n });\n useEventListener(\n target,\n \"timeupdate\",\n () => ignoreCurrentTimeUpdates(() => currentTime.value = toValue(target).currentTime),\n listenerOptions\n );\n useEventListener(\n target,\n \"durationchange\",\n () => duration.value = toValue(target).duration,\n listenerOptions\n );\n useEventListener(\n target,\n \"progress\",\n () => buffered.value = timeRangeToArray(toValue(target).buffered),\n listenerOptions\n );\n useEventListener(\n target,\n \"seeking\",\n () => seeking.value = true,\n listenerOptions\n );\n useEventListener(\n target,\n \"seeked\",\n () => seeking.value = false,\n listenerOptions\n );\n useEventListener(\n target,\n [\"waiting\", \"loadstart\"],\n () => {\n waiting.value = true;\n ignorePlayingUpdates(() => playing.value = false);\n },\n listenerOptions\n );\n useEventListener(\n target,\n \"loadeddata\",\n () => waiting.value = false,\n listenerOptions\n );\n useEventListener(\n target,\n \"playing\",\n () => {\n waiting.value = false;\n ended.value = false;\n ignorePlayingUpdates(() => playing.value = true);\n },\n listenerOptions\n );\n useEventListener(\n target,\n \"ratechange\",\n () => rate.value = toValue(target).playbackRate,\n listenerOptions\n );\n useEventListener(\n target,\n \"stalled\",\n () => stalled.value = true,\n listenerOptions\n );\n useEventListener(\n target,\n \"ended\",\n () => ended.value = true,\n listenerOptions\n );\n useEventListener(\n target,\n \"pause\",\n () => ignorePlayingUpdates(() => playing.value = false),\n listenerOptions\n );\n useEventListener(\n target,\n \"play\",\n () => ignorePlayingUpdates(() => playing.value = true),\n listenerOptions\n );\n useEventListener(\n target,\n \"enterpictureinpicture\",\n () => isPictureInPicture.value = true,\n listenerOptions\n );\n useEventListener(\n target,\n \"leavepictureinpicture\",\n () => isPictureInPicture.value = false,\n listenerOptions\n );\n useEventListener(\n target,\n \"volumechange\",\n () => {\n const el = toValue(target);\n if (!el)\n return;\n volume.value = el.volume;\n muted.value = el.muted;\n },\n listenerOptions\n );\n const listeners = [];\n const stop = watch([target], () => {\n const el = toValue(target);\n if (!el)\n return;\n stop();\n listeners[0] = useEventListener(el.textTracks, \"addtrack\", () => tracks.value = tracksToArray(el.textTracks), listenerOptions);\n listeners[1] = useEventListener(el.textTracks, \"removetrack\", () => tracks.value = tracksToArray(el.textTracks), listenerOptions);\n listeners[2] = useEventListener(el.textTracks, \"change\", () => tracks.value = tracksToArray(el.textTracks), listenerOptions);\n });\n tryOnScopeDispose(() => listeners.forEach((listener) => listener()));\n return {\n currentTime,\n duration,\n waiting,\n seeking,\n ended,\n stalled,\n buffered,\n playing,\n rate,\n // Volume\n volume,\n muted,\n // Tracks\n tracks,\n selectedTrack,\n enableTrack,\n disableTrack,\n // Picture in Picture\n supportsPictureInPicture,\n togglePictureInPicture,\n isPictureInPicture,\n // Events\n onSourceError: sourceErrorEvent.on,\n onPlaybackError: playbackErrorEvent.on\n };\n}\n\nfunction useMemoize(resolver, options) {\n const initCache = () => {\n if (options == null ? void 0 : options.cache)\n return shallowReactive(options.cache);\n return shallowReactive(/* @__PURE__ */ new Map());\n };\n const cache = initCache();\n const generateKey = (...args) => (options == null ? void 0 : options.getKey) ? options.getKey(...args) : JSON.stringify(args);\n const _loadData = (key, ...args) => {\n cache.set(key, resolver(...args));\n return cache.get(key);\n };\n const loadData = (...args) => _loadData(generateKey(...args), ...args);\n const deleteData = (...args) => {\n cache.delete(generateKey(...args));\n };\n const clearData = () => {\n cache.clear();\n };\n const memoized = (...args) => {\n const key = generateKey(...args);\n if (cache.has(key))\n return cache.get(key);\n return _loadData(key, ...args);\n };\n memoized.load = loadData;\n memoized.delete = deleteData;\n memoized.clear = clearData;\n memoized.generateKey = generateKey;\n memoized.cache = cache;\n return memoized;\n}\n\nfunction useMemory(options = {}) {\n const memory = ref();\n const isSupported = useSupported(() => typeof performance !== \"undefined\" && \"memory\" in performance);\n if (isSupported.value) {\n const { interval = 1e3 } = options;\n useIntervalFn(() => {\n memory.value = performance.memory;\n }, interval, { immediate: options.immediate, immediateCallback: options.immediateCallback });\n }\n return { isSupported, memory };\n}\n\nconst UseMouseBuiltinExtractors = {\n page: (event) => [event.pageX, event.pageY],\n client: (event) => [event.clientX, event.clientY],\n screen: (event) => [event.screenX, event.screenY],\n movement: (event) => event instanceof MouseEvent ? [event.movementX, event.movementY] : null\n};\nfunction useMouse(options = {}) {\n const {\n type = \"page\",\n touch = true,\n resetOnTouchEnds = false,\n initialValue = { x: 0, y: 0 },\n window = defaultWindow,\n target = window,\n scroll = true,\n eventFilter\n } = options;\n let _prevMouseEvent = null;\n let _prevScrollX = 0;\n let _prevScrollY = 0;\n const x = shallowRef(initialValue.x);\n const y = shallowRef(initialValue.y);\n const sourceType = shallowRef(null);\n const extractor = typeof type === \"function\" ? type : UseMouseBuiltinExtractors[type];\n const mouseHandler = (event) => {\n const result = extractor(event);\n _prevMouseEvent = event;\n if (result) {\n [x.value, y.value] = result;\n sourceType.value = \"mouse\";\n }\n if (window) {\n _prevScrollX = window.scrollX;\n _prevScrollY = window.scrollY;\n }\n };\n const touchHandler = (event) => {\n if (event.touches.length > 0) {\n const result = extractor(event.touches[0]);\n if (result) {\n [x.value, y.value] = result;\n sourceType.value = \"touch\";\n }\n }\n };\n const scrollHandler = () => {\n if (!_prevMouseEvent || !window)\n return;\n const pos = extractor(_prevMouseEvent);\n if (_prevMouseEvent instanceof MouseEvent && pos) {\n x.value = pos[0] + window.scrollX - _prevScrollX;\n y.value = pos[1] + window.scrollY - _prevScrollY;\n }\n };\n const reset = () => {\n x.value = initialValue.x;\n y.value = initialValue.y;\n };\n const mouseHandlerWrapper = eventFilter ? (event) => eventFilter(() => mouseHandler(event), {}) : (event) => mouseHandler(event);\n const touchHandlerWrapper = eventFilter ? (event) => eventFilter(() => touchHandler(event), {}) : (event) => touchHandler(event);\n const scrollHandlerWrapper = eventFilter ? () => eventFilter(() => scrollHandler(), {}) : () => scrollHandler();\n if (target) {\n const listenerOptions = { passive: true };\n useEventListener(target, [\"mousemove\", \"dragover\"], mouseHandlerWrapper, listenerOptions);\n if (touch && type !== \"movement\") {\n useEventListener(target, [\"touchstart\", \"touchmove\"], touchHandlerWrapper, listenerOptions);\n if (resetOnTouchEnds)\n useEventListener(target, \"touchend\", reset, listenerOptions);\n }\n if (scroll && type === \"page\")\n useEventListener(window, \"scroll\", scrollHandlerWrapper, listenerOptions);\n }\n return {\n x,\n y,\n sourceType\n };\n}\n\nfunction useMouseInElement(target, options = {}) {\n const {\n handleOutside = true,\n window = defaultWindow\n } = options;\n const type = options.type || \"page\";\n const { x, y, sourceType } = useMouse(options);\n const targetRef = shallowRef(target != null ? target : window == null ? void 0 : window.document.body);\n const elementX = shallowRef(0);\n const elementY = shallowRef(0);\n const elementPositionX = shallowRef(0);\n const elementPositionY = shallowRef(0);\n const elementHeight = shallowRef(0);\n const elementWidth = shallowRef(0);\n const isOutside = shallowRef(true);\n let stop = () => {\n };\n if (window) {\n stop = watch(\n [targetRef, x, y],\n () => {\n const el = unrefElement(targetRef);\n if (!el || !(el instanceof Element))\n return;\n const {\n left,\n top,\n width,\n height\n } = el.getBoundingClientRect();\n elementPositionX.value = left + (type === \"page\" ? window.pageXOffset : 0);\n elementPositionY.value = top + (type === \"page\" ? window.pageYOffset : 0);\n elementHeight.value = height;\n elementWidth.value = width;\n const elX = x.value - elementPositionX.value;\n const elY = y.value - elementPositionY.value;\n isOutside.value = width === 0 || height === 0 || elX < 0 || elY < 0 || elX > width || elY > height;\n if (handleOutside || !isOutside.value) {\n elementX.value = elX;\n elementY.value = elY;\n }\n },\n { immediate: true }\n );\n useEventListener(\n document,\n \"mouseleave\",\n () => isOutside.value = true,\n { passive: true }\n );\n }\n return {\n x,\n y,\n sourceType,\n elementX,\n elementY,\n elementPositionX,\n elementPositionY,\n elementHeight,\n elementWidth,\n isOutside,\n stop\n };\n}\n\nfunction useMousePressed(options = {}) {\n const {\n touch = true,\n drag = true,\n capture = false,\n initialValue = false,\n window = defaultWindow\n } = options;\n const pressed = shallowRef(initialValue);\n const sourceType = shallowRef(null);\n if (!window) {\n return {\n pressed,\n sourceType\n };\n }\n const onPressed = (srcType) => (event) => {\n var _a;\n pressed.value = true;\n sourceType.value = srcType;\n (_a = options.onPressed) == null ? void 0 : _a.call(options, event);\n };\n const onReleased = (event) => {\n var _a;\n pressed.value = false;\n sourceType.value = null;\n (_a = options.onReleased) == null ? void 0 : _a.call(options, event);\n };\n const target = computed(() => unrefElement(options.target) || window);\n const listenerOptions = { passive: true, capture };\n useEventListener(target, \"mousedown\", onPressed(\"mouse\"), listenerOptions);\n useEventListener(window, \"mouseleave\", onReleased, listenerOptions);\n useEventListener(window, \"mouseup\", onReleased, listenerOptions);\n if (drag) {\n useEventListener(target, \"dragstart\", onPressed(\"mouse\"), listenerOptions);\n useEventListener(window, \"drop\", onReleased, listenerOptions);\n useEventListener(window, \"dragend\", onReleased, listenerOptions);\n }\n if (touch) {\n useEventListener(target, \"touchstart\", onPressed(\"touch\"), listenerOptions);\n useEventListener(window, \"touchend\", onReleased, listenerOptions);\n useEventListener(window, \"touchcancel\", onReleased, listenerOptions);\n }\n return {\n pressed,\n sourceType\n };\n}\n\nfunction useNavigatorLanguage(options = {}) {\n const { window = defaultWindow } = options;\n const navigator = window == null ? void 0 : window.navigator;\n const isSupported = useSupported(() => navigator && \"language\" in navigator);\n const language = shallowRef(navigator == null ? void 0 : navigator.language);\n useEventListener(window, \"languagechange\", () => {\n if (navigator)\n language.value = navigator.language;\n }, { passive: true });\n return {\n isSupported,\n language\n };\n}\n\nfunction useNetwork(options = {}) {\n const { window = defaultWindow } = options;\n const navigator = window == null ? void 0 : window.navigator;\n const isSupported = useSupported(() => navigator && \"connection\" in navigator);\n const isOnline = shallowRef(true);\n const saveData = shallowRef(false);\n const offlineAt = shallowRef(void 0);\n const onlineAt = shallowRef(void 0);\n const downlink = shallowRef(void 0);\n const downlinkMax = shallowRef(void 0);\n const rtt = shallowRef(void 0);\n const effectiveType = shallowRef(void 0);\n const type = shallowRef(\"unknown\");\n const connection = isSupported.value && navigator.connection;\n function updateNetworkInformation() {\n if (!navigator)\n return;\n isOnline.value = navigator.onLine;\n offlineAt.value = isOnline.value ? void 0 : Date.now();\n onlineAt.value = isOnline.value ? Date.now() : void 0;\n if (connection) {\n downlink.value = connection.downlink;\n downlinkMax.value = connection.downlinkMax;\n effectiveType.value = connection.effectiveType;\n rtt.value = connection.rtt;\n saveData.value = connection.saveData;\n type.value = connection.type;\n }\n }\n const listenerOptions = { passive: true };\n if (window) {\n useEventListener(window, \"offline\", () => {\n isOnline.value = false;\n offlineAt.value = Date.now();\n }, listenerOptions);\n useEventListener(window, \"online\", () => {\n isOnline.value = true;\n onlineAt.value = Date.now();\n }, listenerOptions);\n }\n if (connection)\n useEventListener(connection, \"change\", updateNetworkInformation, listenerOptions);\n updateNetworkInformation();\n return {\n isSupported,\n isOnline: readonly(isOnline),\n saveData: readonly(saveData),\n offlineAt: readonly(offlineAt),\n onlineAt: readonly(onlineAt),\n downlink: readonly(downlink),\n downlinkMax: readonly(downlinkMax),\n effectiveType: readonly(effectiveType),\n rtt: readonly(rtt),\n type: readonly(type)\n };\n}\n\nfunction useNow(options = {}) {\n const {\n controls: exposeControls = false,\n interval = \"requestAnimationFrame\"\n } = options;\n const now = ref(/* @__PURE__ */ new Date());\n const update = () => now.value = /* @__PURE__ */ new Date();\n const controls = interval === \"requestAnimationFrame\" ? useRafFn(update, { immediate: true }) : useIntervalFn(update, interval, { immediate: true });\n if (exposeControls) {\n return {\n now,\n ...controls\n };\n } else {\n return now;\n }\n}\n\nfunction useObjectUrl(object) {\n const url = shallowRef();\n const release = () => {\n if (url.value)\n URL.revokeObjectURL(url.value);\n url.value = void 0;\n };\n watch(\n () => toValue(object),\n (newObject) => {\n release();\n if (newObject)\n url.value = URL.createObjectURL(newObject);\n },\n { immediate: true }\n );\n tryOnScopeDispose(release);\n return readonly(url);\n}\n\nfunction useClamp(value, min, max) {\n if (typeof value === \"function\" || isReadonly(value))\n return computed(() => clamp(toValue(value), toValue(min), toValue(max)));\n const _value = ref(value);\n return computed({\n get() {\n return _value.value = clamp(_value.value, toValue(min), toValue(max));\n },\n set(value2) {\n _value.value = clamp(value2, toValue(min), toValue(max));\n }\n });\n}\n\nfunction useOffsetPagination(options) {\n const {\n total = Number.POSITIVE_INFINITY,\n pageSize = 10,\n page = 1,\n onPageChange = noop,\n onPageSizeChange = noop,\n onPageCountChange = noop\n } = options;\n const currentPageSize = useClamp(pageSize, 1, Number.POSITIVE_INFINITY);\n const pageCount = computed(() => Math.max(\n 1,\n Math.ceil(toValue(total) / toValue(currentPageSize))\n ));\n const currentPage = useClamp(page, 1, pageCount);\n const isFirstPage = computed(() => currentPage.value === 1);\n const isLastPage = computed(() => currentPage.value === pageCount.value);\n if (isRef(page)) {\n syncRef(page, currentPage, {\n direction: isReadonly(page) ? \"ltr\" : \"both\"\n });\n }\n if (isRef(pageSize)) {\n syncRef(pageSize, currentPageSize, {\n direction: isReadonly(pageSize) ? \"ltr\" : \"both\"\n });\n }\n function prev() {\n currentPage.value--;\n }\n function next() {\n currentPage.value++;\n }\n const returnValue = {\n currentPage,\n currentPageSize,\n pageCount,\n isFirstPage,\n isLastPage,\n prev,\n next\n };\n watch(currentPage, () => {\n onPageChange(reactive(returnValue));\n });\n watch(currentPageSize, () => {\n onPageSizeChange(reactive(returnValue));\n });\n watch(pageCount, () => {\n onPageCountChange(reactive(returnValue));\n });\n return returnValue;\n}\n\nfunction useOnline(options = {}) {\n const { isOnline } = useNetwork(options);\n return isOnline;\n}\n\nfunction usePageLeave(options = {}) {\n const { window = defaultWindow } = options;\n const isLeft = shallowRef(false);\n const handler = (event) => {\n if (!window)\n return;\n event = event || window.event;\n const from = event.relatedTarget || event.toElement;\n isLeft.value = !from;\n };\n if (window) {\n const listenerOptions = { passive: true };\n useEventListener(window, \"mouseout\", handler, listenerOptions);\n useEventListener(window.document, \"mouseleave\", handler, listenerOptions);\n useEventListener(window.document, \"mouseenter\", handler, listenerOptions);\n }\n return isLeft;\n}\n\nfunction useScreenOrientation(options = {}) {\n const {\n window = defaultWindow\n } = options;\n const isSupported = useSupported(() => window && \"screen\" in window && \"orientation\" in window.screen);\n const screenOrientation = isSupported.value ? window.screen.orientation : {};\n const orientation = ref(screenOrientation.type);\n const angle = shallowRef(screenOrientation.angle || 0);\n if (isSupported.value) {\n useEventListener(window, \"orientationchange\", () => {\n orientation.value = screenOrientation.type;\n angle.value = screenOrientation.angle;\n }, { passive: true });\n }\n const lockOrientation = (type) => {\n if (isSupported.value && typeof screenOrientation.lock === \"function\")\n return screenOrientation.lock(type);\n return Promise.reject(new Error(\"Not supported\"));\n };\n const unlockOrientation = () => {\n if (isSupported.value && typeof screenOrientation.unlock === \"function\")\n screenOrientation.unlock();\n };\n return {\n isSupported,\n orientation,\n angle,\n lockOrientation,\n unlockOrientation\n };\n}\n\nfunction useParallax(target, options = {}) {\n const {\n deviceOrientationTiltAdjust = (i) => i,\n deviceOrientationRollAdjust = (i) => i,\n mouseTiltAdjust = (i) => i,\n mouseRollAdjust = (i) => i,\n window = defaultWindow\n } = options;\n const orientation = reactive(useDeviceOrientation({ window }));\n const screenOrientation = reactive(useScreenOrientation({ window }));\n const {\n elementX: x,\n elementY: y,\n elementWidth: width,\n elementHeight: height\n } = useMouseInElement(target, { handleOutside: false, window });\n const source = computed(() => {\n if (orientation.isSupported && (orientation.alpha != null && orientation.alpha !== 0 || orientation.gamma != null && orientation.gamma !== 0)) {\n return \"deviceOrientation\";\n }\n return \"mouse\";\n });\n const roll = computed(() => {\n if (source.value === \"deviceOrientation\") {\n let value;\n switch (screenOrientation.orientation) {\n case \"landscape-primary\":\n value = orientation.gamma / 90;\n break;\n case \"landscape-secondary\":\n value = -orientation.gamma / 90;\n break;\n case \"portrait-primary\":\n value = -orientation.beta / 90;\n break;\n case \"portrait-secondary\":\n value = orientation.beta / 90;\n break;\n default:\n value = -orientation.beta / 90;\n }\n return deviceOrientationRollAdjust(value);\n } else {\n const value = -(y.value - height.value / 2) / height.value;\n return mouseRollAdjust(value);\n }\n });\n const tilt = computed(() => {\n if (source.value === \"deviceOrientation\") {\n let value;\n switch (screenOrientation.orientation) {\n case \"landscape-primary\":\n value = orientation.beta / 90;\n break;\n case \"landscape-secondary\":\n value = -orientation.beta / 90;\n break;\n case \"portrait-primary\":\n value = orientation.gamma / 90;\n break;\n case \"portrait-secondary\":\n value = -orientation.gamma / 90;\n break;\n default:\n value = orientation.gamma / 90;\n }\n return deviceOrientationTiltAdjust(value);\n } else {\n const value = (x.value - width.value / 2) / width.value;\n return mouseTiltAdjust(value);\n }\n });\n return { roll, tilt, source };\n}\n\nfunction useParentElement(element = useCurrentElement()) {\n const parentElement = shallowRef();\n const update = () => {\n const el = unrefElement(element);\n if (el)\n parentElement.value = el.parentElement;\n };\n tryOnMounted(update);\n watch(() => toValue(element), update);\n return parentElement;\n}\n\nfunction usePerformanceObserver(options, callback) {\n const {\n window = defaultWindow,\n immediate = true,\n ...performanceOptions\n } = options;\n const isSupported = useSupported(() => window && \"PerformanceObserver\" in window);\n let observer;\n const stop = () => {\n observer == null ? void 0 : observer.disconnect();\n };\n const start = () => {\n if (isSupported.value) {\n stop();\n observer = new PerformanceObserver(callback);\n observer.observe(performanceOptions);\n }\n };\n tryOnScopeDispose(stop);\n if (immediate)\n start();\n return {\n isSupported,\n start,\n stop\n };\n}\n\nconst defaultState = {\n x: 0,\n y: 0,\n pointerId: 0,\n pressure: 0,\n tiltX: 0,\n tiltY: 0,\n width: 0,\n height: 0,\n twist: 0,\n pointerType: null\n};\nconst keys = /* @__PURE__ */ Object.keys(defaultState);\nfunction usePointer(options = {}) {\n const {\n target = defaultWindow\n } = options;\n const isInside = shallowRef(false);\n const state = ref(options.initialValue || {});\n Object.assign(state.value, defaultState, state.value);\n const handler = (event) => {\n isInside.value = true;\n if (options.pointerTypes && !options.pointerTypes.includes(event.pointerType))\n return;\n state.value = objectPick(event, keys, false);\n };\n if (target) {\n const listenerOptions = { passive: true };\n useEventListener(target, [\"pointerdown\", \"pointermove\", \"pointerup\"], handler, listenerOptions);\n useEventListener(target, \"pointerleave\", () => isInside.value = false, listenerOptions);\n }\n return {\n ...toRefs(state),\n isInside\n };\n}\n\nfunction usePointerLock(target, options = {}) {\n const { document = defaultDocument } = options;\n const isSupported = useSupported(() => document && \"pointerLockElement\" in document);\n const element = shallowRef();\n const triggerElement = shallowRef();\n let targetElement;\n if (isSupported.value) {\n const listenerOptions = { passive: true };\n useEventListener(document, \"pointerlockchange\", () => {\n var _a;\n const currentElement = (_a = document.pointerLockElement) != null ? _a : element.value;\n if (targetElement && currentElement === targetElement) {\n element.value = document.pointerLockElement;\n if (!element.value)\n targetElement = triggerElement.value = null;\n }\n }, listenerOptions);\n useEventListener(document, \"pointerlockerror\", () => {\n var _a;\n const currentElement = (_a = document.pointerLockElement) != null ? _a : element.value;\n if (targetElement && currentElement === targetElement) {\n const action = document.pointerLockElement ? \"release\" : \"acquire\";\n throw new Error(`Failed to ${action} pointer lock.`);\n }\n }, listenerOptions);\n }\n async function lock(e) {\n var _a;\n if (!isSupported.value)\n throw new Error(\"Pointer Lock API is not supported by your browser.\");\n triggerElement.value = e instanceof Event ? e.currentTarget : null;\n targetElement = e instanceof Event ? (_a = unrefElement(target)) != null ? _a : triggerElement.value : unrefElement(e);\n if (!targetElement)\n throw new Error(\"Target element undefined.\");\n targetElement.requestPointerLock();\n return await until(element).toBe(targetElement);\n }\n async function unlock() {\n if (!element.value)\n return false;\n document.exitPointerLock();\n await until(element).toBeNull();\n return true;\n }\n return {\n isSupported,\n element,\n triggerElement,\n lock,\n unlock\n };\n}\n\nfunction usePointerSwipe(target, options = {}) {\n const targetRef = toRef(target);\n const {\n threshold = 50,\n onSwipe,\n onSwipeEnd,\n onSwipeStart,\n disableTextSelect = false\n } = options;\n const posStart = reactive({ x: 0, y: 0 });\n const updatePosStart = (x, y) => {\n posStart.x = x;\n posStart.y = y;\n };\n const posEnd = reactive({ x: 0, y: 0 });\n const updatePosEnd = (x, y) => {\n posEnd.x = x;\n posEnd.y = y;\n };\n const distanceX = computed(() => posStart.x - posEnd.x);\n const distanceY = computed(() => posStart.y - posEnd.y);\n const { max, abs } = Math;\n const isThresholdExceeded = computed(() => max(abs(distanceX.value), abs(distanceY.value)) >= threshold);\n const isSwiping = shallowRef(false);\n const isPointerDown = shallowRef(false);\n const direction = computed(() => {\n if (!isThresholdExceeded.value)\n return \"none\";\n if (abs(distanceX.value) > abs(distanceY.value)) {\n return distanceX.value > 0 ? \"left\" : \"right\";\n } else {\n return distanceY.value > 0 ? \"up\" : \"down\";\n }\n });\n const eventIsAllowed = (e) => {\n var _a, _b, _c;\n const isReleasingButton = e.buttons === 0;\n const isPrimaryButton = e.buttons === 1;\n return (_c = (_b = (_a = options.pointerTypes) == null ? void 0 : _a.includes(e.pointerType)) != null ? _b : isReleasingButton || isPrimaryButton) != null ? _c : true;\n };\n const listenerOptions = { passive: true };\n const stops = [\n useEventListener(target, \"pointerdown\", (e) => {\n if (!eventIsAllowed(e))\n return;\n isPointerDown.value = true;\n const eventTarget = e.target;\n eventTarget == null ? void 0 : eventTarget.setPointerCapture(e.pointerId);\n const { clientX: x, clientY: y } = e;\n updatePosStart(x, y);\n updatePosEnd(x, y);\n onSwipeStart == null ? void 0 : onSwipeStart(e);\n }, listenerOptions),\n useEventListener(target, \"pointermove\", (e) => {\n if (!eventIsAllowed(e))\n return;\n if (!isPointerDown.value)\n return;\n const { clientX: x, clientY: y } = e;\n updatePosEnd(x, y);\n if (!isSwiping.value && isThresholdExceeded.value)\n isSwiping.value = true;\n if (isSwiping.value)\n onSwipe == null ? void 0 : onSwipe(e);\n }, listenerOptions),\n useEventListener(target, \"pointerup\", (e) => {\n if (!eventIsAllowed(e))\n return;\n if (isSwiping.value)\n onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);\n isPointerDown.value = false;\n isSwiping.value = false;\n }, listenerOptions)\n ];\n tryOnMounted(() => {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n (_b = (_a = targetRef.value) == null ? void 0 : _a.style) == null ? void 0 : _b.setProperty(\"touch-action\", \"none\");\n if (disableTextSelect) {\n (_d = (_c = targetRef.value) == null ? void 0 : _c.style) == null ? void 0 : _d.setProperty(\"-webkit-user-select\", \"none\");\n (_f = (_e = targetRef.value) == null ? void 0 : _e.style) == null ? void 0 : _f.setProperty(\"-ms-user-select\", \"none\");\n (_h = (_g = targetRef.value) == null ? void 0 : _g.style) == null ? void 0 : _h.setProperty(\"user-select\", \"none\");\n }\n });\n const stop = () => stops.forEach((s) => s());\n return {\n isSwiping: readonly(isSwiping),\n direction: readonly(direction),\n posStart: readonly(posStart),\n posEnd: readonly(posEnd),\n distanceX,\n distanceY,\n stop\n };\n}\n\nfunction usePreferredColorScheme(options) {\n const isLight = useMediaQuery(\"(prefers-color-scheme: light)\", options);\n const isDark = useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n return computed(() => {\n if (isDark.value)\n return \"dark\";\n if (isLight.value)\n return \"light\";\n return \"no-preference\";\n });\n}\n\nfunction usePreferredContrast(options) {\n const isMore = useMediaQuery(\"(prefers-contrast: more)\", options);\n const isLess = useMediaQuery(\"(prefers-contrast: less)\", options);\n const isCustom = useMediaQuery(\"(prefers-contrast: custom)\", options);\n return computed(() => {\n if (isMore.value)\n return \"more\";\n if (isLess.value)\n return \"less\";\n if (isCustom.value)\n return \"custom\";\n return \"no-preference\";\n });\n}\n\nfunction usePreferredLanguages(options = {}) {\n const { window = defaultWindow } = options;\n if (!window)\n return ref([\"en\"]);\n const navigator = window.navigator;\n const value = ref(navigator.languages);\n useEventListener(window, \"languagechange\", () => {\n value.value = navigator.languages;\n }, { passive: true });\n return value;\n}\n\nfunction usePreferredReducedMotion(options) {\n const isReduced = useMediaQuery(\"(prefers-reduced-motion: reduce)\", options);\n return computed(() => {\n if (isReduced.value)\n return \"reduce\";\n return \"no-preference\";\n });\n}\n\nfunction usePreferredReducedTransparency(options) {\n const isReduced = useMediaQuery(\"(prefers-reduced-transparency: reduce)\", options);\n return computed(() => {\n if (isReduced.value)\n return \"reduce\";\n return \"no-preference\";\n });\n}\n\nfunction usePrevious(value, initialValue) {\n const previous = shallowRef(initialValue);\n watch(\n toRef(value),\n (_, oldValue) => {\n previous.value = oldValue;\n },\n { flush: \"sync\" }\n );\n return readonly(previous);\n}\n\nconst topVarName = \"--vueuse-safe-area-top\";\nconst rightVarName = \"--vueuse-safe-area-right\";\nconst bottomVarName = \"--vueuse-safe-area-bottom\";\nconst leftVarName = \"--vueuse-safe-area-left\";\nfunction useScreenSafeArea() {\n const top = shallowRef(\"\");\n const right = shallowRef(\"\");\n const bottom = shallowRef(\"\");\n const left = shallowRef(\"\");\n if (isClient) {\n const topCssVar = useCssVar(topVarName);\n const rightCssVar = useCssVar(rightVarName);\n const bottomCssVar = useCssVar(bottomVarName);\n const leftCssVar = useCssVar(leftVarName);\n topCssVar.value = \"env(safe-area-inset-top, 0px)\";\n rightCssVar.value = \"env(safe-area-inset-right, 0px)\";\n bottomCssVar.value = \"env(safe-area-inset-bottom, 0px)\";\n leftCssVar.value = \"env(safe-area-inset-left, 0px)\";\n update();\n useEventListener(\"resize\", useDebounceFn(update), { passive: true });\n }\n function update() {\n top.value = getValue(topVarName);\n right.value = getValue(rightVarName);\n bottom.value = getValue(bottomVarName);\n left.value = getValue(leftVarName);\n }\n return {\n top,\n right,\n bottom,\n left,\n update\n };\n}\nfunction getValue(position) {\n return getComputedStyle(document.documentElement).getPropertyValue(position);\n}\n\nfunction useScriptTag(src, onLoaded = noop, options = {}) {\n const {\n immediate = true,\n manual = false,\n type = \"text/javascript\",\n async = true,\n crossOrigin,\n referrerPolicy,\n noModule,\n defer,\n document = defaultDocument,\n attrs = {}\n } = options;\n const scriptTag = shallowRef(null);\n let _promise = null;\n const loadScript = (waitForScriptLoad) => new Promise((resolve, reject) => {\n const resolveWithElement = (el2) => {\n scriptTag.value = el2;\n resolve(el2);\n return el2;\n };\n if (!document) {\n resolve(false);\n return;\n }\n let shouldAppend = false;\n let el = document.querySelector(`script[src=\"${toValue(src)}\"]`);\n if (!el) {\n el = document.createElement(\"script\");\n el.type = type;\n el.async = async;\n el.src = toValue(src);\n if (defer)\n el.defer = defer;\n if (crossOrigin)\n el.crossOrigin = crossOrigin;\n if (noModule)\n el.noModule = noModule;\n if (referrerPolicy)\n el.referrerPolicy = referrerPolicy;\n Object.entries(attrs).forEach(([name, value]) => el == null ? void 0 : el.setAttribute(name, value));\n shouldAppend = true;\n } else if (el.hasAttribute(\"data-loaded\")) {\n resolveWithElement(el);\n }\n const listenerOptions = {\n passive: true\n };\n useEventListener(el, \"error\", (event) => reject(event), listenerOptions);\n useEventListener(el, \"abort\", (event) => reject(event), listenerOptions);\n useEventListener(el, \"load\", () => {\n el.setAttribute(\"data-loaded\", \"true\");\n onLoaded(el);\n resolveWithElement(el);\n }, listenerOptions);\n if (shouldAppend)\n el = document.head.appendChild(el);\n if (!waitForScriptLoad)\n resolveWithElement(el);\n });\n const load = (waitForScriptLoad = true) => {\n if (!_promise)\n _promise = loadScript(waitForScriptLoad);\n return _promise;\n };\n const unload = () => {\n if (!document)\n return;\n _promise = null;\n if (scriptTag.value)\n scriptTag.value = null;\n const el = document.querySelector(`script[src=\"${toValue(src)}\"]`);\n if (el)\n document.head.removeChild(el);\n };\n if (immediate && !manual)\n tryOnMounted(load);\n if (!manual)\n tryOnUnmounted(unload);\n return { scriptTag, load, unload };\n}\n\nfunction checkOverflowScroll(ele) {\n const style = window.getComputedStyle(ele);\n if (style.overflowX === \"scroll\" || style.overflowY === \"scroll\" || style.overflowX === \"auto\" && ele.clientWidth < ele.scrollWidth || style.overflowY === \"auto\" && ele.clientHeight < ele.scrollHeight) {\n return true;\n } else {\n const parent = ele.parentNode;\n if (!parent || parent.tagName === \"BODY\")\n return false;\n return checkOverflowScroll(parent);\n }\n}\nfunction preventDefault(rawEvent) {\n const e = rawEvent || window.event;\n const _target = e.target;\n if (checkOverflowScroll(_target))\n return false;\n if (e.touches.length > 1)\n return true;\n if (e.preventDefault)\n e.preventDefault();\n return false;\n}\nconst elInitialOverflow = /* @__PURE__ */ new WeakMap();\nfunction useScrollLock(element, initialState = false) {\n const isLocked = shallowRef(initialState);\n let stopTouchMoveListener = null;\n let initialOverflow = \"\";\n watch(toRef(element), (el) => {\n const target = resolveElement(toValue(el));\n if (target) {\n const ele = target;\n if (!elInitialOverflow.get(ele))\n elInitialOverflow.set(ele, ele.style.overflow);\n if (ele.style.overflow !== \"hidden\")\n initialOverflow = ele.style.overflow;\n if (ele.style.overflow === \"hidden\")\n return isLocked.value = true;\n if (isLocked.value)\n return ele.style.overflow = \"hidden\";\n }\n }, {\n immediate: true\n });\n const lock = () => {\n const el = resolveElement(toValue(element));\n if (!el || isLocked.value)\n return;\n if (isIOS) {\n stopTouchMoveListener = useEventListener(\n el,\n \"touchmove\",\n (e) => {\n preventDefault(e);\n },\n { passive: false }\n );\n }\n el.style.overflow = \"hidden\";\n isLocked.value = true;\n };\n const unlock = () => {\n const el = resolveElement(toValue(element));\n if (!el || !isLocked.value)\n return;\n if (isIOS)\n stopTouchMoveListener == null ? void 0 : stopTouchMoveListener();\n el.style.overflow = initialOverflow;\n elInitialOverflow.delete(el);\n isLocked.value = false;\n };\n tryOnScopeDispose(unlock);\n return computed({\n get() {\n return isLocked.value;\n },\n set(v) {\n if (v)\n lock();\n else unlock();\n }\n });\n}\n\nfunction useSessionStorage(key, initialValue, options = {}) {\n const { window = defaultWindow } = options;\n return useStorage(key, initialValue, window == null ? void 0 : window.sessionStorage, options);\n}\n\nfunction useShare(shareOptions = {}, options = {}) {\n const { navigator = defaultNavigator } = options;\n const _navigator = navigator;\n const isSupported = useSupported(() => _navigator && \"canShare\" in _navigator);\n const share = async (overrideOptions = {}) => {\n if (isSupported.value) {\n const data = {\n ...toValue(shareOptions),\n ...toValue(overrideOptions)\n };\n let granted = true;\n if (data.files && _navigator.canShare)\n granted = _navigator.canShare({ files: data.files });\n if (granted)\n return _navigator.share(data);\n }\n };\n return {\n isSupported,\n share\n };\n}\n\nconst defaultSortFn = (source, compareFn) => source.sort(compareFn);\nconst defaultCompare = (a, b) => a - b;\nfunction useSorted(...args) {\n var _a, _b, _c, _d;\n const [source] = args;\n let compareFn = defaultCompare;\n let options = {};\n if (args.length === 2) {\n if (typeof args[1] === \"object\") {\n options = args[1];\n compareFn = (_a = options.compareFn) != null ? _a : defaultCompare;\n } else {\n compareFn = (_b = args[1]) != null ? _b : defaultCompare;\n }\n } else if (args.length > 2) {\n compareFn = (_c = args[1]) != null ? _c : defaultCompare;\n options = (_d = args[2]) != null ? _d : {};\n }\n const {\n dirty = false,\n sortFn = defaultSortFn\n } = options;\n if (!dirty)\n return computed(() => sortFn([...toValue(source)], compareFn));\n watchEffect(() => {\n const result = sortFn(toValue(source), compareFn);\n if (isRef(source))\n source.value = result;\n else\n source.splice(0, source.length, ...result);\n });\n return source;\n}\n\nfunction useSpeechRecognition(options = {}) {\n const {\n interimResults = true,\n continuous = true,\n maxAlternatives = 1,\n window = defaultWindow\n } = options;\n const lang = toRef(options.lang || \"en-US\");\n const isListening = shallowRef(false);\n const isFinal = shallowRef(false);\n const result = shallowRef(\"\");\n const error = shallowRef(void 0);\n let recognition;\n const start = () => {\n isListening.value = true;\n };\n const stop = () => {\n isListening.value = false;\n };\n const toggle = (value = !isListening.value) => {\n if (value) {\n start();\n } else {\n stop();\n }\n };\n const SpeechRecognition = window && (window.SpeechRecognition || window.webkitSpeechRecognition);\n const isSupported = useSupported(() => SpeechRecognition);\n if (isSupported.value) {\n recognition = new SpeechRecognition();\n recognition.continuous = continuous;\n recognition.interimResults = interimResults;\n recognition.lang = toValue(lang);\n recognition.maxAlternatives = maxAlternatives;\n recognition.onstart = () => {\n isListening.value = true;\n isFinal.value = false;\n };\n watch(lang, (lang2) => {\n if (recognition && !isListening.value)\n recognition.lang = lang2;\n });\n recognition.onresult = (event) => {\n const currentResult = event.results[event.resultIndex];\n const { transcript } = currentResult[0];\n isFinal.value = currentResult.isFinal;\n result.value = transcript;\n error.value = void 0;\n };\n recognition.onerror = (event) => {\n error.value = event;\n };\n recognition.onend = () => {\n isListening.value = false;\n recognition.lang = toValue(lang);\n };\n watch(isListening, (newValue, oldValue) => {\n if (newValue === oldValue)\n return;\n if (newValue)\n recognition.start();\n else\n recognition.stop();\n });\n }\n tryOnScopeDispose(() => {\n stop();\n });\n return {\n isSupported,\n isListening,\n isFinal,\n recognition,\n result,\n error,\n toggle,\n start,\n stop\n };\n}\n\nfunction useSpeechSynthesis(text, options = {}) {\n const {\n pitch = 1,\n rate = 1,\n volume = 1,\n window = defaultWindow\n } = options;\n const synth = window && window.speechSynthesis;\n const isSupported = useSupported(() => synth);\n const isPlaying = shallowRef(false);\n const status = shallowRef(\"init\");\n const spokenText = toRef(text || \"\");\n const lang = toRef(options.lang || \"en-US\");\n const error = shallowRef(void 0);\n const toggle = (value = !isPlaying.value) => {\n isPlaying.value = value;\n };\n const bindEventsForUtterance = (utterance2) => {\n utterance2.lang = toValue(lang);\n utterance2.voice = toValue(options.voice) || null;\n utterance2.pitch = toValue(pitch);\n utterance2.rate = toValue(rate);\n utterance2.volume = volume;\n utterance2.onstart = () => {\n isPlaying.value = true;\n status.value = \"play\";\n };\n utterance2.onpause = () => {\n isPlaying.value = false;\n status.value = \"pause\";\n };\n utterance2.onresume = () => {\n isPlaying.value = true;\n status.value = \"play\";\n };\n utterance2.onend = () => {\n isPlaying.value = false;\n status.value = \"end\";\n };\n utterance2.onerror = (event) => {\n error.value = event;\n };\n };\n const utterance = computed(() => {\n isPlaying.value = false;\n status.value = \"init\";\n const newUtterance = new SpeechSynthesisUtterance(spokenText.value);\n bindEventsForUtterance(newUtterance);\n return newUtterance;\n });\n const speak = () => {\n synth.cancel();\n if (utterance)\n synth.speak(utterance.value);\n };\n const stop = () => {\n synth.cancel();\n isPlaying.value = false;\n };\n if (isSupported.value) {\n bindEventsForUtterance(utterance.value);\n watch(lang, (lang2) => {\n if (utterance.value && !isPlaying.value)\n utterance.value.lang = lang2;\n });\n if (options.voice) {\n watch(options.voice, () => {\n synth.cancel();\n });\n }\n watch(isPlaying, () => {\n if (isPlaying.value)\n synth.resume();\n else\n synth.pause();\n });\n }\n tryOnScopeDispose(() => {\n isPlaying.value = false;\n });\n return {\n isSupported,\n isPlaying,\n status,\n utterance,\n error,\n stop,\n toggle,\n speak\n };\n}\n\nfunction useStepper(steps, initialStep) {\n const stepsRef = ref(steps);\n const stepNames = computed(() => Array.isArray(stepsRef.value) ? stepsRef.value : Object.keys(stepsRef.value));\n const index = ref(stepNames.value.indexOf(initialStep != null ? initialStep : stepNames.value[0]));\n const current = computed(() => at(index.value));\n const isFirst = computed(() => index.value === 0);\n const isLast = computed(() => index.value === stepNames.value.length - 1);\n const next = computed(() => stepNames.value[index.value + 1]);\n const previous = computed(() => stepNames.value[index.value - 1]);\n function at(index2) {\n if (Array.isArray(stepsRef.value))\n return stepsRef.value[index2];\n return stepsRef.value[stepNames.value[index2]];\n }\n function get(step) {\n if (!stepNames.value.includes(step))\n return;\n return at(stepNames.value.indexOf(step));\n }\n function goTo(step) {\n if (stepNames.value.includes(step))\n index.value = stepNames.value.indexOf(step);\n }\n function goToNext() {\n if (isLast.value)\n return;\n index.value++;\n }\n function goToPrevious() {\n if (isFirst.value)\n return;\n index.value--;\n }\n function goBackTo(step) {\n if (isAfter(step))\n goTo(step);\n }\n function isNext(step) {\n return stepNames.value.indexOf(step) === index.value + 1;\n }\n function isPrevious(step) {\n return stepNames.value.indexOf(step) === index.value - 1;\n }\n function isCurrent(step) {\n return stepNames.value.indexOf(step) === index.value;\n }\n function isBefore(step) {\n return index.value < stepNames.value.indexOf(step);\n }\n function isAfter(step) {\n return index.value > stepNames.value.indexOf(step);\n }\n return {\n steps: stepsRef,\n stepNames,\n index,\n current,\n next,\n previous,\n isFirst,\n isLast,\n at,\n get,\n goTo,\n goToNext,\n goToPrevious,\n goBackTo,\n isNext,\n isPrevious,\n isCurrent,\n isBefore,\n isAfter\n };\n}\n\nfunction useStorageAsync(key, initialValue, storage, options = {}) {\n var _a;\n const {\n flush = \"pre\",\n deep = true,\n listenToStorageChanges = true,\n writeDefaults = true,\n mergeDefaults = false,\n shallow,\n window = defaultWindow,\n eventFilter,\n onError = (e) => {\n console.error(e);\n }\n } = options;\n const rawInit = toValue(initialValue);\n const type = guessSerializerType(rawInit);\n const data = (shallow ? shallowRef : ref)(toValue(initialValue));\n const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n if (!storage) {\n try {\n storage = getSSRHandler(\"getDefaultStorageAsync\", () => {\n var _a2;\n return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n })();\n } catch (e) {\n onError(e);\n }\n }\n async function read(event) {\n if (!storage || event && event.key !== key)\n return;\n try {\n const rawValue = event ? event.newValue : await storage.getItem(key);\n if (rawValue == null) {\n data.value = rawInit;\n if (writeDefaults && rawInit !== null)\n await storage.setItem(key, await serializer.write(rawInit));\n } else if (mergeDefaults) {\n const value = await serializer.read(rawValue);\n if (typeof mergeDefaults === \"function\")\n data.value = mergeDefaults(value, rawInit);\n else if (type === \"object\" && !Array.isArray(value))\n data.value = { ...rawInit, ...value };\n else data.value = value;\n } else {\n data.value = await serializer.read(rawValue);\n }\n } catch (e) {\n onError(e);\n }\n }\n read();\n if (window && listenToStorageChanges)\n useEventListener(window, \"storage\", (e) => Promise.resolve().then(() => read(e)), { passive: true });\n if (storage) {\n watchWithFilter(\n data,\n async () => {\n try {\n if (data.value == null)\n await storage.removeItem(key);\n else\n await storage.setItem(key, await serializer.write(data.value));\n } catch (e) {\n onError(e);\n }\n },\n {\n flush,\n deep,\n eventFilter\n }\n );\n }\n return data;\n}\n\nlet _id = 0;\nfunction useStyleTag(css, options = {}) {\n const isLoaded = shallowRef(false);\n const {\n document = defaultDocument,\n immediate = true,\n manual = false,\n id = `vueuse_styletag_${++_id}`\n } = options;\n const cssRef = shallowRef(css);\n let stop = () => {\n };\n const load = () => {\n if (!document)\n return;\n const el = document.getElementById(id) || document.createElement(\"style\");\n if (!el.isConnected) {\n el.id = id;\n if (options.media)\n el.media = options.media;\n document.head.appendChild(el);\n }\n if (isLoaded.value)\n return;\n stop = watch(\n cssRef,\n (value) => {\n el.textContent = value;\n },\n { immediate: true }\n );\n isLoaded.value = true;\n };\n const unload = () => {\n if (!document || !isLoaded.value)\n return;\n stop();\n document.head.removeChild(document.getElementById(id));\n isLoaded.value = false;\n };\n if (immediate && !manual)\n tryOnMounted(load);\n if (!manual)\n tryOnScopeDispose(unload);\n return {\n id,\n css: cssRef,\n unload,\n load,\n isLoaded: readonly(isLoaded)\n };\n}\n\nfunction useSwipe(target, options = {}) {\n const {\n threshold = 50,\n onSwipe,\n onSwipeEnd,\n onSwipeStart,\n passive = true\n } = options;\n const coordsStart = reactive({ x: 0, y: 0 });\n const coordsEnd = reactive({ x: 0, y: 0 });\n const diffX = computed(() => coordsStart.x - coordsEnd.x);\n const diffY = computed(() => coordsStart.y - coordsEnd.y);\n const { max, abs } = Math;\n const isThresholdExceeded = computed(() => max(abs(diffX.value), abs(diffY.value)) >= threshold);\n const isSwiping = shallowRef(false);\n const direction = computed(() => {\n if (!isThresholdExceeded.value)\n return \"none\";\n if (abs(diffX.value) > abs(diffY.value)) {\n return diffX.value > 0 ? \"left\" : \"right\";\n } else {\n return diffY.value > 0 ? \"up\" : \"down\";\n }\n });\n const getTouchEventCoords = (e) => [e.touches[0].clientX, e.touches[0].clientY];\n const updateCoordsStart = (x, y) => {\n coordsStart.x = x;\n coordsStart.y = y;\n };\n const updateCoordsEnd = (x, y) => {\n coordsEnd.x = x;\n coordsEnd.y = y;\n };\n const listenerOptions = { passive, capture: !passive };\n const onTouchEnd = (e) => {\n if (isSwiping.value)\n onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);\n isSwiping.value = false;\n };\n const stops = [\n useEventListener(target, \"touchstart\", (e) => {\n if (e.touches.length !== 1)\n return;\n const [x, y] = getTouchEventCoords(e);\n updateCoordsStart(x, y);\n updateCoordsEnd(x, y);\n onSwipeStart == null ? void 0 : onSwipeStart(e);\n }, listenerOptions),\n useEventListener(target, \"touchmove\", (e) => {\n if (e.touches.length !== 1)\n return;\n const [x, y] = getTouchEventCoords(e);\n updateCoordsEnd(x, y);\n if (listenerOptions.capture && !listenerOptions.passive && Math.abs(diffX.value) > Math.abs(diffY.value))\n e.preventDefault();\n if (!isSwiping.value && isThresholdExceeded.value)\n isSwiping.value = true;\n if (isSwiping.value)\n onSwipe == null ? void 0 : onSwipe(e);\n }, listenerOptions),\n useEventListener(target, [\"touchend\", \"touchcancel\"], onTouchEnd, listenerOptions)\n ];\n const stop = () => stops.forEach((s) => s());\n return {\n isSwiping,\n direction,\n coordsStart,\n coordsEnd,\n lengthX: diffX,\n lengthY: diffY,\n stop,\n // TODO: Remove in the next major version\n isPassiveEventSupported: true\n };\n}\n\nfunction useTemplateRefsList() {\n const refs = ref([]);\n refs.value.set = (el) => {\n if (el)\n refs.value.push(el);\n };\n onBeforeUpdate(() => {\n refs.value.length = 0;\n });\n return refs;\n}\n\nfunction useTextDirection(options = {}) {\n const {\n document = defaultDocument,\n selector = \"html\",\n observe = false,\n initialValue = \"ltr\"\n } = options;\n function getValue() {\n var _a, _b;\n return (_b = (_a = document == null ? void 0 : document.querySelector(selector)) == null ? void 0 : _a.getAttribute(\"dir\")) != null ? _b : initialValue;\n }\n const dir = ref(getValue());\n tryOnMounted(() => dir.value = getValue());\n if (observe && document) {\n useMutationObserver(\n document.querySelector(selector),\n () => dir.value = getValue(),\n { attributes: true }\n );\n }\n return computed({\n get() {\n return dir.value;\n },\n set(v) {\n var _a, _b;\n dir.value = v;\n if (!document)\n return;\n if (dir.value)\n (_a = document.querySelector(selector)) == null ? void 0 : _a.setAttribute(\"dir\", dir.value);\n else\n (_b = document.querySelector(selector)) == null ? void 0 : _b.removeAttribute(\"dir\");\n }\n });\n}\n\nfunction getRangesFromSelection(selection) {\n var _a;\n const rangeCount = (_a = selection.rangeCount) != null ? _a : 0;\n return Array.from({ length: rangeCount }, (_, i) => selection.getRangeAt(i));\n}\nfunction useTextSelection(options = {}) {\n const {\n window = defaultWindow\n } = options;\n const selection = ref(null);\n const text = computed(() => {\n var _a, _b;\n return (_b = (_a = selection.value) == null ? void 0 : _a.toString()) != null ? _b : \"\";\n });\n const ranges = computed(() => selection.value ? getRangesFromSelection(selection.value) : []);\n const rects = computed(() => ranges.value.map((range) => range.getBoundingClientRect()));\n function onSelectionChange() {\n selection.value = null;\n if (window)\n selection.value = window.getSelection();\n }\n if (window)\n useEventListener(window.document, \"selectionchange\", onSelectionChange, { passive: true });\n return {\n text,\n rects,\n ranges,\n selection\n };\n}\n\nfunction tryRequestAnimationFrame(window = defaultWindow, fn) {\n if (window && typeof window.requestAnimationFrame === \"function\") {\n window.requestAnimationFrame(fn);\n } else {\n fn();\n }\n}\nfunction useTextareaAutosize(options = {}) {\n var _a, _b;\n const { window = defaultWindow } = options;\n const textarea = toRef(options == null ? void 0 : options.element);\n const input = toRef((_a = options == null ? void 0 : options.input) != null ? _a : \"\");\n const styleProp = (_b = options == null ? void 0 : options.styleProp) != null ? _b : \"height\";\n const textareaScrollHeight = shallowRef(1);\n const textareaOldWidth = shallowRef(0);\n function triggerResize() {\n var _a2;\n if (!textarea.value)\n return;\n let height = \"\";\n textarea.value.style[styleProp] = \"1px\";\n textareaScrollHeight.value = (_a2 = textarea.value) == null ? void 0 : _a2.scrollHeight;\n const _styleTarget = toValue(options == null ? void 0 : options.styleTarget);\n if (_styleTarget)\n _styleTarget.style[styleProp] = `${textareaScrollHeight.value}px`;\n else\n height = `${textareaScrollHeight.value}px`;\n textarea.value.style[styleProp] = height;\n }\n watch([input, textarea], () => nextTick(triggerResize), { immediate: true });\n watch(textareaScrollHeight, () => {\n var _a2;\n return (_a2 = options == null ? void 0 : options.onResize) == null ? void 0 : _a2.call(options);\n });\n useResizeObserver(textarea, ([{ contentRect }]) => {\n if (textareaOldWidth.value === contentRect.width)\n return;\n tryRequestAnimationFrame(window, () => {\n textareaOldWidth.value = contentRect.width;\n triggerResize();\n });\n });\n if (options == null ? void 0 : options.watch)\n watch(options.watch, triggerResize, { immediate: true, deep: true });\n return {\n textarea,\n input,\n triggerResize\n };\n}\n\nfunction useThrottledRefHistory(source, options = {}) {\n const { throttle = 200, trailing = true } = options;\n const filter = throttleFilter(throttle, trailing);\n const history = useRefHistory(source, { ...options, eventFilter: filter });\n return {\n ...history\n };\n}\n\nconst DEFAULT_UNITS = [\n { max: 6e4, value: 1e3, name: \"second\" },\n { max: 276e4, value: 6e4, name: \"minute\" },\n { max: 72e6, value: 36e5, name: \"hour\" },\n { max: 5184e5, value: 864e5, name: \"day\" },\n { max: 24192e5, value: 6048e5, name: \"week\" },\n { max: 28512e6, value: 2592e6, name: \"month\" },\n { max: Number.POSITIVE_INFINITY, value: 31536e6, name: \"year\" }\n];\nconst DEFAULT_MESSAGES = {\n justNow: \"just now\",\n past: (n) => n.match(/\\d/) ? `${n} ago` : n,\n future: (n) => n.match(/\\d/) ? `in ${n}` : n,\n month: (n, past) => n === 1 ? past ? \"last month\" : \"next month\" : `${n} month${n > 1 ? \"s\" : \"\"}`,\n year: (n, past) => n === 1 ? past ? \"last year\" : \"next year\" : `${n} year${n > 1 ? \"s\" : \"\"}`,\n day: (n, past) => n === 1 ? past ? \"yesterday\" : \"tomorrow\" : `${n} day${n > 1 ? \"s\" : \"\"}`,\n week: (n, past) => n === 1 ? past ? \"last week\" : \"next week\" : `${n} week${n > 1 ? \"s\" : \"\"}`,\n hour: (n) => `${n} hour${n > 1 ? \"s\" : \"\"}`,\n minute: (n) => `${n} minute${n > 1 ? \"s\" : \"\"}`,\n second: (n) => `${n} second${n > 1 ? \"s\" : \"\"}`,\n invalid: \"\"\n};\nfunction DEFAULT_FORMATTER(date) {\n return date.toISOString().slice(0, 10);\n}\nfunction useTimeAgo(time, options = {}) {\n const {\n controls: exposeControls = false,\n updateInterval = 3e4\n } = options;\n const { now, ...controls } = useNow({ interval: updateInterval, controls: true });\n const timeAgo = computed(() => formatTimeAgo(new Date(toValue(time)), options, toValue(now)));\n if (exposeControls) {\n return {\n timeAgo,\n ...controls\n };\n } else {\n return timeAgo;\n }\n}\nfunction formatTimeAgo(from, options = {}, now = Date.now()) {\n var _a;\n const {\n max,\n messages = DEFAULT_MESSAGES,\n fullDateFormatter = DEFAULT_FORMATTER,\n units = DEFAULT_UNITS,\n showSecond = false,\n rounding = \"round\"\n } = options;\n const roundFn = typeof rounding === \"number\" ? (n) => +n.toFixed(rounding) : Math[rounding];\n const diff = +now - +from;\n const absDiff = Math.abs(diff);\n function getValue(diff2, unit) {\n return roundFn(Math.abs(diff2) / unit.value);\n }\n function format(diff2, unit) {\n const val = getValue(diff2, unit);\n const past = diff2 > 0;\n const str = applyFormat(unit.name, val, past);\n return applyFormat(past ? \"past\" : \"future\", str, past);\n }\n function applyFormat(name, val, isPast) {\n const formatter = messages[name];\n if (typeof formatter === \"function\")\n return formatter(val, isPast);\n return formatter.replace(\"{0}\", val.toString());\n }\n if (absDiff < 6e4 && !showSecond)\n return messages.justNow;\n if (typeof max === \"number\" && absDiff > max)\n return fullDateFormatter(new Date(from));\n if (typeof max === \"string\") {\n const unitMax = (_a = units.find((i) => i.name === max)) == null ? void 0 : _a.max;\n if (unitMax && absDiff > unitMax)\n return fullDateFormatter(new Date(from));\n }\n for (const [idx, unit] of units.entries()) {\n const val = getValue(diff, unit);\n if (val <= 0 && units[idx - 1])\n return format(diff, units[idx - 1]);\n if (absDiff < unit.max)\n return format(diff, unit);\n }\n return messages.invalid;\n}\n\nfunction useTimeoutPoll(fn, interval, options = {}) {\n const {\n immediate = true,\n immediateCallback = false\n } = options;\n const { start } = useTimeoutFn(loop, interval, { immediate });\n const isActive = shallowRef(false);\n async function loop() {\n if (!isActive.value)\n return;\n await fn();\n start();\n }\n function resume() {\n if (!isActive.value) {\n isActive.value = true;\n if (immediateCallback)\n fn();\n start();\n }\n }\n function pause() {\n isActive.value = false;\n }\n if (immediate && isClient)\n resume();\n tryOnScopeDispose(pause);\n return {\n isActive,\n pause,\n resume\n };\n}\n\nfunction useTimestamp(options = {}) {\n const {\n controls: exposeControls = false,\n offset = 0,\n immediate = true,\n interval = \"requestAnimationFrame\",\n callback\n } = options;\n const ts = shallowRef(timestamp() + offset);\n const update = () => ts.value = timestamp() + offset;\n const cb = callback ? () => {\n update();\n callback(ts.value);\n } : update;\n const controls = interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate });\n if (exposeControls) {\n return {\n timestamp: ts,\n ...controls\n };\n } else {\n return ts;\n }\n}\n\nfunction useTitle(newTitle = null, options = {}) {\n var _a, _b, _c;\n const {\n document = defaultDocument,\n restoreOnUnmount = (t) => t\n } = options;\n const originalTitle = (_a = document == null ? void 0 : document.title) != null ? _a : \"\";\n const title = toRef((_b = newTitle != null ? newTitle : document == null ? void 0 : document.title) != null ? _b : null);\n const isReadonly = !!(newTitle && typeof newTitle === \"function\");\n function format(t) {\n if (!(\"titleTemplate\" in options))\n return t;\n const template = options.titleTemplate || \"%s\";\n return typeof template === \"function\" ? template(t) : toValue(template).replace(/%s/g, t);\n }\n watch(\n title,\n (newValue, oldValue) => {\n if (newValue !== oldValue && document)\n document.title = format(newValue != null ? newValue : \"\");\n },\n { immediate: true }\n );\n if (options.observe && !options.titleTemplate && document && !isReadonly) {\n useMutationObserver(\n (_c = document.head) == null ? void 0 : _c.querySelector(\"title\"),\n () => {\n if (document && document.title !== title.value)\n title.value = format(document.title);\n },\n { childList: true }\n );\n }\n tryOnScopeDispose(() => {\n if (restoreOnUnmount) {\n const restoredTitle = restoreOnUnmount(originalTitle, title.value || \"\");\n if (restoredTitle != null && document)\n document.title = restoredTitle;\n }\n });\n return title;\n}\n\nconst _TransitionPresets = {\n easeInSine: [0.12, 0, 0.39, 0],\n easeOutSine: [0.61, 1, 0.88, 1],\n easeInOutSine: [0.37, 0, 0.63, 1],\n easeInQuad: [0.11, 0, 0.5, 0],\n easeOutQuad: [0.5, 1, 0.89, 1],\n easeInOutQuad: [0.45, 0, 0.55, 1],\n easeInCubic: [0.32, 0, 0.67, 0],\n easeOutCubic: [0.33, 1, 0.68, 1],\n easeInOutCubic: [0.65, 0, 0.35, 1],\n easeInQuart: [0.5, 0, 0.75, 0],\n easeOutQuart: [0.25, 1, 0.5, 1],\n easeInOutQuart: [0.76, 0, 0.24, 1],\n easeInQuint: [0.64, 0, 0.78, 0],\n easeOutQuint: [0.22, 1, 0.36, 1],\n easeInOutQuint: [0.83, 0, 0.17, 1],\n easeInExpo: [0.7, 0, 0.84, 0],\n easeOutExpo: [0.16, 1, 0.3, 1],\n easeInOutExpo: [0.87, 0, 0.13, 1],\n easeInCirc: [0.55, 0, 1, 0.45],\n easeOutCirc: [0, 0.55, 0.45, 1],\n easeInOutCirc: [0.85, 0, 0.15, 1],\n easeInBack: [0.36, 0, 0.66, -0.56],\n easeOutBack: [0.34, 1.56, 0.64, 1],\n easeInOutBack: [0.68, -0.6, 0.32, 1.6]\n};\nconst TransitionPresets = /* @__PURE__ */ Object.assign({}, { linear: identity }, _TransitionPresets);\nfunction createEasingFunction([p0, p1, p2, p3]) {\n const a = (a1, a2) => 1 - 3 * a2 + 3 * a1;\n const b = (a1, a2) => 3 * a2 - 6 * a1;\n const c = (a1) => 3 * a1;\n const calcBezier = (t, a1, a2) => ((a(a1, a2) * t + b(a1, a2)) * t + c(a1)) * t;\n const getSlope = (t, a1, a2) => 3 * a(a1, a2) * t * t + 2 * b(a1, a2) * t + c(a1);\n const getTforX = (x) => {\n let aGuessT = x;\n for (let i = 0; i < 4; ++i) {\n const currentSlope = getSlope(aGuessT, p0, p2);\n if (currentSlope === 0)\n return aGuessT;\n const currentX = calcBezier(aGuessT, p0, p2) - x;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n };\n return (x) => p0 === p1 && p2 === p3 ? x : calcBezier(getTforX(x), p1, p3);\n}\nfunction lerp(a, b, alpha) {\n return a + alpha * (b - a);\n}\nfunction toVec(t) {\n return (typeof t === \"number\" ? [t] : t) || [];\n}\nfunction executeTransition(source, from, to, options = {}) {\n var _a, _b;\n const fromVal = toValue(from);\n const toVal = toValue(to);\n const v1 = toVec(fromVal);\n const v2 = toVec(toVal);\n const duration = (_a = toValue(options.duration)) != null ? _a : 1e3;\n const startedAt = Date.now();\n const endAt = Date.now() + duration;\n const trans = typeof options.transition === \"function\" ? options.transition : (_b = toValue(options.transition)) != null ? _b : identity;\n const ease = typeof trans === \"function\" ? trans : createEasingFunction(trans);\n return new Promise((resolve) => {\n source.value = fromVal;\n const tick = () => {\n var _a2;\n if ((_a2 = options.abort) == null ? void 0 : _a2.call(options)) {\n resolve();\n return;\n }\n const now = Date.now();\n const alpha = ease((now - startedAt) / duration);\n const arr = toVec(source.value).map((n, i) => lerp(v1[i], v2[i], alpha));\n if (Array.isArray(source.value))\n source.value = arr.map((n, i) => {\n var _a3, _b2;\n return lerp((_a3 = v1[i]) != null ? _a3 : 0, (_b2 = v2[i]) != null ? _b2 : 0, alpha);\n });\n else if (typeof source.value === \"number\")\n source.value = arr[0];\n if (now < endAt) {\n requestAnimationFrame(tick);\n } else {\n source.value = toVal;\n resolve();\n }\n };\n tick();\n });\n}\nfunction useTransition(source, options = {}) {\n let currentId = 0;\n const sourceVal = () => {\n const v = toValue(source);\n return typeof v === \"number\" ? v : v.map(toValue);\n };\n const outputRef = ref(sourceVal());\n watch(sourceVal, async (to) => {\n var _a, _b;\n if (toValue(options.disabled))\n return;\n const id = ++currentId;\n if (options.delay)\n await promiseTimeout(toValue(options.delay));\n if (id !== currentId)\n return;\n const toVal = Array.isArray(to) ? to.map(toValue) : toValue(to);\n (_a = options.onStarted) == null ? void 0 : _a.call(options);\n await executeTransition(outputRef, outputRef.value, toVal, {\n ...options,\n abort: () => {\n var _a2;\n return id !== currentId || ((_a2 = options.abort) == null ? void 0 : _a2.call(options));\n }\n });\n (_b = options.onFinished) == null ? void 0 : _b.call(options);\n }, { deep: true });\n watch(() => toValue(options.disabled), (disabled) => {\n if (disabled) {\n currentId++;\n outputRef.value = sourceVal();\n }\n });\n tryOnScopeDispose(() => {\n currentId++;\n });\n return computed(() => toValue(options.disabled) ? sourceVal() : outputRef.value);\n}\n\nfunction useUrlSearchParams(mode = \"history\", options = {}) {\n const {\n initialValue = {},\n removeNullishValues = true,\n removeFalsyValues = false,\n write: enableWrite = true,\n writeMode = \"replace\",\n window = defaultWindow\n } = options;\n if (!window)\n return reactive(initialValue);\n const state = reactive({});\n function getRawParams() {\n if (mode === \"history\") {\n return window.location.search || \"\";\n } else if (mode === \"hash\") {\n const hash = window.location.hash || \"\";\n const index = hash.indexOf(\"?\");\n return index > 0 ? hash.slice(index) : \"\";\n } else {\n return (window.location.hash || \"\").replace(/^#/, \"\");\n }\n }\n function constructQuery(params) {\n const stringified = params.toString();\n if (mode === \"history\")\n return `${stringified ? `?${stringified}` : \"\"}${window.location.hash || \"\"}`;\n if (mode === \"hash-params\")\n return `${window.location.search || \"\"}${stringified ? `#${stringified}` : \"\"}`;\n const hash = window.location.hash || \"#\";\n const index = hash.indexOf(\"?\");\n if (index > 0)\n return `${window.location.search || \"\"}${hash.slice(0, index)}${stringified ? `?${stringified}` : \"\"}`;\n return `${window.location.search || \"\"}${hash}${stringified ? `?${stringified}` : \"\"}`;\n }\n function read() {\n return new URLSearchParams(getRawParams());\n }\n function updateState(params) {\n const unusedKeys = new Set(Object.keys(state));\n for (const key of params.keys()) {\n const paramsForKey = params.getAll(key);\n state[key] = paramsForKey.length > 1 ? paramsForKey : params.get(key) || \"\";\n unusedKeys.delete(key);\n }\n Array.from(unusedKeys).forEach((key) => delete state[key]);\n }\n const { pause, resume } = pausableWatch(\n state,\n () => {\n const params = new URLSearchParams(\"\");\n Object.keys(state).forEach((key) => {\n const mapEntry = state[key];\n if (Array.isArray(mapEntry))\n mapEntry.forEach((value) => params.append(key, value));\n else if (removeNullishValues && mapEntry == null)\n params.delete(key);\n else if (removeFalsyValues && !mapEntry)\n params.delete(key);\n else\n params.set(key, mapEntry);\n });\n write(params, false);\n },\n { deep: true }\n );\n function write(params, shouldUpdate) {\n pause();\n if (shouldUpdate)\n updateState(params);\n if (writeMode === \"replace\") {\n window.history.replaceState(\n window.history.state,\n window.document.title,\n window.location.pathname + constructQuery(params)\n );\n } else {\n window.history.pushState(\n window.history.state,\n window.document.title,\n window.location.pathname + constructQuery(params)\n );\n }\n resume();\n }\n function onChanged() {\n if (!enableWrite)\n return;\n write(read(), true);\n }\n const listenerOptions = { passive: true };\n useEventListener(window, \"popstate\", onChanged, listenerOptions);\n if (mode !== \"history\")\n useEventListener(window, \"hashchange\", onChanged, listenerOptions);\n const initial = read();\n if (initial.keys().next().value)\n updateState(initial);\n else\n Object.assign(state, initialValue);\n return state;\n}\n\nfunction useUserMedia(options = {}) {\n var _a, _b;\n const enabled = shallowRef((_a = options.enabled) != null ? _a : false);\n const autoSwitch = shallowRef((_b = options.autoSwitch) != null ? _b : true);\n const constraints = ref(options.constraints);\n const { navigator = defaultNavigator } = options;\n const isSupported = useSupported(() => {\n var _a2;\n return (_a2 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a2.getUserMedia;\n });\n const stream = shallowRef();\n function getDeviceOptions(type) {\n switch (type) {\n case \"video\": {\n if (constraints.value)\n return constraints.value.video || false;\n break;\n }\n case \"audio\": {\n if (constraints.value)\n return constraints.value.audio || false;\n break;\n }\n }\n }\n async function _start() {\n if (!isSupported.value || stream.value)\n return;\n stream.value = await navigator.mediaDevices.getUserMedia({\n video: getDeviceOptions(\"video\"),\n audio: getDeviceOptions(\"audio\")\n });\n return stream.value;\n }\n function _stop() {\n var _a2;\n (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop());\n stream.value = void 0;\n }\n function stop() {\n _stop();\n enabled.value = false;\n }\n async function start() {\n await _start();\n if (stream.value)\n enabled.value = true;\n return stream.value;\n }\n async function restart() {\n _stop();\n return await start();\n }\n watch(\n enabled,\n (v) => {\n if (v)\n _start();\n else _stop();\n },\n { immediate: true }\n );\n watch(\n constraints,\n () => {\n if (autoSwitch.value && stream.value)\n restart();\n },\n { immediate: true }\n );\n tryOnScopeDispose(() => {\n stop();\n });\n return {\n isSupported,\n stream,\n start,\n stop,\n restart,\n constraints,\n enabled,\n autoSwitch\n };\n}\n\nfunction useVModel(props, key, emit, options = {}) {\n var _a, _b, _c;\n const {\n clone = false,\n passive = false,\n eventName,\n deep = false,\n defaultValue,\n shouldEmit\n } = options;\n const vm = getCurrentInstance();\n const _emit = emit || (vm == null ? void 0 : vm.emit) || ((_a = vm == null ? void 0 : vm.$emit) == null ? void 0 : _a.bind(vm)) || ((_c = (_b = vm == null ? void 0 : vm.proxy) == null ? void 0 : _b.$emit) == null ? void 0 : _c.bind(vm == null ? void 0 : vm.proxy));\n let event = eventName;\n if (!key) {\n key = \"modelValue\";\n }\n event = event || `update:${key.toString()}`;\n const cloneFn = (val) => !clone ? val : typeof clone === \"function\" ? clone(val) : cloneFnJSON(val);\n const getValue = () => isDef(props[key]) ? cloneFn(props[key]) : defaultValue;\n const triggerEmit = (value) => {\n if (shouldEmit) {\n if (shouldEmit(value))\n _emit(event, value);\n } else {\n _emit(event, value);\n }\n };\n if (passive) {\n const initialValue = getValue();\n const proxy = ref(initialValue);\n let isUpdating = false;\n watch(\n () => props[key],\n (v) => {\n if (!isUpdating) {\n isUpdating = true;\n proxy.value = cloneFn(v);\n nextTick(() => isUpdating = false);\n }\n }\n );\n watch(\n proxy,\n (v) => {\n if (!isUpdating && (v !== props[key] || deep))\n triggerEmit(v);\n },\n { deep }\n );\n return proxy;\n } else {\n return computed({\n get() {\n return getValue();\n },\n set(value) {\n triggerEmit(value);\n }\n });\n }\n}\n\nfunction useVModels(props, emit, options = {}) {\n const ret = {};\n for (const key in props) {\n ret[key] = useVModel(\n props,\n key,\n emit,\n options\n );\n }\n return ret;\n}\n\nfunction useVibrate(options) {\n const {\n pattern = [],\n interval = 0,\n navigator = defaultNavigator\n } = options || {};\n const isSupported = useSupported(() => typeof navigator !== \"undefined\" && \"vibrate\" in navigator);\n const patternRef = toRef(pattern);\n let intervalControls;\n const vibrate = (pattern2 = patternRef.value) => {\n if (isSupported.value)\n navigator.vibrate(pattern2);\n };\n const stop = () => {\n if (isSupported.value)\n navigator.vibrate(0);\n intervalControls == null ? void 0 : intervalControls.pause();\n };\n if (interval > 0) {\n intervalControls = useIntervalFn(\n vibrate,\n interval,\n {\n immediate: false,\n immediateCallback: false\n }\n );\n }\n return {\n isSupported,\n pattern,\n intervalControls,\n vibrate,\n stop\n };\n}\n\nfunction useVirtualList(list, options) {\n const { containerStyle, wrapperProps, scrollTo, calculateRange, currentList, containerRef } = \"itemHeight\" in options ? useVerticalVirtualList(options, list) : useHorizontalVirtualList(options, list);\n return {\n list: currentList,\n scrollTo,\n containerProps: {\n ref: containerRef,\n onScroll: () => {\n calculateRange();\n },\n style: containerStyle\n },\n wrapperProps\n };\n}\nfunction useVirtualListResources(list) {\n const containerRef = shallowRef(null);\n const size = useElementSize(containerRef);\n const currentList = ref([]);\n const source = shallowRef(list);\n const state = ref({ start: 0, end: 10 });\n return { state, source, currentList, size, containerRef };\n}\nfunction createGetViewCapacity(state, source, itemSize) {\n return (containerSize) => {\n if (typeof itemSize === \"number\")\n return Math.ceil(containerSize / itemSize);\n const { start = 0 } = state.value;\n let sum = 0;\n let capacity = 0;\n for (let i = start; i < source.value.length; i++) {\n const size = itemSize(i);\n sum += size;\n capacity = i;\n if (sum > containerSize)\n break;\n }\n return capacity - start;\n };\n}\nfunction createGetOffset(source, itemSize) {\n return (scrollDirection) => {\n if (typeof itemSize === \"number\")\n return Math.floor(scrollDirection / itemSize) + 1;\n let sum = 0;\n let offset = 0;\n for (let i = 0; i < source.value.length; i++) {\n const size = itemSize(i);\n sum += size;\n if (sum >= scrollDirection) {\n offset = i;\n break;\n }\n }\n return offset + 1;\n };\n}\nfunction createCalculateRange(type, overscan, getOffset, getViewCapacity, { containerRef, state, currentList, source }) {\n return () => {\n const element = containerRef.value;\n if (element) {\n const offset = getOffset(type === \"vertical\" ? element.scrollTop : element.scrollLeft);\n const viewCapacity = getViewCapacity(type === \"vertical\" ? element.clientHeight : element.clientWidth);\n const from = offset - overscan;\n const to = offset + viewCapacity + overscan;\n state.value = {\n start: from < 0 ? 0 : from,\n end: to > source.value.length ? source.value.length : to\n };\n currentList.value = source.value.slice(state.value.start, state.value.end).map((ele, index) => ({\n data: ele,\n index: index + state.value.start\n }));\n }\n };\n}\nfunction createGetDistance(itemSize, source) {\n return (index) => {\n if (typeof itemSize === \"number\") {\n const size2 = index * itemSize;\n return size2;\n }\n const size = source.value.slice(0, index).reduce((sum, _, i) => sum + itemSize(i), 0);\n return size;\n };\n}\nfunction useWatchForSizes(size, list, containerRef, calculateRange) {\n watch([size.width, size.height, list, containerRef], () => {\n calculateRange();\n });\n}\nfunction createComputedTotalSize(itemSize, source) {\n return computed(() => {\n if (typeof itemSize === \"number\")\n return source.value.length * itemSize;\n return source.value.reduce((sum, _, index) => sum + itemSize(index), 0);\n });\n}\nconst scrollToDictionaryForElementScrollKey = {\n horizontal: \"scrollLeft\",\n vertical: \"scrollTop\"\n};\nfunction createScrollTo(type, calculateRange, getDistance, containerRef) {\n return (index) => {\n if (containerRef.value) {\n containerRef.value[scrollToDictionaryForElementScrollKey[type]] = getDistance(index);\n calculateRange();\n }\n };\n}\nfunction useHorizontalVirtualList(options, list) {\n const resources = useVirtualListResources(list);\n const { state, source, currentList, size, containerRef } = resources;\n const containerStyle = { overflowX: \"auto\" };\n const { itemWidth, overscan = 5 } = options;\n const getViewCapacity = createGetViewCapacity(state, source, itemWidth);\n const getOffset = createGetOffset(source, itemWidth);\n const calculateRange = createCalculateRange(\"horizontal\", overscan, getOffset, getViewCapacity, resources);\n const getDistanceLeft = createGetDistance(itemWidth, source);\n const offsetLeft = computed(() => getDistanceLeft(state.value.start));\n const totalWidth = createComputedTotalSize(itemWidth, source);\n useWatchForSizes(size, list, containerRef, calculateRange);\n const scrollTo = createScrollTo(\"horizontal\", calculateRange, getDistanceLeft, containerRef);\n const wrapperProps = computed(() => {\n return {\n style: {\n height: \"100%\",\n width: `${totalWidth.value - offsetLeft.value}px`,\n marginLeft: `${offsetLeft.value}px`,\n display: \"flex\"\n }\n };\n });\n return {\n scrollTo,\n calculateRange,\n wrapperProps,\n containerStyle,\n currentList,\n containerRef\n };\n}\nfunction useVerticalVirtualList(options, list) {\n const resources = useVirtualListResources(list);\n const { state, source, currentList, size, containerRef } = resources;\n const containerStyle = { overflowY: \"auto\" };\n const { itemHeight, overscan = 5 } = options;\n const getViewCapacity = createGetViewCapacity(state, source, itemHeight);\n const getOffset = createGetOffset(source, itemHeight);\n const calculateRange = createCalculateRange(\"vertical\", overscan, getOffset, getViewCapacity, resources);\n const getDistanceTop = createGetDistance(itemHeight, source);\n const offsetTop = computed(() => getDistanceTop(state.value.start));\n const totalHeight = createComputedTotalSize(itemHeight, source);\n useWatchForSizes(size, list, containerRef, calculateRange);\n const scrollTo = createScrollTo(\"vertical\", calculateRange, getDistanceTop, containerRef);\n const wrapperProps = computed(() => {\n return {\n style: {\n width: \"100%\",\n height: `${totalHeight.value - offsetTop.value}px`,\n marginTop: `${offsetTop.value}px`\n }\n };\n });\n return {\n calculateRange,\n scrollTo,\n containerStyle,\n wrapperProps,\n currentList,\n containerRef\n };\n}\n\nfunction useWakeLock(options = {}) {\n const {\n navigator = defaultNavigator,\n document = defaultDocument\n } = options;\n const requestedType = shallowRef(false);\n const sentinel = shallowRef(null);\n const documentVisibility = useDocumentVisibility({ document });\n const isSupported = useSupported(() => navigator && \"wakeLock\" in navigator);\n const isActive = computed(() => !!sentinel.value && documentVisibility.value === \"visible\");\n if (isSupported.value) {\n useEventListener(sentinel, \"release\", () => {\n var _a, _b;\n requestedType.value = (_b = (_a = sentinel.value) == null ? void 0 : _a.type) != null ? _b : false;\n }, { passive: true });\n whenever(\n () => documentVisibility.value === \"visible\" && (document == null ? void 0 : document.visibilityState) === \"visible\" && requestedType.value,\n (type) => {\n requestedType.value = false;\n forceRequest(type);\n }\n );\n }\n async function forceRequest(type) {\n var _a;\n await ((_a = sentinel.value) == null ? void 0 : _a.release());\n sentinel.value = isSupported.value ? await navigator.wakeLock.request(type) : null;\n }\n async function request(type) {\n if (documentVisibility.value === \"visible\")\n await forceRequest(type);\n else\n requestedType.value = type;\n }\n async function release() {\n requestedType.value = false;\n const s = sentinel.value;\n sentinel.value = null;\n await (s == null ? void 0 : s.release());\n }\n return {\n sentinel,\n isSupported,\n isActive,\n request,\n forceRequest,\n release\n };\n}\n\nfunction useWebNotification(options = {}) {\n const {\n window = defaultWindow,\n requestPermissions: _requestForPermissions = true\n } = options;\n const defaultWebNotificationOptions = options;\n const isSupported = useSupported(() => {\n if (!window || !(\"Notification\" in window))\n return false;\n if (Notification.permission === \"granted\")\n return true;\n try {\n const notification2 = new Notification(\"\");\n notification2.onshow = () => {\n notification2.close();\n };\n } catch (e) {\n if (e.name === \"TypeError\")\n return false;\n }\n return true;\n });\n const permissionGranted = shallowRef(isSupported.value && \"permission\" in Notification && Notification.permission === \"granted\");\n const notification = ref(null);\n const ensurePermissions = async () => {\n if (!isSupported.value)\n return;\n if (!permissionGranted.value && Notification.permission !== \"denied\") {\n const result = await Notification.requestPermission();\n if (result === \"granted\")\n permissionGranted.value = true;\n }\n return permissionGranted.value;\n };\n const { on: onClick, trigger: clickTrigger } = createEventHook();\n const { on: onShow, trigger: showTrigger } = createEventHook();\n const { on: onError, trigger: errorTrigger } = createEventHook();\n const { on: onClose, trigger: closeTrigger } = createEventHook();\n const show = async (overrides) => {\n if (!isSupported.value || !permissionGranted.value)\n return;\n const options2 = Object.assign({}, defaultWebNotificationOptions, overrides);\n notification.value = new Notification(options2.title || \"\", options2);\n notification.value.onclick = clickTrigger;\n notification.value.onshow = showTrigger;\n notification.value.onerror = errorTrigger;\n notification.value.onclose = closeTrigger;\n return notification.value;\n };\n const close = () => {\n if (notification.value)\n notification.value.close();\n notification.value = null;\n };\n if (_requestForPermissions)\n tryOnMounted(ensurePermissions);\n tryOnScopeDispose(close);\n if (isSupported.value && window) {\n const document = window.document;\n useEventListener(document, \"visibilitychange\", (e) => {\n e.preventDefault();\n if (document.visibilityState === \"visible\") {\n close();\n }\n });\n }\n return {\n isSupported,\n notification,\n ensurePermissions,\n permissionGranted,\n show,\n close,\n onClick,\n onShow,\n onError,\n onClose\n };\n}\n\nconst DEFAULT_PING_MESSAGE = \"ping\";\nfunction resolveNestedOptions(options) {\n if (options === true)\n return {};\n return options;\n}\nfunction useWebSocket(url, options = {}) {\n const {\n onConnected,\n onDisconnected,\n onError,\n onMessage,\n immediate = true,\n autoConnect = true,\n autoClose = true,\n protocols = []\n } = options;\n const data = ref(null);\n const status = shallowRef(\"CLOSED\");\n const wsRef = ref();\n const urlRef = toRef(url);\n let heartbeatPause;\n let heartbeatResume;\n let explicitlyClosed = false;\n let retried = 0;\n let bufferedData = [];\n let retryTimeout;\n let pongTimeoutWait;\n const _sendBuffer = () => {\n if (bufferedData.length && wsRef.value && status.value === \"OPEN\") {\n for (const buffer of bufferedData)\n wsRef.value.send(buffer);\n bufferedData = [];\n }\n };\n const resetRetry = () => {\n if (retryTimeout != null) {\n clearTimeout(retryTimeout);\n retryTimeout = void 0;\n }\n };\n const resetHeartbeat = () => {\n clearTimeout(pongTimeoutWait);\n pongTimeoutWait = void 0;\n };\n const close = (code = 1e3, reason) => {\n resetRetry();\n if (!isClient && !isWorker || !wsRef.value)\n return;\n explicitlyClosed = true;\n resetHeartbeat();\n heartbeatPause == null ? void 0 : heartbeatPause();\n wsRef.value.close(code, reason);\n wsRef.value = void 0;\n };\n const send = (data2, useBuffer = true) => {\n if (!wsRef.value || status.value !== \"OPEN\") {\n if (useBuffer)\n bufferedData.push(data2);\n return false;\n }\n _sendBuffer();\n wsRef.value.send(data2);\n return true;\n };\n const _init = () => {\n if (explicitlyClosed || typeof urlRef.value === \"undefined\")\n return;\n const ws = new WebSocket(urlRef.value, protocols);\n wsRef.value = ws;\n status.value = \"CONNECTING\";\n ws.onopen = () => {\n status.value = \"OPEN\";\n retried = 0;\n onConnected == null ? void 0 : onConnected(ws);\n heartbeatResume == null ? void 0 : heartbeatResume();\n _sendBuffer();\n };\n ws.onclose = (ev) => {\n status.value = \"CLOSED\";\n resetHeartbeat();\n heartbeatPause == null ? void 0 : heartbeatPause();\n onDisconnected == null ? void 0 : onDisconnected(ws, ev);\n if (!explicitlyClosed && options.autoReconnect && (wsRef.value == null || ws === wsRef.value)) {\n const {\n retries = -1,\n delay = 1e3,\n onFailed\n } = resolveNestedOptions(options.autoReconnect);\n const checkRetires = typeof retries === \"function\" ? retries : () => typeof retries === \"number\" && (retries < 0 || retried < retries);\n if (checkRetires(retried)) {\n retried += 1;\n retryTimeout = setTimeout(_init, delay);\n } else {\n onFailed == null ? void 0 : onFailed();\n }\n }\n };\n ws.onerror = (e) => {\n onError == null ? void 0 : onError(ws, e);\n };\n ws.onmessage = (e) => {\n if (options.heartbeat) {\n resetHeartbeat();\n const {\n message = DEFAULT_PING_MESSAGE,\n responseMessage = message\n } = resolveNestedOptions(options.heartbeat);\n if (e.data === toValue(responseMessage))\n return;\n }\n data.value = e.data;\n onMessage == null ? void 0 : onMessage(ws, e);\n };\n };\n if (options.heartbeat) {\n const {\n message = DEFAULT_PING_MESSAGE,\n interval = 1e3,\n pongTimeout = 1e3\n } = resolveNestedOptions(options.heartbeat);\n const { pause, resume } = useIntervalFn(\n () => {\n send(toValue(message), false);\n if (pongTimeoutWait != null)\n return;\n pongTimeoutWait = setTimeout(() => {\n close();\n explicitlyClosed = false;\n }, pongTimeout);\n },\n interval,\n { immediate: false }\n );\n heartbeatPause = pause;\n heartbeatResume = resume;\n }\n if (autoClose) {\n if (isClient)\n useEventListener(\"beforeunload\", () => close(), { passive: true });\n tryOnScopeDispose(close);\n }\n const open = () => {\n if (!isClient && !isWorker)\n return;\n close();\n explicitlyClosed = false;\n retried = 0;\n _init();\n };\n if (immediate)\n open();\n if (autoConnect)\n watch(urlRef, open);\n return {\n data,\n status,\n close,\n send,\n open,\n ws: wsRef\n };\n}\n\nfunction useWebWorker(arg0, workerOptions, options) {\n const {\n window = defaultWindow\n } = options != null ? options : {};\n const data = ref(null);\n const worker = shallowRef();\n const post = (...args) => {\n if (!worker.value)\n return;\n worker.value.postMessage(...args);\n };\n const terminate = function terminate2() {\n if (!worker.value)\n return;\n worker.value.terminate();\n };\n if (window) {\n if (typeof arg0 === \"string\")\n worker.value = new Worker(arg0, workerOptions);\n else if (typeof arg0 === \"function\")\n worker.value = arg0();\n else\n worker.value = arg0;\n worker.value.onmessage = (e) => {\n data.value = e.data;\n };\n tryOnScopeDispose(() => {\n if (worker.value)\n worker.value.terminate();\n });\n }\n return {\n data,\n post,\n terminate,\n worker\n };\n}\n\nfunction depsParser(deps, localDeps) {\n if (deps.length === 0 && localDeps.length === 0)\n return \"\";\n const depsString = deps.map((dep) => `'${dep}'`).toString();\n const depsFunctionString = localDeps.filter((dep) => typeof dep === \"function\").map((fn) => {\n const str = fn.toString();\n if (str.trim().startsWith(\"function\")) {\n return str;\n } else {\n const name = fn.name;\n return `const ${name} = ${str}`;\n }\n }).join(\";\");\n const importString = `importScripts(${depsString});`;\n return `${depsString.trim() === \"\" ? \"\" : importString} ${depsFunctionString}`;\n}\n\nfunction jobRunner(userFunc) {\n return (e) => {\n const userFuncArgs = e.data[0];\n return Promise.resolve(userFunc.apply(void 0, userFuncArgs)).then((result) => {\n postMessage([\"SUCCESS\", result]);\n }).catch((error) => {\n postMessage([\"ERROR\", error]);\n });\n };\n}\n\nfunction createWorkerBlobUrl(fn, deps, localDeps) {\n const blobCode = `${depsParser(deps, localDeps)}; onmessage=(${jobRunner})(${fn})`;\n const blob = new Blob([blobCode], { type: \"text/javascript\" });\n const url = URL.createObjectURL(blob);\n return url;\n}\n\nfunction useWebWorkerFn(fn, options = {}) {\n const {\n dependencies = [],\n localDependencies = [],\n timeout,\n window = defaultWindow\n } = options;\n const worker = ref();\n const workerStatus = shallowRef(\"PENDING\");\n const promise = ref({});\n const timeoutId = shallowRef();\n const workerTerminate = (status = \"PENDING\") => {\n if (worker.value && worker.value._url && window) {\n worker.value.terminate();\n URL.revokeObjectURL(worker.value._url);\n promise.value = {};\n worker.value = void 0;\n window.clearTimeout(timeoutId.value);\n workerStatus.value = status;\n }\n };\n workerTerminate();\n tryOnScopeDispose(workerTerminate);\n const generateWorker = () => {\n const blobUrl = createWorkerBlobUrl(fn, dependencies, localDependencies);\n const newWorker = new Worker(blobUrl);\n newWorker._url = blobUrl;\n newWorker.onmessage = (e) => {\n const { resolve = () => {\n }, reject = () => {\n } } = promise.value;\n const [status, result] = e.data;\n switch (status) {\n case \"SUCCESS\":\n resolve(result);\n workerTerminate(status);\n break;\n default:\n reject(result);\n workerTerminate(\"ERROR\");\n break;\n }\n };\n newWorker.onerror = (e) => {\n const { reject = () => {\n } } = promise.value;\n e.preventDefault();\n reject(e);\n workerTerminate(\"ERROR\");\n };\n if (timeout) {\n timeoutId.value = setTimeout(\n () => workerTerminate(\"TIMEOUT_EXPIRED\"),\n timeout\n );\n }\n return newWorker;\n };\n const callWorker = (...fnArgs) => new Promise((resolve, reject) => {\n var _a;\n promise.value = {\n resolve,\n reject\n };\n (_a = worker.value) == null ? void 0 : _a.postMessage([[...fnArgs]]);\n workerStatus.value = \"RUNNING\";\n });\n const workerFn = (...fnArgs) => {\n if (workerStatus.value === \"RUNNING\") {\n console.error(\n \"[useWebWorkerFn] You can only run one instance of the worker at a time.\"\n );\n return Promise.reject();\n }\n worker.value = generateWorker();\n return callWorker(...fnArgs);\n };\n return {\n workerFn,\n workerStatus,\n workerTerminate\n };\n}\n\nfunction useWindowFocus(options = {}) {\n const { window = defaultWindow } = options;\n if (!window)\n return shallowRef(false);\n const focused = shallowRef(window.document.hasFocus());\n const listenerOptions = { passive: true };\n useEventListener(window, \"blur\", () => {\n focused.value = false;\n }, listenerOptions);\n useEventListener(window, \"focus\", () => {\n focused.value = true;\n }, listenerOptions);\n return focused;\n}\n\nfunction useWindowScroll(options = {}) {\n const { window = defaultWindow, ...rest } = options;\n return useScroll(window, rest);\n}\n\nfunction useWindowSize(options = {}) {\n const {\n window = defaultWindow,\n initialWidth = Number.POSITIVE_INFINITY,\n initialHeight = Number.POSITIVE_INFINITY,\n listenOrientation = true,\n includeScrollbar = true,\n type = \"inner\"\n } = options;\n const width = shallowRef(initialWidth);\n const height = shallowRef(initialHeight);\n const update = () => {\n if (window) {\n if (type === \"outer\") {\n width.value = window.outerWidth;\n height.value = window.outerHeight;\n } else if (type === \"visual\" && window.visualViewport) {\n const { width: visualViewportWidth, height: visualViewportHeight, scale } = window.visualViewport;\n width.value = Math.round(visualViewportWidth * scale);\n height.value = Math.round(visualViewportHeight * scale);\n } else if (includeScrollbar) {\n width.value = window.innerWidth;\n height.value = window.innerHeight;\n } else {\n width.value = window.document.documentElement.clientWidth;\n height.value = window.document.documentElement.clientHeight;\n }\n }\n };\n update();\n tryOnMounted(update);\n const listenerOptions = { passive: true };\n useEventListener(\"resize\", update, listenerOptions);\n if (window && type === \"visual\" && window.visualViewport) {\n useEventListener(window.visualViewport, \"resize\", update, listenerOptions);\n }\n if (listenOrientation) {\n const matches = useMediaQuery(\"(orientation: portrait)\");\n watch(matches, () => update());\n }\n return { width, height };\n}\n\nexport { DefaultMagicKeysAliasMap, StorageSerializers, TransitionPresets, computedAsync as asyncComputed, breakpointsAntDesign, breakpointsBootstrapV5, breakpointsElement, breakpointsMasterCss, breakpointsPrimeFlex, breakpointsQuasar, breakpointsSematic, breakpointsTailwind, breakpointsVuetify, breakpointsVuetifyV2, breakpointsVuetifyV3, cloneFnJSON, computedAsync, computedInject, createFetch, createReusableTemplate, createTemplatePromise, createUnrefFn, customStorageEventName, defaultDocument, defaultLocation, defaultNavigator, defaultWindow, executeTransition, formatTimeAgo, getSSRHandler, mapGamepadToXbox360Controller, onClickOutside, onElementRemoval, onKeyDown, onKeyPressed, onKeyStroke, onKeyUp, onLongPress, onStartTyping, provideSSRWidth, setSSRHandler, templateRef, unrefElement, useActiveElement, useAnimate, useAsyncQueue, useAsyncState, useBase64, useBattery, useBluetooth, useBreakpoints, useBroadcastChannel, useBrowserLocation, useCached, useClipboard, useClipboardItems, useCloned, useColorMode, useConfirmDialog, useCountdown, useCssVar, useCurrentElement, useCycleList, useDark, useDebouncedRefHistory, useDeviceMotion, useDeviceOrientation, useDevicePixelRatio, useDevicesList, useDisplayMedia, useDocumentVisibility, useDraggable, useDropZone, useElementBounding, useElementByPoint, useElementHover, useElementSize, useElementVisibility, useEventBus, useEventListener, useEventSource, useEyeDropper, useFavicon, useFetch, useFileDialog, useFileSystemAccess, useFocus, useFocusWithin, useFps, useFullscreen, useGamepad, useGeolocation, useIdle, useImage, useInfiniteScroll, useIntersectionObserver, useKeyModifier, useLocalStorage, useMagicKeys, useManualRefHistory, useMediaControls, useMediaQuery, useMemoize, useMemory, useMounted, useMouse, useMouseInElement, useMousePressed, useMutationObserver, useNavigatorLanguage, useNetwork, useNow, useObjectUrl, useOffsetPagination, useOnline, usePageLeave, useParallax, useParentElement, usePerformanceObserver, usePermission, usePointer, usePointerLock, usePointerSwipe, usePreferredColorScheme, usePreferredContrast, usePreferredDark, usePreferredLanguages, usePreferredReducedMotion, usePreferredReducedTransparency, usePrevious, useRafFn, useRefHistory, useResizeObserver, useSSRWidth, useScreenOrientation, useScreenSafeArea, useScriptTag, useScroll, useScrollLock, useSessionStorage, useShare, useSorted, useSpeechRecognition, useSpeechSynthesis, useStepper, useStorage, useStorageAsync, useStyleTag, useSupported, useSwipe, useTemplateRefsList, useTextDirection, useTextSelection, useTextareaAutosize, useThrottledRefHistory, useTimeAgo, useTimeoutPoll, useTimestamp, useTitle, useTransition, useUrlSearchParams, useUserMedia, useVModel, useVModels, useVibrate, useVirtualList, useWakeLock, useWebNotification, useWebSocket, useWebWorker, useWebWorkerFn, useWindowFocus, useWindowScroll, useWindowSize };\n"], - "mappings": "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", - "names": ["get", "set", "ref", "keys", "invoke", "toRef", "toRefs", "toValue", "window", "document", "timestamp", "navigator", "events", "getValue", "ref", "defaults", "toRef", "set", "onUpdated", "preventDefault", "toRefs", "now", "keys", "get", "isReadonly"] -} diff --git a/packages/documentation/docs/.vitepress/cache/deps/chunk-QAXAIFA7.js b/packages/documentation/docs/.vitepress/cache/deps/chunk-QAXAIFA7.js deleted file mode 100644 index 9080b88525..0000000000 --- a/packages/documentation/docs/.vitepress/cache/deps/chunk-QAXAIFA7.js +++ /dev/null @@ -1,12705 +0,0 @@ -// node_modules/@vue/shared/dist/shared.esm-bundler.js -function makeMap(str) { - const map2 = /* @__PURE__ */ Object.create(null); - for (const key of str.split(",")) map2[key] = 1; - return (val) => val in map2; -} -var EMPTY_OBJ = true ? Object.freeze({}) : {}; -var EMPTY_ARR = true ? Object.freeze([]) : []; -var NOOP = () => { -}; -var NO = () => false; -var isOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // uppercase letter -(key.charCodeAt(2) > 122 || key.charCodeAt(2) < 97); -var isModelListener = (key) => key.startsWith("onUpdate:"); -var extend = Object.assign; -var remove = (arr, el) => { - const i = arr.indexOf(el); - if (i > -1) { - arr.splice(i, 1); - } -}; -var hasOwnProperty = Object.prototype.hasOwnProperty; -var hasOwn = (val, key) => hasOwnProperty.call(val, key); -var isArray = Array.isArray; -var isMap = (val) => toTypeString(val) === "[object Map]"; -var isSet = (val) => toTypeString(val) === "[object Set]"; -var isDate = (val) => toTypeString(val) === "[object Date]"; -var isRegExp = (val) => toTypeString(val) === "[object RegExp]"; -var isFunction = (val) => typeof val === "function"; -var isString = (val) => typeof val === "string"; -var isSymbol = (val) => typeof val === "symbol"; -var isObject = (val) => val !== null && typeof val === "object"; -var isPromise = (val) => { - return (isObject(val) || isFunction(val)) && isFunction(val.then) && isFunction(val.catch); -}; -var objectToString = Object.prototype.toString; -var toTypeString = (value) => objectToString.call(value); -var toRawType = (value) => { - return toTypeString(value).slice(8, -1); -}; -var isPlainObject = (val) => toTypeString(val) === "[object Object]"; -var isIntegerKey = (key) => isString(key) && key !== "NaN" && key[0] !== "-" && "" + parseInt(key, 10) === key; -var isReservedProp = makeMap( - // the leading comma is intentional so empty string "" is also included - ",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted" -); -var isBuiltInDirective = makeMap( - "bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo" -); -var cacheStringFunction = (fn) => { - const cache = /* @__PURE__ */ Object.create(null); - return (str) => { - const hit = cache[str]; - return hit || (cache[str] = fn(str)); - }; -}; -var camelizeRE = /-\w/g; -var camelize = cacheStringFunction( - (str) => { - return str.replace(camelizeRE, (c) => c.slice(1).toUpperCase()); - } -); -var hyphenateRE = /\B([A-Z])/g; -var hyphenate = cacheStringFunction( - (str) => str.replace(hyphenateRE, "-$1").toLowerCase() -); -var capitalize = cacheStringFunction((str) => { - return str.charAt(0).toUpperCase() + str.slice(1); -}); -var toHandlerKey = cacheStringFunction( - (str) => { - const s = str ? `on${capitalize(str)}` : ``; - return s; - } -); -var hasChanged = (value, oldValue) => !Object.is(value, oldValue); -var invokeArrayFns = (fns, ...arg) => { - for (let i = 0; i < fns.length; i++) { - fns[i](...arg); - } -}; -var def = (obj, key, value, writable = false) => { - Object.defineProperty(obj, key, { - configurable: true, - enumerable: false, - writable, - value - }); -}; -var looseToNumber = (val) => { - const n = parseFloat(val); - return isNaN(n) ? val : n; -}; -var toNumber = (val) => { - const n = isString(val) ? Number(val) : NaN; - return isNaN(n) ? val : n; -}; -var _globalThis; -var getGlobalThis = () => { - return _globalThis || (_globalThis = typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : {}); -}; -var GLOBALS_ALLOWED = "Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error,Symbol"; -var isGloballyAllowed = makeMap(GLOBALS_ALLOWED); -function normalizeStyle(value) { - if (isArray(value)) { - const res = {}; - for (let i = 0; i < value.length; i++) { - const item = value[i]; - const normalized = isString(item) ? parseStringStyle(item) : normalizeStyle(item); - if (normalized) { - for (const key in normalized) { - res[key] = normalized[key]; - } - } - } - return res; - } else if (isString(value) || isObject(value)) { - return value; - } -} -var listDelimiterRE = /;(?![^(]*\))/g; -var propertyDelimiterRE = /:([^]+)/; -var styleCommentRE = /\/\*[^]*?\*\//g; -function parseStringStyle(cssText) { - const ret = {}; - cssText.replace(styleCommentRE, "").split(listDelimiterRE).forEach((item) => { - if (item) { - const tmp = item.split(propertyDelimiterRE); - tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim()); - } - }); - return ret; -} -function stringifyStyle(styles) { - if (!styles) return ""; - if (isString(styles)) return styles; - let ret = ""; - for (const key in styles) { - const value = styles[key]; - if (isString(value) || typeof value === "number") { - const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key); - ret += `${normalizedKey}:${value};`; - } - } - return ret; -} -function normalizeClass(value) { - let res = ""; - if (isString(value)) { - res = value; - } else if (isArray(value)) { - for (let i = 0; i < value.length; i++) { - const normalized = normalizeClass(value[i]); - if (normalized) { - res += normalized + " "; - } - } - } else if (isObject(value)) { - for (const name in value) { - if (value[name]) { - res += name + " "; - } - } - } - return res.trim(); -} -function normalizeProps(props) { - if (!props) return null; - let { class: klass, style } = props; - if (klass && !isString(klass)) { - props.class = normalizeClass(klass); - } - if (style) { - props.style = normalizeStyle(style); - } - return props; -} -var HTML_TAGS = "html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot"; -var SVG_TAGS = "svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view"; -var MATH_TAGS = "annotation,annotation-xml,maction,maligngroup,malignmark,math,menclose,merror,mfenced,mfrac,mfraction,mglyph,mi,mlabeledtr,mlongdiv,mmultiscripts,mn,mo,mover,mpadded,mphantom,mprescripts,mroot,mrow,ms,mscarries,mscarry,msgroup,msline,mspace,msqrt,msrow,mstack,mstyle,msub,msubsup,msup,mtable,mtd,mtext,mtr,munder,munderover,none,semantics"; -var VOID_TAGS = "area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr"; -var isHTMLTag = makeMap(HTML_TAGS); -var isSVGTag = makeMap(SVG_TAGS); -var isMathMLTag = makeMap(MATH_TAGS); -var isVoidTag = makeMap(VOID_TAGS); -var specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`; -var isSpecialBooleanAttr = makeMap(specialBooleanAttrs); -var isBooleanAttr = makeMap( - specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected` -); -function includeBooleanAttr(value) { - return !!value || value === ""; -} -var isKnownHtmlAttr = makeMap( - `accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,inert,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap` -); -var isKnownSvgAttr = makeMap( - `xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,color-interpolation-filters,color-profile,color-rendering,contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,font-family,font-size,font-size-adjust,font-stretch,font-style,font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,overflow,overline-position,overline-thickness,panose-1,paint-order,path,pathLength,patternContentUnits,patternTransform,patternUnits,ping,pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,specularConstant,specularExponent,speed,spreadMethod,startOffset,stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,string,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,text-decoration,text-rendering,textLength,to,transform,transform-origin,type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xmlns:xlink,xml:base,xml:lang,xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan` -); -var isKnownMathMLAttr = makeMap( - `accent,accentunder,actiontype,align,alignmentscope,altimg,altimg-height,altimg-valign,altimg-width,alttext,bevelled,close,columnsalign,columnlines,columnspan,denomalign,depth,dir,display,displaystyle,encoding,equalcolumns,equalrows,fence,fontstyle,fontweight,form,frame,framespacing,groupalign,height,href,id,indentalign,indentalignfirst,indentalignlast,indentshift,indentshiftfirst,indentshiftlast,indextype,justify,largetop,largeop,lquote,lspace,mathbackground,mathcolor,mathsize,mathvariant,maxsize,minlabelspacing,mode,other,overflow,position,rowalign,rowlines,rowspan,rquote,rspace,scriptlevel,scriptminsize,scriptsizemultiplier,selection,separator,separators,shift,side,src,stackalign,stretchy,subscriptshift,superscriptshift,symmetric,voffset,width,widths,xlink:href,xlink:show,xlink:type,xmlns` -); -function isRenderableAttrValue(value) { - if (value == null) { - return false; - } - const type = typeof value; - return type === "string" || type === "number" || type === "boolean"; -} -var cssVarNameEscapeSymbolsRE = /[ !"#$%&'()*+,./:;<=>?@[\\\]^`{|}~]/g; -function getEscapedCssVarName(key, doubleEscape) { - return key.replace( - cssVarNameEscapeSymbolsRE, - (s) => doubleEscape ? s === '"' ? '\\\\\\"' : `\\\\${s}` : `\\${s}` - ); -} -function looseCompareArrays(a, b) { - if (a.length !== b.length) return false; - let equal = true; - for (let i = 0; equal && i < a.length; i++) { - equal = looseEqual(a[i], b[i]); - } - return equal; -} -function looseEqual(a, b) { - if (a === b) return true; - let aValidType = isDate(a); - let bValidType = isDate(b); - if (aValidType || bValidType) { - return aValidType && bValidType ? a.getTime() === b.getTime() : false; - } - aValidType = isSymbol(a); - bValidType = isSymbol(b); - if (aValidType || bValidType) { - return a === b; - } - aValidType = isArray(a); - bValidType = isArray(b); - if (aValidType || bValidType) { - return aValidType && bValidType ? looseCompareArrays(a, b) : false; - } - aValidType = isObject(a); - bValidType = isObject(b); - if (aValidType || bValidType) { - if (!aValidType || !bValidType) { - return false; - } - const aKeysCount = Object.keys(a).length; - const bKeysCount = Object.keys(b).length; - if (aKeysCount !== bKeysCount) { - return false; - } - for (const key in a) { - const aHasKey = a.hasOwnProperty(key); - const bHasKey = b.hasOwnProperty(key); - if (aHasKey && !bHasKey || !aHasKey && bHasKey || !looseEqual(a[key], b[key])) { - return false; - } - } - } - return String(a) === String(b); -} -function looseIndexOf(arr, val) { - return arr.findIndex((item) => looseEqual(item, val)); -} -var isRef = (val) => { - return !!(val && val["__v_isRef"] === true); -}; -var toDisplayString = (val) => { - return isString(val) ? val : val == null ? "" : isArray(val) || isObject(val) && (val.toString === objectToString || !isFunction(val.toString)) ? isRef(val) ? toDisplayString(val.value) : JSON.stringify(val, replacer, 2) : String(val); -}; -var replacer = (_key, val) => { - if (isRef(val)) { - return replacer(_key, val.value); - } else if (isMap(val)) { - return { - [`Map(${val.size})`]: [...val.entries()].reduce( - (entries, [key, val2], i) => { - entries[stringifySymbol(key, i) + " =>"] = val2; - return entries; - }, - {} - ) - }; - } else if (isSet(val)) { - return { - [`Set(${val.size})`]: [...val.values()].map((v) => stringifySymbol(v)) - }; - } else if (isSymbol(val)) { - return stringifySymbol(val); - } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) { - return String(val); - } - return val; -}; -var stringifySymbol = (v, i = "") => { - var _a; - return ( - // Symbol.description in es2019+ so we need to cast here to pass - // the lib: es2016 check - isSymbol(v) ? `Symbol(${(_a = v.description) != null ? _a : i})` : v - ); -}; -function normalizeCssVarValue(value) { - if (value == null) { - return "initial"; - } - if (typeof value === "string") { - return value === "" ? " " : value; - } - if (typeof value !== "number" || !Number.isFinite(value)) { - if (true) { - console.warn( - "[Vue warn] Invalid value used for CSS binding. Expected a string or a finite number but received:", - value - ); - } - } - return String(value); -} - -// node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js -function warn(msg, ...args) { - console.warn(`[Vue warn] ${msg}`, ...args); -} -var activeEffectScope; -var EffectScope = class { - constructor(detached = false) { - this.detached = detached; - this._active = true; - this._on = 0; - this.effects = []; - this.cleanups = []; - this._isPaused = false; - this.parent = activeEffectScope; - if (!detached && activeEffectScope) { - this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push( - this - ) - 1; - } - } - get active() { - return this._active; - } - pause() { - if (this._active) { - this._isPaused = true; - let i, l; - if (this.scopes) { - for (i = 0, l = this.scopes.length; i < l; i++) { - this.scopes[i].pause(); - } - } - for (i = 0, l = this.effects.length; i < l; i++) { - this.effects[i].pause(); - } - } - } - /** - * Resumes the effect scope, including all child scopes and effects. - */ - resume() { - if (this._active) { - if (this._isPaused) { - this._isPaused = false; - let i, l; - if (this.scopes) { - for (i = 0, l = this.scopes.length; i < l; i++) { - this.scopes[i].resume(); - } - } - for (i = 0, l = this.effects.length; i < l; i++) { - this.effects[i].resume(); - } - } - } - } - run(fn) { - if (this._active) { - const currentEffectScope = activeEffectScope; - try { - activeEffectScope = this; - return fn(); - } finally { - activeEffectScope = currentEffectScope; - } - } else if (true) { - warn(`cannot run an inactive effect scope.`); - } - } - /** - * This should only be called on non-detached scopes - * @internal - */ - on() { - if (++this._on === 1) { - this.prevScope = activeEffectScope; - activeEffectScope = this; - } - } - /** - * This should only be called on non-detached scopes - * @internal - */ - off() { - if (this._on > 0 && --this._on === 0) { - activeEffectScope = this.prevScope; - this.prevScope = void 0; - } - } - stop(fromParent) { - if (this._active) { - this._active = false; - let i, l; - for (i = 0, l = this.effects.length; i < l; i++) { - this.effects[i].stop(); - } - this.effects.length = 0; - for (i = 0, l = this.cleanups.length; i < l; i++) { - this.cleanups[i](); - } - this.cleanups.length = 0; - if (this.scopes) { - for (i = 0, l = this.scopes.length; i < l; i++) { - this.scopes[i].stop(true); - } - this.scopes.length = 0; - } - if (!this.detached && this.parent && !fromParent) { - const last = this.parent.scopes.pop(); - if (last && last !== this) { - this.parent.scopes[this.index] = last; - last.index = this.index; - } - } - this.parent = void 0; - } - } -}; -function effectScope(detached) { - return new EffectScope(detached); -} -function getCurrentScope() { - return activeEffectScope; -} -function onScopeDispose(fn, failSilently = false) { - if (activeEffectScope) { - activeEffectScope.cleanups.push(fn); - } else if (!failSilently) { - warn( - `onScopeDispose() is called when there is no active effect scope to be associated with.` - ); - } -} -var activeSub; -var pausedQueueEffects = /* @__PURE__ */ new WeakSet(); -var ReactiveEffect = class { - constructor(fn) { - this.fn = fn; - this.deps = void 0; - this.depsTail = void 0; - this.flags = 1 | 4; - this.next = void 0; - this.cleanup = void 0; - this.scheduler = void 0; - if (activeEffectScope && activeEffectScope.active) { - activeEffectScope.effects.push(this); - } - } - pause() { - this.flags |= 64; - } - resume() { - if (this.flags & 64) { - this.flags &= -65; - if (pausedQueueEffects.has(this)) { - pausedQueueEffects.delete(this); - this.trigger(); - } - } - } - /** - * @internal - */ - notify() { - if (this.flags & 2 && !(this.flags & 32)) { - return; - } - if (!(this.flags & 8)) { - batch(this); - } - } - run() { - if (!(this.flags & 1)) { - return this.fn(); - } - this.flags |= 2; - cleanupEffect(this); - prepareDeps(this); - const prevEffect = activeSub; - const prevShouldTrack = shouldTrack; - activeSub = this; - shouldTrack = true; - try { - return this.fn(); - } finally { - if (activeSub !== this) { - warn( - "Active effect was not restored correctly - this is likely a Vue internal bug." - ); - } - cleanupDeps(this); - activeSub = prevEffect; - shouldTrack = prevShouldTrack; - this.flags &= -3; - } - } - stop() { - if (this.flags & 1) { - for (let link = this.deps; link; link = link.nextDep) { - removeSub(link); - } - this.deps = this.depsTail = void 0; - cleanupEffect(this); - this.onStop && this.onStop(); - this.flags &= -2; - } - } - trigger() { - if (this.flags & 64) { - pausedQueueEffects.add(this); - } else if (this.scheduler) { - this.scheduler(); - } else { - this.runIfDirty(); - } - } - /** - * @internal - */ - runIfDirty() { - if (isDirty(this)) { - this.run(); - } - } - get dirty() { - return isDirty(this); - } -}; -var batchDepth = 0; -var batchedSub; -var batchedComputed; -function batch(sub, isComputed = false) { - sub.flags |= 8; - if (isComputed) { - sub.next = batchedComputed; - batchedComputed = sub; - return; - } - sub.next = batchedSub; - batchedSub = sub; -} -function startBatch() { - batchDepth++; -} -function endBatch() { - if (--batchDepth > 0) { - return; - } - if (batchedComputed) { - let e = batchedComputed; - batchedComputed = void 0; - while (e) { - const next = e.next; - e.next = void 0; - e.flags &= -9; - e = next; - } - } - let error; - while (batchedSub) { - let e = batchedSub; - batchedSub = void 0; - while (e) { - const next = e.next; - e.next = void 0; - e.flags &= -9; - if (e.flags & 1) { - try { - ; - e.trigger(); - } catch (err) { - if (!error) error = err; - } - } - e = next; - } - } - if (error) throw error; -} -function prepareDeps(sub) { - for (let link = sub.deps; link; link = link.nextDep) { - link.version = -1; - link.prevActiveLink = link.dep.activeLink; - link.dep.activeLink = link; - } -} -function cleanupDeps(sub) { - let head; - let tail = sub.depsTail; - let link = tail; - while (link) { - const prev = link.prevDep; - if (link.version === -1) { - if (link === tail) tail = prev; - removeSub(link); - removeDep(link); - } else { - head = link; - } - link.dep.activeLink = link.prevActiveLink; - link.prevActiveLink = void 0; - link = prev; - } - sub.deps = head; - sub.depsTail = tail; -} -function isDirty(sub) { - for (let link = sub.deps; link; link = link.nextDep) { - if (link.dep.version !== link.version || link.dep.computed && (refreshComputed(link.dep.computed) || link.dep.version !== link.version)) { - return true; - } - } - if (sub._dirty) { - return true; - } - return false; -} -function refreshComputed(computed3) { - if (computed3.flags & 4 && !(computed3.flags & 16)) { - return; - } - computed3.flags &= -17; - if (computed3.globalVersion === globalVersion) { - return; - } - computed3.globalVersion = globalVersion; - if (!computed3.isSSR && computed3.flags & 128 && (!computed3.deps && !computed3._dirty || !isDirty(computed3))) { - return; - } - computed3.flags |= 2; - const dep = computed3.dep; - const prevSub = activeSub; - const prevShouldTrack = shouldTrack; - activeSub = computed3; - shouldTrack = true; - try { - prepareDeps(computed3); - const value = computed3.fn(computed3._value); - if (dep.version === 0 || hasChanged(value, computed3._value)) { - computed3.flags |= 128; - computed3._value = value; - dep.version++; - } - } catch (err) { - dep.version++; - throw err; - } finally { - activeSub = prevSub; - shouldTrack = prevShouldTrack; - cleanupDeps(computed3); - computed3.flags &= -3; - } -} -function removeSub(link, soft = false) { - const { dep, prevSub, nextSub } = link; - if (prevSub) { - prevSub.nextSub = nextSub; - link.prevSub = void 0; - } - if (nextSub) { - nextSub.prevSub = prevSub; - link.nextSub = void 0; - } - if (dep.subsHead === link) { - dep.subsHead = nextSub; - } - if (dep.subs === link) { - dep.subs = prevSub; - if (!prevSub && dep.computed) { - dep.computed.flags &= -5; - for (let l = dep.computed.deps; l; l = l.nextDep) { - removeSub(l, true); - } - } - } - if (!soft && !--dep.sc && dep.map) { - dep.map.delete(dep.key); - } -} -function removeDep(link) { - const { prevDep, nextDep } = link; - if (prevDep) { - prevDep.nextDep = nextDep; - link.prevDep = void 0; - } - if (nextDep) { - nextDep.prevDep = prevDep; - link.nextDep = void 0; - } -} -function effect(fn, options) { - if (fn.effect instanceof ReactiveEffect) { - fn = fn.effect.fn; - } - const e = new ReactiveEffect(fn); - if (options) { - extend(e, options); - } - try { - e.run(); - } catch (err) { - e.stop(); - throw err; - } - const runner = e.run.bind(e); - runner.effect = e; - return runner; -} -function stop(runner) { - runner.effect.stop(); -} -var shouldTrack = true; -var trackStack = []; -function pauseTracking() { - trackStack.push(shouldTrack); - shouldTrack = false; -} -function resetTracking() { - const last = trackStack.pop(); - shouldTrack = last === void 0 ? true : last; -} -function cleanupEffect(e) { - const { cleanup } = e; - e.cleanup = void 0; - if (cleanup) { - const prevSub = activeSub; - activeSub = void 0; - try { - cleanup(); - } finally { - activeSub = prevSub; - } - } -} -var globalVersion = 0; -var Link = class { - constructor(sub, dep) { - this.sub = sub; - this.dep = dep; - this.version = dep.version; - this.nextDep = this.prevDep = this.nextSub = this.prevSub = this.prevActiveLink = void 0; - } -}; -var Dep = class { - // TODO isolatedDeclarations "__v_skip" - constructor(computed3) { - this.computed = computed3; - this.version = 0; - this.activeLink = void 0; - this.subs = void 0; - this.map = void 0; - this.key = void 0; - this.sc = 0; - this.__v_skip = true; - if (true) { - this.subsHead = void 0; - } - } - track(debugInfo) { - if (!activeSub || !shouldTrack || activeSub === this.computed) { - return; - } - let link = this.activeLink; - if (link === void 0 || link.sub !== activeSub) { - link = this.activeLink = new Link(activeSub, this); - if (!activeSub.deps) { - activeSub.deps = activeSub.depsTail = link; - } else { - link.prevDep = activeSub.depsTail; - activeSub.depsTail.nextDep = link; - activeSub.depsTail = link; - } - addSub(link); - } else if (link.version === -1) { - link.version = this.version; - if (link.nextDep) { - const next = link.nextDep; - next.prevDep = link.prevDep; - if (link.prevDep) { - link.prevDep.nextDep = next; - } - link.prevDep = activeSub.depsTail; - link.nextDep = void 0; - activeSub.depsTail.nextDep = link; - activeSub.depsTail = link; - if (activeSub.deps === link) { - activeSub.deps = next; - } - } - } - if (activeSub.onTrack) { - activeSub.onTrack( - extend( - { - effect: activeSub - }, - debugInfo - ) - ); - } - return link; - } - trigger(debugInfo) { - this.version++; - globalVersion++; - this.notify(debugInfo); - } - notify(debugInfo) { - startBatch(); - try { - if (true) { - for (let head = this.subsHead; head; head = head.nextSub) { - if (head.sub.onTrigger && !(head.sub.flags & 8)) { - head.sub.onTrigger( - extend( - { - effect: head.sub - }, - debugInfo - ) - ); - } - } - } - for (let link = this.subs; link; link = link.prevSub) { - if (link.sub.notify()) { - ; - link.sub.dep.notify(); - } - } - } finally { - endBatch(); - } - } -}; -function addSub(link) { - link.dep.sc++; - if (link.sub.flags & 4) { - const computed3 = link.dep.computed; - if (computed3 && !link.dep.subs) { - computed3.flags |= 4 | 16; - for (let l = computed3.deps; l; l = l.nextDep) { - addSub(l); - } - } - const currentTail = link.dep.subs; - if (currentTail !== link) { - link.prevSub = currentTail; - if (currentTail) currentTail.nextSub = link; - } - if (link.dep.subsHead === void 0) { - link.dep.subsHead = link; - } - link.dep.subs = link; - } -} -var targetMap = /* @__PURE__ */ new WeakMap(); -var ITERATE_KEY = Symbol( - true ? "Object iterate" : "" -); -var MAP_KEY_ITERATE_KEY = Symbol( - true ? "Map keys iterate" : "" -); -var ARRAY_ITERATE_KEY = Symbol( - true ? "Array iterate" : "" -); -function track(target, type, key) { - if (shouldTrack && activeSub) { - let depsMap = targetMap.get(target); - if (!depsMap) { - targetMap.set(target, depsMap = /* @__PURE__ */ new Map()); - } - let dep = depsMap.get(key); - if (!dep) { - depsMap.set(key, dep = new Dep()); - dep.map = depsMap; - dep.key = key; - } - if (true) { - dep.track({ - target, - type, - key - }); - } else { - dep.track(); - } - } -} -function trigger(target, type, key, newValue, oldValue, oldTarget) { - const depsMap = targetMap.get(target); - if (!depsMap) { - globalVersion++; - return; - } - const run = (dep) => { - if (dep) { - if (true) { - dep.trigger({ - target, - type, - key, - newValue, - oldValue, - oldTarget - }); - } else { - dep.trigger(); - } - } - }; - startBatch(); - if (type === "clear") { - depsMap.forEach(run); - } else { - const targetIsArray = isArray(target); - const isArrayIndex = targetIsArray && isIntegerKey(key); - if (targetIsArray && key === "length") { - const newLength = Number(newValue); - depsMap.forEach((dep, key2) => { - if (key2 === "length" || key2 === ARRAY_ITERATE_KEY || !isSymbol(key2) && key2 >= newLength) { - run(dep); - } - }); - } else { - if (key !== void 0 || depsMap.has(void 0)) { - run(depsMap.get(key)); - } - if (isArrayIndex) { - run(depsMap.get(ARRAY_ITERATE_KEY)); - } - switch (type) { - case "add": - if (!targetIsArray) { - run(depsMap.get(ITERATE_KEY)); - if (isMap(target)) { - run(depsMap.get(MAP_KEY_ITERATE_KEY)); - } - } else if (isArrayIndex) { - run(depsMap.get("length")); - } - break; - case "delete": - if (!targetIsArray) { - run(depsMap.get(ITERATE_KEY)); - if (isMap(target)) { - run(depsMap.get(MAP_KEY_ITERATE_KEY)); - } - } - break; - case "set": - if (isMap(target)) { - run(depsMap.get(ITERATE_KEY)); - } - break; - } - } - } - endBatch(); -} -function getDepFromReactive(object, key) { - const depMap = targetMap.get(object); - return depMap && depMap.get(key); -} -function reactiveReadArray(array) { - const raw = toRaw(array); - if (raw === array) return raw; - track(raw, "iterate", ARRAY_ITERATE_KEY); - return isShallow(array) ? raw : raw.map(toReactive); -} -function shallowReadArray(arr) { - track(arr = toRaw(arr), "iterate", ARRAY_ITERATE_KEY); - return arr; -} -var arrayInstrumentations = { - __proto__: null, - [Symbol.iterator]() { - return iterator(this, Symbol.iterator, toReactive); - }, - concat(...args) { - return reactiveReadArray(this).concat( - ...args.map((x) => isArray(x) ? reactiveReadArray(x) : x) - ); - }, - entries() { - return iterator(this, "entries", (value) => { - value[1] = toReactive(value[1]); - return value; - }); - }, - every(fn, thisArg) { - return apply(this, "every", fn, thisArg, void 0, arguments); - }, - filter(fn, thisArg) { - return apply(this, "filter", fn, thisArg, (v) => v.map(toReactive), arguments); - }, - find(fn, thisArg) { - return apply(this, "find", fn, thisArg, toReactive, arguments); - }, - findIndex(fn, thisArg) { - return apply(this, "findIndex", fn, thisArg, void 0, arguments); - }, - findLast(fn, thisArg) { - return apply(this, "findLast", fn, thisArg, toReactive, arguments); - }, - findLastIndex(fn, thisArg) { - return apply(this, "findLastIndex", fn, thisArg, void 0, arguments); - }, - // flat, flatMap could benefit from ARRAY_ITERATE but are not straight-forward to implement - forEach(fn, thisArg) { - return apply(this, "forEach", fn, thisArg, void 0, arguments); - }, - includes(...args) { - return searchProxy(this, "includes", args); - }, - indexOf(...args) { - return searchProxy(this, "indexOf", args); - }, - join(separator) { - return reactiveReadArray(this).join(separator); - }, - // keys() iterator only reads `length`, no optimization required - lastIndexOf(...args) { - return searchProxy(this, "lastIndexOf", args); - }, - map(fn, thisArg) { - return apply(this, "map", fn, thisArg, void 0, arguments); - }, - pop() { - return noTracking(this, "pop"); - }, - push(...args) { - return noTracking(this, "push", args); - }, - reduce(fn, ...args) { - return reduce(this, "reduce", fn, args); - }, - reduceRight(fn, ...args) { - return reduce(this, "reduceRight", fn, args); - }, - shift() { - return noTracking(this, "shift"); - }, - // slice could use ARRAY_ITERATE but also seems to beg for range tracking - some(fn, thisArg) { - return apply(this, "some", fn, thisArg, void 0, arguments); - }, - splice(...args) { - return noTracking(this, "splice", args); - }, - toReversed() { - return reactiveReadArray(this).toReversed(); - }, - toSorted(comparer) { - return reactiveReadArray(this).toSorted(comparer); - }, - toSpliced(...args) { - return reactiveReadArray(this).toSpliced(...args); - }, - unshift(...args) { - return noTracking(this, "unshift", args); - }, - values() { - return iterator(this, "values", toReactive); - } -}; -function iterator(self2, method, wrapValue) { - const arr = shallowReadArray(self2); - const iter = arr[method](); - if (arr !== self2 && !isShallow(self2)) { - iter._next = iter.next; - iter.next = () => { - const result = iter._next(); - if (!result.done) { - result.value = wrapValue(result.value); - } - return result; - }; - } - return iter; -} -var arrayProto = Array.prototype; -function apply(self2, method, fn, thisArg, wrappedRetFn, args) { - const arr = shallowReadArray(self2); - const needsWrap = arr !== self2 && !isShallow(self2); - const methodFn = arr[method]; - if (methodFn !== arrayProto[method]) { - const result2 = methodFn.apply(self2, args); - return needsWrap ? toReactive(result2) : result2; - } - let wrappedFn = fn; - if (arr !== self2) { - if (needsWrap) { - wrappedFn = function(item, index) { - return fn.call(this, toReactive(item), index, self2); - }; - } else if (fn.length > 2) { - wrappedFn = function(item, index) { - return fn.call(this, item, index, self2); - }; - } - } - const result = methodFn.call(arr, wrappedFn, thisArg); - return needsWrap && wrappedRetFn ? wrappedRetFn(result) : result; -} -function reduce(self2, method, fn, args) { - const arr = shallowReadArray(self2); - let wrappedFn = fn; - if (arr !== self2) { - if (!isShallow(self2)) { - wrappedFn = function(acc, item, index) { - return fn.call(this, acc, toReactive(item), index, self2); - }; - } else if (fn.length > 3) { - wrappedFn = function(acc, item, index) { - return fn.call(this, acc, item, index, self2); - }; - } - } - return arr[method](wrappedFn, ...args); -} -function searchProxy(self2, method, args) { - const arr = toRaw(self2); - track(arr, "iterate", ARRAY_ITERATE_KEY); - const res = arr[method](...args); - if ((res === -1 || res === false) && isProxy(args[0])) { - args[0] = toRaw(args[0]); - return arr[method](...args); - } - return res; -} -function noTracking(self2, method, args = []) { - pauseTracking(); - startBatch(); - const res = toRaw(self2)[method].apply(self2, args); - endBatch(); - resetTracking(); - return res; -} -var isNonTrackableKeys = makeMap(`__proto__,__v_isRef,__isVue`); -var builtInSymbols = new Set( - Object.getOwnPropertyNames(Symbol).filter((key) => key !== "arguments" && key !== "caller").map((key) => Symbol[key]).filter(isSymbol) -); -function hasOwnProperty2(key) { - if (!isSymbol(key)) key = String(key); - const obj = toRaw(this); - track(obj, "has", key); - return obj.hasOwnProperty(key); -} -var BaseReactiveHandler = class { - constructor(_isReadonly = false, _isShallow = false) { - this._isReadonly = _isReadonly; - this._isShallow = _isShallow; - } - get(target, key, receiver) { - if (key === "__v_skip") return target["__v_skip"]; - const isReadonly2 = this._isReadonly, isShallow2 = this._isShallow; - if (key === "__v_isReactive") { - return !isReadonly2; - } else if (key === "__v_isReadonly") { - return isReadonly2; - } else if (key === "__v_isShallow") { - return isShallow2; - } else if (key === "__v_raw") { - if (receiver === (isReadonly2 ? isShallow2 ? shallowReadonlyMap : readonlyMap : isShallow2 ? shallowReactiveMap : reactiveMap).get(target) || // receiver is not the reactive proxy, but has the same prototype - // this means the receiver is a user proxy of the reactive proxy - Object.getPrototypeOf(target) === Object.getPrototypeOf(receiver)) { - return target; - } - return; - } - const targetIsArray = isArray(target); - if (!isReadonly2) { - let fn; - if (targetIsArray && (fn = arrayInstrumentations[key])) { - return fn; - } - if (key === "hasOwnProperty") { - return hasOwnProperty2; - } - } - const res = Reflect.get( - target, - key, - // if this is a proxy wrapping a ref, return methods using the raw ref - // as receiver so that we don't have to call `toRaw` on the ref in all - // its class methods - isRef2(target) ? target : receiver - ); - if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) { - return res; - } - if (!isReadonly2) { - track(target, "get", key); - } - if (isShallow2) { - return res; - } - if (isRef2(res)) { - const value = targetIsArray && isIntegerKey(key) ? res : res.value; - return isReadonly2 && isObject(value) ? readonly(value) : value; - } - if (isObject(res)) { - return isReadonly2 ? readonly(res) : reactive(res); - } - return res; - } -}; -var MutableReactiveHandler = class extends BaseReactiveHandler { - constructor(isShallow2 = false) { - super(false, isShallow2); - } - set(target, key, value, receiver) { - let oldValue = target[key]; - if (!this._isShallow) { - const isOldValueReadonly = isReadonly(oldValue); - if (!isShallow(value) && !isReadonly(value)) { - oldValue = toRaw(oldValue); - value = toRaw(value); - } - if (!isArray(target) && isRef2(oldValue) && !isRef2(value)) { - if (isOldValueReadonly) { - if (true) { - warn( - `Set operation on key "${String(key)}" failed: target is readonly.`, - target[key] - ); - } - return true; - } else { - oldValue.value = value; - return true; - } - } - } - const hadKey = isArray(target) && isIntegerKey(key) ? Number(key) < target.length : hasOwn(target, key); - const result = Reflect.set( - target, - key, - value, - isRef2(target) ? target : receiver - ); - if (target === toRaw(receiver)) { - if (!hadKey) { - trigger(target, "add", key, value); - } else if (hasChanged(value, oldValue)) { - trigger(target, "set", key, value, oldValue); - } - } - return result; - } - deleteProperty(target, key) { - const hadKey = hasOwn(target, key); - const oldValue = target[key]; - const result = Reflect.deleteProperty(target, key); - if (result && hadKey) { - trigger(target, "delete", key, void 0, oldValue); - } - return result; - } - has(target, key) { - const result = Reflect.has(target, key); - if (!isSymbol(key) || !builtInSymbols.has(key)) { - track(target, "has", key); - } - return result; - } - ownKeys(target) { - track( - target, - "iterate", - isArray(target) ? "length" : ITERATE_KEY - ); - return Reflect.ownKeys(target); - } -}; -var ReadonlyReactiveHandler = class extends BaseReactiveHandler { - constructor(isShallow2 = false) { - super(true, isShallow2); - } - set(target, key) { - if (true) { - warn( - `Set operation on key "${String(key)}" failed: target is readonly.`, - target - ); - } - return true; - } - deleteProperty(target, key) { - if (true) { - warn( - `Delete operation on key "${String(key)}" failed: target is readonly.`, - target - ); - } - return true; - } -}; -var mutableHandlers = new MutableReactiveHandler(); -var readonlyHandlers = new ReadonlyReactiveHandler(); -var shallowReactiveHandlers = new MutableReactiveHandler(true); -var shallowReadonlyHandlers = new ReadonlyReactiveHandler(true); -var toShallow = (value) => value; -var getProto = (v) => Reflect.getPrototypeOf(v); -function createIterableMethod(method, isReadonly2, isShallow2) { - return function(...args) { - const target = this["__v_raw"]; - const rawTarget = toRaw(target); - const targetIsMap = isMap(rawTarget); - const isPair = method === "entries" || method === Symbol.iterator && targetIsMap; - const isKeyOnly = method === "keys" && targetIsMap; - const innerIterator = target[method](...args); - const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive; - !isReadonly2 && track( - rawTarget, - "iterate", - isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY - ); - return { - // iterator protocol - next() { - const { value, done } = innerIterator.next(); - return done ? { value, done } : { - value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value), - done - }; - }, - // iterable protocol - [Symbol.iterator]() { - return this; - } - }; - }; -} -function createReadonlyMethod(type) { - return function(...args) { - if (true) { - const key = args[0] ? `on key "${args[0]}" ` : ``; - warn( - `${capitalize(type)} operation ${key}failed: target is readonly.`, - toRaw(this) - ); - } - return type === "delete" ? false : type === "clear" ? void 0 : this; - }; -} -function createInstrumentations(readonly2, shallow) { - const instrumentations = { - get(key) { - const target = this["__v_raw"]; - const rawTarget = toRaw(target); - const rawKey = toRaw(key); - if (!readonly2) { - if (hasChanged(key, rawKey)) { - track(rawTarget, "get", key); - } - track(rawTarget, "get", rawKey); - } - const { has } = getProto(rawTarget); - const wrap = shallow ? toShallow : readonly2 ? toReadonly : toReactive; - if (has.call(rawTarget, key)) { - return wrap(target.get(key)); - } else if (has.call(rawTarget, rawKey)) { - return wrap(target.get(rawKey)); - } else if (target !== rawTarget) { - target.get(key); - } - }, - get size() { - const target = this["__v_raw"]; - !readonly2 && track(toRaw(target), "iterate", ITERATE_KEY); - return target.size; - }, - has(key) { - const target = this["__v_raw"]; - const rawTarget = toRaw(target); - const rawKey = toRaw(key); - if (!readonly2) { - if (hasChanged(key, rawKey)) { - track(rawTarget, "has", key); - } - track(rawTarget, "has", rawKey); - } - return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey); - }, - forEach(callback, thisArg) { - const observed = this; - const target = observed["__v_raw"]; - const rawTarget = toRaw(target); - const wrap = shallow ? toShallow : readonly2 ? toReadonly : toReactive; - !readonly2 && track(rawTarget, "iterate", ITERATE_KEY); - return target.forEach((value, key) => { - return callback.call(thisArg, wrap(value), wrap(key), observed); - }); - } - }; - extend( - instrumentations, - readonly2 ? { - add: createReadonlyMethod("add"), - set: createReadonlyMethod("set"), - delete: createReadonlyMethod("delete"), - clear: createReadonlyMethod("clear") - } : { - add(value) { - if (!shallow && !isShallow(value) && !isReadonly(value)) { - value = toRaw(value); - } - const target = toRaw(this); - const proto = getProto(target); - const hadKey = proto.has.call(target, value); - if (!hadKey) { - target.add(value); - trigger(target, "add", value, value); - } - return this; - }, - set(key, value) { - if (!shallow && !isShallow(value) && !isReadonly(value)) { - value = toRaw(value); - } - const target = toRaw(this); - const { has, get } = getProto(target); - let hadKey = has.call(target, key); - if (!hadKey) { - key = toRaw(key); - hadKey = has.call(target, key); - } else if (true) { - checkIdentityKeys(target, has, key); - } - const oldValue = get.call(target, key); - target.set(key, value); - if (!hadKey) { - trigger(target, "add", key, value); - } else if (hasChanged(value, oldValue)) { - trigger(target, "set", key, value, oldValue); - } - return this; - }, - delete(key) { - const target = toRaw(this); - const { has, get } = getProto(target); - let hadKey = has.call(target, key); - if (!hadKey) { - key = toRaw(key); - hadKey = has.call(target, key); - } else if (true) { - checkIdentityKeys(target, has, key); - } - const oldValue = get ? get.call(target, key) : void 0; - const result = target.delete(key); - if (hadKey) { - trigger(target, "delete", key, void 0, oldValue); - } - return result; - }, - clear() { - const target = toRaw(this); - const hadItems = target.size !== 0; - const oldTarget = true ? isMap(target) ? new Map(target) : new Set(target) : void 0; - const result = target.clear(); - if (hadItems) { - trigger( - target, - "clear", - void 0, - void 0, - oldTarget - ); - } - return result; - } - } - ); - const iteratorMethods = [ - "keys", - "values", - "entries", - Symbol.iterator - ]; - iteratorMethods.forEach((method) => { - instrumentations[method] = createIterableMethod(method, readonly2, shallow); - }); - return instrumentations; -} -function createInstrumentationGetter(isReadonly2, shallow) { - const instrumentations = createInstrumentations(isReadonly2, shallow); - return (target, key, receiver) => { - if (key === "__v_isReactive") { - return !isReadonly2; - } else if (key === "__v_isReadonly") { - return isReadonly2; - } else if (key === "__v_raw") { - return target; - } - return Reflect.get( - hasOwn(instrumentations, key) && key in target ? instrumentations : target, - key, - receiver - ); - }; -} -var mutableCollectionHandlers = { - get: createInstrumentationGetter(false, false) -}; -var shallowCollectionHandlers = { - get: createInstrumentationGetter(false, true) -}; -var readonlyCollectionHandlers = { - get: createInstrumentationGetter(true, false) -}; -var shallowReadonlyCollectionHandlers = { - get: createInstrumentationGetter(true, true) -}; -function checkIdentityKeys(target, has, key) { - const rawKey = toRaw(key); - if (rawKey !== key && has.call(target, rawKey)) { - const type = toRawType(target); - warn( - `Reactive ${type} contains both the raw and reactive versions of the same object${type === `Map` ? ` as keys` : ``}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.` - ); - } -} -var reactiveMap = /* @__PURE__ */ new WeakMap(); -var shallowReactiveMap = /* @__PURE__ */ new WeakMap(); -var readonlyMap = /* @__PURE__ */ new WeakMap(); -var shallowReadonlyMap = /* @__PURE__ */ new WeakMap(); -function targetTypeMap(rawType) { - switch (rawType) { - case "Object": - case "Array": - return 1; - case "Map": - case "Set": - case "WeakMap": - case "WeakSet": - return 2; - default: - return 0; - } -} -function getTargetType(value) { - return value["__v_skip"] || !Object.isExtensible(value) ? 0 : targetTypeMap(toRawType(value)); -} -function reactive(target) { - if (isReadonly(target)) { - return target; - } - return createReactiveObject( - target, - false, - mutableHandlers, - mutableCollectionHandlers, - reactiveMap - ); -} -function shallowReactive(target) { - return createReactiveObject( - target, - false, - shallowReactiveHandlers, - shallowCollectionHandlers, - shallowReactiveMap - ); -} -function readonly(target) { - return createReactiveObject( - target, - true, - readonlyHandlers, - readonlyCollectionHandlers, - readonlyMap - ); -} -function shallowReadonly(target) { - return createReactiveObject( - target, - true, - shallowReadonlyHandlers, - shallowReadonlyCollectionHandlers, - shallowReadonlyMap - ); -} -function createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) { - if (!isObject(target)) { - if (true) { - warn( - `value cannot be made ${isReadonly2 ? "readonly" : "reactive"}: ${String( - target - )}` - ); - } - return target; - } - if (target["__v_raw"] && !(isReadonly2 && target["__v_isReactive"])) { - return target; - } - const targetType = getTargetType(target); - if (targetType === 0) { - return target; - } - const existingProxy = proxyMap.get(target); - if (existingProxy) { - return existingProxy; - } - const proxy = new Proxy( - target, - targetType === 2 ? collectionHandlers : baseHandlers - ); - proxyMap.set(target, proxy); - return proxy; -} -function isReactive(value) { - if (isReadonly(value)) { - return isReactive(value["__v_raw"]); - } - return !!(value && value["__v_isReactive"]); -} -function isReadonly(value) { - return !!(value && value["__v_isReadonly"]); -} -function isShallow(value) { - return !!(value && value["__v_isShallow"]); -} -function isProxy(value) { - return value ? !!value["__v_raw"] : false; -} -function toRaw(observed) { - const raw = observed && observed["__v_raw"]; - return raw ? toRaw(raw) : observed; -} -function markRaw(value) { - if (!hasOwn(value, "__v_skip") && Object.isExtensible(value)) { - def(value, "__v_skip", true); - } - return value; -} -var toReactive = (value) => isObject(value) ? reactive(value) : value; -var toReadonly = (value) => isObject(value) ? readonly(value) : value; -function isRef2(r) { - return r ? r["__v_isRef"] === true : false; -} -function ref(value) { - return createRef(value, false); -} -function shallowRef(value) { - return createRef(value, true); -} -function createRef(rawValue, shallow) { - if (isRef2(rawValue)) { - return rawValue; - } - return new RefImpl(rawValue, shallow); -} -var RefImpl = class { - constructor(value, isShallow2) { - this.dep = new Dep(); - this["__v_isRef"] = true; - this["__v_isShallow"] = false; - this._rawValue = isShallow2 ? value : toRaw(value); - this._value = isShallow2 ? value : toReactive(value); - this["__v_isShallow"] = isShallow2; - } - get value() { - if (true) { - this.dep.track({ - target: this, - type: "get", - key: "value" - }); - } else { - this.dep.track(); - } - return this._value; - } - set value(newValue) { - const oldValue = this._rawValue; - const useDirectValue = this["__v_isShallow"] || isShallow(newValue) || isReadonly(newValue); - newValue = useDirectValue ? newValue : toRaw(newValue); - if (hasChanged(newValue, oldValue)) { - this._rawValue = newValue; - this._value = useDirectValue ? newValue : toReactive(newValue); - if (true) { - this.dep.trigger({ - target: this, - type: "set", - key: "value", - newValue, - oldValue - }); - } else { - this.dep.trigger(); - } - } - } -}; -function triggerRef(ref2) { - if (ref2.dep) { - if (true) { - ref2.dep.trigger({ - target: ref2, - type: "set", - key: "value", - newValue: ref2._value - }); - } else { - ref2.dep.trigger(); - } - } -} -function unref(ref2) { - return isRef2(ref2) ? ref2.value : ref2; -} -function toValue(source) { - return isFunction(source) ? source() : unref(source); -} -var shallowUnwrapHandlers = { - get: (target, key, receiver) => key === "__v_raw" ? target : unref(Reflect.get(target, key, receiver)), - set: (target, key, value, receiver) => { - const oldValue = target[key]; - if (isRef2(oldValue) && !isRef2(value)) { - oldValue.value = value; - return true; - } else { - return Reflect.set(target, key, value, receiver); - } - } -}; -function proxyRefs(objectWithRefs) { - return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers); -} -var CustomRefImpl = class { - constructor(factory) { - this["__v_isRef"] = true; - this._value = void 0; - const dep = this.dep = new Dep(); - const { get, set } = factory(dep.track.bind(dep), dep.trigger.bind(dep)); - this._get = get; - this._set = set; - } - get value() { - return this._value = this._get(); - } - set value(newVal) { - this._set(newVal); - } -}; -function customRef(factory) { - return new CustomRefImpl(factory); -} -function toRefs(object) { - if (!isProxy(object)) { - warn(`toRefs() expects a reactive object but received a plain one.`); - } - const ret = isArray(object) ? new Array(object.length) : {}; - for (const key in object) { - ret[key] = propertyToRef(object, key); - } - return ret; -} -var ObjectRefImpl = class { - constructor(_object, _key, _defaultValue) { - this._object = _object; - this._key = _key; - this._defaultValue = _defaultValue; - this["__v_isRef"] = true; - this._value = void 0; - } - get value() { - const val = this._object[this._key]; - return this._value = val === void 0 ? this._defaultValue : val; - } - set value(newVal) { - this._object[this._key] = newVal; - } - get dep() { - return getDepFromReactive(toRaw(this._object), this._key); - } -}; -var GetterRefImpl = class { - constructor(_getter) { - this._getter = _getter; - this["__v_isRef"] = true; - this["__v_isReadonly"] = true; - this._value = void 0; - } - get value() { - return this._value = this._getter(); - } -}; -function toRef(source, key, defaultValue) { - if (isRef2(source)) { - return source; - } else if (isFunction(source)) { - return new GetterRefImpl(source); - } else if (isObject(source) && arguments.length > 1) { - return propertyToRef(source, key, defaultValue); - } else { - return ref(source); - } -} -function propertyToRef(source, key, defaultValue) { - const val = source[key]; - return isRef2(val) ? val : new ObjectRefImpl(source, key, defaultValue); -} -var ComputedRefImpl = class { - constructor(fn, setter, isSSR) { - this.fn = fn; - this.setter = setter; - this._value = void 0; - this.dep = new Dep(this); - this.__v_isRef = true; - this.deps = void 0; - this.depsTail = void 0; - this.flags = 16; - this.globalVersion = globalVersion - 1; - this.next = void 0; - this.effect = this; - this["__v_isReadonly"] = !setter; - this.isSSR = isSSR; - } - /** - * @internal - */ - notify() { - this.flags |= 16; - if (!(this.flags & 8) && // avoid infinite self recursion - activeSub !== this) { - batch(this, true); - return true; - } else if (true) ; - } - get value() { - const link = true ? this.dep.track({ - target: this, - type: "get", - key: "value" - }) : this.dep.track(); - refreshComputed(this); - if (link) { - link.version = this.dep.version; - } - return this._value; - } - set value(newValue) { - if (this.setter) { - this.setter(newValue); - } else if (true) { - warn("Write operation failed: computed value is readonly"); - } - } -}; -function computed(getterOrOptions, debugOptions, isSSR = false) { - let getter; - let setter; - if (isFunction(getterOrOptions)) { - getter = getterOrOptions; - } else { - getter = getterOrOptions.get; - setter = getterOrOptions.set; - } - const cRef = new ComputedRefImpl(getter, setter, isSSR); - if (debugOptions && !isSSR) { - cRef.onTrack = debugOptions.onTrack; - cRef.onTrigger = debugOptions.onTrigger; - } - return cRef; -} -var TrackOpTypes = { - "GET": "get", - "HAS": "has", - "ITERATE": "iterate" -}; -var TriggerOpTypes = { - "SET": "set", - "ADD": "add", - "DELETE": "delete", - "CLEAR": "clear" -}; -var INITIAL_WATCHER_VALUE = {}; -var cleanupMap = /* @__PURE__ */ new WeakMap(); -var activeWatcher = void 0; -function getCurrentWatcher() { - return activeWatcher; -} -function onWatcherCleanup(cleanupFn, failSilently = false, owner = activeWatcher) { - if (owner) { - let cleanups = cleanupMap.get(owner); - if (!cleanups) cleanupMap.set(owner, cleanups = []); - cleanups.push(cleanupFn); - } else if (!failSilently) { - warn( - `onWatcherCleanup() was called when there was no active watcher to associate with.` - ); - } -} -function watch(source, cb, options = EMPTY_OBJ) { - const { immediate, deep, once, scheduler, augmentJob, call } = options; - const warnInvalidSource = (s) => { - (options.onWarn || warn)( - `Invalid watch source: `, - s, - `A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.` - ); - }; - const reactiveGetter = (source2) => { - if (deep) return source2; - if (isShallow(source2) || deep === false || deep === 0) - return traverse(source2, 1); - return traverse(source2); - }; - let effect2; - let getter; - let cleanup; - let boundCleanup; - let forceTrigger = false; - let isMultiSource = false; - if (isRef2(source)) { - getter = () => source.value; - forceTrigger = isShallow(source); - } else if (isReactive(source)) { - getter = () => reactiveGetter(source); - forceTrigger = true; - } else if (isArray(source)) { - isMultiSource = true; - forceTrigger = source.some((s) => isReactive(s) || isShallow(s)); - getter = () => source.map((s) => { - if (isRef2(s)) { - return s.value; - } else if (isReactive(s)) { - return reactiveGetter(s); - } else if (isFunction(s)) { - return call ? call(s, 2) : s(); - } else { - warnInvalidSource(s); - } - }); - } else if (isFunction(source)) { - if (cb) { - getter = call ? () => call(source, 2) : source; - } else { - getter = () => { - if (cleanup) { - pauseTracking(); - try { - cleanup(); - } finally { - resetTracking(); - } - } - const currentEffect = activeWatcher; - activeWatcher = effect2; - try { - return call ? call(source, 3, [boundCleanup]) : source(boundCleanup); - } finally { - activeWatcher = currentEffect; - } - }; - } - } else { - getter = NOOP; - warnInvalidSource(source); - } - if (cb && deep) { - const baseGetter = getter; - const depth = deep === true ? Infinity : deep; - getter = () => traverse(baseGetter(), depth); - } - const scope = getCurrentScope(); - const watchHandle = () => { - effect2.stop(); - if (scope && scope.active) { - remove(scope.effects, effect2); - } - }; - if (once && cb) { - const _cb = cb; - cb = (...args) => { - _cb(...args); - watchHandle(); - }; - } - let oldValue = isMultiSource ? new Array(source.length).fill(INITIAL_WATCHER_VALUE) : INITIAL_WATCHER_VALUE; - const job = (immediateFirstRun) => { - if (!(effect2.flags & 1) || !effect2.dirty && !immediateFirstRun) { - return; - } - if (cb) { - const newValue = effect2.run(); - if (deep || forceTrigger || (isMultiSource ? newValue.some((v, i) => hasChanged(v, oldValue[i])) : hasChanged(newValue, oldValue))) { - if (cleanup) { - cleanup(); - } - const currentWatcher = activeWatcher; - activeWatcher = effect2; - try { - const args = [ - newValue, - // pass undefined as the old value when it's changed for the first time - oldValue === INITIAL_WATCHER_VALUE ? void 0 : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE ? [] : oldValue, - boundCleanup - ]; - oldValue = newValue; - call ? call(cb, 3, args) : ( - // @ts-expect-error - cb(...args) - ); - } finally { - activeWatcher = currentWatcher; - } - } - } else { - effect2.run(); - } - }; - if (augmentJob) { - augmentJob(job); - } - effect2 = new ReactiveEffect(getter); - effect2.scheduler = scheduler ? () => scheduler(job, false) : job; - boundCleanup = (fn) => onWatcherCleanup(fn, false, effect2); - cleanup = effect2.onStop = () => { - const cleanups = cleanupMap.get(effect2); - if (cleanups) { - if (call) { - call(cleanups, 4); - } else { - for (const cleanup2 of cleanups) cleanup2(); - } - cleanupMap.delete(effect2); - } - }; - if (true) { - effect2.onTrack = options.onTrack; - effect2.onTrigger = options.onTrigger; - } - if (cb) { - if (immediate) { - job(true); - } else { - oldValue = effect2.run(); - } - } else if (scheduler) { - scheduler(job.bind(null, true), true); - } else { - effect2.run(); - } - watchHandle.pause = effect2.pause.bind(effect2); - watchHandle.resume = effect2.resume.bind(effect2); - watchHandle.stop = watchHandle; - return watchHandle; -} -function traverse(value, depth = Infinity, seen) { - if (depth <= 0 || !isObject(value) || value["__v_skip"]) { - return value; - } - seen = seen || /* @__PURE__ */ new Map(); - if ((seen.get(value) || 0) >= depth) { - return value; - } - seen.set(value, depth); - depth--; - if (isRef2(value)) { - traverse(value.value, depth, seen); - } else if (isArray(value)) { - for (let i = 0; i < value.length; i++) { - traverse(value[i], depth, seen); - } - } else if (isSet(value) || isMap(value)) { - value.forEach((v) => { - traverse(v, depth, seen); - }); - } else if (isPlainObject(value)) { - for (const key in value) { - traverse(value[key], depth, seen); - } - for (const key of Object.getOwnPropertySymbols(value)) { - if (Object.prototype.propertyIsEnumerable.call(value, key)) { - traverse(value[key], depth, seen); - } - } - } - return value; -} - -// node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js -var stack = []; -function pushWarningContext(vnode) { - stack.push(vnode); -} -function popWarningContext() { - stack.pop(); -} -var isWarning = false; -function warn$1(msg, ...args) { - if (isWarning) return; - isWarning = true; - pauseTracking(); - const instance = stack.length ? stack[stack.length - 1].component : null; - const appWarnHandler = instance && instance.appContext.config.warnHandler; - const trace = getComponentTrace(); - if (appWarnHandler) { - callWithErrorHandling( - appWarnHandler, - instance, - 11, - [ - // eslint-disable-next-line no-restricted-syntax - msg + args.map((a) => { - var _a, _b; - return (_b = (_a = a.toString) == null ? void 0 : _a.call(a)) != null ? _b : JSON.stringify(a); - }).join(""), - instance && instance.proxy, - trace.map( - ({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>` - ).join("\n"), - trace - ] - ); - } else { - const warnArgs = [`[Vue warn]: ${msg}`, ...args]; - if (trace.length && // avoid spamming console during tests - true) { - warnArgs.push(` -`, ...formatTrace(trace)); - } - console.warn(...warnArgs); - } - resetTracking(); - isWarning = false; -} -function getComponentTrace() { - let currentVNode = stack[stack.length - 1]; - if (!currentVNode) { - return []; - } - const normalizedStack = []; - while (currentVNode) { - const last = normalizedStack[0]; - if (last && last.vnode === currentVNode) { - last.recurseCount++; - } else { - normalizedStack.push({ - vnode: currentVNode, - recurseCount: 0 - }); - } - const parentInstance = currentVNode.component && currentVNode.component.parent; - currentVNode = parentInstance && parentInstance.vnode; - } - return normalizedStack; -} -function formatTrace(trace) { - const logs = []; - trace.forEach((entry, i) => { - logs.push(...i === 0 ? [] : [` -`], ...formatTraceEntry(entry)); - }); - return logs; -} -function formatTraceEntry({ vnode, recurseCount }) { - const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``; - const isRoot = vnode.component ? vnode.component.parent == null : false; - const open = ` at <${formatComponentName( - vnode.component, - vnode.type, - isRoot - )}`; - const close = `>` + postfix; - return vnode.props ? [open, ...formatProps(vnode.props), close] : [open + close]; -} -function formatProps(props) { - const res = []; - const keys = Object.keys(props); - keys.slice(0, 3).forEach((key) => { - res.push(...formatProp(key, props[key])); - }); - if (keys.length > 3) { - res.push(` ...`); - } - return res; -} -function formatProp(key, value, raw) { - if (isString(value)) { - value = JSON.stringify(value); - return raw ? value : [`${key}=${value}`]; - } else if (typeof value === "number" || typeof value === "boolean" || value == null) { - return raw ? value : [`${key}=${value}`]; - } else if (isRef2(value)) { - value = formatProp(key, toRaw(value.value), true); - return raw ? value : [`${key}=Ref<`, value, `>`]; - } else if (isFunction(value)) { - return [`${key}=fn${value.name ? `<${value.name}>` : ``}`]; - } else { - value = toRaw(value); - return raw ? value : [`${key}=`, value]; - } -} -function assertNumber(val, type) { - if (false) return; - if (val === void 0) { - return; - } else if (typeof val !== "number") { - warn$1(`${type} is not a valid number - got ${JSON.stringify(val)}.`); - } else if (isNaN(val)) { - warn$1(`${type} is NaN - the duration expression might be incorrect.`); - } -} -var ErrorCodes = { - "SETUP_FUNCTION": 0, - "0": "SETUP_FUNCTION", - "RENDER_FUNCTION": 1, - "1": "RENDER_FUNCTION", - "NATIVE_EVENT_HANDLER": 5, - "5": "NATIVE_EVENT_HANDLER", - "COMPONENT_EVENT_HANDLER": 6, - "6": "COMPONENT_EVENT_HANDLER", - "VNODE_HOOK": 7, - "7": "VNODE_HOOK", - "DIRECTIVE_HOOK": 8, - "8": "DIRECTIVE_HOOK", - "TRANSITION_HOOK": 9, - "9": "TRANSITION_HOOK", - "APP_ERROR_HANDLER": 10, - "10": "APP_ERROR_HANDLER", - "APP_WARN_HANDLER": 11, - "11": "APP_WARN_HANDLER", - "FUNCTION_REF": 12, - "12": "FUNCTION_REF", - "ASYNC_COMPONENT_LOADER": 13, - "13": "ASYNC_COMPONENT_LOADER", - "SCHEDULER": 14, - "14": "SCHEDULER", - "COMPONENT_UPDATE": 15, - "15": "COMPONENT_UPDATE", - "APP_UNMOUNT_CLEANUP": 16, - "16": "APP_UNMOUNT_CLEANUP" -}; -var ErrorTypeStrings$1 = { - ["sp"]: "serverPrefetch hook", - ["bc"]: "beforeCreate hook", - ["c"]: "created hook", - ["bm"]: "beforeMount hook", - ["m"]: "mounted hook", - ["bu"]: "beforeUpdate hook", - ["u"]: "updated", - ["bum"]: "beforeUnmount hook", - ["um"]: "unmounted hook", - ["a"]: "activated hook", - ["da"]: "deactivated hook", - ["ec"]: "errorCaptured hook", - ["rtc"]: "renderTracked hook", - ["rtg"]: "renderTriggered hook", - [0]: "setup function", - [1]: "render function", - [2]: "watcher getter", - [3]: "watcher callback", - [4]: "watcher cleanup function", - [5]: "native event handler", - [6]: "component event handler", - [7]: "vnode hook", - [8]: "directive hook", - [9]: "transition hook", - [10]: "app errorHandler", - [11]: "app warnHandler", - [12]: "ref function", - [13]: "async component loader", - [14]: "scheduler flush", - [15]: "component update", - [16]: "app unmount cleanup function" -}; -function callWithErrorHandling(fn, instance, type, args) { - try { - return args ? fn(...args) : fn(); - } catch (err) { - handleError(err, instance, type); - } -} -function callWithAsyncErrorHandling(fn, instance, type, args) { - if (isFunction(fn)) { - const res = callWithErrorHandling(fn, instance, type, args); - if (res && isPromise(res)) { - res.catch((err) => { - handleError(err, instance, type); - }); - } - return res; - } - if (isArray(fn)) { - const values = []; - for (let i = 0; i < fn.length; i++) { - values.push(callWithAsyncErrorHandling(fn[i], instance, type, args)); - } - return values; - } else if (true) { - warn$1( - `Invalid value type passed to callWithAsyncErrorHandling(): ${typeof fn}` - ); - } -} -function handleError(err, instance, type, throwInDev = true) { - const contextVNode = instance ? instance.vnode : null; - const { errorHandler, throwUnhandledErrorInProduction } = instance && instance.appContext.config || EMPTY_OBJ; - if (instance) { - let cur = instance.parent; - const exposedInstance = instance.proxy; - const errorInfo = true ? ErrorTypeStrings$1[type] : `https://vuejs.org/error-reference/#runtime-${type}`; - while (cur) { - const errorCapturedHooks = cur.ec; - if (errorCapturedHooks) { - for (let i = 0; i < errorCapturedHooks.length; i++) { - if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) { - return; - } - } - } - cur = cur.parent; - } - if (errorHandler) { - pauseTracking(); - callWithErrorHandling(errorHandler, null, 10, [ - err, - exposedInstance, - errorInfo - ]); - resetTracking(); - return; - } - } - logError(err, type, contextVNode, throwInDev, throwUnhandledErrorInProduction); -} -function logError(err, type, contextVNode, throwInDev = true, throwInProd = false) { - if (true) { - const info = ErrorTypeStrings$1[type]; - if (contextVNode) { - pushWarningContext(contextVNode); - } - warn$1(`Unhandled error${info ? ` during execution of ${info}` : ``}`); - if (contextVNode) { - popWarningContext(); - } - if (throwInDev) { - throw err; - } else { - console.error(err); - } - } else if (throwInProd) { - throw err; - } else { - console.error(err); - } -} -var queue = []; -var flushIndex = -1; -var pendingPostFlushCbs = []; -var activePostFlushCbs = null; -var postFlushIndex = 0; -var resolvedPromise = Promise.resolve(); -var currentFlushPromise = null; -var RECURSION_LIMIT = 100; -function nextTick(fn) { - const p2 = currentFlushPromise || resolvedPromise; - return fn ? p2.then(this ? fn.bind(this) : fn) : p2; -} -function findInsertionIndex(id) { - let start = flushIndex + 1; - let end = queue.length; - while (start < end) { - const middle = start + end >>> 1; - const middleJob = queue[middle]; - const middleJobId = getId(middleJob); - if (middleJobId < id || middleJobId === id && middleJob.flags & 2) { - start = middle + 1; - } else { - end = middle; - } - } - return start; -} -function queueJob(job) { - if (!(job.flags & 1)) { - const jobId = getId(job); - const lastJob = queue[queue.length - 1]; - if (!lastJob || // fast path when the job id is larger than the tail - !(job.flags & 2) && jobId >= getId(lastJob)) { - queue.push(job); - } else { - queue.splice(findInsertionIndex(jobId), 0, job); - } - job.flags |= 1; - queueFlush(); - } -} -function queueFlush() { - if (!currentFlushPromise) { - currentFlushPromise = resolvedPromise.then(flushJobs); - } -} -function queuePostFlushCb(cb) { - if (!isArray(cb)) { - if (activePostFlushCbs && cb.id === -1) { - activePostFlushCbs.splice(postFlushIndex + 1, 0, cb); - } else if (!(cb.flags & 1)) { - pendingPostFlushCbs.push(cb); - cb.flags |= 1; - } - } else { - pendingPostFlushCbs.push(...cb); - } - queueFlush(); -} -function flushPreFlushCbs(instance, seen, i = flushIndex + 1) { - if (true) { - seen = seen || /* @__PURE__ */ new Map(); - } - for (; i < queue.length; i++) { - const cb = queue[i]; - if (cb && cb.flags & 2) { - if (instance && cb.id !== instance.uid) { - continue; - } - if (checkRecursiveUpdates(seen, cb)) { - continue; - } - queue.splice(i, 1); - i--; - if (cb.flags & 4) { - cb.flags &= -2; - } - cb(); - if (!(cb.flags & 4)) { - cb.flags &= -2; - } - } - } -} -function flushPostFlushCbs(seen) { - if (pendingPostFlushCbs.length) { - const deduped = [...new Set(pendingPostFlushCbs)].sort( - (a, b) => getId(a) - getId(b) - ); - pendingPostFlushCbs.length = 0; - if (activePostFlushCbs) { - activePostFlushCbs.push(...deduped); - return; - } - activePostFlushCbs = deduped; - if (true) { - seen = seen || /* @__PURE__ */ new Map(); - } - for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) { - const cb = activePostFlushCbs[postFlushIndex]; - if (checkRecursiveUpdates(seen, cb)) { - continue; - } - if (cb.flags & 4) { - cb.flags &= -2; - } - if (!(cb.flags & 8)) cb(); - cb.flags &= -2; - } - activePostFlushCbs = null; - postFlushIndex = 0; - } -} -var getId = (job) => job.id == null ? job.flags & 2 ? -1 : Infinity : job.id; -function flushJobs(seen) { - if (true) { - seen = seen || /* @__PURE__ */ new Map(); - } - const check = true ? (job) => checkRecursiveUpdates(seen, job) : NOOP; - try { - for (flushIndex = 0; flushIndex < queue.length; flushIndex++) { - const job = queue[flushIndex]; - if (job && !(job.flags & 8)) { - if (check(job)) { - continue; - } - if (job.flags & 4) { - job.flags &= ~1; - } - callWithErrorHandling( - job, - job.i, - job.i ? 15 : 14 - ); - if (!(job.flags & 4)) { - job.flags &= ~1; - } - } - } - } finally { - for (; flushIndex < queue.length; flushIndex++) { - const job = queue[flushIndex]; - if (job) { - job.flags &= -2; - } - } - flushIndex = -1; - queue.length = 0; - flushPostFlushCbs(seen); - currentFlushPromise = null; - if (queue.length || pendingPostFlushCbs.length) { - flushJobs(seen); - } - } -} -function checkRecursiveUpdates(seen, fn) { - const count = seen.get(fn) || 0; - if (count > RECURSION_LIMIT) { - const instance = fn.i; - const componentName = instance && getComponentName(instance.type); - handleError( - `Maximum recursive updates exceeded${componentName ? ` in component <${componentName}>` : ``}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`, - null, - 10 - ); - return true; - } - seen.set(fn, count + 1); - return false; -} -var isHmrUpdating = false; -var hmrDirtyComponents = /* @__PURE__ */ new Map(); -if (true) { - getGlobalThis().__VUE_HMR_RUNTIME__ = { - createRecord: tryWrap(createRecord), - rerender: tryWrap(rerender), - reload: tryWrap(reload) - }; -} -var map = /* @__PURE__ */ new Map(); -function registerHMR(instance) { - const id = instance.type.__hmrId; - let record = map.get(id); - if (!record) { - createRecord(id, instance.type); - record = map.get(id); - } - record.instances.add(instance); -} -function unregisterHMR(instance) { - map.get(instance.type.__hmrId).instances.delete(instance); -} -function createRecord(id, initialDef) { - if (map.has(id)) { - return false; - } - map.set(id, { - initialDef: normalizeClassComponent(initialDef), - instances: /* @__PURE__ */ new Set() - }); - return true; -} -function normalizeClassComponent(component) { - return isClassComponent(component) ? component.__vccOpts : component; -} -function rerender(id, newRender) { - const record = map.get(id); - if (!record) { - return; - } - record.initialDef.render = newRender; - [...record.instances].forEach((instance) => { - if (newRender) { - instance.render = newRender; - normalizeClassComponent(instance.type).render = newRender; - } - instance.renderCache = []; - isHmrUpdating = true; - if (!(instance.job.flags & 8)) { - instance.update(); - } - isHmrUpdating = false; - }); -} -function reload(id, newComp) { - const record = map.get(id); - if (!record) return; - newComp = normalizeClassComponent(newComp); - updateComponentDef(record.initialDef, newComp); - const instances = [...record.instances]; - for (let i = 0; i < instances.length; i++) { - const instance = instances[i]; - const oldComp = normalizeClassComponent(instance.type); - let dirtyInstances = hmrDirtyComponents.get(oldComp); - if (!dirtyInstances) { - if (oldComp !== record.initialDef) { - updateComponentDef(oldComp, newComp); - } - hmrDirtyComponents.set(oldComp, dirtyInstances = /* @__PURE__ */ new Set()); - } - dirtyInstances.add(instance); - instance.appContext.propsCache.delete(instance.type); - instance.appContext.emitsCache.delete(instance.type); - instance.appContext.optionsCache.delete(instance.type); - if (instance.ceReload) { - dirtyInstances.add(instance); - instance.ceReload(newComp.styles); - dirtyInstances.delete(instance); - } else if (instance.parent) { - queueJob(() => { - if (!(instance.job.flags & 8)) { - isHmrUpdating = true; - instance.parent.update(); - isHmrUpdating = false; - dirtyInstances.delete(instance); - } - }); - } else if (instance.appContext.reload) { - instance.appContext.reload(); - } else if (typeof window !== "undefined") { - window.location.reload(); - } else { - console.warn( - "[HMR] Root or manually mounted instance modified. Full reload required." - ); - } - if (instance.root.ce && instance !== instance.root) { - instance.root.ce._removeChildStyle(oldComp); - } - } - queuePostFlushCb(() => { - hmrDirtyComponents.clear(); - }); -} -function updateComponentDef(oldComp, newComp) { - extend(oldComp, newComp); - for (const key in oldComp) { - if (key !== "__file" && !(key in newComp)) { - delete oldComp[key]; - } - } -} -function tryWrap(fn) { - return (id, arg) => { - try { - return fn(id, arg); - } catch (e) { - console.error(e); - console.warn( - `[HMR] Something went wrong during Vue component hot-reload. Full reload required.` - ); - } - }; -} -var devtools$1; -var buffer = []; -var devtoolsNotInstalled = false; -function emit$1(event, ...args) { - if (devtools$1) { - devtools$1.emit(event, ...args); - } else if (!devtoolsNotInstalled) { - buffer.push({ event, args }); - } -} -function setDevtoolsHook$1(hook, target) { - var _a, _b; - devtools$1 = hook; - if (devtools$1) { - devtools$1.enabled = true; - buffer.forEach(({ event, args }) => devtools$1.emit(event, ...args)); - buffer = []; - } else if ( - // handle late devtools injection - only do this if we are in an actual - // browser environment to avoid the timer handle stalling test runner exit - // (#4815) - typeof window !== "undefined" && // some envs mock window but not fully - window.HTMLElement && // also exclude jsdom - // eslint-disable-next-line no-restricted-syntax - !((_b = (_a = window.navigator) == null ? void 0 : _a.userAgent) == null ? void 0 : _b.includes("jsdom")) - ) { - const replay = target.__VUE_DEVTOOLS_HOOK_REPLAY__ = target.__VUE_DEVTOOLS_HOOK_REPLAY__ || []; - replay.push((newHook) => { - setDevtoolsHook$1(newHook, target); - }); - setTimeout(() => { - if (!devtools$1) { - target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null; - devtoolsNotInstalled = true; - buffer = []; - } - }, 3e3); - } else { - devtoolsNotInstalled = true; - buffer = []; - } -} -function devtoolsInitApp(app, version2) { - emit$1("app:init", app, version2, { - Fragment, - Text, - Comment, - Static - }); -} -function devtoolsUnmountApp(app) { - emit$1("app:unmount", app); -} -var devtoolsComponentAdded = createDevtoolsComponentHook( - "component:added" - /* COMPONENT_ADDED */ -); -var devtoolsComponentUpdated = createDevtoolsComponentHook( - "component:updated" - /* COMPONENT_UPDATED */ -); -var _devtoolsComponentRemoved = createDevtoolsComponentHook( - "component:removed" - /* COMPONENT_REMOVED */ -); -var devtoolsComponentRemoved = (component) => { - if (devtools$1 && typeof devtools$1.cleanupBuffer === "function" && // remove the component if it wasn't buffered - !devtools$1.cleanupBuffer(component)) { - _devtoolsComponentRemoved(component); - } -}; -function createDevtoolsComponentHook(hook) { - return (component) => { - emit$1( - hook, - component.appContext.app, - component.uid, - component.parent ? component.parent.uid : void 0, - component - ); - }; -} -var devtoolsPerfStart = createDevtoolsPerformanceHook( - "perf:start" - /* PERFORMANCE_START */ -); -var devtoolsPerfEnd = createDevtoolsPerformanceHook( - "perf:end" - /* PERFORMANCE_END */ -); -function createDevtoolsPerformanceHook(hook) { - return (component, type, time) => { - emit$1(hook, component.appContext.app, component.uid, component, type, time); - }; -} -function devtoolsComponentEmit(component, event, params) { - emit$1( - "component:emit", - component.appContext.app, - component, - event, - params - ); -} -var currentRenderingInstance = null; -var currentScopeId = null; -function setCurrentRenderingInstance(instance) { - const prev = currentRenderingInstance; - currentRenderingInstance = instance; - currentScopeId = instance && instance.type.__scopeId || null; - return prev; -} -function pushScopeId(id) { - currentScopeId = id; -} -function popScopeId() { - currentScopeId = null; -} -var withScopeId = (_id) => withCtx; -function withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot) { - if (!ctx) return fn; - if (fn._n) { - return fn; - } - const renderFnWithContext = (...args) => { - if (renderFnWithContext._d) { - setBlockTracking(-1); - } - const prevInstance = setCurrentRenderingInstance(ctx); - let res; - try { - res = fn(...args); - } finally { - setCurrentRenderingInstance(prevInstance); - if (renderFnWithContext._d) { - setBlockTracking(1); - } - } - if (true) { - devtoolsComponentUpdated(ctx); - } - return res; - }; - renderFnWithContext._n = true; - renderFnWithContext._c = true; - renderFnWithContext._d = true; - return renderFnWithContext; -} -function validateDirectiveName(name) { - if (isBuiltInDirective(name)) { - warn$1("Do not use built-in directive ids as custom directive id: " + name); - } -} -function withDirectives(vnode, directives) { - if (currentRenderingInstance === null) { - warn$1(`withDirectives can only be used inside render functions.`); - return vnode; - } - const instance = getComponentPublicInstance(currentRenderingInstance); - const bindings = vnode.dirs || (vnode.dirs = []); - for (let i = 0; i < directives.length; i++) { - let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i]; - if (dir) { - if (isFunction(dir)) { - dir = { - mounted: dir, - updated: dir - }; - } - if (dir.deep) { - traverse(value); - } - bindings.push({ - dir, - instance, - value, - oldValue: void 0, - arg, - modifiers - }); - } - } - return vnode; -} -function invokeDirectiveHook(vnode, prevVNode, instance, name) { - const bindings = vnode.dirs; - const oldBindings = prevVNode && prevVNode.dirs; - for (let i = 0; i < bindings.length; i++) { - const binding = bindings[i]; - if (oldBindings) { - binding.oldValue = oldBindings[i].value; - } - let hook = binding.dir[name]; - if (hook) { - pauseTracking(); - callWithAsyncErrorHandling(hook, instance, 8, [ - vnode.el, - binding, - vnode, - prevVNode - ]); - resetTracking(); - } - } -} -var TeleportEndKey = Symbol("_vte"); -var isTeleport = (type) => type.__isTeleport; -var isTeleportDisabled = (props) => props && (props.disabled || props.disabled === ""); -var isTeleportDeferred = (props) => props && (props.defer || props.defer === ""); -var isTargetSVG = (target) => typeof SVGElement !== "undefined" && target instanceof SVGElement; -var isTargetMathML = (target) => typeof MathMLElement === "function" && target instanceof MathMLElement; -var resolveTarget = (props, select) => { - const targetSelector = props && props.to; - if (isString(targetSelector)) { - if (!select) { - warn$1( - `Current renderer does not support string target for Teleports. (missing querySelector renderer option)` - ); - return null; - } else { - const target = select(targetSelector); - if (!target && !isTeleportDisabled(props)) { - warn$1( - `Failed to locate Teleport target with selector "${targetSelector}". Note the target element must exist before the component is mounted - i.e. the target cannot be rendered by the component itself, and ideally should be outside of the entire Vue component tree.` - ); - } - return target; - } - } else { - if (!targetSelector && !isTeleportDisabled(props)) { - warn$1(`Invalid Teleport target: ${targetSelector}`); - } - return targetSelector; - } -}; -var TeleportImpl = { - name: "Teleport", - __isTeleport: true, - process(n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, internals) { - const { - mc: mountChildren, - pc: patchChildren, - pbc: patchBlockChildren, - o: { insert, querySelector, createText, createComment } - } = internals; - const disabled = isTeleportDisabled(n2.props); - let { shapeFlag, children, dynamicChildren } = n2; - if (isHmrUpdating) { - optimized = false; - dynamicChildren = null; - } - if (n1 == null) { - const placeholder = n2.el = true ? createComment("teleport start") : createText(""); - const mainAnchor = n2.anchor = true ? createComment("teleport end") : createText(""); - insert(placeholder, container, anchor); - insert(mainAnchor, container, anchor); - const mount = (container2, anchor2) => { - if (shapeFlag & 16) { - mountChildren( - children, - container2, - anchor2, - parentComponent, - parentSuspense, - namespace, - slotScopeIds, - optimized - ); - } - }; - const mountToTarget = () => { - const target = n2.target = resolveTarget(n2.props, querySelector); - const targetAnchor = prepareAnchor(target, n2, createText, insert); - if (target) { - if (namespace !== "svg" && isTargetSVG(target)) { - namespace = "svg"; - } else if (namespace !== "mathml" && isTargetMathML(target)) { - namespace = "mathml"; - } - if (parentComponent && parentComponent.isCE) { - (parentComponent.ce._teleportTargets || (parentComponent.ce._teleportTargets = /* @__PURE__ */ new Set())).add(target); - } - if (!disabled) { - mount(target, targetAnchor); - updateCssVars(n2, false); - } - } else if (!disabled) { - warn$1( - "Invalid Teleport target on mount:", - target, - `(${typeof target})` - ); - } - }; - if (disabled) { - mount(container, mainAnchor); - updateCssVars(n2, true); - } - if (isTeleportDeferred(n2.props)) { - n2.el.__isMounted = false; - queuePostRenderEffect(() => { - mountToTarget(); - delete n2.el.__isMounted; - }, parentSuspense); - } else { - mountToTarget(); - } - } else { - if (isTeleportDeferred(n2.props) && n1.el.__isMounted === false) { - queuePostRenderEffect(() => { - TeleportImpl.process( - n1, - n2, - container, - anchor, - parentComponent, - parentSuspense, - namespace, - slotScopeIds, - optimized, - internals - ); - }, parentSuspense); - return; - } - n2.el = n1.el; - n2.targetStart = n1.targetStart; - const mainAnchor = n2.anchor = n1.anchor; - const target = n2.target = n1.target; - const targetAnchor = n2.targetAnchor = n1.targetAnchor; - const wasDisabled = isTeleportDisabled(n1.props); - const currentContainer = wasDisabled ? container : target; - const currentAnchor = wasDisabled ? mainAnchor : targetAnchor; - if (namespace === "svg" || isTargetSVG(target)) { - namespace = "svg"; - } else if (namespace === "mathml" || isTargetMathML(target)) { - namespace = "mathml"; - } - if (dynamicChildren) { - patchBlockChildren( - n1.dynamicChildren, - dynamicChildren, - currentContainer, - parentComponent, - parentSuspense, - namespace, - slotScopeIds - ); - traverseStaticChildren(n1, n2, false); - } else if (!optimized) { - patchChildren( - n1, - n2, - currentContainer, - currentAnchor, - parentComponent, - parentSuspense, - namespace, - slotScopeIds, - false - ); - } - if (disabled) { - if (!wasDisabled) { - moveTeleport( - n2, - container, - mainAnchor, - internals, - 1 - ); - } else { - if (n2.props && n1.props && n2.props.to !== n1.props.to) { - n2.props.to = n1.props.to; - } - } - } else { - if ((n2.props && n2.props.to) !== (n1.props && n1.props.to)) { - const nextTarget = n2.target = resolveTarget( - n2.props, - querySelector - ); - if (nextTarget) { - moveTeleport( - n2, - nextTarget, - null, - internals, - 0 - ); - } else if (true) { - warn$1( - "Invalid Teleport target on update:", - target, - `(${typeof target})` - ); - } - } else if (wasDisabled) { - moveTeleport( - n2, - target, - targetAnchor, - internals, - 1 - ); - } - } - updateCssVars(n2, disabled); - } - }, - remove(vnode, parentComponent, parentSuspense, { um: unmount, o: { remove: hostRemove } }, doRemove) { - const { - shapeFlag, - children, - anchor, - targetStart, - targetAnchor, - target, - props - } = vnode; - if (target) { - hostRemove(targetStart); - hostRemove(targetAnchor); - } - doRemove && hostRemove(anchor); - if (shapeFlag & 16) { - const shouldRemove = doRemove || !isTeleportDisabled(props); - for (let i = 0; i < children.length; i++) { - const child = children[i]; - unmount( - child, - parentComponent, - parentSuspense, - shouldRemove, - !!child.dynamicChildren - ); - } - } - }, - move: moveTeleport, - hydrate: hydrateTeleport -}; -function moveTeleport(vnode, container, parentAnchor, { o: { insert }, m: move }, moveType = 2) { - if (moveType === 0) { - insert(vnode.targetAnchor, container, parentAnchor); - } - const { el, anchor, shapeFlag, children, props } = vnode; - const isReorder = moveType === 2; - if (isReorder) { - insert(el, container, parentAnchor); - } - if (!isReorder || isTeleportDisabled(props)) { - if (shapeFlag & 16) { - for (let i = 0; i < children.length; i++) { - move( - children[i], - container, - parentAnchor, - 2 - ); - } - } - } - if (isReorder) { - insert(anchor, container, parentAnchor); - } -} -function hydrateTeleport(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized, { - o: { nextSibling, parentNode, querySelector, insert, createText } -}, hydrateChildren) { - function hydrateDisabledTeleport(node2, vnode2, targetStart, targetAnchor) { - vnode2.anchor = hydrateChildren( - nextSibling(node2), - vnode2, - parentNode(node2), - parentComponent, - parentSuspense, - slotScopeIds, - optimized - ); - vnode2.targetStart = targetStart; - vnode2.targetAnchor = targetAnchor; - } - const target = vnode.target = resolveTarget( - vnode.props, - querySelector - ); - const disabled = isTeleportDisabled(vnode.props); - if (target) { - const targetNode = target._lpa || target.firstChild; - if (vnode.shapeFlag & 16) { - if (disabled) { - hydrateDisabledTeleport( - node, - vnode, - targetNode, - targetNode && nextSibling(targetNode) - ); - } else { - vnode.anchor = nextSibling(node); - let targetAnchor = targetNode; - while (targetAnchor) { - if (targetAnchor && targetAnchor.nodeType === 8) { - if (targetAnchor.data === "teleport start anchor") { - vnode.targetStart = targetAnchor; - } else if (targetAnchor.data === "teleport anchor") { - vnode.targetAnchor = targetAnchor; - target._lpa = vnode.targetAnchor && nextSibling(vnode.targetAnchor); - break; - } - } - targetAnchor = nextSibling(targetAnchor); - } - if (!vnode.targetAnchor) { - prepareAnchor(target, vnode, createText, insert); - } - hydrateChildren( - targetNode && nextSibling(targetNode), - vnode, - target, - parentComponent, - parentSuspense, - slotScopeIds, - optimized - ); - } - } - updateCssVars(vnode, disabled); - } else if (disabled) { - if (vnode.shapeFlag & 16) { - hydrateDisabledTeleport(node, vnode, node, nextSibling(node)); - } - } - return vnode.anchor && nextSibling(vnode.anchor); -} -var Teleport = TeleportImpl; -function updateCssVars(vnode, isDisabled) { - const ctx = vnode.ctx; - if (ctx && ctx.ut) { - let node, anchor; - if (isDisabled) { - node = vnode.el; - anchor = vnode.anchor; - } else { - node = vnode.targetStart; - anchor = vnode.targetAnchor; - } - while (node && node !== anchor) { - if (node.nodeType === 1) node.setAttribute("data-v-owner", ctx.uid); - node = node.nextSibling; - } - ctx.ut(); - } -} -function prepareAnchor(target, vnode, createText, insert) { - const targetStart = vnode.targetStart = createText(""); - const targetAnchor = vnode.targetAnchor = createText(""); - targetStart[TeleportEndKey] = targetAnchor; - if (target) { - insert(targetStart, target); - insert(targetAnchor, target); - } - return targetAnchor; -} -var leaveCbKey = Symbol("_leaveCb"); -var enterCbKey = Symbol("_enterCb"); -function useTransitionState() { - const state = { - isMounted: false, - isLeaving: false, - isUnmounting: false, - leavingVNodes: /* @__PURE__ */ new Map() - }; - onMounted(() => { - state.isMounted = true; - }); - onBeforeUnmount(() => { - state.isUnmounting = true; - }); - return state; -} -var TransitionHookValidator = [Function, Array]; -var BaseTransitionPropsValidators = { - mode: String, - appear: Boolean, - persisted: Boolean, - // enter - onBeforeEnter: TransitionHookValidator, - onEnter: TransitionHookValidator, - onAfterEnter: TransitionHookValidator, - onEnterCancelled: TransitionHookValidator, - // leave - onBeforeLeave: TransitionHookValidator, - onLeave: TransitionHookValidator, - onAfterLeave: TransitionHookValidator, - onLeaveCancelled: TransitionHookValidator, - // appear - onBeforeAppear: TransitionHookValidator, - onAppear: TransitionHookValidator, - onAfterAppear: TransitionHookValidator, - onAppearCancelled: TransitionHookValidator -}; -var recursiveGetSubtree = (instance) => { - const subTree = instance.subTree; - return subTree.component ? recursiveGetSubtree(subTree.component) : subTree; -}; -var BaseTransitionImpl = { - name: `BaseTransition`, - props: BaseTransitionPropsValidators, - setup(props, { slots }) { - const instance = getCurrentInstance(); - const state = useTransitionState(); - return () => { - const children = slots.default && getTransitionRawChildren(slots.default(), true); - if (!children || !children.length) { - return; - } - const child = findNonCommentChild(children); - const rawProps = toRaw(props); - const { mode } = rawProps; - if (mode && mode !== "in-out" && mode !== "out-in" && mode !== "default") { - warn$1(`invalid mode: ${mode}`); - } - if (state.isLeaving) { - return emptyPlaceholder(child); - } - const innerChild = getInnerChild$1(child); - if (!innerChild) { - return emptyPlaceholder(child); - } - let enterHooks = resolveTransitionHooks( - innerChild, - rawProps, - state, - instance, - // #11061, ensure enterHooks is fresh after clone - (hooks) => enterHooks = hooks - ); - if (innerChild.type !== Comment) { - setTransitionHooks(innerChild, enterHooks); - } - let oldInnerChild = instance.subTree && getInnerChild$1(instance.subTree); - if (oldInnerChild && oldInnerChild.type !== Comment && !isSameVNodeType(oldInnerChild, innerChild) && recursiveGetSubtree(instance).type !== Comment) { - let leavingHooks = resolveTransitionHooks( - oldInnerChild, - rawProps, - state, - instance - ); - setTransitionHooks(oldInnerChild, leavingHooks); - if (mode === "out-in" && innerChild.type !== Comment) { - state.isLeaving = true; - leavingHooks.afterLeave = () => { - state.isLeaving = false; - if (!(instance.job.flags & 8)) { - instance.update(); - } - delete leavingHooks.afterLeave; - oldInnerChild = void 0; - }; - return emptyPlaceholder(child); - } else if (mode === "in-out" && innerChild.type !== Comment) { - leavingHooks.delayLeave = (el, earlyRemove, delayedLeave) => { - const leavingVNodesCache = getLeavingNodesForType( - state, - oldInnerChild - ); - leavingVNodesCache[String(oldInnerChild.key)] = oldInnerChild; - el[leaveCbKey] = () => { - earlyRemove(); - el[leaveCbKey] = void 0; - delete enterHooks.delayedLeave; - oldInnerChild = void 0; - }; - enterHooks.delayedLeave = () => { - delayedLeave(); - delete enterHooks.delayedLeave; - oldInnerChild = void 0; - }; - }; - } else { - oldInnerChild = void 0; - } - } else if (oldInnerChild) { - oldInnerChild = void 0; - } - return child; - }; - } -}; -function findNonCommentChild(children) { - let child = children[0]; - if (children.length > 1) { - let hasFound = false; - for (const c of children) { - if (c.type !== Comment) { - if (hasFound) { - warn$1( - " can only be used on a single element or component. Use for lists." - ); - break; - } - child = c; - hasFound = true; - if (false) break; - } - } - } - return child; -} -var BaseTransition = BaseTransitionImpl; -function getLeavingNodesForType(state, vnode) { - const { leavingVNodes } = state; - let leavingVNodesCache = leavingVNodes.get(vnode.type); - if (!leavingVNodesCache) { - leavingVNodesCache = /* @__PURE__ */ Object.create(null); - leavingVNodes.set(vnode.type, leavingVNodesCache); - } - return leavingVNodesCache; -} -function resolveTransitionHooks(vnode, props, state, instance, postClone) { - const { - appear, - mode, - persisted = false, - onBeforeEnter, - onEnter, - onAfterEnter, - onEnterCancelled, - onBeforeLeave, - onLeave, - onAfterLeave, - onLeaveCancelled, - onBeforeAppear, - onAppear, - onAfterAppear, - onAppearCancelled - } = props; - const key = String(vnode.key); - const leavingVNodesCache = getLeavingNodesForType(state, vnode); - const callHook3 = (hook, args) => { - hook && callWithAsyncErrorHandling( - hook, - instance, - 9, - args - ); - }; - const callAsyncHook = (hook, args) => { - const done = args[1]; - callHook3(hook, args); - if (isArray(hook)) { - if (hook.every((hook2) => hook2.length <= 1)) done(); - } else if (hook.length <= 1) { - done(); - } - }; - const hooks = { - mode, - persisted, - beforeEnter(el) { - let hook = onBeforeEnter; - if (!state.isMounted) { - if (appear) { - hook = onBeforeAppear || onBeforeEnter; - } else { - return; - } - } - if (el[leaveCbKey]) { - el[leaveCbKey]( - true - /* cancelled */ - ); - } - const leavingVNode = leavingVNodesCache[key]; - if (leavingVNode && isSameVNodeType(vnode, leavingVNode) && leavingVNode.el[leaveCbKey]) { - leavingVNode.el[leaveCbKey](); - } - callHook3(hook, [el]); - }, - enter(el) { - let hook = onEnter; - let afterHook = onAfterEnter; - let cancelHook = onEnterCancelled; - if (!state.isMounted) { - if (appear) { - hook = onAppear || onEnter; - afterHook = onAfterAppear || onAfterEnter; - cancelHook = onAppearCancelled || onEnterCancelled; - } else { - return; - } - } - let called = false; - const done = el[enterCbKey] = (cancelled) => { - if (called) return; - called = true; - if (cancelled) { - callHook3(cancelHook, [el]); - } else { - callHook3(afterHook, [el]); - } - if (hooks.delayedLeave) { - hooks.delayedLeave(); - } - el[enterCbKey] = void 0; - }; - if (hook) { - callAsyncHook(hook, [el, done]); - } else { - done(); - } - }, - leave(el, remove2) { - const key2 = String(vnode.key); - if (el[enterCbKey]) { - el[enterCbKey]( - true - /* cancelled */ - ); - } - if (state.isUnmounting) { - return remove2(); - } - callHook3(onBeforeLeave, [el]); - let called = false; - const done = el[leaveCbKey] = (cancelled) => { - if (called) return; - called = true; - remove2(); - if (cancelled) { - callHook3(onLeaveCancelled, [el]); - } else { - callHook3(onAfterLeave, [el]); - } - el[leaveCbKey] = void 0; - if (leavingVNodesCache[key2] === vnode) { - delete leavingVNodesCache[key2]; - } - }; - leavingVNodesCache[key2] = vnode; - if (onLeave) { - callAsyncHook(onLeave, [el, done]); - } else { - done(); - } - }, - clone(vnode2) { - const hooks2 = resolveTransitionHooks( - vnode2, - props, - state, - instance, - postClone - ); - if (postClone) postClone(hooks2); - return hooks2; - } - }; - return hooks; -} -function emptyPlaceholder(vnode) { - if (isKeepAlive(vnode)) { - vnode = cloneVNode(vnode); - vnode.children = null; - return vnode; - } -} -function getInnerChild$1(vnode) { - if (!isKeepAlive(vnode)) { - if (isTeleport(vnode.type) && vnode.children) { - return findNonCommentChild(vnode.children); - } - return vnode; - } - if (vnode.component) { - return vnode.component.subTree; - } - const { shapeFlag, children } = vnode; - if (children) { - if (shapeFlag & 16) { - return children[0]; - } - if (shapeFlag & 32 && isFunction(children.default)) { - return children.default(); - } - } -} -function setTransitionHooks(vnode, hooks) { - if (vnode.shapeFlag & 6 && vnode.component) { - vnode.transition = hooks; - setTransitionHooks(vnode.component.subTree, hooks); - } else if (vnode.shapeFlag & 128) { - vnode.ssContent.transition = hooks.clone(vnode.ssContent); - vnode.ssFallback.transition = hooks.clone(vnode.ssFallback); - } else { - vnode.transition = hooks; - } -} -function getTransitionRawChildren(children, keepComment = false, parentKey) { - let ret = []; - let keyedFragmentCount = 0; - for (let i = 0; i < children.length; i++) { - let child = children[i]; - const key = parentKey == null ? child.key : String(parentKey) + String(child.key != null ? child.key : i); - if (child.type === Fragment) { - if (child.patchFlag & 128) keyedFragmentCount++; - ret = ret.concat( - getTransitionRawChildren(child.children, keepComment, key) - ); - } else if (keepComment || child.type !== Comment) { - ret.push(key != null ? cloneVNode(child, { key }) : child); - } - } - if (keyedFragmentCount > 1) { - for (let i = 0; i < ret.length; i++) { - ret[i].patchFlag = -2; - } - } - return ret; -} -function defineComponent(options, extraOptions) { - return isFunction(options) ? ( - // #8236: extend call and options.name access are considered side-effects - // by Rollup, so we have to wrap it in a pure-annotated IIFE. - (() => extend({ name: options.name }, extraOptions, { setup: options }))() - ) : options; -} -function useId() { - const i = getCurrentInstance(); - if (i) { - return (i.appContext.config.idPrefix || "v") + "-" + i.ids[0] + i.ids[1]++; - } else if (true) { - warn$1( - `useId() is called when there is no active component instance to be associated with.` - ); - } - return ""; -} -function markAsyncBoundary(instance) { - instance.ids = [instance.ids[0] + instance.ids[2]++ + "-", 0, 0]; -} -var knownTemplateRefs = /* @__PURE__ */ new WeakSet(); -function useTemplateRef(key) { - const i = getCurrentInstance(); - const r = shallowRef(null); - if (i) { - const refs = i.refs === EMPTY_OBJ ? i.refs = {} : i.refs; - let desc; - if ((desc = Object.getOwnPropertyDescriptor(refs, key)) && !desc.configurable) { - warn$1(`useTemplateRef('${key}') already exists.`); - } else { - Object.defineProperty(refs, key, { - enumerable: true, - get: () => r.value, - set: (val) => r.value = val - }); - } - } else if (true) { - warn$1( - `useTemplateRef() is called when there is no active component instance to be associated with.` - ); - } - const ret = true ? readonly(r) : r; - if (true) { - knownTemplateRefs.add(ret); - } - return ret; -} -var pendingSetRefMap = /* @__PURE__ */ new WeakMap(); -function setRef(rawRef, oldRawRef, parentSuspense, vnode, isUnmount = false) { - if (isArray(rawRef)) { - rawRef.forEach( - (r, i) => setRef( - r, - oldRawRef && (isArray(oldRawRef) ? oldRawRef[i] : oldRawRef), - parentSuspense, - vnode, - isUnmount - ) - ); - return; - } - if (isAsyncWrapper(vnode) && !isUnmount) { - if (vnode.shapeFlag & 512 && vnode.type.__asyncResolved && vnode.component.subTree.component) { - setRef(rawRef, oldRawRef, parentSuspense, vnode.component.subTree); - } - return; - } - const refValue = vnode.shapeFlag & 4 ? getComponentPublicInstance(vnode.component) : vnode.el; - const value = isUnmount ? null : refValue; - const { i: owner, r: ref2 } = rawRef; - if (!owner) { - warn$1( - `Missing ref owner context. ref cannot be used on hoisted vnodes. A vnode with ref must be created inside the render function.` - ); - return; - } - const oldRef = oldRawRef && oldRawRef.r; - const refs = owner.refs === EMPTY_OBJ ? owner.refs = {} : owner.refs; - const setupState = owner.setupState; - const rawSetupState = toRaw(setupState); - const canSetSetupRef = setupState === EMPTY_OBJ ? NO : (key) => { - if (true) { - if (hasOwn(rawSetupState, key) && !isRef2(rawSetupState[key])) { - warn$1( - `Template ref "${key}" used on a non-ref value. It will not work in the production build.` - ); - } - if (knownTemplateRefs.has(rawSetupState[key])) { - return false; - } - } - return hasOwn(rawSetupState, key); - }; - const canSetRef = (ref22) => { - return !knownTemplateRefs.has(ref22); - }; - if (oldRef != null && oldRef !== ref2) { - invalidatePendingSetRef(oldRawRef); - if (isString(oldRef)) { - refs[oldRef] = null; - if (canSetSetupRef(oldRef)) { - setupState[oldRef] = null; - } - } else if (isRef2(oldRef)) { - if (canSetRef(oldRef)) { - oldRef.value = null; - } - const oldRawRefAtom = oldRawRef; - if (oldRawRefAtom.k) refs[oldRawRefAtom.k] = null; - } - } - if (isFunction(ref2)) { - callWithErrorHandling(ref2, owner, 12, [value, refs]); - } else { - const _isString = isString(ref2); - const _isRef = isRef2(ref2); - if (_isString || _isRef) { - const doSet = () => { - if (rawRef.f) { - const existing = _isString ? canSetSetupRef(ref2) ? setupState[ref2] : refs[ref2] : canSetRef(ref2) || !rawRef.k ? ref2.value : refs[rawRef.k]; - if (isUnmount) { - isArray(existing) && remove(existing, refValue); - } else { - if (!isArray(existing)) { - if (_isString) { - refs[ref2] = [refValue]; - if (canSetSetupRef(ref2)) { - setupState[ref2] = refs[ref2]; - } - } else { - const newVal = [refValue]; - if (canSetRef(ref2)) { - ref2.value = newVal; - } - if (rawRef.k) refs[rawRef.k] = newVal; - } - } else if (!existing.includes(refValue)) { - existing.push(refValue); - } - } - } else if (_isString) { - refs[ref2] = value; - if (canSetSetupRef(ref2)) { - setupState[ref2] = value; - } - } else if (_isRef) { - if (canSetRef(ref2)) { - ref2.value = value; - } - if (rawRef.k) refs[rawRef.k] = value; - } else if (true) { - warn$1("Invalid template ref type:", ref2, `(${typeof ref2})`); - } - }; - if (value) { - const job = () => { - doSet(); - pendingSetRefMap.delete(rawRef); - }; - job.id = -1; - pendingSetRefMap.set(rawRef, job); - queuePostRenderEffect(job, parentSuspense); - } else { - invalidatePendingSetRef(rawRef); - doSet(); - } - } else if (true) { - warn$1("Invalid template ref type:", ref2, `(${typeof ref2})`); - } - } -} -function invalidatePendingSetRef(rawRef) { - const pendingSetRef = pendingSetRefMap.get(rawRef); - if (pendingSetRef) { - pendingSetRef.flags |= 8; - pendingSetRefMap.delete(rawRef); - } -} -var hasLoggedMismatchError = false; -var logMismatchError = () => { - if (hasLoggedMismatchError) { - return; - } - console.error("Hydration completed but contains mismatches."); - hasLoggedMismatchError = true; -}; -var isSVGContainer = (container) => container.namespaceURI.includes("svg") && container.tagName !== "foreignObject"; -var isMathMLContainer = (container) => container.namespaceURI.includes("MathML"); -var getContainerType = (container) => { - if (container.nodeType !== 1) return void 0; - if (isSVGContainer(container)) return "svg"; - if (isMathMLContainer(container)) return "mathml"; - return void 0; -}; -var isComment = (node) => node.nodeType === 8; -function createHydrationFunctions(rendererInternals) { - const { - mt: mountComponent, - p: patch, - o: { - patchProp: patchProp2, - createText, - nextSibling, - parentNode, - remove: remove2, - insert, - createComment - } - } = rendererInternals; - const hydrate2 = (vnode, container) => { - if (!container.hasChildNodes()) { - warn$1( - `Attempting to hydrate existing markup but container is empty. Performing full mount instead.` - ); - patch(null, vnode, container); - flushPostFlushCbs(); - container._vnode = vnode; - return; - } - hydrateNode(container.firstChild, vnode, null, null, null); - flushPostFlushCbs(); - container._vnode = vnode; - }; - const hydrateNode = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized = false) => { - optimized = optimized || !!vnode.dynamicChildren; - const isFragmentStart = isComment(node) && node.data === "["; - const onMismatch = () => handleMismatch( - node, - vnode, - parentComponent, - parentSuspense, - slotScopeIds, - isFragmentStart - ); - const { type, ref: ref2, shapeFlag, patchFlag } = vnode; - let domType = node.nodeType; - vnode.el = node; - if (true) { - def(node, "__vnode", vnode, true); - def(node, "__vueParentComponent", parentComponent, true); - } - if (patchFlag === -2) { - optimized = false; - vnode.dynamicChildren = null; - } - let nextNode = null; - switch (type) { - case Text: - if (domType !== 3) { - if (vnode.children === "") { - insert(vnode.el = createText(""), parentNode(node), node); - nextNode = node; - } else { - nextNode = onMismatch(); - } - } else { - if (node.data !== vnode.children) { - warn$1( - `Hydration text mismatch in`, - node.parentNode, - ` - - rendered on server: ${JSON.stringify( - node.data - )} - - expected on client: ${JSON.stringify(vnode.children)}` - ); - logMismatchError(); - node.data = vnode.children; - } - nextNode = nextSibling(node); - } - break; - case Comment: - if (isTemplateNode(node)) { - nextNode = nextSibling(node); - replaceNode( - vnode.el = node.content.firstChild, - node, - parentComponent - ); - } else if (domType !== 8 || isFragmentStart) { - nextNode = onMismatch(); - } else { - nextNode = nextSibling(node); - } - break; - case Static: - if (isFragmentStart) { - node = nextSibling(node); - domType = node.nodeType; - } - if (domType === 1 || domType === 3) { - nextNode = node; - const needToAdoptContent = !vnode.children.length; - for (let i = 0; i < vnode.staticCount; i++) { - if (needToAdoptContent) - vnode.children += nextNode.nodeType === 1 ? nextNode.outerHTML : nextNode.data; - if (i === vnode.staticCount - 1) { - vnode.anchor = nextNode; - } - nextNode = nextSibling(nextNode); - } - return isFragmentStart ? nextSibling(nextNode) : nextNode; - } else { - onMismatch(); - } - break; - case Fragment: - if (!isFragmentStart) { - nextNode = onMismatch(); - } else { - nextNode = hydrateFragment( - node, - vnode, - parentComponent, - parentSuspense, - slotScopeIds, - optimized - ); - } - break; - default: - if (shapeFlag & 1) { - if ((domType !== 1 || vnode.type.toLowerCase() !== node.tagName.toLowerCase()) && !isTemplateNode(node)) { - nextNode = onMismatch(); - } else { - nextNode = hydrateElement( - node, - vnode, - parentComponent, - parentSuspense, - slotScopeIds, - optimized - ); - } - } else if (shapeFlag & 6) { - vnode.slotScopeIds = slotScopeIds; - const container = parentNode(node); - if (isFragmentStart) { - nextNode = locateClosingAnchor(node); - } else if (isComment(node) && node.data === "teleport start") { - nextNode = locateClosingAnchor(node, node.data, "teleport end"); - } else { - nextNode = nextSibling(node); - } - mountComponent( - vnode, - container, - null, - parentComponent, - parentSuspense, - getContainerType(container), - optimized - ); - if (isAsyncWrapper(vnode) && !vnode.type.__asyncResolved) { - let subTree; - if (isFragmentStart) { - subTree = createVNode(Fragment); - subTree.anchor = nextNode ? nextNode.previousSibling : container.lastChild; - } else { - subTree = node.nodeType === 3 ? createTextVNode("") : createVNode("div"); - } - subTree.el = node; - vnode.component.subTree = subTree; - } - } else if (shapeFlag & 64) { - if (domType !== 8) { - nextNode = onMismatch(); - } else { - nextNode = vnode.type.hydrate( - node, - vnode, - parentComponent, - parentSuspense, - slotScopeIds, - optimized, - rendererInternals, - hydrateChildren - ); - } - } else if (shapeFlag & 128) { - nextNode = vnode.type.hydrate( - node, - vnode, - parentComponent, - parentSuspense, - getContainerType(parentNode(node)), - slotScopeIds, - optimized, - rendererInternals, - hydrateNode - ); - } else if (true) { - warn$1("Invalid HostVNode type:", type, `(${typeof type})`); - } - } - if (ref2 != null) { - setRef(ref2, null, parentSuspense, vnode); - } - return nextNode; - }; - const hydrateElement = (el, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => { - optimized = optimized || !!vnode.dynamicChildren; - const { type, props, patchFlag, shapeFlag, dirs, transition } = vnode; - const forcePatch = type === "input" || type === "option"; - if (true) { - if (dirs) { - invokeDirectiveHook(vnode, null, parentComponent, "created"); - } - let needCallTransitionHooks = false; - if (isTemplateNode(el)) { - needCallTransitionHooks = needTransition( - null, - // no need check parentSuspense in hydration - transition - ) && parentComponent && parentComponent.vnode.props && parentComponent.vnode.props.appear; - const content = el.content.firstChild; - if (needCallTransitionHooks) { - const cls = content.getAttribute("class"); - if (cls) content.$cls = cls; - transition.beforeEnter(content); - } - replaceNode(content, el, parentComponent); - vnode.el = el = content; - } - if (shapeFlag & 16 && // skip if element has innerHTML / textContent - !(props && (props.innerHTML || props.textContent))) { - let next = hydrateChildren( - el.firstChild, - vnode, - el, - parentComponent, - parentSuspense, - slotScopeIds, - optimized - ); - let hasWarned2 = false; - while (next) { - if (!isMismatchAllowed( - el, - 1 - /* CHILDREN */ - )) { - if (!hasWarned2) { - warn$1( - `Hydration children mismatch on`, - el, - ` -Server rendered element contains more child nodes than client vdom.` - ); - hasWarned2 = true; - } - logMismatchError(); - } - const cur = next; - next = next.nextSibling; - remove2(cur); - } - } else if (shapeFlag & 8) { - let clientText = vnode.children; - if (clientText[0] === "\n" && (el.tagName === "PRE" || el.tagName === "TEXTAREA")) { - clientText = clientText.slice(1); - } - if (el.textContent !== clientText) { - if (!isMismatchAllowed( - el, - 0 - /* TEXT */ - )) { - warn$1( - `Hydration text content mismatch on`, - el, - ` - - rendered on server: ${el.textContent} - - expected on client: ${vnode.children}` - ); - logMismatchError(); - } - el.textContent = vnode.children; - } - } - if (props) { - if (true) { - const isCustomElement = el.tagName.includes("-"); - for (const key in props) { - if (// #11189 skip if this node has directives that have created hooks - // as it could have mutated the DOM in any possible way - !(dirs && dirs.some((d) => d.dir.created)) && propHasMismatch(el, key, props[key], vnode, parentComponent)) { - logMismatchError(); - } - if (forcePatch && (key.endsWith("value") || key === "indeterminate") || isOn(key) && !isReservedProp(key) || // force hydrate v-bind with .prop modifiers - key[0] === "." || isCustomElement) { - patchProp2(el, key, null, props[key], void 0, parentComponent); - } - } - } else if (props.onClick) { - patchProp2( - el, - "onClick", - null, - props.onClick, - void 0, - parentComponent - ); - } else if (patchFlag & 4 && isReactive(props.style)) { - for (const key in props.style) props.style[key]; - } - } - let vnodeHooks; - if (vnodeHooks = props && props.onVnodeBeforeMount) { - invokeVNodeHook(vnodeHooks, parentComponent, vnode); - } - if (dirs) { - invokeDirectiveHook(vnode, null, parentComponent, "beforeMount"); - } - if ((vnodeHooks = props && props.onVnodeMounted) || dirs || needCallTransitionHooks) { - queueEffectWithSuspense(() => { - vnodeHooks && invokeVNodeHook(vnodeHooks, parentComponent, vnode); - needCallTransitionHooks && transition.enter(el); - dirs && invokeDirectiveHook(vnode, null, parentComponent, "mounted"); - }, parentSuspense); - } - } - return el.nextSibling; - }; - const hydrateChildren = (node, parentVNode, container, parentComponent, parentSuspense, slotScopeIds, optimized) => { - optimized = optimized || !!parentVNode.dynamicChildren; - const children = parentVNode.children; - const l = children.length; - let hasWarned2 = false; - for (let i = 0; i < l; i++) { - const vnode = optimized ? children[i] : children[i] = normalizeVNode(children[i]); - const isText = vnode.type === Text; - if (node) { - if (isText && !optimized) { - if (i + 1 < l && normalizeVNode(children[i + 1]).type === Text) { - insert( - createText( - node.data.slice(vnode.children.length) - ), - container, - nextSibling(node) - ); - node.data = vnode.children; - } - } - node = hydrateNode( - node, - vnode, - parentComponent, - parentSuspense, - slotScopeIds, - optimized - ); - } else if (isText && !vnode.children) { - insert(vnode.el = createText(""), container); - } else { - if (!isMismatchAllowed( - container, - 1 - /* CHILDREN */ - )) { - if (!hasWarned2) { - warn$1( - `Hydration children mismatch on`, - container, - ` -Server rendered element contains fewer child nodes than client vdom.` - ); - hasWarned2 = true; - } - logMismatchError(); - } - patch( - null, - vnode, - container, - null, - parentComponent, - parentSuspense, - getContainerType(container), - slotScopeIds - ); - } - } - return node; - }; - const hydrateFragment = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => { - const { slotScopeIds: fragmentSlotScopeIds } = vnode; - if (fragmentSlotScopeIds) { - slotScopeIds = slotScopeIds ? slotScopeIds.concat(fragmentSlotScopeIds) : fragmentSlotScopeIds; - } - const container = parentNode(node); - const next = hydrateChildren( - nextSibling(node), - vnode, - container, - parentComponent, - parentSuspense, - slotScopeIds, - optimized - ); - if (next && isComment(next) && next.data === "]") { - return nextSibling(vnode.anchor = next); - } else { - logMismatchError(); - insert(vnode.anchor = createComment(`]`), container, next); - return next; - } - }; - const handleMismatch = (node, vnode, parentComponent, parentSuspense, slotScopeIds, isFragment) => { - if (!isMismatchAllowed( - node.parentElement, - 1 - /* CHILDREN */ - )) { - warn$1( - `Hydration node mismatch: -- rendered on server:`, - node, - node.nodeType === 3 ? `(text)` : isComment(node) && node.data === "[" ? `(start of fragment)` : ``, - ` -- expected on client:`, - vnode.type - ); - logMismatchError(); - } - vnode.el = null; - if (isFragment) { - const end = locateClosingAnchor(node); - while (true) { - const next2 = nextSibling(node); - if (next2 && next2 !== end) { - remove2(next2); - } else { - break; - } - } - } - const next = nextSibling(node); - const container = parentNode(node); - remove2(node); - patch( - null, - vnode, - container, - next, - parentComponent, - parentSuspense, - getContainerType(container), - slotScopeIds - ); - if (parentComponent) { - parentComponent.vnode.el = vnode.el; - updateHOCHostEl(parentComponent, vnode.el); - } - return next; - }; - const locateClosingAnchor = (node, open = "[", close = "]") => { - let match = 0; - while (node) { - node = nextSibling(node); - if (node && isComment(node)) { - if (node.data === open) match++; - if (node.data === close) { - if (match === 0) { - return nextSibling(node); - } else { - match--; - } - } - } - } - return node; - }; - const replaceNode = (newNode, oldNode, parentComponent) => { - const parentNode2 = oldNode.parentNode; - if (parentNode2) { - parentNode2.replaceChild(newNode, oldNode); - } - let parent = parentComponent; - while (parent) { - if (parent.vnode.el === oldNode) { - parent.vnode.el = parent.subTree.el = newNode; - } - parent = parent.parent; - } - }; - const isTemplateNode = (node) => { - return node.nodeType === 1 && node.tagName === "TEMPLATE"; - }; - return [hydrate2, hydrateNode]; -} -function propHasMismatch(el, key, clientValue, vnode, instance) { - let mismatchType; - let mismatchKey; - let actual; - let expected; - if (key === "class") { - if (el.$cls) { - actual = el.$cls; - delete el.$cls; - } else { - actual = el.getAttribute("class"); - } - expected = normalizeClass(clientValue); - if (!isSetEqual(toClassSet(actual || ""), toClassSet(expected))) { - mismatchType = 2; - mismatchKey = `class`; - } - } else if (key === "style") { - actual = el.getAttribute("style") || ""; - expected = isString(clientValue) ? clientValue : stringifyStyle(normalizeStyle(clientValue)); - const actualMap = toStyleMap(actual); - const expectedMap = toStyleMap(expected); - if (vnode.dirs) { - for (const { dir, value } of vnode.dirs) { - if (dir.name === "show" && !value) { - expectedMap.set("display", "none"); - } - } - } - if (instance) { - resolveCssVars(instance, vnode, expectedMap); - } - if (!isMapEqual(actualMap, expectedMap)) { - mismatchType = 3; - mismatchKey = "style"; - } - } else if (el instanceof SVGElement && isKnownSvgAttr(key) || el instanceof HTMLElement && (isBooleanAttr(key) || isKnownHtmlAttr(key))) { - if (isBooleanAttr(key)) { - actual = el.hasAttribute(key); - expected = includeBooleanAttr(clientValue); - } else if (clientValue == null) { - actual = el.hasAttribute(key); - expected = false; - } else { - if (el.hasAttribute(key)) { - actual = el.getAttribute(key); - } else if (key === "value" && el.tagName === "TEXTAREA") { - actual = el.value; - } else { - actual = false; - } - expected = isRenderableAttrValue(clientValue) ? String(clientValue) : false; - } - if (actual !== expected) { - mismatchType = 4; - mismatchKey = key; - } - } - if (mismatchType != null && !isMismatchAllowed(el, mismatchType)) { - const format = (v) => v === false ? `(not rendered)` : `${mismatchKey}="${v}"`; - const preSegment = `Hydration ${MismatchTypeString[mismatchType]} mismatch on`; - const postSegment = ` - - rendered on server: ${format(actual)} - - expected on client: ${format(expected)} - Note: this mismatch is check-only. The DOM will not be rectified in production due to performance overhead. - You should fix the source of the mismatch.`; - { - warn$1(preSegment, el, postSegment); - } - return true; - } - return false; -} -function toClassSet(str) { - return new Set(str.trim().split(/\s+/)); -} -function isSetEqual(a, b) { - if (a.size !== b.size) { - return false; - } - for (const s of a) { - if (!b.has(s)) { - return false; - } - } - return true; -} -function toStyleMap(str) { - const styleMap = /* @__PURE__ */ new Map(); - for (const item of str.split(";")) { - let [key, value] = item.split(":"); - key = key.trim(); - value = value && value.trim(); - if (key && value) { - styleMap.set(key, value); - } - } - return styleMap; -} -function isMapEqual(a, b) { - if (a.size !== b.size) { - return false; - } - for (const [key, value] of a) { - if (value !== b.get(key)) { - return false; - } - } - return true; -} -function resolveCssVars(instance, vnode, expectedMap) { - const root = instance.subTree; - if (instance.getCssVars && (vnode === root || root && root.type === Fragment && root.children.includes(vnode))) { - const cssVars = instance.getCssVars(); - for (const key in cssVars) { - const value = normalizeCssVarValue(cssVars[key]); - expectedMap.set(`--${getEscapedCssVarName(key, false)}`, value); - } - } - if (vnode === root && instance.parent) { - resolveCssVars(instance.parent, instance.vnode, expectedMap); - } -} -var allowMismatchAttr = "data-allow-mismatch"; -var MismatchTypeString = { - [ - 0 - /* TEXT */ - ]: "text", - [ - 1 - /* CHILDREN */ - ]: "children", - [ - 2 - /* CLASS */ - ]: "class", - [ - 3 - /* STYLE */ - ]: "style", - [ - 4 - /* ATTRIBUTE */ - ]: "attribute" -}; -function isMismatchAllowed(el, allowedType) { - if (allowedType === 0 || allowedType === 1) { - while (el && !el.hasAttribute(allowMismatchAttr)) { - el = el.parentElement; - } - } - const allowedAttr = el && el.getAttribute(allowMismatchAttr); - if (allowedAttr == null) { - return false; - } else if (allowedAttr === "") { - return true; - } else { - const list = allowedAttr.split(","); - if (allowedType === 0 && list.includes("children")) { - return true; - } - return list.includes(MismatchTypeString[allowedType]); - } -} -var requestIdleCallback = getGlobalThis().requestIdleCallback || ((cb) => setTimeout(cb, 1)); -var cancelIdleCallback = getGlobalThis().cancelIdleCallback || ((id) => clearTimeout(id)); -var hydrateOnIdle = (timeout = 1e4) => (hydrate2) => { - const id = requestIdleCallback(hydrate2, { timeout }); - return () => cancelIdleCallback(id); -}; -function elementIsVisibleInViewport(el) { - const { top, left, bottom, right } = el.getBoundingClientRect(); - const { innerHeight, innerWidth } = window; - return (top > 0 && top < innerHeight || bottom > 0 && bottom < innerHeight) && (left > 0 && left < innerWidth || right > 0 && right < innerWidth); -} -var hydrateOnVisible = (opts) => (hydrate2, forEach) => { - const ob = new IntersectionObserver((entries) => { - for (const e of entries) { - if (!e.isIntersecting) continue; - ob.disconnect(); - hydrate2(); - break; - } - }, opts); - forEach((el) => { - if (!(el instanceof Element)) return; - if (elementIsVisibleInViewport(el)) { - hydrate2(); - ob.disconnect(); - return false; - } - ob.observe(el); - }); - return () => ob.disconnect(); -}; -var hydrateOnMediaQuery = (query) => (hydrate2) => { - if (query) { - const mql = matchMedia(query); - if (mql.matches) { - hydrate2(); - } else { - mql.addEventListener("change", hydrate2, { once: true }); - return () => mql.removeEventListener("change", hydrate2); - } - } -}; -var hydrateOnInteraction = (interactions = []) => (hydrate2, forEach) => { - if (isString(interactions)) interactions = [interactions]; - let hasHydrated = false; - const doHydrate = (e) => { - if (!hasHydrated) { - hasHydrated = true; - teardown(); - hydrate2(); - e.target.dispatchEvent(new e.constructor(e.type, e)); - } - }; - const teardown = () => { - forEach((el) => { - for (const i of interactions) { - el.removeEventListener(i, doHydrate); - } - }); - }; - forEach((el) => { - for (const i of interactions) { - el.addEventListener(i, doHydrate, { once: true }); - } - }); - return teardown; -}; -function forEachElement(node, cb) { - if (isComment(node) && node.data === "[") { - let depth = 1; - let next = node.nextSibling; - while (next) { - if (next.nodeType === 1) { - const result = cb(next); - if (result === false) { - break; - } - } else if (isComment(next)) { - if (next.data === "]") { - if (--depth === 0) break; - } else if (next.data === "[") { - depth++; - } - } - next = next.nextSibling; - } - } else { - cb(node); - } -} -var isAsyncWrapper = (i) => !!i.type.__asyncLoader; -function defineAsyncComponent(source) { - if (isFunction(source)) { - source = { loader: source }; - } - const { - loader, - loadingComponent, - errorComponent, - delay = 200, - hydrate: hydrateStrategy, - timeout, - // undefined = never times out - suspensible = true, - onError: userOnError - } = source; - let pendingRequest = null; - let resolvedComp; - let retries = 0; - const retry = () => { - retries++; - pendingRequest = null; - return load(); - }; - const load = () => { - let thisRequest; - return pendingRequest || (thisRequest = pendingRequest = loader().catch((err) => { - err = err instanceof Error ? err : new Error(String(err)); - if (userOnError) { - return new Promise((resolve2, reject) => { - const userRetry = () => resolve2(retry()); - const userFail = () => reject(err); - userOnError(err, userRetry, userFail, retries + 1); - }); - } else { - throw err; - } - }).then((comp) => { - if (thisRequest !== pendingRequest && pendingRequest) { - return pendingRequest; - } - if (!comp) { - warn$1( - `Async component loader resolved to undefined. If you are using retry(), make sure to return its return value.` - ); - } - if (comp && (comp.__esModule || comp[Symbol.toStringTag] === "Module")) { - comp = comp.default; - } - if (comp && !isObject(comp) && !isFunction(comp)) { - throw new Error(`Invalid async component load result: ${comp}`); - } - resolvedComp = comp; - return comp; - })); - }; - return defineComponent({ - name: "AsyncComponentWrapper", - __asyncLoader: load, - __asyncHydrate(el, instance, hydrate2) { - let patched = false; - (instance.bu || (instance.bu = [])).push(() => patched = true); - const performHydrate = () => { - if (patched) { - if (true) { - warn$1( - `Skipping lazy hydration for component '${getComponentName(resolvedComp) || resolvedComp.__file}': it was updated before lazy hydration performed.` - ); - } - return; - } - hydrate2(); - }; - const doHydrate = hydrateStrategy ? () => { - const teardown = hydrateStrategy( - performHydrate, - (cb) => forEachElement(el, cb) - ); - if (teardown) { - (instance.bum || (instance.bum = [])).push(teardown); - } - } : performHydrate; - if (resolvedComp) { - doHydrate(); - } else { - load().then(() => !instance.isUnmounted && doHydrate()); - } - }, - get __asyncResolved() { - return resolvedComp; - }, - setup() { - const instance = currentInstance; - markAsyncBoundary(instance); - if (resolvedComp) { - return () => createInnerComp(resolvedComp, instance); - } - const onError = (err) => { - pendingRequest = null; - handleError( - err, - instance, - 13, - !errorComponent - ); - }; - if (suspensible && instance.suspense || isInSSRComponentSetup) { - return load().then((comp) => { - return () => createInnerComp(comp, instance); - }).catch((err) => { - onError(err); - return () => errorComponent ? createVNode(errorComponent, { - error: err - }) : null; - }); - } - const loaded = ref(false); - const error = ref(); - const delayed = ref(!!delay); - if (delay) { - setTimeout(() => { - delayed.value = false; - }, delay); - } - if (timeout != null) { - setTimeout(() => { - if (!loaded.value && !error.value) { - const err = new Error( - `Async component timed out after ${timeout}ms.` - ); - onError(err); - error.value = err; - } - }, timeout); - } - load().then(() => { - loaded.value = true; - if (instance.parent && isKeepAlive(instance.parent.vnode)) { - instance.parent.update(); - } - }).catch((err) => { - onError(err); - error.value = err; - }); - return () => { - if (loaded.value && resolvedComp) { - return createInnerComp(resolvedComp, instance); - } else if (error.value && errorComponent) { - return createVNode(errorComponent, { - error: error.value - }); - } else if (loadingComponent && !delayed.value) { - return createVNode(loadingComponent); - } - }; - } - }); -} -function createInnerComp(comp, parent) { - const { ref: ref2, props, children, ce } = parent.vnode; - const vnode = createVNode(comp, props, children); - vnode.ref = ref2; - vnode.ce = ce; - delete parent.vnode.ce; - return vnode; -} -var isKeepAlive = (vnode) => vnode.type.__isKeepAlive; -var KeepAliveImpl = { - name: `KeepAlive`, - // Marker for special handling inside the renderer. We are not using a === - // check directly on KeepAlive in the renderer, because importing it directly - // would prevent it from being tree-shaken. - __isKeepAlive: true, - props: { - include: [String, RegExp, Array], - exclude: [String, RegExp, Array], - max: [String, Number] - }, - setup(props, { slots }) { - const instance = getCurrentInstance(); - const sharedContext = instance.ctx; - if (!sharedContext.renderer) { - return () => { - const children = slots.default && slots.default(); - return children && children.length === 1 ? children[0] : children; - }; - } - const cache = /* @__PURE__ */ new Map(); - const keys = /* @__PURE__ */ new Set(); - let current = null; - if (true) { - instance.__v_cache = cache; - } - const parentSuspense = instance.suspense; - const { - renderer: { - p: patch, - m: move, - um: _unmount, - o: { createElement } - } - } = sharedContext; - const storageContainer = createElement("div"); - sharedContext.activate = (vnode, container, anchor, namespace, optimized) => { - const instance2 = vnode.component; - move(vnode, container, anchor, 0, parentSuspense); - patch( - instance2.vnode, - vnode, - container, - anchor, - instance2, - parentSuspense, - namespace, - vnode.slotScopeIds, - optimized - ); - queuePostRenderEffect(() => { - instance2.isDeactivated = false; - if (instance2.a) { - invokeArrayFns(instance2.a); - } - const vnodeHook = vnode.props && vnode.props.onVnodeMounted; - if (vnodeHook) { - invokeVNodeHook(vnodeHook, instance2.parent, vnode); - } - }, parentSuspense); - if (true) { - devtoolsComponentAdded(instance2); - } - }; - sharedContext.deactivate = (vnode) => { - const instance2 = vnode.component; - invalidateMount(instance2.m); - invalidateMount(instance2.a); - move(vnode, storageContainer, null, 1, parentSuspense); - queuePostRenderEffect(() => { - if (instance2.da) { - invokeArrayFns(instance2.da); - } - const vnodeHook = vnode.props && vnode.props.onVnodeUnmounted; - if (vnodeHook) { - invokeVNodeHook(vnodeHook, instance2.parent, vnode); - } - instance2.isDeactivated = true; - }, parentSuspense); - if (true) { - devtoolsComponentAdded(instance2); - } - if (true) { - instance2.__keepAliveStorageContainer = storageContainer; - } - }; - function unmount(vnode) { - resetShapeFlag(vnode); - _unmount(vnode, instance, parentSuspense, true); - } - function pruneCache(filter) { - cache.forEach((vnode, key) => { - const name = getComponentName(vnode.type); - if (name && !filter(name)) { - pruneCacheEntry(key); - } - }); - } - function pruneCacheEntry(key) { - const cached = cache.get(key); - if (cached && (!current || !isSameVNodeType(cached, current))) { - unmount(cached); - } else if (current) { - resetShapeFlag(current); - } - cache.delete(key); - keys.delete(key); - } - watch2( - () => [props.include, props.exclude], - ([include, exclude]) => { - include && pruneCache((name) => matches(include, name)); - exclude && pruneCache((name) => !matches(exclude, name)); - }, - // prune post-render after `current` has been updated - { flush: "post", deep: true } - ); - let pendingCacheKey = null; - const cacheSubtree = () => { - if (pendingCacheKey != null) { - if (isSuspense(instance.subTree.type)) { - queuePostRenderEffect(() => { - cache.set(pendingCacheKey, getInnerChild(instance.subTree)); - }, instance.subTree.suspense); - } else { - cache.set(pendingCacheKey, getInnerChild(instance.subTree)); - } - } - }; - onMounted(cacheSubtree); - onUpdated(cacheSubtree); - onBeforeUnmount(() => { - cache.forEach((cached) => { - const { subTree, suspense } = instance; - const vnode = getInnerChild(subTree); - if (cached.type === vnode.type && cached.key === vnode.key) { - resetShapeFlag(vnode); - const da = vnode.component.da; - da && queuePostRenderEffect(da, suspense); - return; - } - unmount(cached); - }); - }); - return () => { - pendingCacheKey = null; - if (!slots.default) { - return current = null; - } - const children = slots.default(); - const rawVNode = children[0]; - if (children.length > 1) { - if (true) { - warn$1(`KeepAlive should contain exactly one component child.`); - } - current = null; - return children; - } else if (!isVNode(rawVNode) || !(rawVNode.shapeFlag & 4) && !(rawVNode.shapeFlag & 128)) { - current = null; - return rawVNode; - } - let vnode = getInnerChild(rawVNode); - if (vnode.type === Comment) { - current = null; - return vnode; - } - const comp = vnode.type; - const name = getComponentName( - isAsyncWrapper(vnode) ? vnode.type.__asyncResolved || {} : comp - ); - const { include, exclude, max } = props; - if (include && (!name || !matches(include, name)) || exclude && name && matches(exclude, name)) { - vnode.shapeFlag &= -257; - current = vnode; - return rawVNode; - } - const key = vnode.key == null ? comp : vnode.key; - const cachedVNode = cache.get(key); - if (vnode.el) { - vnode = cloneVNode(vnode); - if (rawVNode.shapeFlag & 128) { - rawVNode.ssContent = vnode; - } - } - pendingCacheKey = key; - if (cachedVNode) { - vnode.el = cachedVNode.el; - vnode.component = cachedVNode.component; - if (vnode.transition) { - setTransitionHooks(vnode, vnode.transition); - } - vnode.shapeFlag |= 512; - keys.delete(key); - keys.add(key); - } else { - keys.add(key); - if (max && keys.size > parseInt(max, 10)) { - pruneCacheEntry(keys.values().next().value); - } - } - vnode.shapeFlag |= 256; - current = vnode; - return isSuspense(rawVNode.type) ? rawVNode : vnode; - }; - } -}; -var KeepAlive = KeepAliveImpl; -function matches(pattern, name) { - if (isArray(pattern)) { - return pattern.some((p2) => matches(p2, name)); - } else if (isString(pattern)) { - return pattern.split(",").includes(name); - } else if (isRegExp(pattern)) { - pattern.lastIndex = 0; - return pattern.test(name); - } - return false; -} -function onActivated(hook, target) { - registerKeepAliveHook(hook, "a", target); -} -function onDeactivated(hook, target) { - registerKeepAliveHook(hook, "da", target); -} -function registerKeepAliveHook(hook, type, target = currentInstance) { - const wrappedHook = hook.__wdc || (hook.__wdc = () => { - let current = target; - while (current) { - if (current.isDeactivated) { - return; - } - current = current.parent; - } - return hook(); - }); - injectHook(type, wrappedHook, target); - if (target) { - let current = target.parent; - while (current && current.parent) { - if (isKeepAlive(current.parent.vnode)) { - injectToKeepAliveRoot(wrappedHook, type, target, current); - } - current = current.parent; - } - } -} -function injectToKeepAliveRoot(hook, type, target, keepAliveRoot) { - const injected = injectHook( - type, - hook, - keepAliveRoot, - true - /* prepend */ - ); - onUnmounted(() => { - remove(keepAliveRoot[type], injected); - }, target); -} -function resetShapeFlag(vnode) { - vnode.shapeFlag &= -257; - vnode.shapeFlag &= -513; -} -function getInnerChild(vnode) { - return vnode.shapeFlag & 128 ? vnode.ssContent : vnode; -} -function injectHook(type, hook, target = currentInstance, prepend = false) { - if (target) { - const hooks = target[type] || (target[type] = []); - const wrappedHook = hook.__weh || (hook.__weh = (...args) => { - pauseTracking(); - const reset = setCurrentInstance(target); - const res = callWithAsyncErrorHandling(hook, target, type, args); - reset(); - resetTracking(); - return res; - }); - if (prepend) { - hooks.unshift(wrappedHook); - } else { - hooks.push(wrappedHook); - } - return wrappedHook; - } else if (true) { - const apiName = toHandlerKey(ErrorTypeStrings$1[type].replace(/ hook$/, "")); - warn$1( - `${apiName} is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup(). If you are using async setup(), make sure to register lifecycle hooks before the first await statement.` - ); - } -} -var createHook = (lifecycle) => (hook, target = currentInstance) => { - if (!isInSSRComponentSetup || lifecycle === "sp") { - injectHook(lifecycle, (...args) => hook(...args), target); - } -}; -var onBeforeMount = createHook("bm"); -var onMounted = createHook("m"); -var onBeforeUpdate = createHook( - "bu" -); -var onUpdated = createHook("u"); -var onBeforeUnmount = createHook( - "bum" -); -var onUnmounted = createHook("um"); -var onServerPrefetch = createHook( - "sp" -); -var onRenderTriggered = createHook("rtg"); -var onRenderTracked = createHook("rtc"); -function onErrorCaptured(hook, target = currentInstance) { - injectHook("ec", hook, target); -} -var COMPONENTS = "components"; -var DIRECTIVES = "directives"; -function resolveComponent(name, maybeSelfReference) { - return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name; -} -var NULL_DYNAMIC_COMPONENT = Symbol.for("v-ndc"); -function resolveDynamicComponent(component) { - if (isString(component)) { - return resolveAsset(COMPONENTS, component, false) || component; - } else { - return component || NULL_DYNAMIC_COMPONENT; - } -} -function resolveDirective(name) { - return resolveAsset(DIRECTIVES, name); -} -function resolveAsset(type, name, warnMissing = true, maybeSelfReference = false) { - const instance = currentRenderingInstance || currentInstance; - if (instance) { - const Component = instance.type; - if (type === COMPONENTS) { - const selfName = getComponentName( - Component, - false - ); - if (selfName && (selfName === name || selfName === camelize(name) || selfName === capitalize(camelize(name)))) { - return Component; - } - } - const res = ( - // local registration - // check instance[type] first which is resolved for options API - resolve(instance[type] || Component[type], name) || // global registration - resolve(instance.appContext[type], name) - ); - if (!res && maybeSelfReference) { - return Component; - } - if (warnMissing && !res) { - const extra = type === COMPONENTS ? ` -If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.` : ``; - warn$1(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`); - } - return res; - } else if (true) { - warn$1( - `resolve${capitalize(type.slice(0, -1))} can only be used in render() or setup().` - ); - } -} -function resolve(registry, name) { - return registry && (registry[name] || registry[camelize(name)] || registry[capitalize(camelize(name))]); -} -function renderList(source, renderItem, cache, index) { - let ret; - const cached = cache && cache[index]; - const sourceIsArray = isArray(source); - if (sourceIsArray || isString(source)) { - const sourceIsReactiveArray = sourceIsArray && isReactive(source); - let needsWrap = false; - let isReadonlySource = false; - if (sourceIsReactiveArray) { - needsWrap = !isShallow(source); - isReadonlySource = isReadonly(source); - source = shallowReadArray(source); - } - ret = new Array(source.length); - for (let i = 0, l = source.length; i < l; i++) { - ret[i] = renderItem( - needsWrap ? isReadonlySource ? toReadonly(toReactive(source[i])) : toReactive(source[i]) : source[i], - i, - void 0, - cached && cached[i] - ); - } - } else if (typeof source === "number") { - if (!Number.isInteger(source)) { - warn$1(`The v-for range expect an integer value but got ${source}.`); - } - ret = new Array(source); - for (let i = 0; i < source; i++) { - ret[i] = renderItem(i + 1, i, void 0, cached && cached[i]); - } - } else if (isObject(source)) { - if (source[Symbol.iterator]) { - ret = Array.from( - source, - (item, i) => renderItem(item, i, void 0, cached && cached[i]) - ); - } else { - const keys = Object.keys(source); - ret = new Array(keys.length); - for (let i = 0, l = keys.length; i < l; i++) { - const key = keys[i]; - ret[i] = renderItem(source[key], key, i, cached && cached[i]); - } - } - } else { - ret = []; - } - if (cache) { - cache[index] = ret; - } - return ret; -} -function createSlots(slots, dynamicSlots) { - for (let i = 0; i < dynamicSlots.length; i++) { - const slot = dynamicSlots[i]; - if (isArray(slot)) { - for (let j = 0; j < slot.length; j++) { - slots[slot[j].name] = slot[j].fn; - } - } else if (slot) { - slots[slot.name] = slot.key ? (...args) => { - const res = slot.fn(...args); - if (res) res.key = slot.key; - return res; - } : slot.fn; - } - } - return slots; -} -function renderSlot(slots, name, props = {}, fallback, noSlotted) { - if (currentRenderingInstance.ce || currentRenderingInstance.parent && isAsyncWrapper(currentRenderingInstance.parent) && currentRenderingInstance.parent.ce) { - const hasProps = Object.keys(props).length > 0; - if (name !== "default") props.name = name; - return openBlock(), createBlock( - Fragment, - null, - [createVNode("slot", props, fallback && fallback())], - hasProps ? -2 : 64 - ); - } - let slot = slots[name]; - if (slot && slot.length > 1) { - warn$1( - `SSR-optimized slot function detected in a non-SSR-optimized render function. You need to mark this component with $dynamic-slots in the parent template.` - ); - slot = () => []; - } - if (slot && slot._c) { - slot._d = false; - } - openBlock(); - const validSlotContent = slot && ensureValidVNode(slot(props)); - const slotKey = props.key || // slot content array of a dynamic conditional slot may have a branch - // key attached in the `createSlots` helper, respect that - validSlotContent && validSlotContent.key; - const rendered = createBlock( - Fragment, - { - key: (slotKey && !isSymbol(slotKey) ? slotKey : `_${name}`) + // #7256 force differentiate fallback content from actual content - (!validSlotContent && fallback ? "_fb" : "") - }, - validSlotContent || (fallback ? fallback() : []), - validSlotContent && slots._ === 1 ? 64 : -2 - ); - if (!noSlotted && rendered.scopeId) { - rendered.slotScopeIds = [rendered.scopeId + "-s"]; - } - if (slot && slot._c) { - slot._d = true; - } - return rendered; -} -function ensureValidVNode(vnodes) { - return vnodes.some((child) => { - if (!isVNode(child)) return true; - if (child.type === Comment) return false; - if (child.type === Fragment && !ensureValidVNode(child.children)) - return false; - return true; - }) ? vnodes : null; -} -function toHandlers(obj, preserveCaseIfNecessary) { - const ret = {}; - if (!isObject(obj)) { - warn$1(`v-on with no argument expects an object value.`); - return ret; - } - for (const key in obj) { - ret[preserveCaseIfNecessary && /[A-Z]/.test(key) ? `on:${key}` : toHandlerKey(key)] = obj[key]; - } - return ret; -} -var getPublicInstance = (i) => { - if (!i) return null; - if (isStatefulComponent(i)) return getComponentPublicInstance(i); - return getPublicInstance(i.parent); -}; -var publicPropertiesMap = ( - // Move PURE marker to new line to workaround compiler discarding it - // due to type annotation - extend(/* @__PURE__ */ Object.create(null), { - $: (i) => i, - $el: (i) => i.vnode.el, - $data: (i) => i.data, - $props: (i) => true ? shallowReadonly(i.props) : i.props, - $attrs: (i) => true ? shallowReadonly(i.attrs) : i.attrs, - $slots: (i) => true ? shallowReadonly(i.slots) : i.slots, - $refs: (i) => true ? shallowReadonly(i.refs) : i.refs, - $parent: (i) => getPublicInstance(i.parent), - $root: (i) => getPublicInstance(i.root), - $host: (i) => i.ce, - $emit: (i) => i.emit, - $options: (i) => __VUE_OPTIONS_API__ ? resolveMergedOptions(i) : i.type, - $forceUpdate: (i) => i.f || (i.f = () => { - queueJob(i.update); - }), - $nextTick: (i) => i.n || (i.n = nextTick.bind(i.proxy)), - $watch: (i) => __VUE_OPTIONS_API__ ? instanceWatch.bind(i) : NOOP - }) -); -var isReservedPrefix = (key) => key === "_" || key === "$"; -var hasSetupBinding = (state, key) => state !== EMPTY_OBJ && !state.__isScriptSetup && hasOwn(state, key); -var PublicInstanceProxyHandlers = { - get({ _: instance }, key) { - if (key === "__v_skip") { - return true; - } - const { ctx, setupState, data, props, accessCache, type, appContext } = instance; - if (key === "__isVue") { - return true; - } - let normalizedProps; - if (key[0] !== "$") { - const n = accessCache[key]; - if (n !== void 0) { - switch (n) { - case 1: - return setupState[key]; - case 2: - return data[key]; - case 4: - return ctx[key]; - case 3: - return props[key]; - } - } else if (hasSetupBinding(setupState, key)) { - accessCache[key] = 1; - return setupState[key]; - } else if (data !== EMPTY_OBJ && hasOwn(data, key)) { - accessCache[key] = 2; - return data[key]; - } else if ( - // only cache other properties when instance has declared (thus stable) - // props - (normalizedProps = instance.propsOptions[0]) && hasOwn(normalizedProps, key) - ) { - accessCache[key] = 3; - return props[key]; - } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) { - accessCache[key] = 4; - return ctx[key]; - } else if (!__VUE_OPTIONS_API__ || shouldCacheAccess) { - accessCache[key] = 0; - } - } - const publicGetter = publicPropertiesMap[key]; - let cssModule, globalProperties; - if (publicGetter) { - if (key === "$attrs") { - track(instance.attrs, "get", ""); - markAttrsAccessed(); - } else if (key === "$slots") { - track(instance, "get", key); - } - return publicGetter(instance); - } else if ( - // css module (injected by vue-loader) - (cssModule = type.__cssModules) && (cssModule = cssModule[key]) - ) { - return cssModule; - } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) { - accessCache[key] = 4; - return ctx[key]; - } else if ( - // global properties - globalProperties = appContext.config.globalProperties, hasOwn(globalProperties, key) - ) { - { - return globalProperties[key]; - } - } else if (currentRenderingInstance && (!isString(key) || // #1091 avoid internal isRef/isVNode checks on component instance leading - // to infinite warning loop - key.indexOf("__v") !== 0)) { - if (data !== EMPTY_OBJ && isReservedPrefix(key[0]) && hasOwn(data, key)) { - warn$1( - `Property ${JSON.stringify( - key - )} must be accessed via $data because it starts with a reserved character ("$" or "_") and is not proxied on the render context.` - ); - } else if (instance === currentRenderingInstance) { - warn$1( - `Property ${JSON.stringify(key)} was accessed during render but is not defined on instance.` - ); - } - } - }, - set({ _: instance }, key, value) { - const { data, setupState, ctx } = instance; - if (hasSetupBinding(setupState, key)) { - setupState[key] = value; - return true; - } else if (setupState.__isScriptSetup && hasOwn(setupState, key)) { - warn$1(`Cannot mutate - - - - - -

- - - - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/Benchmarking.html b/packages/documentation/docs/.vitepress/dist/Benchmarking.html deleted file mode 100644 index 811e2be316..0000000000 --- a/packages/documentation/docs/.vitepress/dist/Benchmarking.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - Benchmarking UI5 CLI | VitePress - - - - - - - - - - - - - - -
Skip to content

Benchmarking UI5 CLI

For benchmarking UI5 CLI we typically make use of the open source tool hyperfine.

In general we only benchmark calls to the UI5 CLI. However, we might add scripted benchmarks for some components in the future.

The following is a walk-through on how to evaluate the performance impact of an imaginary change in the UI5 Builder project.

Setup

  1. Install hyperfine

  2. Prepare the UI5 CLI projects you want to measure (optional if your development environment already reflects this):

    1. Start in an empty directory

      sh
      mkdir ui5-cli-benchmark && cd ui5-cli-benchmark/
    2. Clone UI5 CLI

      sh
      git clone git@github.com:SAP/ui5-cli.git
    3. Clone UI5 Builder (or your fork)

      sh
      git clone git@github.com:SAP/ui5-builder.git

      Make sure you check out the main branch, since we'll perform the baseline test first

    4. Install npm dependencies in both directories

      sh
      (cd ui5-cli && npm install)
      -(cd ui5-builder && npm install)
    5. Create global npm links for both projects

      sh
      (cd ui5-cli && npm link)
      -(cd ui5-builder && npm link)
    6. Link UI5 Builder into UI5 CLI

      sh
      (cd ui5-cli && npm link @ui5/builder)
    7. Verify your setup

      sh
      ui5 --version

      This should output the version and location of the UI5 CLI you just cloned.

      For example:

      3.0.0 (from /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs)
  3. Prepare your test project (we choose the openui5-sample-app)

    1. Clone the project

      sh
      git clone git@github.com:SAP/openui5-sample-app.git
    2. Navigate into the project

      sh
      cd openui5-sample-app
    3. Install any required npm dependencies

      sh
      npm install

      Note: We won't link UI5 CLI into this project. Instead, we'll call it directly.

    4. Verify that the previously installed UI5 CLI can be called with the following command:

      sh
      UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs --version

      On Windows:

      sh
      set UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs --version

      (Replace the path to ui5.cjs with the one shown in the previous ui5 --version output)

Benchmarking

  1. Depending on how reliable you'd like the measurements to be, consider preparing your system:

    1. Connect your computer to a power supply
    2. Make sure no updates or anti-virus scans are taking place
    3. Close all applications. This includes your IDE, since it might start indexing any new files created during the build, thus impacting I/O
    4. Don't interact with your system wile the benchmarking is running
  2. Perform the baseline measurement

    1. In the project, start your first benchmark

      sh
      hyperfine --warmup 1 \
      -'UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs build' \
      ---export-markdown ./baseline.md

      On Windows:

      sh
      hyperfine --warmup 1 \
      -'set UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs build' \
      ---export-markdown ./baseline.md
    2. Your baseline benchmark is now stored in baseline.md and should look similar to this:

      CommandMean [s]Min [s]Max [s]Relative
      UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs build1.439 ± 0.0361.4001.5071.00
  3. Prepare your change

    1. Switch to the branch that contains your change
      sh
      (cd ../ui5-builder && git checkout my-change)
    2. If your change requires different npm dependencies, reinstall them
      sh
      (cd ../ui5-builder && npm install)
    3. The link from UI5 CLI is still in place. However, if you have changes in multiple UI5 CLI modules, you might need to npm link those again
  4. Perform the change measurement

    1. In the project, start your second benchmark

      sh
      hyperfine --warmup 1 \
      -'UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs build' \
      ---export-markdown ./my_change.md

      On Windows:

      sh
      hyperfine --warmup 1 \
      -'set UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs build' \
      ---export-markdown ./my_change.md
    2. Your change's benchmark is now stored in my_change.md

Compile Results

  1. Merge both measurements into one markdown

    1. In this setup, Hyperfine can't correctly calculate the relative difference between results. The respective column always reads "1". Either remove the "Relative" column or calculate the relative difference yourself:

      • Use this formula to calculate the percentage increase based on the Mean result:
        (newMean - baselineMean) / baselineMean * 100
        ^^JavaScript function:^^
        #!js function calcDiff(baseVal, newVal) {return (newVal - baseVal) / baseVal * 100;}

      • Example for a performance improvement:
        Baseline of 10 seconds decreased to 7 seconds:
        (7-10)/10*100 = -30 => -30% change

      • Example for a performance deterioration:
        Baseline of 10 seconds increased to 12 seconds:
        (12-10)/10*100 = 20 => +20% change

    2. Change the unit in the Mean/Min/Max column headers to seconds or milliseconds according to your results.

    3. Change the command column to only contain the relevant ui5 build command, including any parameters. E.g. ui5 build --all

    4. You should end up with a markdown like this:

      md
      ui5-builder Ref | Command | Mean [s] | Min [s] | Max [s] | Relative
      -|:---|:---|---:|---:|---:|---:|
      -| main ([`1234567`](https://github.com/SAP/ui5-builder/commit/<sha>)) | `ui5 build` | 1.439 ± 0.036 | 1.400 | 1.507 | Baseline |
      -| feature-duck ([`9101112`](https://github.com/SAP/ui5-builder/commit/<sha>)) | `ui5 build` | 1.584 ± 0.074 | 1.477 | 1.680 | **+10%** |

      Rendering like this:

      ui5-builder RefCommandMean [s]Min [s]Max [s]Relative
      main (1234567)ui5 build1.439 ± 0.0361.4001.507Baseline
      feature-duck (9101112)ui5 build1.584 ± 0.0741.4771.680+10%
  2. You can now share these results on GitHub or wherever you might need them.

Happy benchmarking! 🏎

- - - - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/Builder.html b/packages/documentation/docs/.vitepress/dist/Builder.html deleted file mode 100644 index e22c926242..0000000000 --- a/packages/documentation/docs/.vitepress/dist/Builder.html +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - UI5 Builder | VitePress - - - - - - - - - - - - - - -
Skip to content

UI5 Builder

The UI5 Builder module takes care of building your project.

Based on a project's type, the UI5 Builder defines a series of build steps to execute; these are also called "tasks".

For every type there is a set of default tasks. You can disable single tasks using the --exclude-task CLI parameter, and you can include tasks using the --include-task parameter.

API Reference

Tasks

Tasks are specific build steps to be executed during build phase.

They are responsible for collecting resources which can be modified by a processor. A task configures one or more processors and supplies them with the collected resources. After the respective processor processed the resources, the task is able to continue with its workflow.

A project can add custom tasks to the build by using the Custom Tasks Extensibility.

Standard Tasks

All available standard tasks are documented in the API reference. Search for @ui5/builder/tasks/ to filter the API reference for all available tasks. The list below offers the actual order of their execution:

TaskType applicationType libraryType theme-library
escapeNonAsciiCharactersenabledenabled
replaceCopyrightenabledenabledenabled
replaceVersionenabledenabledenabled
replaceBuildtimeenabled
generateJsdocdisabled¹
executeJsdocSdkTransformationdisabled¹
minifyenabledenabled
generateFlexChangesBundleenabledenabled
generateLibraryManifestenabled
enhanceManifestenabledenabled
generateComponentPreloadenableddisabled²
generateLibraryPreloadenabled
generateStandaloneAppBundledisabled³
transformBootstrapHtmldisabled³
generateBundledisabled⁴disabled⁴
buildThemesenabledenabled
generateThemeDesignerResourcesdisabled⁵disabled⁵
generateVersionInfodisabled¹
generateCachebusterInfodisabled
generateApiIndex*disabled¹ *
generateResourcesJsondisableddisableddisabled

Disabled tasks can be activated by certain build modes, the project configuration, or by using the --include-task CLI parameter. See footnotes where given


¹ Enabled in jsdoc build, which disables most of the other tasks
² Enabled for projects defining a component preload configuration
³ Enabled in self-contained build, which disables generateComponentPreload and generateLibraryPreload
⁴ Enabled for projects defining a bundle configuration
⁵ Can be enabled for framework projects via the includeTask option. For other projects, this task is skipped

minify

The minify task compresses all JavaScript resources of a project while preserving the original sources as so-called debug variants. For example when compressing a resource named Module.js, its content will be minified and a new resource Module-dbg.js is created and placed next to it.

The UI5 runtime can be instructed to load those debug variants instead of compressed resources and bundles. This can ease debugging in some cases, since the original sources are then used directly in the browser. For details, refer to the UI5 framework documentation on debugging.

For each resource it compresses, the minify task will also create a source map resource. Browsers can use this to map the content of a compressed JavaScript resource back to the original source file (now contained in the debug variant). All this happens automatically once you open the development tools in the browser and start debugging a project. While the browser still executes the code of the compressed resources, it will also show the debug variants and use the source maps to connect the two. This results in an improved debugging experience, which is almost identical to loading the debug variants directly as described before, only much faster.

Related to this, the bundling tasks will also incorporate the generated source maps to map the content of the bundles to the individual debug variants of the bundled modules.

Input Source Maps

TIP

Support for input source maps has been added in UI5 CLI v3.7.0.

For projects facilitating transpilation (such as TypeScript-based projects), it is commonly desired to debug in the browser using the original sources, e.g. TypeScript files. To make this work, the transpilation process first needs to create source maps and reference them in the generated JavaScript code.

UI5 CLI's minify task will then find this reference and incorporate the source map into the minification process. In the end, the minified JavaScript resources will reference an updated source map, which reflects the transpilation as well as the minification. The browser can use this to map every statement back to the original TypeScript file, making debugging a breeze.

WARNING

If a resource has been modified by another build task before minify is executed, any referenced source map will be ignored. This is to ensure the integrity of the source maps in the build result.

It is possible that the modification of the resource content is not reflected in the associated source map, rendering it corrupted. A corrupt source map can make it impossible to properly analyze and debug a resource in the browser development tools.

Standard tasks which may modify resources without updating the associated source maps currently include replaceVersion, replaceCopyright and replaceBuildtime.

Expand the block below to view a diagram illustrating the minification process and source map handling.

Minification Activity Diagram

minify Task Activity

Generation of Supported Locales

The enhanceManifest task fills the supportedLocales property in the manifest.json of a UI5 library/application automatically with the available locales determined by the existence of the respective .properties translation files. To disable the automatic generation of the supportedLocales, set supportedLocales to any desired value. For further resource bundle configuration options, see Supported Locales and Fallback Chain.

Requirements

This feature only becomes active under the following conditions:

  • The _version property in the manifest.json is set to 1.21.0 or higher
  • The specified resource bundle is located inside the project and within the namespace defined in the manifest.json

Scenario: Application

txt
- webapp/i18n/
-  - i18n.properties
-  - i18n_en.properties
-  - i18n_en_US.properties
-  - i18n_de.properties
-  - i18n_de_DE.properties

In the manifest.json the supportedLocales property will be enhanced as follows:

Source

json
"models": {
-    "i18n": {
-        "type": "sap.ui.model.resource.ResourceModel",
-        "settings": {
-            "bundleName": "my.app.i18n.i18n"
-        }
-    }
-}

Build Result

json
"models": {
-    "i18n": {
-        "type": "sap.ui.model.resource.ResourceModel",
-        "settings": {
-            "bundleName": "my.app.i18n.i18n",
-            "supportedLocales": [
-                "",
-                "de",
-                "de_DE",
-                "en",
-                "en_US"
-            ]
-        }
-    }
-}

Processors

Processors work with provided resources. They contain the actual build step logic to apply specific modifications to supplied resources, or to make use of the resources' content to create new resources out of that.

Processors can be implemented generically. The string replacer is an example for that. Since string replacement is a common build step, it can be useful in different contexts, e.g. code, version, date, and copyright replacement. A concrete replacement operation could be achieved by passing a custom configuration to the processor. This way, multiple tasks can make use of the same processor to achieve their build step.

To get a list of all available processors, please visit the API reference and search for @ui5/builder/processors/.

Legacy Bundle Tooling (lbt)

JavaScript port of the "legacy" Maven/Java based bundle tooling.

JavaScript Files Requiring Top Level Scope

UI5 CLI packages JavaScript files that require "top level scope" as a string, provided your project uses a Specification Version lower than 4.0. In this case, the code is evaluated using eval at runtime.

This ensures that the script works as expected, e.g. with regards to implicitly used globals. However, this eval runtime feature will be discontinued with UI5 2.x because of security best practices and to comply with stricter CSP settings (i.e. unsafe-eval).

If your project defines Specification Version 4.0 or higher, files requiring top level scope are no longer part of the created bundle and following error is logged by UI5 CLI:

Module myFancyModule requires top level scope and can only be embedded as a string (requires 'eval'), which is not supported with specVersion 4.0 and higher.

If you see this error message, please adjust your code by applying one of the following options:

Option 1: Use ui5-tooling-modules to bundle third-party npm packages. It converts files to sap.ui.define modules automatically.

Option 2: Wrap the respective files manually in sap.ui.define modules as shown below:

Example

Before:

js
const myFancyModule = {};

After:

js
sap.ui.define([], () => {
-   "use strict";
-   const myFancyModule = {};
-   return myFancyModule;
-});
- - - - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/CLI.html b/packages/documentation/docs/.vitepress/dist/CLI.html deleted file mode 100644 index 0abb24ef59..0000000000 --- a/packages/documentation/docs/.vitepress/dist/CLI.html +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - UI5 CLI | VitePress - - - - - - - - - - - - - - -
Skip to content

UI5 CLI

Requirements

  • Node.js version v20.11.0 and higher or v22.0.0 and higher (v21 is not supported)
  • npm version v8.0.0 or higher

Installation

Install the CLI using the npm package manager:

sh
npm install --global @ui5/cli
-
-# Verify installation
-ui5 --help

Usage/Syntax

ui5 <command> [options]

The CLI automatically checks for updates using update-notifier. While this is skipped in CI environments, you might also opt-out manually by following the steps described here.

Common options

These options you can use with each command.

OptionDescriptionDetails
-h, --helpShow help[boolean]
-v, --versionShow version number[boolean]
-c, --configPath to project configuration file in YAML format[string]
--dependency-definitionPath to a YAML file containing the project's dependency tree. This option will disable resolution of node package dependencies.[string]
--workspace-configPath to workspace configuration file in YAML format[string]
-w, --workspaceName of the workspace configuration to use[string] [default: "default"]
--loglevel, --log-levelSet the logging level[string] [choices: "silent", "error", "warn", "info", "perf", "verbose", "silly"] [default: "info"]
--verboseEnable verbose logging.[boolean] [default: false]
--perfEnable performance measurements and related logging.[boolean] [default: false]
--silentDisable all log output.[boolean] [default: false]

Examples

Execute command using a static dependency tree instead of resolving node package dependencies

ui5 <command> --dependency-definition /path/to/projectDependencies.yaml

Execute command using a project configuration from custom path

ui5 <command> --config /path/to/ui5.yaml

Execute command using the 'dolphin' workspace of a ui5-workspace.yaml

ui5 <command> --workspace dolphin

Execute command with the maximum log output

ui5 <command> --log-level silly

Commands

ui5 add

Description

Add SAPUI5/OpenUI5 framework libraries to the project configuration.

Usage

ui5 add [--development] [--optional] <framework-libraries..>

Options

OptionDescriptionDetails
-D, --development, --devAdd as development dependency[boolean] [default: false]
-O, --optionalAdd as optional dependency[boolean] [default: false]

Positionals

PositionalDescriptionDetails
framework-librariesFramework library names[array] [required] [default: []]

Examples

Add the framework libraries sap.ui.core and sap.m as dependencies

ui5 add sap.ui.core sap.m

Add the framework library sap.ui.support as development dependency

ui5 add -D sap.ui.support

Add the framework library themelib_sap_fiori_3 as optional dependency

ui5 add --optional themelib_sap_fiori_3

ui5 build

Description

Build project in current directory

Usage

ui5 build

Child Commands

CommandDescription
ui5 build jsdocBuild JSDoc resources
ui5 build preload(default) Build project and create preload bundles
ui5 build self-containedBuild project and create self-contained bundle. Recommended to be used in conjunction with --include-all-dependencies

Options

OptionDescriptionDetails
-a, --include-all-dependencies, --allInclude all dependencies in the build result. This is equivalent to '--include-dependency "*"'[boolean] [default: false]
--include-dependencyA list of dependencies to be included in the build result. You can use the asterisk '*' as an alias for including all dependencies in the build result. The listed dependencies cannot be overruled by dependencies defined in 'exclude-dependency'. The provided name must match with the dependency name shown in 'ui5 ls --flat'[array]
--include-dependency-regexpA list of regular expressions defining dependencies to be included in the build result. This list is prioritized like 'include-dependency'.[array]
--include-dependency-treeA list of dependencies to be included in the build result. Transitive dependencies are implicitly included and do not need to be part of this list. These dependencies overrule the selection of 'exclude-dependency-tree' but can be overruled by 'exclude-dependency'.[array]
--exclude-dependencyA list of dependencies to be excluded from the build result. The listed dependencies can be overruled by dependencies defined in 'include-dependency'. The provided name must match with the dependency name shown in 'ui5 ls --flat'[array]
--exclude-dependency-regexpA list of regular expressions defining dependencies to be excluded from the build result. This list is prioritized like 'exclude-dependency'.[array]
--exclude-dependency-treeA list of dependencies to be excluded from the build result. Transitive dependencies are implicitly included and do not need to be part of this list.[array]
--destPath of build destination[string] [default: "./dist"]
--clean-destIf present, clean the destination directory before building[boolean] [default: false]
--create-build-manifestStore build metadata in a '.ui5' directory in the build destination, allowing reuse of the build result in other builds[boolean] [default: false]
--include-taskA list of tasks to be added to the default execution set. This option takes precedence over any excludes.[array]
--exclude-taskA list of tasks to be excluded from the default task execution set[array]
--framework-versionOverrides the framework version defined by the project. Takes the same value as the version part of "ui5 use"[string]
--cache-modeCache mode to use when consuming SNAPSHOT versions of framework dependencies. The 'Default' behavior is to invalidate the cache after 9 hours. 'Force' uses the cache only and does not create any requests. 'Off' invalidates any existing cache and updates from the repository[string] [choices: "Default", "Force", "Off"] [default: "Default"]
--experimental-css-variablesGenerate CSS variables (css-variables.css, css-variables.source.less) and skeleton (library-skeleton(-RTL).css) for all themes[boolean] [default: false]
--output-styleProcesses build results into a specific directory structure.
- Flat: Omits the project namespace and the "resources" directory.
- Namespace: Respects the project namespace and the "resources" directory, maintaining the original structure.
- Default: The default directory structure for every project type. For applications, this is identical to "Flat", and for libraries, it is "Namespace". Other types have a more distinct default output style.
[string] [choices: "Default", "Flat", "Namespace"] [default: "Default"]

Examples

Preload build for project without dependencies

ui5 build

Self-contained build for project

ui5 build self-contained

Build project but only apply the minify- and generateComponentPreload tasks

ui5 build --exclude-task=* --include-task=minify generateComponentPreload

Build project by applying all default tasks including the minify task and excluding the generateComponentPreload task

ui5 build --include-task=minify --exclude-task=generateComponentPreload

Preload build with experimental CSS variables artifacts

ui5 build --experimental-css-variables

ui5 config

Description

Get and set UI5 CLI configuration options

Usage

ui5 config

Child Commands

CommandDescription
ui5 config set <opt​ion> [value]Set the value for a given configuration option. Clear an existing configuration by omitting the value
ui5 config get <opt​ion>Get the value for a given configuration option
ui5 config listDisplay the current configuration

Examples

Set a value for the ui5DataDir configuration

ui5 config set ui5DataDir /path/to/.ui5

Unset the current value of the ui5DataDir configuration

ui5 config set ui5DataDir

ui5 init

Description

Initialize the UI5 CLI configuration for an application or library project.

Usage

ui5 init

ui5 remove

Description

Remove SAPUI5/OpenUI5 framework libraries from the project configuration.

Usage

ui5 remove <framework-libraries..>

Positionals

PositionalDescriptionDetails
framework-librariesFramework library names[array] [required] [default: []]

Examples

Remove the framework libraries sap.ui.core and sap.m as dependencies

ui5 remove sap.ui.core sap.m

ui5 serve

Description

Start a web server for the current project

Usage

ui5 serve

Options

OptionDescriptionDetails
-p, --portPort to bind on (default for HTTP: 8080, HTTP/2: 8443)[number]
-o, --openOpen web server root directory in default browser. Optionally, supplied relative path will be appended to the root URL[string]
--h2Shortcut for enabling the HTTP/2 protocol for the web server[boolean] [default: false]
--simple-indexUse a simplified view for the server directory listing[boolean] [default: false]
--accept-remote-connectionsAccept remote connections. By default the server only accepts connections from localhost[boolean] [default: false]
--keyPath to the private key[string] [default: "~/.ui5/server/server.key"]
--certPath to the certificate[string] [default: "~/.ui5/server/server.crt"]
--sap-csp-policiesAlways send content security policies 'sap-target-level-1' and 'sap-target-level-3' in report-only mode[boolean] [default: false]
--serve-csp-reportsCollects and serves CSP reports upon request to '/.ui5/csp/csp-reports.json'[boolean] [default: false]
--framework-versionOverrides the framework version defined by the project. Takes the same value as the version part of "ui5 use"[string]
--cache-modeCache mode to use when consuming SNAPSHOT versions of framework dependencies. The 'Default' behavior is to invalidate the cache after 9 hours. 'Force' uses the cache only and does not create any requests. 'Off' invalidates any existing cache and updates from the repository[string] [choices: "Default", "Force", "Off"] [default: "Default"]

Examples

Start a web server for the current project

ui5 serve

Enable the HTTP/2 protocol for the web server (requires SSL certificate)

ui5 serve --h2

Use the project configuration from a custom path

ui5 serve --config /path/to/ui5.yaml

Use a static dependency definition file

ui5 serve --dependency-definition /path/to/projectDependencies.yaml

Listen to port 1337 and launch default browser with http://localhost:1337/test/QUnit.html

ui5 serve --port 1337 --open tests/QUnit.html

ui5 tree

Description

Outputs the dependency tree of the current project to stdout. It takes all relevant parameters of ui5 build into account.

Usage

ui5 tree

Options

OptionDescriptionDetails
--flatOutput a flat list of all dependencies instead of a tree hierarchy[boolean] [default: false]
--levelLimit the number of levels shown in the tree hierarchy[number]
--framework-versionOverrides the framework version defined by the project. Takes the same value as the version part of "ui5 use"[string]
--cache-modeCache mode to use when consuming SNAPSHOT versions of framework dependencies. The 'Default' behavior is to invalidate the cache after 9 hours. 'Force' uses the cache only and does not create any requests. 'Off' invalidates any existing cache and updates from the repository[string] [choices: "Default", "Force", "Off"] [default: "Default"]

ui5 use

Description

Initialize or update the project's framework configuration.

Usage

ui5 use <framework-info>

Positionals

PositionalDescriptionDetails
framework-infoFramework name, version or both (name@version).
Name can be "SAPUI5" or "OpenUI5" (case-insensitive).
Version can be "latest" (default), a version or range according to the Semantic Versioning specification (https://semver.org/), or a tag available in the npm registry.
For SAP-internal usage the version can also be "latest-snapshot", a version or range ending with -SNAPSHOT, or a simplified range such as "1-SNAPSHOT", "1.x-SNAPSHOT" or "1.108-SNAPSHOT".
[string] [required]

Examples

Use SAPUI5 in the latest available version

ui5 use sapui5@latest

Use OpenUI5 in the latest available 1.76 patch version

ui5 use openui5@1.76

Use the latest available version of the configured framework

ui5 use latest

Use OpenUI5 in the latest available version

ui5 use openui5

ui5 versions

Description

Shows the versions of all UI5 CLI modules

Usage

ui5 versions

Local vs. Global Installation

In general, we recommend a global installation of the UI5 CLI (npm install --global @ui5/cli).

However, it makes sense to add the UI5 CLI as a devDependency (npm install --save-dev @ui5/cli) to a project's package.json. This ensures that every developer working on the project uses the same version of the UI5 CLI and your continuous integration environments also uses this version.

In case you have both, a local installation in one of your projects as well as a global installation, the UI5 CLI will always try to invoke the local installation. This is in part because npm scripts defined in your package.json will also always invoke the local installation.

This behavior can be disabled by setting the environment variable UI5_CLI_NO_LOCAL.

Example
You have a project located in the directory /my-application.

You have installed the UI5 CLI globally. In addition, the project's package.json defines a devDependency to @ui5/cli and a start script "ui5 serve". This means there are at least two installations of @ui5/cli on your system. Their versions might not match.

This table illustrates which of the two installations is used in different scenarios. Note how the UI5 CLI always tries to prefer the version installed in the project.

Current Working DirectoryCommandGlobal UI5 CLILocal UI5 CLI
/ui5 --versionenabled
/my-applicationui5 --versionenabled
/my-applicationui5 serveenabled
/my-applicationUI5_CLI_NO_LOCAL=X ui5 serveenabled
/my-applicationnpm startenabled
/my-applicationUI5_CLI_NO_LOCAL=X npm startenabled
- - - - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/CodeAnalysis.html b/packages/documentation/docs/.vitepress/dist/CodeAnalysis.html deleted file mode 100644 index 1a0520d7ee..0000000000 --- a/packages/documentation/docs/.vitepress/dist/CodeAnalysis.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - Code Analysis | VitePress - - - - - - - - - - - - - - -
Skip to content

Code Analysis

During the build process, UI5 CLI executes a static code analysis of your project. In the following sections the term "simple literal" is used for the following language features:

  • string literals
  • numeric literals
  • Boolean literals
  • null / undefined
  • template literals without any expressions
  • arrays of the previous (spread operators are ignored)
  • object literals with "simple literals" used as keys and values (again, spread operators are ignored)

Dependency Analysis

UI5 CLI extracts dependency information from a project's code as outlined in the following sections. The APIs described there require the usage of "simple literals" when declaring dependencies.

JSModule Analyzer

The following APIs are analyzed by the JSModule Analyzer:

  • sap.ui.define
  • sap.ui.require
  • jQuery.sap.declare (deprecated)
  • jQuery.sap.require (deprecated)
  • sap.ui.requireSync (deprecated)
  • sap.ui.preload (restricted)
  • sap.ui.require.preload (restricted)

The JSModule Analyzer uses the "Abstract Syntax Tree" (AST) of a JavaScript file to decide whether a code block is executed conditionally or unconditionally.

The analyzer uses a set of rules to decide whether one of the above APIs is called whenever the module is executed or whether the API is only called under certain conditions.

For example, top-level code is always executed. Flow-control statements in JavaScript imply that certain blocks of code are only executed under certain conditions (for example, if blocks, else blocks, ...). Besides these inherent JavaScript rules, further common patterns are known to the analyzer, e.g. immediately invoked function expressions or the factory function of AMD modules.

Any dependencies found that - according to these rules - are always executed, are collected as eager (or standard) dependencies. Dependencies that are found on a code path that depends on certain conditions are collected as conditional dependencies.

The bundling implemented by UI5 CLI can either follow only eager dependencies (resolve: true) or additionally conditional dependencies (resolveConditional). For more information, see Custom Bundling.

When a dependency in one of the mentioned APIs is not a "simple literal" but an expression, the corresponding module is marked as "having dynamic dependencies". This marker is currently not further evaluated by UI5 CLI.

Component Analyzer

The Component Analyzer analyzes JavaScript files named Component.js to collect dependency information by searching for a manifest.json located in the same folder as the Component.js. If one is found, the sap.ui5 section is evaluated in the following way:

  • Any library dependency is added as a dependency to the library.js module of that library. If the library dependency is modeled as 'lazy', the module dependency will be added as 'conditional'.
  • Any component dependency is added as a dependency to a file named Component.js. If the dependency is modeled as 'lazy', the module dependency will be added as 'conditional'.
  • For each UI5 model for which a type is configured, a module dependency to that type is added.
  • For each route that contains a view name, a module dependency to that view is added.

Smart Template Analyzer

The Smart Template Analyzer analyzes a Smart Template app and its underlying template components to collect dependency information. It searches for a manifest.json located in the same folder as the Component.js. If it is found and if it is valid JSON, an sap.ui.generic.app section is searched and evaluated in the following way:

  • For each page configuration, the configured component is added as a dependency to the template app module.
  • If the page configuration contains a templateName, a dependency to that template view is added to the app.
  • Otherwise, the class definition of the component is analyzed to find a default template view name. If found, a dependency to that view is added to the app module.

The template component is analyzed in the following way:

  • precondition: the template component class is defined in an AMD-style module, using define or sap.ui.define
  • precondition: the module sap/suite/ui/generic/template/lib/TemplateAssembler is imported
  • precondition: a call to TemplateAssembler.getTemplateComponent is used to define the component class
  • precondition: that call is used in a top-level return statement of the factory function
  • precondition: necessary parameters to that call are given as an object literal (no further coding)
  • precondition: the settings define a managed property metadata.properties.templateName with a defaultValue of type string The default value of the property represents the template view of the template component. The manifest of the template app could in theory specify an alternative template in component.settings.templateName.

XML Template Analyzer

The XML Template Analyzer tackles XMLView and XMLFragment. It parses the XML, collects controls, and adds them as dependency to the ModuleInfo object. Additionally, some special dependencies are handled:

  • controller of the view
  • resource bundle (note: as locale-dependent dependencies can't be modelled yet in the ModuleInfo, only a dependency to the development version (aka raw language) of the bundle will be added)
  • component referenced via the ComponentContainer control
  • embedded fragments or views

In an XMLView/XMLFragment, usually three categories of element nodes exist: Controls, aggregations, and non-UI5 nodes (e.g. XHTML or SVG). The third category usually can be identified by its namespace. To distinguish between the first two categories, the analyzer checks whether a resource exists in the project or its dependencies whose name matches the qualified node name. For example, if the qualified node name is sap.m.Text, the analyzer checks whether sap/m/Text.js exists. If so, UI5 CLI detects this node as a control, otherwise as an aggregation.

XML Composite Analyzer

The XMLComposite control is deprecated since version UI5 1.88. Nevertheless, UI5 CLI will attempt to analyze the declaration of any such controls in a project.

The XML Composite Analyzer searches for the name of the configured fragment containing the XMLComposite control.

javascript
sap.ui.define([
-    "sap/ui/core/XMLComposite"
-], function(XMLComposite) {
-    return XMLComposite.extend("composites.MyComposite", {} 
-});
javascript
sap.ui.define([
-    "sap/ui/core/XMLComposite"
-], function(XMLComposite) {
-    return XMLComposite.extend("composites.MyComposite", {
-        fragment: "composites.custom.MyComposite"
-    } 
-});

Library Initialization

The library.js Analyzer checks every library.js file in the namespace of a library for occurences of a sap/ui/core/Core#initLibrary call. If found, the following information will be placed in the generated manifest.json:

  • noLibraryCSS: false when the noLibraryCSS property had been set in the initLibrary info object
  • types: string array with the names of the types contained in the library
  • controls: string array with the names of the controls defined in the library
  • elements: string array with the names of the elements defined in the library
  • interfaces: string array with the names of the interfaces defined in the library

sap/ui/core/Core#initLibrary requires the usage of "simple literals" for the parameters passed to this function call.

Note: Currently only the usage via the global sap.ui.getCore().initLibrary is supported by this analyzer. Requiring sap/ui/core/Core and then calling Core.initLibrary is not recognized by this analyzer.

JSDoc

The UI5 CLI offers a JSDoc build, which is enhanced by UI5-specific JSDoc features.

An UI5 SDK can be built locally. To get more insight into the local UI5 SDK build setup, have a look at our Developer's Guide.

Currently, the resources needed for a UI5 SDK build are stored in openui5 and in ui5-builder. This double maintenance is needed because these files are not part of the sap.ui.core library artefact, so building JSDoc for any library has no access to the needed resources. It's therefore necessary to have these resources also available in the ui5-builder. This might change in the future.

The following artefacts contribute to the JSDoc build:

  • jsdocGenerator.js: Executes the actual JSDoc build. UI5 CLI wrapper for plugin.cjs.

  • sdkTransformer.js: UI5 CLI wrapper for transformApiJson.cjs.

  • apiIndexGenerator.js: UI5 CLI wrapper for createIndexFiles.cjs.

  • createIndexFiles.cjs: Creates API index resources from all api.json resources and by interpreting the sap-ui-version.json available in the given test resources directory. The resulting index resources (e.g. api-index.json, api-index-deprecated.json, api-index-experimental.json and api-index-since.json) are only to be used in a UI5 SDK.

  • transformApiJson.cjs: Preprocesses api.json files for use in UI5 SDKs. Transforms the api.json as created by the JSDoc build into a pre-processed api.json file suitable for the SDK. The pre-processing includes formatting of type references, rewriting of links, and other time-consuming calculations.

  • plugin.cjs: UI5 plugin for JSDoc3. The plugin adds the following UI5-specific tag definitions to JSDoc3:

    • disclaimer
    • experimental
    • final
    • interface
    • implements
    • ui5-restricted, and more

    It furthermore listens to the following JSDoc3 events to implement additional functionality:

    • parseBegin: to create short names for all files that are to be parsed
    • fileBegin: to write to the log (a kind of progress indicator)
    • jsdocCommentFound: to pre-process comments, empty lines are used as paragraph markers, a default visibility is added, and legacy tag combinations used in JSDoc2 are converted to JSDoc3 conventions
    • newDoclet
    • parseComplete: remove undocumented/ignored/private doclets or duplicate doclets

    Last but not least, it implements an astNodeVisitor to detect UI5-specific "extend" calls and to create documentation for the properties, aggregations, etc. that are created with the "extend" call.

  • publish.cjs: JSDoc3 template for UI5 documentation generation.

    • adds missing namespaces
    • determines the export names of exported APIs
    • writes out the api.json from the collected JSDoc information
    • calculates the inheritance hierarchy
    • checks for cyclic dependencies
    • removes unnecessary whitespace from an HTML document
  • versionUtil.cjs: Provides helper methods to determine version-related information.

- - - - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/Configuration.html b/packages/documentation/docs/.vitepress/dist/Configuration.html deleted file mode 100644 index 6df4caebff..0000000000 --- a/packages/documentation/docs/.vitepress/dist/Configuration.html +++ /dev/null @@ -1,220 +0,0 @@ - - - - - - Configuration | VitePress - - - - - - - - - - - - - - -
Skip to content

Configuration

A projects UI5 CLI configuration is typically located in a YAML file named ui5.yaml, located in the root directory.

INFO

This document describes the configuration of UI5 CLI-based projects and extensions. It represents Specification Version 3.0.

Validation / IDE support

Starting with Specification Version 2.0 the configuration is validated according to a JSON schema.
The current version of the schema can be found here: https://ui5.github.io/cli/schema/ui5.yaml.json

The schema is also part of the JSON Schema Store Catalog which is used by the YAML Language Server. See the list of clients to find extensions for various IDEs and editors.

Example

yaml
specVersion: "4.0"
-type: application|library|theme-library|module
-metadata:
-  name: some.project.name

General Configuration

Specification Version and -Type

A project must define a specification version (specVersion), to which its configuration is compatible to. Also see Specification Versions.

In addition, a project must define a type. This can be either application, library, theme-library (since Specification Version 1.1), or module.

The type defines the default path mappings and build tasks. See UI5 Builder: Types for details.

Example

yaml
specVersion: "4.0"
-type: application
yaml
specVersion: "4.0"
-type: library
yaml
specVersion: "4.0"
-type: theme-library
yaml
specVersion: "4.0"
-type: module

Kind

The configuration may also contain a kind property. This is used to differentiate between projects and extensions.

This configuration defaults to kind: project, which means you typically only need to specify it for extensions like Custom Tasks.

Metadata

Example

yaml
metadata:
- name: my.company.project
- copyright: |-
-  My Project
-   * (c) Copyright 2009-${currentYear} My Company
-   * Licensed under the XYZ License, Version n - see LICENSE.txt.

name

A project must have a name.

In UI5 CLI, a project is typically identified by the configured name. It must be unique and should ideally follow a namespace scheme like organization.product.project for UI5 projects or ui5-task-heavy-boulder for extension-projects.

The name property of projects defining Specification Version 3.0 and higher must satisfy the following conditions:

  • Must be at least 3 characters long
  • Must be no longer than 80 characters
  • Must contain lowercase characters only
  • Must contain alphanumeric characters, dash, underscore and period only
    • Exception: The @ and / characters are allowed at certain positions as explained below
  • Must start with an alphabetic character or an @ character
  • If it starts with an @ character, it must contain exactly one forward slash /
    • This is aligned with the npm concept for package scopes, for example @org/lib.name

A given copyright string will be used to fill placeholders like ${copyright} and @copyright@ in a project's source code. |- is a way to define a multi line string in YAML. Check the YAML Specification for details.
Inside the copyright string, you can use the placeholder ${currentYear} which will be replaced with the current year.

deprecated

In case your project is deprecated you may also define a property deprecated: true. In projects that have a direct dependency to your project, UI5 CLI will then display a deprecation warning.

Resources

Path Mapping

Depending on the project type, UI5 CLI expects your projects source files to be located in certain directories.

If your project's sources are located in different directories, you need to configure the path mapping accordingly. Depending on the type of project, there are several different path mappings available.

Note that all configured paths must be written in POSIX (i.e. using only forward slashes / as path segment separators) and relative to the project's root directory.

Available Path Mappings

Applications

  • webapp: Mapped to runtime path / (root)
yaml

-resources:
-  configuration:
-    paths:
-      webapp: webapp

Libraries

  • src: Mapped to runtime path /resources
  • test: Mapped to runtime path /test-resources
yaml
resources:
-  configuration:
-    paths:
-      src: src
-      test: test

Modules

Modules can map any virtual paths to any physical path within the project. However, it is recommended that modules include their namespace in thevirtual path and use the /resources prefix (e.g. /resources/my/librarymodule-xy/) to avoid name clashes with other projects.

yaml
resources:
-  configuration:
-    paths:
-      /resources/my/library/module-xy/: lib
-      /resources/my/library/module-xy-min/: dist

Example

For an application project with the following directory structure, youneed the path mapping configuration given below: Directory Structure:

yaml
my-app/
-\_ ui5.yaml
-\_ lib/ // [!code focus]
- \_ js/ // [!code focus]
-   \_ app/ // [!code focus]

Path Mapping Configuration:

yaml
resources:
- configuration:
-   paths:
-     webapp: lib/js/app // [!code focus]

Encoding of *.properties files

Info

This configuration is available since UI5 CLI v1.7.0

By default UI5 CLI expects different encodings for *.properties i18n files, depending on the project's specification version:

Specification VersionDefault propertiesFileSourceEncoding
2.0+UTF-8
0.1, 1.0 or 1.1ISO-8859-1

If your project uses a different encoding for *.properties files, you need to set the propertiesFileSourceEncoding configuration property.

UI5 CLI will read the corresponding files of the project in the given encoding. Any non-ASCII characters will be replaced with the respective Unicode escape sequences. This allows you to deploy the resulting files to any environment, independent of how it expects *.properties files to be encoded. Please refer to RFC 7 for details.

Custom Configuration

Info

This configuration is available since UI5 CLI v2.2.0 and applies only to projects defining Specification Version 2.1 or higher.

Custom configuration that is ignored by UI5 CLI.
This can be used to store UI5 specific configuration for third-party tools.

The "customConfiguration" value must be an object.
For third-party tools it is recommended to follow a namespace-like structure.

Framework Configuration

Info

This configuration is available since UI5 CLI v2.0.0 and applies only to projects defining [Specification Version(#specification-versions) 2.0 or higher.

Define your project's framework dependencies.

Framework and Version

In your project's framework configuration you must define whether you want to use the OpenUI5 or the SAPUI5 framework and which version:

yaml
framework:
-  name: OpenUI5
-  version: 1.82.0
yaml
framework:
-  name: SAPUI5
-  version: 1.82.0

If you are not sure which framework is right for you, see our documentation on the differences between OpenUI5 and SAPUI5.

You can find an overview of the available versions for each framework here:

Info

Projects that use the OpenUI5 framework cannot depend on projects thatuse the SAPUI5 framework.

Dependencies

Example

yaml
specVersion: "4.0"
-type: application
-metadata:
-  name: my.company.app
-framework:
-  name: OpenUI5
-  version: 1.82.0
-  libraries:
-    - name: sap.ui.core
-    - name: sap.m
-    - name: sap.ui.table
-    - name: themelib_sap_fiori_3
yaml
specVersion: "4.0"
-type: library
-metadata:
-  name: my.company.library
-framework:
-  name: SAPUI5
-  version: 1.82.0
-  libraries:
-    - name: sap.ui.core
-    - name: sap.m
-    - name: themelib_sap_belize
-      optional: true
-    - name: themelib_sap_bluecrystal
-      optional: true
-    - name: themelib_sap_fiori_3
-      optional: true

When building an application depending on this library as well as one of the theme libraries, only that theme is built for this library.

Runtime Dependencies

All libraries required by your project must be listed in the libraries section of the framework configuration:

yaml
framework:
-  name: OpenUI5
-  version: 1.82.0
-  libraries:
-    - name: sap.ui.core
-    - name: sap.m
-    - name: sap.ui.table
yaml
framework:
-  name: SAPUI5
-  version: 1.82.0
-  libraries:
-    - name: sap.ui.core
-    - name: sap.m
-    - name: sap.ui.comp

Development Dependencies

Development dependencies are only installed if the project defining them is the current root project. They are typically only required during the development of the project.

yaml
  libraries:
-    - name: sap.ushell
-      development: true

Note that a development dependency cannot be optional and vice versa.

Optional Dependencies

Optional dependencies are installed either if the project defining them is the current root project or if the dependency is already part of the current dependency tree. A typical use case is libraries defining optional dependencies to all theme libraries they support. You can choose which theme library to use by the application that is consuming the library by declaring it as a non-optional dependency.

yaml
  libraries:
-    - name: themelib_sap_fiori_3
-      optional: true

Build Configuration

Exclude Resources

Example

For projects of type module, this configuration is available since UI5CLI v3.5.0 and applies only to projects defining Specification Version 3.1 or higher.

yaml
builder:
- resources:
-   excludes:
-     # You can specify paths relative to the configured "webapp" directory
-     - "index.html"
-     # When defining absolute paths, make sure to specify the namespace plus the "/resources/" prefix
-     - "/resources/my/project/namespace/test/**"
yaml
builder:
- resources:
-   excludes:
-     # For libraries, all paths must be absolute, except for wildcards
-     - "/resources/some/project/name/test_results/**"
-     - "/test-resources/**"
-     - "!/test-resources/some/project/name/demo-app/**"
-     - "**/*.svg"
yaml
builder:
- resources:
-   excludes:
-     # For modules, all paths must be absolute, except for wildcards
-     - "/resources/my/library/module-xy/min/**"
-     - "!/resources/my/library/module-xy/min/module-xy-bundle.js"
-     - "**/*.svg"

You can exclude a projects resources from the build process using a list of glob patterns. Matching resources will be ignored by the builder and all build tasks.

Patterns are applied to the virtual resource paths (i.e. the UI5 runtime paths). Exclude patterns are always applied after any includes.

Cachebuster

Example

yaml
builder:
- cachebuster:
-   signatureType: time
yaml
builder:
- cachebuster:
-   signatureType: hash

By default, the generated cachebuster info file signatures are based on timestamps (time). In setups like CI environments, a mechanism based on file hashes (hash) might be more reliable. Also see PR #241 for more details.

Component Preload Generation

For projects of type application a Component-preload.js bundle is generated by default. This bundle will contain most UI5 runtime-relevant resources of the component.
You can override this default behavior by defining a componentPreload configuration.

For projects of type library, no Component Preload is created by default.
However you can define a componentPreload configuration to create Component Preload bundles. Those will be created in addition to the library-preload.js bundle.

There are two ways to define the set of components for which preload bundles should be generated. You can either provide paths (allowing patterns) or namespaces. You can also combine both configuration options. Defining any of them overrides the default preload bundle generation for the root component of application projects.

paths

Example

yaml
builder:
- componentPreload:
-   paths:
-       - "my/awesome/app/**/Component.js"

The paths option takes one or multiple patterns. For every matched file a separate Component-preload.js will be generated. Patterns are always applied relative to the project's virtual source directory /resources/.

namespaces

Example

yaml
builder:
- componentPreload:
-   namespaces:
-     - "my/awesome/app"
-     - "my/awesome/app/componentOne"
-     - "my/awesome/app/componentTwo"

The namespaces option takes one or multiple component namespaces, which correspond to the directory structures.

excludes

Info

This configuration is available since UI5 CLI v2.10.0 and applies only to projects defining [Specification Version(#specification-versions) 2.3 or higher.

Example

yaml
builder:
- componentPreload:
-   excludes:
-     - "my/awesome/app/localService/**"
yaml
builder:
- componentPreload:
-   namespaces:
-     - "my/awesome/app"
-     - "my/awesome/app/componentOne"
-     - "my/awesome/app/componentTwo"
-   excludes:
-     - "my/awesome/app/**/thirdparty/"
-     - "!my/awesome/app/componentTwo/thirdparty/NotExcluded.js"

List of modules declared as glob patterns (resource name patterns) that are excluded from the component preload bundles. Similarly to the use of a single * or double ** asterisk, a pattern ending with a slash / denotes an arbitrary number of characters or folder names. Re-includes have to be marked with a leading exclamation mark !. The order of filters is relevant; a later inclusion overrides an earlier exclusion, and vice versa.

Note that patterns are always applied relative to the project's virtual source directory /resources/. Re-includes must start with the namespace of the component they apply to.

Library Preload Generation

For projects of type library a library-preload.js bundle is generated by default. This bundle will contain most UI5 runtime-relevant resources of the library.

excludes

Info

This configuration is available since UI5 CLI v2.10.0 and applies only to projects defining Specification Version 2.3 or higher.

Example

yaml
builder:
- libraryPreload:
-   excludes:
-     - "my/lib/thirdparty/"
-     - "!my/lib/thirdparty/NotExcluded.js"

List of modules declared as glob patterns (resource name patterns) that are excluded from library-preload.js bundle. Similarly to the use of a single * or double ** asterisk, a pattern ending with a slash / denotes an arbitrary number of characters or folder names. Re-includes have to be marked with a leading exclamation mark !. The order of filters is relevant; a later inclusion overrides an earlier exclusion, and vice versa.

Note that patterns are always applied relative to the project's virtual source directory /resources/. Re-includes must start with the library's namespace.

Custom Tasks

Example

yaml
builder:
- customTasks:
-   - name: custom-task-1
-     beforeTask: replaceCopyright
-     configuration:
-       some-key: some value
-   - name: custom-task-2
-     afterTask: custom-task-1
-     configuration:
-       color: blue

You can define custom build tasks that will be executed for the project. Please refer to the Custom Tasks Documentation for a detailed explanation and examples of the build extensibility.

Each customTasks entry must define the name of the custom task as defined in its metadata.name property.

In addition, the execution order needs to be defined by referencing a standard task or an already configured custom task using the afterTask or beforeTask property.

Optionally, arbitrary configuration can be passed to the custom task.

JSDoc

Example

yaml
builder:
- jsdoc:
-   excludes:
-     - "some/project/name/thirdparty/**"

You can exclude the resources of a project from the JSDoc build process using a list of glob patterns. Matching resources will be ignored by the JSDoc build task.

Patterns are always applied relative to the project's virtual source directory /resources/.

These excludes are applied before any general builder excludes that have been defined in builder.resources.excludes.

Include Dependencies

Info

This configuration is available since UI5 CLI v2.12.0 and applies only to projects defining Specification Version 2.5 or higher.

Example

yaml
builder:
- settings:
-   includeDependency:
-     - shimmed.thirdparty.library
-   includeDependencyRegExp:
-     - ^com\.namespace
-   includeDependencyTree:
-     - sap.m

You can include certain dependencies into the build process using the includeDependency builder setting. By using includeDependencyRegExp, a regular expression can be used, for example to specify a namespace to dynamically select a group of dependencies that have to be included into the build result. By using includeDependencyTree, a selected dependency including all of its sub-dependencies is used.

This configuration can be overwritten more precisely with the CLI parameters --include-dependency, --include-dependency-regexp, --include-dependency-tree, --exclude-dependency, --exclude-dependency-regexp and --exclude-dependency-tree.

Minification

For projects of types application and library, minification is done for all JavaScript files. During the minification step debug variants are created, original resources are minified, and source maps are created. You can exclude the resources of a project from minification using a list of glob patterns. Matching resources won't be minified, and no debug variants or source maps will be created.

The project's ui5.yaml file can contain a list of modules declared as glob patterns (resource name patterns) that are excluded from resource minification. Re-includes have to be marked with a leading exclamation mark !; see the example below. The order of filters is relevant; a later inclusion overrides an earlier exclusion, and vice versa.

Note that patterns are always applied relative to the project's virtual source directory /resources/.

Info

This configuration is available since UI5 CLI v2.14.0 and applies only to projects defining Specification Version 2.6 or higher.

Example

yaml
builder:
- minification:
-   excludes:
-     - "my/lib/thirdparty/"
-     - "!my/lib/thirdparty/NotExcluded.js"

Server Configuration

Example

yaml
server:
- settings:
-   httpPort: 1337
-   httpsPort: 1443

By default, UI5 CLI will serve applications using Port 8080. When running in HTTP/2 or HTTPS mode, Port 8443 will be used.

If the default port is already in use, the next highest free port will be used.

A project can also configure alternative default ports. If the configured port is already in use, an error will be thrown.

The default and configured server ports can always be overwritten with the CLI parameter --port.

Extension Configuration

Example

yaml
specVersion: "4.0"
-type: application
-metadata:
- name: my.application
----
-specVersion: "4.0"
-kind: extension
-type: project-shim
-metadata:
- name: my.application.thirdparty
-shims:
- configurations:
-   lodash:
-     specVersion: "4.0"
-     type: module
-     metadata:
-       name: lodash
-     resources:
-       configuration:
-         paths:
-           /resources/my/application/thirdparty/: ""

Extensions configuration can be added to any projects ui5.yaml. For better readability, it should to be located after the projects configuration, separated by three dashes "---".

In cases where an extension shall be reused across multiple projects you can make it a module itself and have its configuration in a standalone ui5.yaml located inside that module.

Extensions can be identified by the kind: extension configuration. Note that if no kind configuration is given, project is assumed.

Available Extensions

Custom Bundling

Example

yaml
builder:
- bundles:
-   - bundleDefinition:
-       name: "sap-ui-custom.js"
-       sections:
-         - mode: raw
-           filters:
-           - ui5loader-autoconfig.js
-           resolve: true
-           sort: true
-     bundleOptions:
-       optimize: true
-   - bundleDefinition:
-       name: "app.js"
-       sections:
-         - mode: preload
-           filters:
-             - some/app/Component.js
-           resolve: true
-           sort: true
-         - mode: provided
-           filters:
-           - ui5loader-autoconfig.js
-           resolve: true
-     bundleOptions:
-       optimize: true

Custom bundles can be defined in the ui5.yaml. Within the builder/bundles configuration a list of bundleDefinitions can be described.

Properties

bundles

A list of bundle definitions. A bundleDefinition contains of the following options:

  • name: The module bundle name

  • defaultFileTypes: List of default file types which should be included in the bundle. Defaults to: .js, .control.xml, .fragment.html, .fragment.json, .fragment.xml, .view.html, .view.json and .view.xml

  • sections: A list of module bundle definition sections. Each section specifies an embedding technology (see API-Reference) and lists the resources that should be in- or excluded from the section.

    • mode: The embedding technology (e.g. provided, raw, preload, bundleInfo, depCache, require)

    • filters: List of modules declared as glob patterns (resource name patterns) that are in- or excluded. Similarly to the use of a single * or double ** asterisk, a pattern ending with a slash / denotes an arbitrary number of characters or folder names. Excludes have to be marked with a leading exclamation mark !. The order of filters is relevant; a later inclusion overrides an earlier exclusion, and vice versa.

    • resolve: Setting resolve to true will also include all (transitive) dependencies of the files

    • resolveConditional: Whether conditional dependencies of modules should be resolved and added to the module set for this section. By default set to false

    • declareRawModules: Whether raw modules should be declared after jQuery.sap.global became available. With the usage of the ui5loader, this flag should be set to 'false'. By default set to false

    • renderer: Whether renderers for controls should be added to the module set. By default set to false

    • sort: By default, modules are sorted by their dependencies. The sorting can be suppressed by setting the option to false

    • async (only available if mode equals require): Specifies whether the require section of the module should use an asynchronous API. When set to true, the modules are loaded using sap.ui.require. When set to false, modules are loaded using sap.ui.requireSync, which is not available in UI5 2.x.

bundleOptions

  • optimize: If set to true, the module bundle gets minified

  • decorateBootstrapModule: By default set to false. If set to true, the module will be decorated with an optimization marker

  • addTryCatchRestartWrapper: By default set to false. If set to true, bootable module bundles gets wrapped with a try/catch to filter "Restart" errors

  • numberOfParts: By default set to 1. The number of parts into which a module bundle should be splitted

  • sourceMap: By default set to true. Adds source map support to the bundle. Available since UI5 CLI v4.0.0

Specification Versions

A project must define a specification version by setting the specVersion property. UI5 CLI uses this information to detect whether the currently installed version is compatible to a project's configuration.

yaml
specVersion: "4.0"
-[...]

To use new features, a project might need to update the specVersion property.

For a given Specification Version MAJOR.MINOR we will increment:

  1. MAJOR when there are breaking changes that might require additional actions by the project maintainer
  2. MINOR when adding new features that are fully backward compatible

All changes are documented below.

Compatibility Matrix

Unless otherwise noted in the table below, UI5 CLI modules are backward compatible.

VersionUI5 CLI Release
4.0v4.0.0+
3.2v3.8.0+
3.1v3.5.0+
3.0v3.0.0+
2.6v2.14.0+
2.5v2.12.0+
2.4v2.11.0+
2.3v2.10.0+
2.2v2.4.0+
2.1v2.2.0+
2.0v2.0.0+
1.1v1.13.0+
1.0v1.0.0+
0.1v0.0.1+

Specification Version 4.0

Breaking changes:

Specification Version 4.0 projects are supported by UI5 CLI v4.0.0 and above.

Also see Migrate to v4 for details on these breaking changes.

Specification Version 3.2

Features:

Specification Version 3.2 projects are supported by UI5 CLI v3.8.0 and above.

Specification Version 3.1

Features:

Specification Version 3.1 projects are supported by UI5 CLI v3.5.0 and above.

Specification Version 3.0

Breaking changes:

  • The metadata.name property is now restricted to contain only certain characters and no uppercase letters. See name for details

  • bundleOptions has been modified:

    • debugMode has been removed
    • optimize now always defaults to true #685

Features:

  • Adds support for sourceMap configuration for the application and library bundleOptions

Specification Version 3.0 projects are supported by UI5 CLI v3.0.0 and above.

Specification Version 2.6

Features:

  • Adds support for excludes configuration for the application and library minification

Specification Version 2.6 projects are supported by UI5 CLI v2.14.0 and above.

Specification Version 2.5

Features:

Specification Version 2.5 projects are supported by UI5 CLI v2.12.0 and above.

Specification Version 2.4

Features:

  • Adds support for bundleInfo mode in bundle definitions.

Specification Version 2.4 projects are supported by UI5 CLI v2.11.0 and above.

Specification Version 2.3

Features:

  • Adds support for excludes configuration of component- and library preload bundles

Specification Version 2.3 projects are supported by UI5 CLI v2.10.0 and above.

Specification Version 2.2

Features:

Specification Version 2.2 projects are supported by UI5 CLI v2.4.0 and above.

Specification Version 2.1

Features:

Specification Version 2.1 projects are supported by UI5 CLI v2.2.0 and above.

Specification Version 2.0

Breaking changes:

  • Adds and enforces schema validation of the ui5.yaml
  • By default the encoding of *.properties files is expected to be UTF-8 (as opposed to ISO-8859-1 in projects defining specification versions below 2.0)

Features:

  • Adds support for the "framework" configuration to consume SAPUI5 libraries.

Specification Version 2.0 projects are supported by UI5 CLI v2.0.0 and above.

Specification Version 1.1

Features:

  • Adds support for the theme-library type.

Specification Version 1.1 projects are supported by UI5 CLI v1.13.0 and above.

Specification Version 1.0

First stable release.

Specification Version 1.0 projects are supported by UI5 CLI v1.0.0 and above.

Specification Version 0.1

Initial version.

Specification Version 0.1 projects are compatible with UI5 CLI v0.0.1 and above.

- - - - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/ESSupport.html b/packages/documentation/docs/.vitepress/dist/ESSupport.html deleted file mode 100644 index 968bf75565..0000000000 --- a/packages/documentation/docs/.vitepress/dist/ESSupport.html +++ /dev/null @@ -1,259 +0,0 @@ - - - - - - ECMAScript Support | VitePress - - - - - - - - - - - - - - -
Skip to content

ECMAScript Support

UI5 Tooling offers general support for ES2023 ECMAScript features. While a ui5 build is executed, UI5 Tooling analyses a project's code. Depending on the project type, you have to consider some restrictions regarding the usage of certain ECMAScript syntax.

UI5 Tooling VersionSupported ECMAScript VersionNote
v3.11+ECMAScript 2023
v3.0+ECMAScript 2022
v2.0+ECMAScript 2009/ES5Note that code up to ECMAScript 2020 can be parsed, however required code analysis might not work correctly for specific language features

The following section describes all restrictions grouped by the kind of ECMAScript language feature. To get more insights into the code analysing executed by UI5 Tooling check out Code Analysis.

Language Features with Restrictions

The following sections describe the restrictions grouped by the ECMAScript language feature.

JavaScript modules

In general, UI5 Tooling only analyzes JavaScript files of type script. JavaScript Modules are not analyzed.

UI5 Tooling and the UI5 Runtime does not support the usage of export and import of JavaScript Modules. Therefore, sap.ui.define has to be used.

javascript
sap.ui.define([
-    "ModuleA",
-    "ModuleB"
-], function(ModuleA, ModuleB) {
-    return ModuleA.extend("ModuleC", {});
-});
javascript
import ModuleA from "ModuleA";
-import ModuleB from "ModuleB";
-export default class ModuleC extends ModuleA {};

Template Literal

Template Literals without an expressions can be used in all places where string literals can be used. However, since UI5 Tooling will attempt a static code analysis for certain calls to UI5 API, Template Literals with one or more expressions (e.g. Hello ${planets[2]}) can't be used in the scenarios described below.

Template Literal in sap.ui.define or sap.ui.require

Template Literals with one or more expressions inside a sap.ui.define or sap.ui.require call are not supported.

javascript
sap.ui.define([
-    `ModuleA`,
-    `ModuleB`
-], function(ModuleA, ModuleB) {
-});
javascript
const i = `B`;
-sap.ui.define([
-    `ModuleA`,
-    `Module${i}`
-], function(ModuleA, ModuleB) {
-});

The same rule applies also for the usage of deprecated or no longer recommended APIs jQuery.sap.declare, jQuery.sap.declare, define, require, require.predefine, sap.ui.predefine, sap.ui.requireSync and sap.ui.require.preload.

Template Literal in Smart Template Declaration

When declaring a Smart Template using a Template Literal with one or more expressions in the name of the Smart Template is not supported.

javascript
sap.ui.define([
-    `sap/suite/ui/generic/template/lib/TemplateAssembler`
-], function(TemplateAssembler) {
-    return TemplateAssembler.getTemplateComponent(getMethods, 
-        `sap.suite.ui.generic.templates.Page.Component`, {
-            metadata: {
-                properties: {
-                    templateName: {
-                        type: `string`,
-                        defaultValue: `sap.suite.ui.generic.templates.Page.view.Page`
-                    }
-                },
-                manifest: `json`
-            }
-        }
-    );
-});
javascript
sap.ui.define([
-    `sap/suite/ui/generic/template/lib/TemplateAssembler`
-], function(TemplateAssembler) {
-    const name = `Component`;
-    return TemplateAssembler.getTemplateComponent(getMethods,
-        `sap.suite.ui.generic.templates.Page.${name}`, {
-            metadata: {
-                properties: {
-                    templateName: {
-                        type: `string`,
-                        defaultValue: `sap.suite.ui.generic.templates.Page.view.Page`
-                    }
-                },
-                manifest: `json`
-            }
-        }
-    );
-});

Template Literal in XMLComposite Declaration

The XMLComposite control is deprecated since version UI5 1.88. Nevertheless UI5 Tooling will attempt to analyze the declaration of any such controls in a project.

Declaring an XMLComposite control using a Template Literal with one or more expressions in the name, is not supported.

javascript
sap.ui.define([
-    `sap/ui/core/XMLComposite`
-], function(XMLComposite) {
-    return XMLComposite.extend(`composites.MyComposite`, {} 
-});
javascript
sap.ui.define([
-    `sap/ui/core/XMLComposite`
-], function(XMLComposite) {
-    const name = `MyComposite`;
-    return XMLComposite.extend(`composites.${name}`, {});
-});

Template Literal in sap/ui/core/Core#initLibrary Call

A library is typically initialized via an accompanying library.js. Within that file, the object which is supplied to the sap/ui/core/Core#initLibrary method, must not use a Template Literal with one or more expressions for the library name.

javascript
sap.ui.getCore().initLibrary({
-    name: `my.lib`
-});
javascript
const libraryName = `lib`;
-sap.ui.getCore().initLibrary({
-    name: `my.${libraryName}`
-});

Reserved Variable Names in a Template Literal

While UI5 Tooling performs a build placeholders are replaced with a values offered by the build. For example ${version} is replaced with the actual version defined in the package.json of the project. Therefore it is required to not use any Template Literal where any expression contains variable with following names:

  • version
  • project.version
  • buildtime
  • copyright
javascript
const myVersion = `1.2`;
-const transformedVersion `v${myVersion}`
javascript
const version = `1.2`;
-const transformedVersion `v${version}`

UI5 Tooling searches for the exact match of ${version}, so with adding whitespaces before and after the variable name ${ version } UI5 Tooling won't replace this occurence. This can be enforced by the dedicated ESLint config template-curly-spacing with option always.

Spread Element

A Spread Element can be used in all places, except the following.

Spread Element in sap.ui.define or sap.ui.require

A Spread Element as a parameter in a sap.ui.define or sap.ui.require call is not supported.

javascript
sap.ui.define([
-    "ModuleA",
-    "ModuleB"
-], function(ModuleA, ModuleB) {
-});
javascript
const dependencies = ["ModuleA", "ModuleB"];
-sap.ui.define([
-    ...dependencies
-], function(ModuleA, ModuleB) {
-});

The same rule applies also for the usage of deprecated or no longer recommended APIs jQuery.sap.declare, jQuery.sap.declare, define, require, require.predefine, sap.ui.predefine, sap.ui.requireSync and sap.ui.require.preload.

Spread Element in Smart Template Declaration

When declaring a Smart Template, the usage of a Spread Element in the configuration is not supported.

javascript
sap.ui.define([
-    "sap/suite/ui/generic/template/lib/TemplateAssembler"
-], function(TemplateAssembler) {
-    return TemplateAssembler.getTemplateComponent(getMethods, 
-        "sap.suite.ui.generic.templates.Page.Component", {
-            metadata: {
-                properties: {
-                    templateName: {
-                        type: "string",
-                        defaultValue: "sap.suite.ui.generic.templates.Page.view.Page"
-                    }
-                },
-                manifest: "json"
-            }
-        }
-    );
-});
javascript
sap.ui.define([
-    "sap/suite/ui/generic/template/lib/TemplateAssembler"
-], function(TemplateAssembler) {
-    const myTemplate = {
-        templateName: {
-            type: "string",
-            defaultValue: "sap.suite.ui.generic.templates.Page.view.Page"
-        }
-    };
-    return TemplateAssembler.getTemplateComponent(getMethods,
-        "sap.suite.ui.generic.templates.Page.Component", {
-            metadata: {
-                properties: {
-                    ...myTemplate
-                }
-                manifest: "json"
-            }
-        }
-    );
-});

Spread Element in XMLComposite Declaration

The XMLComposite control is deprecated since version UI5 1.88. Nevertheless UI5 Tooling will attempt to analyze the declaration of any such controls in a project.

When declaring an XMLComposite, the usage of a Spread Element in the configuration is not supported.

javascript
sap.ui.define([
-    "sap/ui/core/XMLComposite"
-], function(XMLComposite) {
-    return XMLComposite.extend("composites.MyComposite", {
-        fragment: "composites.custom.MyComposite"
-    } 
-});
javascript
sap.ui.define([
-    "sap/ui/core/XMLComposite"
-], function(XMLComposite) {
-    const myXMLComposite = {
-          fragment: "composites.custom.MyComposite"
-    };
-    return XMLComposite.extend(`composites.MyComposite`, {
-        ...myXMLComposite
-    });
-});

Spread Element in sap/ui/core/Core#initLibrary Call

A library is typically initialized via an accompanying library.js. Within that file, the object which is supplied to the sap/ui/core/Core#initLibrary method, must not use a Spread Element.

javascript
sap.ui.getCore().initLibrary({
-    name: "my.lib"
-});
javascript
const mylib = {
-    name: "my.lib"
-};
-sap.ui.getCore().initLibrary({
-    ...mylib
-});

Object Expression

An Object Expression can be used in all places except in following places.

Object Expression in sap.ui.define or sap.ui.require

An Object Expression as a parameter in a sap.ui.define or sap.ui.require call is not supported.

javascript
sap.ui.define([
-    "Bar"
-], function(Bar){
-});
javascript
const dependency = "Bar";
-sap.ui.define([
-    dependency
-], function(Bar){
-});

The same rule applies also for the usage of deprecated or no longer recommended APIs jQuery.sap.declare, jQuery.sap.declare, define, require, require.predefine, sap.ui.predefine, sap.ui.requireSync and sap.ui.require.preload.

Object Expression in Smart Template Declaration

When declaring a Smart Template, the usage of an Object Expression in the configuration is not supported.

javascript
sap.ui.define([
-    "sap/suite/ui/generic/template/lib/TemplateAssembler"
-], function(TemplateAssembler) {
-    return TemplateAssembler.getTemplateComponent(getMethods, 
-        "sap.suite.ui.generic.templates.Page.Component", {
-            metadata: {
-                properties: {
-                    templateName: {
-                        type: "string",
-                        defaultValue: "sap.suite.ui.generic.templates.Page.view.Page"
-                    }
-                },
-                manifest: "json"
-            }
-        }
-    );
-});
javascript
sap.ui.define([
-    "sap/suite/ui/generic/template/lib/TemplateAssembler"
-], function(TemplateAssembler) {
-    const key = "templateName"
-    return TemplateAssembler.getTemplateComponent(getMethods,
-        `sap.suite.ui.generic.templates.Page.${name}`, {
-            metadata: {
-                properties: {
-                    [key]: {
-                        type: "string",
-                        defaultValue: "sap.suite.ui.generic.templates.Page.view.Page"
-                    }
-                }
-                manifest: "json"
-            }
-        }
-    );
-});

Object Expression in XMLComposite Declaration

The XMLComposite control is deprecated since version UI5 1.88. Nevertheless UI5 Tooling will attempt to analyze the declaration of any such controls in a project.

When declaring an XMLComposite, the usage of an Object Expression in the configuration is not supported.

javascript
sap.ui.define([
-    "sap/ui/core/XMLComposite"
-], function(XMLComposite) {
-    return XMLComposite.extend("composites.MyComposite", {
-        fragment: "composites.custom.MyComposite"
-    } 
-});
javascript
sap.ui.define([
-    "sap/ui/core/XMLComposite"
-], function(XMLComposite) {
-    const key = "fragment";
-    return XMLComposite.extend("composites.MyComposite", {
-        [key]: "composites.custom.MyComposite"
-    });
-});

Object Expression in sap/ui/core/Core#initLibrary Call

A library is typically initialized via an accompanying library.js. Within that file, the object which is supplied to the sap/ui/core/Core#initLibrary method, must not use an Object Expression.

javascript
sap.ui.getCore().initLibrary({
-    name: "my.lib"
-});
javascript
const key = "name";
-sap.ui.getCore().initLibrary({
-    [key]: "my.lib"
-});

Computed Property

A Computed Property can be used in all places except in following places.

Computed Property when using extend

One or more Computed Property as a parameter in an UI5 Module extend call is not supported.

javascript
sap.ui.define([
-    "Bar"
-], function(Bar){
-    return Bar.extend("my.Bar" {});
-});
javascript
const name = "my";
-sap.ui.define([
-    "Bar"
-], function(Bar){
-    return Bar.extend(name + ".Bar", {});
-});

Computed Properties in sap/ui/core/Core#initLibrary Call

A library is typically initialized via an accompanying library.js. Within that file, the object which is supplied to the sap/ui/core/Core#initLibrary method, must not use an Computed Property.

javascript
sap.ui.getCore().initLibrary({
-    name: "my.lib"
-});
javascript
const name = "my";
-sap.ui.getCore().initLibrary({
-    name: name + ".lib"
-});

Class Declaration

If you want to generate a JSDoc build of your project and using a Class Declaration the class declaration should not be returned directly. Declare the class and return the class in a separate statement. If not JSDoc treats the the class declaration as a return statement and does not recognize any JSDoc if such is provided right above the class declaration.

javascript
sap.ui.define([
-    "Bar"
-], function(Bar){
-    /**
-     * JSDoc block here
-     */
-    class Foo extends Bar {
-        make () {}
-    }
-    return Foo;
-});
javascript
sap.ui.define([
-    "Bar"
-], function(Bar){
-    /**
-     * JSDoc block here
-     */
-    return class Foo extends Bar {
-        make () {}
-    }
-});

Arrow Function Expression

If you want to generate a JSDoc build of your project and use an Arrow Function Expression the JSDoc has to be written above the arrow function and not above the sap.ui.define/sap.ui.require command.

javascript
sap.ui.define([
-    "Bar"
-], 
-/**
- * JSDoc block here
- */
-(Bar) => Bar.extends("Foo", {
-}));
javascript
/**
- * JSDoc block here
- */
-sap.ui.define([
-    "Bar"
-], (Bar) => Bar.extends("Foo", {
-}));
- - - - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/FAQ.html b/packages/documentation/docs/.vitepress/dist/FAQ.html deleted file mode 100644 index e9043010d3..0000000000 --- a/packages/documentation/docs/.vitepress/dist/FAQ.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - FAQ | VitePress - - - - - - - - - - - - - - -
Skip to content

FAQ

How Can I Contribute?

Please check our Contribution Guidelines.

How Can I Obtain Support?

Please follow our Contribution Guidelines on how to report an issue.

What's the Difference Between OpenUI5 and SAPUI5?

The open source project OpenUI5 provides most of the fundamental framework features. SAPUI5 enhances this by providing additional libraries under a different license.

OpenUI5 is provided under the Apache 2.0 license. The SAPUI5 packages that are consumed in UI5 CLI are provided under the terms of the SAP Developer License Agreement.

Note that projects which use the OpenUI5 framework cannot depend on projects that use the SAPUI5 framework. However, SAPUI5 projects can depend on OpenUI5 projects.

Please also see the UI5 SDK documentation "SAPUI5 vs. OpenUI5".

Why package.json? / Why npm?

Currently, UI5 CLI can only resolve dependencies defined in a package.json file. This might change in the future by adding Translators for additional dependency management systems.

To manage your dependencies, you can use almost any Node.js package manager that relies on package.json files. Popular ones are npm, Yarn and pnpm. UI5 CLI itself uses npm.

UI5 CLI resolves dependencies almost the same way Node.js does when executing a require / import statement.

Where are the npm Packages?

- - - - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/FileSystem.html b/packages/documentation/docs/.vitepress/dist/FileSystem.html deleted file mode 100644 index 9af1f94a00..0000000000 --- a/packages/documentation/docs/.vitepress/dist/FileSystem.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - UI5 FS | VitePress - - - - - - - - - - - - - - -
Skip to content

UI5 FS

The UI5 FS provides a UI5-specific file system abstraction.

API Reference

Overview

The virtual file system "UI5 FS" offers an abstraction layer from the physical file system. Among other features, it can combine a set of scattered file locations into a well-defined virtual structure.

Resource

A Resource basically represents a file. Besides providing access to the file content, it also carries metadata like the virtual path of the Resource.

Resources are typically created and stored in Adapters. Once read from a physical file system, they are typically kept in memory for further processing in other modules.

This ensures a high build performance, as physical read and write access for a high number of resources is kept to a minimum.

Adapters

Adapters abstract access to different resource locations.

The Memory Adapter represents a virtual file system which maintains respective Resources inside a virtual data structure.

The File System Adapter, on the other hand, has direct access to the physical file system. It maps a "virtual base path" to a given physical path.

Both adapters provide APIs to retrieve and persist Resources, namely

  • to retrieve a single resource by its virtual path use byPath(),

  • to retrieve many resources based on patterns use byGlob(),

  • to persist a single resource use write().

Reader Collections

Reader collections allow grouped access to multiple adapters, which might even be nested in other reader collections.

They implement the same API for retrieving resources as adapters (byPath and byGlob). Multiple flavors exist:

  • ReaderCollection: The most basic collection. Allows parallel read access to multiple readers (i.e. adapters or collections)
  • ReaderCollectionPrioritized: Contains a list of readers which are searched in-order. This allows one reader to "overlay" resources of another
  • DuplexCollection: Contains a single reader and a single "writer". It therefore also implements the Adapter API for persisting resources (write()). When retrieving resources, the writer is prioritized over the reader
  • WriterCollection: Contains a set of writers and a mapping for each of them. When writing a resource, the writer is chosen based on the resource's virtual path.
- - - - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/GettingStarted.html b/packages/documentation/docs/.vitepress/dist/GettingStarted.html deleted file mode 100644 index 5c211d059f..0000000000 --- a/packages/documentation/docs/.vitepress/dist/GettingStarted.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - Getting Started | VitePress - - - - - - - - - - - - - - -
Skip to content

Getting Started

Installing the UI5 CLI

Requirements

  • Node.js version v20.11.0 and higher or v22.0.0 and higher (v21 is not supported)
  • npm version v8.0.0 or higher

Installation

sh
# Global installation to have the command available
-npm install --global @ui5/cli
-
-# Additional local install in your project
-npm install --save-dev @ui5/cli
-
-# Verify installation
-ui5 --help

The globally installed UI5 CLI will always try to invoke a locally installed version of the UI5 CLI (if present). This way you can use different versions of the UI5 CLI across your projects. Please see the UI5 CLI documentation for details.

⚡️ Quick Start: OpenUI5 Sample App

Check out the OpenUI5 Sample App featuring a full blown How-to to play around with UI5 CLI!

Starting a New Project

The easiest way to start a new UI5 project is to use a template generator like generator-easy-ui5.

Choose a template that is designed for the type of project you want to create and the target environment where you want to deploy it to. Make sure that the template already uses UI5 CLI. A good indicator for that is the presence of a ui5.yaml file in the generated project.

When working with SAP Business Application Studio, there are several templates available to you. Check out the tutorial on creating a basic SAPUI5 application and deploying it to Cloud Foundry from within SAP Business Application Studio: Create an SAP Fiori App Using SAP Business Application Studio

You can find many guides on UI5 development with SAP Business Application Studio in the Tutorial Navigator.

Enabling an Existing Project

You can easily check whether or not a project (application or library) can already be used with the UI5 CLI by looking for a ui5.yaml file in the project's root directory.
This file (with some exceptions) is required for all projects and their dependencies (e.g. reuse libraries) to use them in the UI5 CLI.

Setup

If your project is not set up for use with the UI5 CLI yet, follow these steps:

  1. If your project does not have a package.json file, let npm generate it:

    sh
    npm init --yes
  2. Generate the ui5.yaml file:

    sh
    ui5 init
  3. Define the framework you want to use

sh
ui5 use openui5@latest
sh
ui5 use sapui5@latest

You can choose between the OpenUI5 and the SAPUI5 framework.

Don't know which one to choose? Check out our documentation on the differences between OpenUI5 and SAPUI5.

  1. Add required libraries

    sh
    ui5 add sap.ui.core sap.m sap.ui.table themelib_sap_fiori_3 # [...]

    You can find a documentation of all libraries, including samples and more, in the Demo Kit:

  2. Start the server and work on your project! 🎉

    sh
    ui5 serve

Tip

Use ui5 serve to start a local development server and ui5 build --all to produce an optimized, static version of your project, which you can then deploy to your production environment.

Find more information here:

  1. If you are using Git or similar version control, commit package.json and ui5.yaml to your repository.
    sh
    git add package.json ui5.yaml
    -git commit -m "Enable use with UI5 CLI"

Hooray! You can now use UI5 CLI in your project! 🎉

- - - - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/HomePage.html b/packages/documentation/docs/.vitepress/dist/HomePage.html deleted file mode 100644 index 0093eae8a8..0000000000 --- a/packages/documentation/docs/.vitepress/dist/HomePage.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - UI5 Tooling | VitePress - - - - - - - - - - - - - - -
Skip to content

UI5 Tooling

An open and modular toolchain to develop state-of-the-art applications based on the UI5 framework.

🚀 New Release

UI5 Tooling V4 is here 🎉

Read the announcement blog post: SAP Community: UI5 Tooling 4.0

And checkout the Migrate to v4 documentation.

Get Started

Main Features

💻 UI5 CLI

Also see the UI5 CLI Documentation

sh
# Global
-npm install --global @ui5/cli
-
-# In your project
-npm install --save-dev @ui5/cli

⚙️ Project Setup

Configure your project for use with UI5 Tooling.
Also see the Configuration Documentation

❯ ui5 init
-Wrote ui5.yaml:
-
-specVersion: "4.0"
-metadata:
-  name: my-app
-type: application

🚚 Dependency Management

UI5 framework dependencies are managed by the tooling. All other dependencies are managed by your favorite node package manager.

❯ ui5 use SAPUI5@1.117.0
-Updated configuration written to ui5.yaml
-This project is now using SAPUI5 version 1.117.0
-
-❯ ui5 add sap.ui.core sap.m themelib_sap_fiori_3
-Updated configuration written to ui5.yaml
-Added framework libraries sap.ui.core sap.m themelib_sap_fiori_3 as dependencies

🏄 Development Server

Start a local development server to work on your project.
Also see the Server Documentation

❯ ui5 serve
-Server started
-URL: http://localhost:8080

🛠 Build for Production

Build an optimized version of your project.
Also see the Builder Documentation

bash
 ui5 build
-info graph:helpers:ui5Framework Using OpenUI5 version: 1.117.0
-info ProjectBuilder Preparing build for project my-app
-info ProjectBuilder   Target directory: ./dist
-info ProjectBuilder Cleaning target directory...
-info Project 1 of 1: Building application project my-app...
-info my-app Running task escapeNonAsciiCharacters...
-info my-app Running task replaceCopyright...
-info my-app Running task replaceVersion...
-info my-app Running task minify...
-info my-app Running task generateFlexChangesBundle...
-info my-app Running task generateComponentPreload...
-info ProjectBuilder Build succeeded in 296 ms
-info ProjectBuilder Executing cleanup tasks...

🧪 Node.js API

Most UI5 Tooling modules provide JavaScript APIs for direct consumption in other Node.js projects. This allows you to rely on UI5 Tooling for UI5-specific build functionality and project handling, while creating your own tools to perfectly match the needs of your project.

All available APIs are documented in the UI5 Tooling API Reference.

js
import {graphFromPackageDependencies} from "@ui5/project/graph";
-
-async function buildApp(projectPath, destinationPath) {
-    const graph = await graphFromPackageDependencies({
-        cwd: projectPath
-    });
-    await graph.build({
-        destPath: destinationPath,
-        selfContained: true,
-        excludedTasks: ["transformBootstrapHtml"],
-        includedDependencies: ["*"]
-    });
-}
js
async function buildApp(projectPath, destinationPath) { 
-    const {graphFromPackageDependencies} = 
-        await import("@ui5/project/graph");
-    const graph = await graphFromPackageDependencies({
-        cwd: projectPath
-    });
-    await graph.build({
-        destPath: destinationPath,
-        selfContained: true,
-        excludedTasks: ["transformBootstrapHtml"],
-        includedDependencies: ["*"]
-    });
-}
- - - - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/OpenUI5.html b/packages/documentation/docs/.vitepress/dist/OpenUI5.html deleted file mode 100644 index be2d5d1890..0000000000 --- a/packages/documentation/docs/.vitepress/dist/OpenUI5.html +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - Consuming OpenUI5 Libraries | VitePress - - - - - - - - - - - - - - -
Skip to content

Consuming OpenUI5 Libraries

OpenUI5 consumption with UI5 CLI is very similar to SAPUI5 consumption. Please refer to the documentation on Consuming SAPUI5 Libraries for a general description of how UI5 CLI can fetch and provide framework dependencies to your project.

Note that projects using the SAPUI5 framework can depend on projects using the OpenUI5 framework. However, OpenUI5 projects can't depend on SAPUI5 projects.

Please also refer to our documentation on the differences between OpenUI5 and SAPUI5.

INFO

The minimum OpenUI5 version that can be consumed by UI5 CLI is 1.52.5

Configuration

Your project's ui5.yaml provides a configuration section dedicated to framework dependency handling.

This configuration can be maintained by editing the file, or by using the UI5 CLI:

Example

Using the UI5 CLI:

sh
ui5 use openui5@latest
-ui5 add sap.ui.core sap.m sap.ui.table themelib_sap_fiori_3

Example ui5.yaml of an application

yaml
specVersion: "4.0"
-type: application
-metadata:
-  name: some.project.name
-framework:
-  name: OpenUI5
-  version: 1.76.0
-  libraries:
-    - name: sap.ui.core
-    - name: sap.m
-    - name: sap.ui.table
-    - name: themelib_sap_fiori_3

Example ui5.yaml of a library

yaml
specVersion: "4.0"
-type: library
-metadata:
-  name: some.library
-framework:
-  name: OpenUI5
-  version: 1.76.0
-  libraries:
-    - name: sap.ui.core
-    - name: themelib_sap_belize
-      optional: true
-    - name: themelib_sap_bluecrystal
-      optional: true
-    - name: themelib_sap_fiori_3
-      optional: true

Please make sure that your project defines Specification Version 2.0 or higher.

For details, please see the corresponding framework configuration documentation.

Linking Framework Dependencies

When working on UI5 applications or libraries that use OpenUI5, you can link a local OpenUI5 repository into that project. This allows you to make changes to the project itself as well as to the OpenUI5 libraries simultaneously and test them immediately.

A detailed step-by-step guide on how to achieve such a setup with the OpenUI5 Sample App can be found here.

OpenUI5 Framework Development

Please refer to the OpenUI5 Framework Development Documentation.

- - - - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/Overview.html b/packages/documentation/docs/.vitepress/dist/Overview.html deleted file mode 100644 index dcb15abcfb..0000000000 --- a/packages/documentation/docs/.vitepress/dist/Overview.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - Development Overview | VitePress - - - - - - - - - - - - - - -
Skip to content

Development Overview

When developing a UI5 project on your local system, you should use the UI5 Server (ui5 serve) and not the UI5 Builder (ui5 build). Building a project should only be required when deploying it.

However, you might have good reasons to also use the UI5 Builder during development. In such cases, feel free to let us know! Maybe your use case could be covered by a future enhancement of the UI5 Server.

Project Dependencies

UI5 CLI differentiates between "framework dependencies" and "project dependencies".

Framework dependencies are generally libraries and themes provided by the SAP frameworks "OpenUI5" and "SAPUI5". UI5 CLI will take care of downloading them and handling their versions for you. Please see the corresponding documentation on both options:

Project dependencies are all other libraries, custom themes, UI5 CLI extensions or JavaScript modules your project depends on. In general these dependencies are maintained in the package.json of your project. See also: FAQ: Why package.json? / Why npm?.

Linking Projects

Would you like to work on an application project and one or more of its dependencies at the same time? We got you covered!

UI5 Workspaces

The recommended approach for setting up a development environment where simultaneous work on multiple UI5 projects is required.

Head over to the UI5 Workspaces documentation for the details. Below is an example based on a simple scenario with an application and a reuse library project:

Example: Your Directory Structure

my-app/
-    \_ node_modules/
-    \_ webapp/
-    \_ ui5.yaml
-    \_ package.json
-my-reuse-library/
-    \_ node_modules/
-    \_ src/
-    \_ test/
-    \_ ui5.yaml
-    \_ package.json

In its package.json, my-app should already define a dependency to my-reuse-library. So, after running the npm install command, a copy of the my-reuse-library-package should be retrieved from the package registry and added to my-app's node_modules/ directory.

In the my-app directory, create a new file named ui5-workspace.yaml with the following content:

yaml
specVersion: workspace/1.0
-metadata:
-    name: default
-dependencyManagement:
-    resolutions:
-        - path: ../my-reuse-library

That's it! Start a server via ui5 serve, and you will see that any changes you make in my-reuse-library are immediately visible in my-app.

Package Managers

By leaving dependency management up to the tool of your choice (see FAQ: Why package.json? / Why npm?) you have a variety of other options for linking dependencies into your project.

Here is an example using the npm CLI in Version 8, an application, and a reuse library project:

Example: Your Directory Structure

my-app/
-    \_ node_modules/
-    \_ webapp/
-    \_ ui5.yaml
-    \_ package.json
-my-reuse-library/
-    \_ node_modules/
-    \_ src/
-    \_ test/
-    \_ ui5.yaml
-    \_ package.json

In its package.json, my-app should already define a dependency to my-reuse-library. So, after running the npm install command, a copy of the "my-reuse-library"-package should be retrieved from the package registry and added to my-app's node_modules/ directory.

Now all you need to do is replacing this copy of the my-reuse-library package with a link to the my-reuse-library project located somewhere on your computer. In this example it is right next to my-app, but that doesn't really matter.

First, in the directory of the my-reuse-library project, create a global link:

sh
npm link

Then, in the my-app directory, use that link to replace the registry package:

sh
npm link my-reuse-library

Note: "my-reuse-library" is the name defined in the package.json and not necessarily the directory or ui5.yaml name

That's it. You can check whether the linking worked by executing ui5 tree in the my-app directory and looking for the path attributes in its output.

Static Dependency Definition

As an alternative to defining your project dependencies in the package.json, you can define a static dependency hierarchy for the project in a YAML file. This is typically only advised in special cases where none of the other concepts work.

To use such a file in UI5 CLI, provide a path to it using the --dependency-definition parameter. Note that all package.json dependencies will be ignored (including UI5 CLI extensions), but UI5 framework dependencies defined in ui5.yaml will still be used.

Example: projectDependencies.yaml

yaml
id: my.app
-version: "local"
-path: "."
-dependencies:
-  - id: my.lib
-    version: "local"
-    path: "../my.lib"

By placing this file in the root directory of the my.app application project, you can start a server with a local copy of the my.lib dependency, located in the same parent directory, using the command ui5 serve --dependency-definition ./projectDependencies.yaml.

The structure of the dependency definition file follows that of the @ui5/project/graph/providers/DependencyTree~TreeNode type.

HTTP/2 Development Webserver

The UI5 CLI contains a web server to serve the project via HTTP/2 protocol.

sh
ui5 serve --h2

This requires an SSL certificate. You are guided through the automatic generation process. Also see the UI5 Server documentation

Integration in Other Tools

One of the key features of the UI5 CLI is its modularization. Single parts of UI5 CLI can easily be integrated in other Node.js-based tools and frameworks like Grunt or Gulp.

All JavaScript APIs available for direct consumption are listed here. However, for standard UI5 development, the UI5 CLI should always be the first choice.

- - - - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/Privacy.html b/packages/documentation/docs/.vitepress/dist/Privacy.html deleted file mode 100644 index 999e07c0a3..0000000000 --- a/packages/documentation/docs/.vitepress/dist/Privacy.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - Privacy | VitePress - - - - - - - - - - - - - - -
Skip to content

Privacy

This site is hosted by GitHub Pages. Please see the GitHub Privacy Statement for any information how GitHub processes your personal data.

- - - - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/Project.html b/packages/documentation/docs/.vitepress/dist/Project.html deleted file mode 100644 index 905cd72e6b..0000000000 --- a/packages/documentation/docs/.vitepress/dist/Project.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - UI5 Project | VitePress - - - - - - - - - - - - - - -
Skip to content

UI5 Project

The UI5 Project module provides functionality to build a UI5 project. Also see Development Overview: Project Dependencies.

Types

Types define how a project can be configured and how it is built. A type orchestrates a set of tasks and defines the order in which they get applied during build phase. Furthermore, it takes care of formatting and validating the project-specific configuration.

Also see UI5 Project: Configuration

application

Projects of type application are typically the main or root project. In a projects dependency tree, there should only be one project of type application. If multiple are found, those further away from the root are ignored.

The source directory of an application (typically named webapp) is mapped to the virtual root path /.

An applications source directory may or may not contain a Component.js file. If it does, it must also contain a manifest.json file. If there is a Component.js file, an optimized Component-preload.js file will be generated during the build.

library

UI5 libraries are often referred to as reuse-, custom- or control libraries. They are a key component in sharing code across multiple projects in UI5.

A project of type library must have a source directory (typically named src). It may also feature a "test" directory. These directories are mapped to the virtual directories /resources for the sources and /test-resources for the test resources.

These directories should contain a directory structure representing the namespace of the library (e.g. src/my/first/library) to prevent name clashes between the resources of different libraries.

theme-library

Available since Specification Version 1.1

UI5 theme libraries provide theming resources for the controls of one or multiple libraries.

A project of type theme-library must have a source directory (typically named src). It may also feature a "test" directory. These directories are mapped to the virtual directories /resources for the sources and /test-resources for the test resources.

The source directory must contain a directory structure representing the namespaces of the libraries it provides theme resources for. For example, a theme library named my_custom_theme, providing resources for a library named my.library should have these resources in a directory path my/library/themes/my_custom_theme/.

module

The module type is meant for usage with non-UI5 resources like third-party libraries. Their path mapping can be configured freely. During a build, their resources are copied without modifications.

Build Output Style

The Output Style offers you control over your project's build output folder. Namespaces like sap.m or sap.ui.core can be streamlined, producing a more concise and flat output. For example, a resource like /resources/sap/m/RangeSlider.js will be transformed into ./RangeSlider.js. And vice versa, applications that are built by default with Flat output, can leverage any namespaces they might have.

In the table below you can find the available combinations of project type & output style.

Project Type / Requested Output StyleResulting Style
application
DefaultRoot project is written Flat-style. ¹
FlatSame as Default.
NamespaceRoot project is written Namespace-style (resources are prefixed with the project's namespace). ¹
library
DefaultRoot project is written Namespace-style. ¹
FlatRoot project is written Flat-style (without its namespace, logging warnings for resources outside of it). ¹
NamespaceSame as Default.
theme-library
DefaultRoot project is written in the style of the sources (multiple namespaces). ¹
FlatUnsupported ²
NamespaceUnsupported ²
module
DefaultRoot project is written with the configured paths. ^1^
FlatUnsupported ^3^
NamespaceUnsupported ^3^

¹ The Output Style is only applied to the root project's output folder structure. Any dependencies included in the build would retain their Default output style.
² Theme libraries in most cases have more than one namespace.
³ Modules have explicit path mappings configured and no namespace concept.

API Reference

- - - - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/SAPUI5.html b/packages/documentation/docs/.vitepress/dist/SAPUI5.html deleted file mode 100644 index dddb43293f..0000000000 --- a/packages/documentation/docs/.vitepress/dist/SAPUI5.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - Consuming SAPUI5 Libraries | VitePress - - - - - - - - - - - - - - -
Skip to content

Consuming SAPUI5 Libraries

The minimum version of SAPUI5 that can be consumed by UI5 CLI as described below is **1.76.0.**  
-For lower versions, consider using the [CDN bootstrap](https://ui5.sap.com/#/topic/2d3eb2f322ea4a82983c1c62a33ec4ae) or a custom middleware like [ui5-middleware-simpleproxy](https://www.npmjs.com/package/ui5-middleware-simpleproxy).
-

Overview

SAPUI5 libraries are hosted on the public npm registry at registry.npmjs.org. However, you should not install them using node package managers such as npm. Let UI5 CLI handle them instead by following this guide.

INFO

For more background information also see the Blog Post "UI5ers Buzz #49: The UI5 CLI and SAPUI5 – The Next Step"

Usage

Since Version 2.0 of the UI5 CLI, it will automatically download all required framework dependencies of a project that have been listed in the corresponding ui5.yaml file. They will be cached in a .ui5 directory located in the user's home directory. This happens transparently whenever you execute the ui5 serve or ui5 build commands.

All non-framework dependencies, such as reuse libraries or UI5 CLI extensions, still need to be maintained as npm dependencies in the projects package.json. At the same time, framework dependencies listed in the ui5.yaml should not be listed in the package.json as they will be ignored by the UI5 CLI.

Configuration

Your project's ui5.yaml provides a configuration section dedicated to framework dependency handling.

This configuration can be maintained by editing the file, or by using the UI5 CLI:

IMPORTANT

Using the UI5 CLI:

sh
ui5 use sapui5@latest
-ui5 add sap.ui.core sap.m sap.ui.comp themelib_sap_fiori_3
-ui5 add -D sap.ushell

Example ui5.yaml of an application

yaml
specVersion: "4.0"
-type: application
-metadata:
-  name: some.project.name
-framework:
-  name: SAPUI5
-  version: 1.82.0
-  libraries:
-    - name: sap.ui.core
-    - name: sap.m
-    - name: sap.ui.comp
-    - name: sap.ushell
-      development: true
-    - name: themelib_sap_fiori_3

Example ui5.yaml of a library

yaml
specVersion: "4.0"
-type: library
-metadata:
-  name: some.library
-framework:
-  name: SAPUI5
-  version: 1.82.0
-  libraries:
-    - name: sap.ui.core
-    - name: themelib_sap_belize
-      optional: true
-    - name: themelib_sap_bluecrystal
-      optional: true
-    - name: themelib_sap_fiori_3
-      optional: true

Please make sure that your project defines Specification Version 2.0 or higher.

For details please refer to the framework configuration documentation.

Differences Between OpenUI5 and SAPUI5

Please refer to our documentation on the differences between OpenUI5 and SAPUI5

- - - - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/Server.html b/packages/documentation/docs/.vitepress/dist/Server.html deleted file mode 100644 index a2d4793876..0000000000 --- a/packages/documentation/docs/.vitepress/dist/Server.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - UI5 Server | VitePress - - - - - - - - - - - - - - -
Skip to content

UI5 Server

The UI5 Server module can serve project's sources for development and testing purposes.

API Reference

Custom Server Middleware Extensibility

All available standard middleware are listed below in the order of their execution.

A project can also add custom middleware to the server by using the Custom Server Middleware Extensibility.

MiddlewareDescription
cspSee chapter csp
compressionStandard Express compression middleware
corsStandard Express cors middleware
discoverySee chapter discovery
serveResourcesSee chapter serveResources
testRunnerSee chapter testRunner
serveThemesSee chapter serveThemes
versionInfoSee chapter versionInfo
nonReadRequestsSee chapter nonReadRequests
serveIndexSee chapter serveIndex

csp

The Content Security Policy (CSP) middleware is active by default.

The header content-security-policy can be set by adding URL parameter sap-ui-xx-csp-policy to the request with the policy name as value.

To set the policy to report-only, append :report-only or :ro to the policy name. E.g. /index.html?sap-ui-xx-csp-policy=sap-target-level-1:report-only

sendSAPTargetCSP parameter

The default CSP policies can be modified using parameter sendSAPTargetCSP (--sap-csp-policies when using the CLI). With sendSAPTargetCSP set to true the policies sap-target-level-1 and sap-target-level-3 policies are activated and send as report-only.

Serve CSP Reports

Serving of CSP reports can be activated with parameter serveCSPReports (--serve-csp-reports when using the CLI). With serveCSPReports set to true, the CSP reports are collected and can be downloaded from the server path /.ui5/csp/csp-reports.json.

discovery

This middleware lists project files with URLs under several /discovery endpoints. This is exclusively used by the OpenUI5 test suite application.

serveResources

This middleware resolves requests using the ui5-fs-file system abstraction.

The following file content transformations are executed:

  • Escaping non-ASCII characters in .properties translation files based on a project's configuration
  • Enhancing the manifest.json with supported locales determined by available .properties translation files

testRunner

Serves a static version of the UI5 QUnit TestRunner at /test-resources/sap/ui/qunit/testrunner.html.

serveThemes

Compiles CSS files for themes on-the-fly from the source *.less files.

Changes made to these *.less files while the server is running will automatically lead to the re-compilation of the relevant CSS files when requested again.

versionInfo

Generates and serves the version info file /resources/sap-ui-version.json, which is required for several framework functionalities.

nonReadRequests

Answers all non-read requests (POST, PUT, DELETE, etc.) that have not been answered by any other middleware with the 404 "Not Found" status code . This signals the client that these operations are not supported by the server.

serveIndex

In case a directory has been requested, this middleware renders an HTML with a list of the directory's content.

SSL Certificates

When starting the UI5 Server in HTTPS- or HTTP/2 mode, for example by using UI5 CLI parameter --h2, you will be prompted for the automatic generation of a local SSL certificate if necessary.

Follow the given instructions and enter your password to install the generated certificate as trusted. You can find the generated certificate and corresponding private key under .ui5/server in your user's home directory.

TIP

If Chrome unintentionally redirects an HTTP-URL to HTTPS, you need to delete the HSTS mapping in chrome://net-internals/#hsts by entering the domain name (e.g. localhost) and pressing "delete".

- - - - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/TripPinClassDiagram.jpg b/packages/documentation/docs/.vitepress/dist/TripPinClassDiagram.jpg deleted file mode 100644 index 44dfb5669c203a175f19df3cd026a1d6dca001a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45518 zcmbTe2|QG7-#9)}NkR(|Whz8TQlx}wxsfDM5n?LI7Lx4Cp+eS)EJc}QD~!pWb+Rk_ zo_!gzGh;ntX3qRB^=$Y3ywCeS|Nr59X3oqx*Y(}5?|u#I2Wtqm{j!>d8j6jL4Rr_n zp;*JHgQ_l;4^SvAEz}Vd3bh4%w-dz<-m!tdUk9rfbrH3Jjcxt^ZwLD(_Vr`)#*OTo zI5u-|te;yrxj46M*}8>;V=MR8tz6r{!NJMH%e{?f{r&nN>yNKL1^%~f;n=c%$N#s3 z^%b>a3tQ-hTkLEHQ5$x!vF~7GRie-U)=dDTb)^1wux()9xM?#0X)71FA$L0fpPhXJ z0Cv;Hjo@xi@I7kdj!ioc$e!Q4OXn`fL3_RvK4I}&L@#8P@$0rw#7^FO{FHO+ZUMnP zLgI%cBo7~vlRu?!`i$bmKUCG!FKJx9e&eQ|{w)JT)B9!*%q=Xf9G*BjIlH*JJ$vr! z=l>!gF#J_SWK{I)H!&X)5|ffsK7LBg%FfBn%l}ePSYA(WG_Rw7!De4 zxTt4rSE0B&HmR@7QocIdt@C4ReMW8Ih2vr`@NG-PmeafAcz@`p1qT~yS+%+kCX|kk zzqK^t7iy39d!?1~!A4p7$22rtq9O}5(^6Te!B{&)UY((kQZ2KFmdDZ;ZCI%4v_>Vz zq1lVWH9^EB<$F7(ph<>=Mcb>vl)yS(Vc1VeQkA6`HY>eCvw<{5 zYg=r<%%rnB-MGs_dDk#}e!dqxKz4@;QnP@ibZDHbkSSb8)7V4`ha-R7q1YBf+izLLH0R7)|TvV5XOoyQHdJIL7 zg?b5DnL^_;B+6mv%`}!WfEOf9cyvJX4f!mTPy!;{MiyZ5#;gk+3q`&;THMlr{sE(D zi@#`(?s+{(qsuV1Vt=}I{Y64PvQU0Ya19G}@#iNN%FBiXceu*PIVRB2>@1YZZ^A#L z>+fNqFlH>2k0zrj3mS?e<;qlQ2jO#`D`EnaZhEF!hFdyc7j`xEy-_%`wfj;T*?xYY zbS=QCdXtwa3soki%`ht=F@5YXZ*Q*I`g0Dpl0?YC%16#biwl0Ni99QA))l|jwE5l< zy}Eh5tJ-hUO0ZW+vP;*UJuUi|i7!^+B$R=?Uj0i_sdJ5LZU z%|T5aE-KBjU2A6lm^`=EQZ#*z=R<7Kw8ocl7K(7r!ef|)+Vlq%DWD9lK&{KXyi;p_ zLGH&&Hf8r2d^ZhCusFtfJJi152ALU#*_^Q^q;EF)FsA! zp^9g+P~Y5R;2Kq!b9h#Nm|62;6n^u*=SO#gou!koTKk*X3<>oo!Kvk%Z&i;OJSItq z-4|k-J~!DMr5*GKZxT}cUTH>2(;Fa#m?L23+YBJyAACpV z8Gs&^>x0Pk`?S>6vt*^;1j~uXM z-(Gg}ME#9aKieacDrjq=j08C$lgM;y&bBq3X^Mp!&hR=6wOpV&BipbH3m_^5a1slp%2hQ8 z%R*G5vP-?~cW_)f;MclEY;S1aQ`uRqUgI5gk8F&uuP+i1Ko(TZK$NULC>&BIqJlss51Y_;@+?X6$%;E|b<|ENWTmF3SzvFVYSFHz={RqD} zg@(65wC!t%#NXCC3nk_z!H{pNl39~9`6UuS(V_p0iu|~{MX&mwKu2RM|DkS1aew@k zcnOHm_((L9PeuS5ssgIIc-}_X0%<6Rnm+zgSECoFVf^n^`(IKH-Tg(Iw!FUL881Ac zU4LJ(EL6DiuD?u%`zs|EOLA-y=n9-*&Bw1RTObR(|3Z4^eirJfA>#^FpbG74B2h#= zl%HyyuUFXYx5qB!q@2d+AHC<5H)~)*JTLJ$b%CcT>TxREE+nJ^Xw1ast{?0lm{Jrk z$rQl{x$zsrwaq?sJ2f+je&dJ7B9adE=FRJq-qq-+@(;yL=&16c{-^Vro6h;kb9=F~ z07fx^8uW_HAT+5IN%N>R!_B9lX;Q!h061qYPq_qTaGev|7^BlkLb%; zF&Q!9{25|fQx6|`NG23BgDqvDT3w~6xjcQxhrO%a7jYC~>la>*y;p^D56?F2My|3@ zDHj(*PgQC2zDUrGTM4IkkgiV>eFpcUtAr$i<=+VHhJDhkWwj-9s7fmQVL7ATV)hkE zfwiV;DA%*mqL$(-_OWCfP9RQ@B2j7Gv~5ZV>$|LMUcKUX>4~T6v9Cch3L6}@m2JkwThiJwz*HJEsc8ur5teH5Hrauzj4AOAeU{LacyQ9tE8ou3I^+Df z?c3aN1ZkZ+-CY^}Z39*D_X&IbQI>wwM5bvPE<79baUQVwHgonw7S z<6aFnra`8j)1g*kjQn%^8+If@A-Na~xglKp9+1k~mcIut?f(C(m~Gg{8bq z4eWSV!8qBztxE1^UTJ=5$iUzMd$q$PU$n2A|CSk@K)Ye}Vf9*$d%@SCt(dJU=g#uo zi-mPyodvcZ34DX)xN_V}o~i>QuP6zm%e#kGRJ?(dn_CG8>Cc|$uFAtZr`EK;;ng+{zN1xP|4U`;EllZhqL5+7sLm$(oT3^5`J!9>m65o_K~`W4{ec! z+W2`7lQ7Fd&2YKn7{1tK>cJOXJ)~XaZ{ly#(&%A>9e5(;icwwvyAqn$rBPD8hb0Sj zp%FL9LLC4meAEr|Z=cLa5`)HZ3&a{m6LH0kh95@M(aa*U_S)_zkT#7QI0B+Af4T0u ztGbtp+=N-E*X|08CJMME)CQ`)bcWIh==to|MCJ^!f#c{!X`m6|vv!C&0UZ=4XXlUJ zR(x@UKl{}+8xGCFcHi{-{)NZO7hJ8quNv8Ma1gw_Ja#d&RKz{@0+QK*XY)8Jae<08 zmDAYWE>45GXr6RA8wstJS)!w6k;N0brcus|+f^&B5|<7|jaXK&OVRE|>P1+o7Ck1` zWYl>jtmw84xUIQj<5%BP(ZP9hEYx#z^(El<^g;{D?3E%XL=n|@Xxv%|9#JO-dFTLh z?g#r0HKA{ND3D;O;XJs+oGPFSL#JNZkgH!^tR^P(O*ut>V5aXj{wV#uVMiWMS`@B9 zd`H1PQDiF%MGYE3R}cDRTdJ^8c>NjZk#`c+3vkobj$)HK@yI5B`AylS7Q{_q!RlK- zMIE}6hKbX=Xe-Jy-6Mq!bDYo8_jEHUUpbKvG(6AB?7;X0y9=&bHjIVh`%PFf3ne~* z-R|J?F|`4YROt%VYub-EP~oHP^f+d9)N7SOKgLf~JcxzdQm%CT;TRr)b? zwR9=Ed$lQI_72TLae!!{b_ueD+YsM(!o7&Z`t>pyOVQHq%{O2cmhPD@BnBuQNQAj6 zz0jn}t`sb4O=pC8D8>Xl;= za~KK(X2BM2hU&8u=uqV>i6(-Z9TeiFMLmJ+;CJidyDqLRe->99(ocQQLcK9pUtysF z)`h_Vvx8waLJ(;kFgTFeJhr&S*JfF~&^@{4@R+cgGkeA^j)4-xgxynFCyxy^e4~YO zu04sr@zmKKi=#bDI7Fytp@?CWd+^k8`6~AKxje4DHY0Gvu zyYyUOj{zOMPr{QnGfNs4%pDzG&B%#1uLB+q)T_A(;cGU`MWquFKWrbR5>B2mR(^u;x zS*1YX^WsDO*4WI&b39do$;bv=x%a+6SuKVn3sq{duCe=As3P^he+?dBTLZqpMmO?M zS1@KqiL|E0?dh#3(^`rFI!Ot5=|WV9>EFddX~Yvh3jha%wi*ajs~xs$Nqz3E4Dc>f zRq$#1RQdFq(C7GcR8jxwyaz8vk%EnVWAQ9l;$T%JZt?5@LFRbp$+wKs;LM_cB zWsDlaP7s$UA_C=D1uS^$WOO0SSM`u$0#Q5NbG4x#Zu_j|*TPs%D2 zER=H7Pfu$S)1scV9!Sc-92{%e(ZJng4pOuOfLp&lpFdb1m*I$kTlbvGd7S1OF(3r_ zfqA|B0SilD%VEuDj#Q~p>9|q%I$`@Et=Rz4j#SF{Xo< zavpKV*RQo8IS;VwKDYn_#X{*lo~JFNix5t#5{Yt^=(qh1rnOXDA^OX^&+PAtfYk)v z^$fb+tqp{lPn|qup65*y1F#1kjttV1Kr9^%tw7Y#eFo?07QYZoT}N==kv`nA^<*;? zH@>Kn0}=K_|B4q_C=@i+2m%F_gjJ|a<JN{f-fU%Z&cZY+aP{6NBrM+0M**pRy+6U9mBeVwLPf?&7V0W8h!e?ODQhJFHU$GVy|;8CBL)B)pg9ar%B%-bTnGwE zJLAk)!}SA5;WwnAchEKtMv2E|rLaoW(#Dnil_WIfD$Y*=F)0;ygFa4!u&EE(XFZFX zN%LT#QgLl_ftV~p?N7m`j2jN>Yb|e}^;8m;!p=0PBaOFv&BGE60K~2t>mkxJ(k@_~ z_cv!08+J7tDi>&7*%%Ohdza7H0Wq6>yn8qjHh4unzbC76KDpvyZ$gOv1g425e_D`# zlq?&Wc~hC-dPX^;d+HA5$)g-*BMVOEc#bD@Bi0=V+n(*NiV^UCqmTe7SSQY*h7eXJ%ztrW}Jb9)ZN zT#9_)ta{P=J&GN8BCt6AE1u8Ni$Akn1#K{32um1sD5)lh#k^aTC;Uu#v?>((b1`3Y zQ+@a@@f_cwJA8sGsXj}`1^G+^Q=CN9>%2CA6@J>Q5!&jt8*VF$k*SEtr3_XoD^_Sw z`O^pXci0+T&&hNZ%kfEy8cV$Ky!Lz19xts-X64O&uhvC?+gROfUyaX924RWmaGNT2 zYE>Zr`Z>GhkG6L@#9Rh+vj~;?(UL8vExty~s(!7>uiH?6yn88WyYDAwTNbKo`Lm-^ z+KN6i&`TJpD%_lz%s4~owRj0Xos@Ar8}#n#;?2_b2bZGwP8yqN9$nZN!mnd^;bX$q z%~w5*)c_mxUqAf2t#BpIs#5IE!M&8VeF~L&ZjsD)@0v?Pxi}eb5+g-lqIlH2^lW)I z7ju*DV0`UCPK^(b6Sh^a`)GRl=xO1iSu%5MnLML$z`(!$)c&KubX;= znc<`m*jT7Q?V5&fd##jR@76R7+967%#h%YrBx@)#%!R`$Rl6}ADa-|_H0Hf}XdJlN z6bZy!YPgRBtPfy!abrxMQhrrDoXGI_v61@G90M^k=)mE0^>jh6Y=rfIM^+_4?kwAH zsxw{3qhd>ksOwmuGu1FY(0rK2iXdq`hT1l^R|m=biCJ8OV6YyJ-&O|k6&|?mUv;QU zgP#@3zo;_;y;N*T&et04NzBr}&7jZpQQ?ob`!#u!)MNij&DWFv@_E2Xp1E zr}~ip%4S$k0Rr$Z1~0WMGFd2~>wmCNHPKzT&!sgYDkHcLf!djWB&Zm!EquT&<75HQ zZ2)LI?dfn|>0p`vI)(5no8Vi4V8L&RuH4Ku`O%R+ILkt1vrsr0A_y-&OO)q608G%V zsj+plQi&z?{5~?UC+>?P#TalHon2n75HDsvhjhQ#O>l zs}_@@B^LF~;%T5{y4Hn2$@d%n<9SkT3MHA~DE#ruCO+E)M*-A_kapV-Lwq`gA?>#} z1S;qh26^kKO)2O++A7(vHg$|mRrn)^97;#c;(r`0 zRv=3&REzA*?37EZm6w*do*z2bxYAvjw|cGCha9D#dowKJso>5n`$IpJ$}p3Z#Hm~> zz*0ULa`-{*+r_Re)8rqfI(;Op{s5KJpid5N^n5py}onVFdZbH{9L z_o{LiTX3B%%G{co$|?2|wK0Y;Y$rTvqDU!?&9HD@aqA2s7^*@kQ>S(j8j_gBA4Lv- zh~(4|eR3eOJ@U@^jZe9~&NIXTl6s7*1#KV&k~WMMK9oe|s(^NRoTUm*c^!_^#AY`< zY8w6_rkxY<^yqU7-$L&9;jmcO3l|*1IZi)6ImnGM@0DTm*aa628EX$mKlhNg6@Q8h zSn`zEq-IaQ(mZMXhe2W!BtpPsMHc!^C9kf@XR zRz{8oj$|WA+Dj5D!yuwaGoGSre8Z)!!sJvTEJ5&4?I03kx++ipFf_K*9_EtVzs+V& z_pWWv^GzPPUyqSa%u1*@Q_w4F%nwVLAav&Z3ni@~OhDX0s`@jA@`s7i1JTBv=US8$ zHVUk2IX*dNvwS)wlwlYVLXK)(;QAPR>2laY#Jsrhq`ODPJLD%}@j_%r&muzzV<3ZX zfQLVPW})75vryPII4h${WoS)*&!aDJf5P6m#%E9?Shq5}Z*~*=(U)73Tb52H6chUl zB|l`J+A8_M`@cWmzuk%oj$Hj&Y6m|9c@-ttlQLdoSmQqrQmwn?SAtx{BW5=xO7BvX z)xGiNylCiW}-NIBqW=AC~U2GV!a)#k~WU<7CgpMd}C2p?G}|9r+t zKs~z<3}q`XqKtiOfBWdy*;h`AvmUK}574fp4VKVH*PBF3Xh@s!jOo&F7AR^qAkSXF zg{bI7K$)*up&Acw;sC)*frvod5_G>tXs!0%yg&u00!m-BmJ8=XeWb^ z=T@oklv`wOj+2)(`Q=ZaAW34@eaz!<#X1S6jT^{%o|$wAkz zdoSd2NNN5tSk;ZqyheW5sH6`sucve2-%mPh@@8F=sm1sY|CSg52^H-D%j1h2^9 z0Wqoxfp=EebQqq?{CG8bLnrx8U*1kFvqz)U;M59-Ex?70`(r_aXs^M3Fiufl?clMk zd;4|j{68j++lE$rOrB5hbXXMq2&%nHb_s9RYq}FMKI&ld>n2xt4p$^y16Z8Kz;6x?hU2cqOl7TJUm)n zsU(nEQt6;^&<)-qZG+pp;HxATUedf!DZK)|>^NP`(@>#qJ?$`jddljw+llZ(-QH4P zSY^jV=_wd*H>|9pe7!9DR)wf>pG$m)Be&Kw-yK!fzN#-7y$86z4QzYhz z(i-(`qR=gaseOSr#ls6G9yJl8HkOPu2&+@ZkR)b;WwLro|2dnHa8sc_y7j7?A7ARb zwe2H^G;YZG8AE@VfTA0aAw>o_Sw^m9jk{IcYH;qjhY7QX-d~zkout+^-YYJ+{i+iNzcMD zo(>#`F;)c`19|#+QFQJ4SrvW;d$Wgw8Re((g~eO>xT>t_!yil1!|;cXk_X~+Bfd(Y zk3W36g`N`jX&CZFb9oq~z$dTyBfB>qhkFfQRkZXfb(#^(^!=HK`&1XzgI;8A?i+{Z zy>yEFOPPtqcRyMcDwDAW>Jt8)V{#L-OT8`!vNc~YKIw@5v4t<=k*v3dXt>s03;a$; z98b5!sg-CAK9xP~v3hMjzQVNyraO*lppP@_A*uTwC1>Ox*HM?zN>lPB1PLbn$)bPX zw_7v(7^k$@OmY-lPW@u3p&f?7X1M)6Rao+@k&?I|oEFTaX6+!~xBwyvbXA z`}$^deJ*4e$<)Xa88Q^;St%c6(RUkuRw>l6Qjj_kbHDIryHrY}^z#d6iC^Z*f&-mI zx#`&@P9IO3h%nPij^vL*3o#xI4;VrMJ?_N(RZ@N2$ z-!30wuA1F8XD6iTsj^1a^?rUM%vPfN=eJ_i<0}?!Lp!REJfe9$n9kQtDSEQ>%FqB9 zuOrDPWo|@gr=*rnI$9%~(}TMpb6!qZVz@JxAZ2}gz(sGaQCV9H+G*Jp9ez=YFU&;H z)YRy*B;hPCp?{I^LFx?=X#(lt@R zC&cy~t@7Dc-1Q1BTES7xLp`KESrqyX#5{D23e`GyKFP3G13GwW_-K~8P;t0j`IN)!ZL+B|h2r&W1t%a8pkzAi)FoP|8Duv@ z=Tt3jI})+5S{r=lOvNXY`CUphVCg=O?HXB*tx$XRQX~>jPuG>yhL|G<*9+&VKdczvb{&2*>7BY zJGylOX{t}e%WEnduEu5QxXpg}nHMWqw=cR%LeSW9MK8=&QDv^LXU|Xz`{UjBQPr$#^*1&Io>Oi1+HS!@?NSkH8sR?0 zeI0~`-KRi0RzR^huxEGt!HoWweRwmWTF2U^Tn%q(@-6*#>|D@U_k>!M; zdD`9_XpMye6{(gW1LlI3g^L2BE-i|XfcLRaa=Ra(zjg)P|2LFkQ)!N^%Zb!C5qh#C(5gA^F}i&Z_So*N&GbTY^xhM*1R`MD} z_jZG1sm;7yhnWz;Jm#I9sX-vkd1V%AooLUH zXF}Qt*FoUJyHdSDYRpsvIGFcu4(&;lBX#s;LiI{sL&!kANn8)sbqxy`Kfz2;(x
4zO>^D$5m;t~ubg*w@usx2o!43T|~c4ZD)<=v)^;r<&AErCo%l z6jkL=g>J>q$WOYsqt~;rVqP^BUjieudgQJ0Mmu`F5Jbeh5TKet2pRd^q-) z^}gCapYNAGJZtrq`kOPhi4OGHw`Rr#7Ao`UJPV~J#Poy;5YMy)u9a-^%6r(Cg)-eV zj)cgsN%*l)^N~K4;r62{Q$908+ASgI}`LF|)$Y}bmHsscd$Q2~Wd3?16 zUx?%gZTXsDf`89JRwt{So?ni)bg;f-nD+kbaze1<`<4arq`LgGbKr`-^DQsm1AP7F zA-5Lqvu)XG7BufZUc*+3Gb7Xx!-PO?Z=x!l(E&2)AY2$r0QqGm2?;i=+rc>OhWQq) z4u4+8#$XonIKK6OD&IA>|MKMcMxxw;XbM;m{`~0RK*CJA>QxTI z-KLa^a){?a>(ahM^Hs;;(-$}AN{=pRB)h&E6qWQb`o6fKh~M1!YeU=xZ!bKE^U4{Z zj_s!o!I$5kMlX-KW8WEUZ3tBmd1N2MbbtPck7{6yvCJ`-ma(3+aqO@rhS6jMOvU}{ zQ)X5l1uk{2GI$eJgzNan1671dk~8vR{N7Q1n&HDyP@_`D}4H z`~JO-RgQx@Jlslo+m{J$jh-rKP^~P_KmVvpAkQtm&a1G}g8kdhqbK^*(T-O#s;2Yh zskA@L?tBmVGCFqtTfEM-Z8n0FK5ay}EC1Nup!C$sA1o!3@%4jJUBm6v1iZ%eN5S$= zT}CP2qffMX@+N5qAEchjPn^zQU3qLR)KuYilMsGiH$O7(soxqj!&JU(iRu13?* z$J&oA4rtENoJ}`nE}FI}+c#Zqy?yrT>U9$%ixTGUk~5Jd+Y;Vgmd!slZM^LDv&eDG zd0C~X%R|fFk!m^|Y$Dkj*Sdz@eetMUXu`-l1-$~gq;}jk-H1fL4Gm$oGFIsojsO;XSj3jNX*UF-Pw*3ynWxCe=)0Suf>fc zo92$oYWg-|ACAY=@m9#)-6RyQo1fyG+Y1!8PtwD+#Ghk=3xiqEs1rJ8Qz$;!!-*PM z8kN^F`FUF3+A0rT(8I_F&ejNy2Rmh`t1Nk^el!V8K=G7^3@k6bcJpd{YdNr@VKPCL zy0H=|uG?8ulDkjaY1XJ&RCL0 z{KttPu&Sk>ML3^PFJS!9JRW*kmW96Kz4EuHiidj7K0J3O&S9aFM~%x|8Fi>M8KgL> zm9HZ^Q*ytw5td`m25l_Kx8r?4J#ffC)XehTOO4gdTR#lVZFDBCCoRr8P*$r4SNQ!w z;;?P&8vP2z?^VK-zCfp&O$cFmNXOoO+t%*?GW5G)TghDU&(c>1D5U& zuio;dDafp4H79@S4v@?C*E}9lBZG{MI2I}t=w~iH?KOT6V_<1TfYqXYpDzCFX|do> z8poalI!0#1Q{d>DCgltoHq3&W(?;gC;idohWc)m>WsDbU462|(+s8gJ27PM5j2*8K zU#x%|RFeoX9^+ucS0Zuzpw)JRI!FgeWvowiQEfxanFI#u#p9-Q5<7c2cKZS9)dW}b zm3^Ap#aW?e68%=#g!x{6Q4xs#Cb%`kJ+;3ijB@ zBw-}#Mu4y>+2Kg&jsUScB9UvLox*`Z*B^r_p#Y%lm^sKHtNMID^@7eB>4Aqx)c0fv%Cmdr?!!ooMoNFhW{=tIQOWzF+k|Zu-)<9fF5|_m`Im!AdcMm3cA|X41+D8> zqc0a12f{3rMHQdVxv0bU`{}jcr6g^6`u4JiwYfyE#O8JuYdXlq_=gssx0CS8HQs$D zcRJS9cBl1^%Nx=}_(gTM?>)J@hj;I@H31d73ntZXT|c~Xwk&bXDp}6T>hf&z(XErJ z>DBJHA?%JenJd*VIwOqs7D`SsOEs=YcTr83>wRUmk8G`@ZkKv{%O5|5^&fKL>&%q> zZf$EH*v^bm(jwdOT6T4Y!(PJgY}p+WC!Gz8k6S6`n4Y#c@L=?$RO+16m-uQm&LWBo zndcd$uA=9yP)W**Tx`Bv$f3wxz26e2YVS!2^(Cen?AaSG79?FuPjWDf+Y2ua3(ghq z8<95sgSxLPh{0uMZEn6VcSbXL3S-7G(^_A@Ei!|hRAL*?--WD33i1uc+H7>u+)kHRXwy=`GZwdn~PK9VC5@K>!d^RX{wg; z%*w|PkE;v6tG;0G6MWb2k_5k<7OWo+i%n=pj{i)!^>3T)G8tc=?klju41hV#!=RF(kYxh;r);q1Zob+Uix}$%J z#<}u;Lf16$z~!BtnC%zI(xSS}bGFrC87{U9f-(s?U*a^p8cx*Sd=w(}a*8%?yJeId z7-cSfM0KHmFj`Z*$>zFesX`w?*mcTfk9GOeV+$N`ae&o66%Z5 z<=qNHnih=iVgpb97n$K#!q{ui_00^Iqv8WUitFcw$gG%B)sj+O0teKab6|$ligUZ| zyyKcHslzcUKVb+Ox6tqbs>Wbg0@NvkG@H~5xn+3^XO)d(^D!3z3LT& z9u5fPwT(7E0ZjnOq8*L|!*K%~T~DEEZ!n|k# zRE|l9%`deai}@BGy22H-@!G4Z;@8~<5l_?g#~x`*Ju4X=>;W4KDEZOJ6P)?u`dJIa9-R3=YbMxd9 z)TKL*87hoFDM&AE?Cc+)zvYRh%eutsbuDXd`AK2ePps@-OYd5k$~=Y_kC@qgHUfXv z@Z{TZ;>J61Qa&YlMpE7Ji-b9)H$s?GoJzGxW!0m0BiGwSh60ym_9D$r15(-4s+?#M zsZQP(OR?N18dnVp{M;j~-D_=)N4s-x8kug|F;`ah4M9tarJk=mRy8p|@`3?o}!3A8fKKx<+QioMxd8y>iYKE=lWbANo=Zy)qQx2D#!IU;~JB zh$)!+uBa!ccpvDFi~`mL3yKD7vetW5nGsC%==TK1EjMBVI!_ibL#2J~zVhK^MmePM zzh+4Pl0g+wpxZJwf~>fOwr`Z;gHP!V@4F`r!>w$dM2*-lRLL1#4nM78r_*R(lTsG~ zeE$K;Ln~*GtEJc8k0aui)hFY^O<|*jHT?~H=yA|tIy71s1CWj(Pw~` zHna~OM+~8?!AL+2Fsaq%e(Kq4!VY*iGUXxo#vT2=bPcHi8?oZftYxxL=*3slSB1ns zqNhkyG9urFe0hLhTxQlWLS>fKr6#q!Fh4y&48}7^d4L&Bu@V6W{peLi;5KNR(yl>6 zv8CMX$YrN^;8f&*;y~nTcMCxuxivmj!?4^OVucyQVOMZ)%Rfea#?<+~)(Tom@f+~) zA<#;Fu8DDU7Q{oF0_IsLElf8i5>1)o1<}c65T%e9m)mfRfMrJ7e0+l8xQe!P`9PMzAKL|0ifWU<64_;JXX8nwd|7p`xqj2#RLN*`OX(|%xT40ad+ z(c6v3r4e0Z#Qdu{!dWr|9Kvr`+fTUEtQbPn@0j7uXRuaz@TyEmsOjNqHF8=f=bwm;lWJw@<2<=)=%U7OG<}!A1)^j+h4_l^~z?08dwP z!Q8@K>6%kIzd6?_TI5MyIq%WbhhI@|$M;>8>KE`$UCGli_;f1)?1g&CeT&GoC-74M z;mES_n6#1d%(2~3Lg5J-2Kzq*O1+-=RY_E*`%h|KVxb-}CD~uLL8JNbGvsTbGZI>w zQT~OgfM`N5Ff&{!(8ToA%#l>vk{u!F+^OCpw2x&jbYDJHk zf*dd_5ZPbMfgmx=r|ypSwM^@J4^zrJN6hvCVacSf97 zX$X_+DY0!ltWK&iJ-$AXP*OOUYTif{(Kz}&*s}a~aRwcmR47lwhq+?sc^Bc9NCddk zm=LclP0GDMba-N0qbk|WR3*ajq+~R?;HL{g6o8Uru%@>!odE^ zq;VkIUqKq;keAjNRE%jNtLf7#7>NAZH<>b56d2wMjW5YpJh38!8=ha_rBC++lycR^ z=D`=gazFiQsjh z^sSh<>Q7@>d}pCtAbd5+06moR#-?-!?2eBGbgA}w2=QK-VJJ9P?eq{d(~|=12wUWD z3@*Sxwq7Qrsc&lvxoGP4k6_Ojp791+0Hw!D3;{4O8Uej>w37=D|HjWfzqs2qEy~#a z@~jPD-eQ;S>>hi@tww>AwPG?717-Ul+p^O5DUkOq?kb0bW0z=|_-JCE#Kgd#iL-(7 zf57k4YX=CQzY4~{1nr@@L1|4)pdZcI82|$_iodsktJJ$a&N~)OVMS&uG-UGU@j2Ff zj1WkMv5AFRFdrTG&C&Sb&7335{iF5}+cZ#>yGb{Nhthvf6j%3dkA0lmu%c%ZBLHbU zYKhr=5O?#bCXN#pzZ0?=<$p;vf-QWD__=L7P2WB%-e@PUT~CobayHFFb1CpxG+SqI zdr4jc#uv#lPwg#rsUhpOi3*wmh1{9aH6}5|rFsWsoCNqkssxn`5#8WB7* ziNLM0c1E6NvwMDre4q16MFp)N+_>n|RA1|x4mM) zwh~e$dSz1^X~}WfiT|d8$%|@S&+=VWz8n8O-~kS~oNF7lwYGrHq8zp_R>#|C+ierh zeSRjF0~(KnP<`@(R!*SN=>4tpF@~V;CWkQIQ6@$4vE=VDuuDm&q_>s14M>gPHW|;BTM}35~4D zuL&?NI)ltFng(_W3}Ht0V`z)ON`A%ILOCGufPVqakF+ooI2a7zKtQ`mJF+DhOAvjc z)$fi91Hamm$WRCeJGgL+Xk-g%WIqIaiCBb0pM~4VPAB=LfkOSCCiJoDNNJ#!EmtOJn|H?fQ7*wJ2;TH(C8qAx3|tZ z@!jY24CR|X$W6t!g!Rp38|^`0^xUqd`+?n3(eV=wxc+ZgYl(j1vxbFLpK9%`V-4R| zdq23NT_a6Pi+ueK^%d9IfFav;R9#cv|L3xgi8dXJGSa&AxR!LJLoWEbU5iMjss}Hq8-#UXCeF8# zD0ULR_Wq+qGoa>YfXhQY+K4<>14%MRFHTdjKRs60#v*_@83g1BTdm@!U>GXuw?RFJ z12Ca12fzO74IZHdVBaARu*1(l#iav1rDqRpCy5`qixik)7FR)!hbQ&Fm{xu5)mx~E zSOvX?G7P|uZ3dc#_RztygRY`c$ELOIPe=@54UpUe=FPu$8o#uE5`s^?0{f_ev#INV zqbL53J@+A2R)<^?oFaLa!o^CULFgDXYUVwGg`;uuk4Uie$ozLZso;LF;>hNcMD zfecgRk9|^;Ou{4VzaCC~~zg|d@ ziLi$ss0?1I42C6euE*h;f36SeIlm0p2aTdxb%Z^4{2eRrHTwr0H z=nMlt+_1?K#t!>E8zNlLBuHqqEzy1kt1VpIuJ>d*2Y+P|3sz3Ws5}WUg7{ZPV1F}0 z2T3+JwnU^D6-?W2g*Vn2=$<6)!2=Ct360xVuh2XTCDRWh)`aA3N+b1fhCI%+y7Hywg zH4<~&O9U=XTOI!BP&9p&7_0K)x2cH#f}iPJxKueJ`-L1Q$sO4(&%bB{mE9=iQ#~41 z()Hq*TGds#{Mi};nzD?2PFh?Ykzw#-;I2#&bbU`@JfR+n6Q>|13{?;=rmX)AK}TO3;xi63YG%g%I%u2$QN-L2 z{nc16*x(s_O~YoyO5^K#?gW=!lgX8+OtR+VvJc^7v7&9e4)J!i=97k}NSx64d?gl^ zf~aYqDhiUi=t?VCvo|_TS-3qd4__;vlW=^$)JMb`*n z{g;Xe_Qd6&h@AYLlMO<9_70f^47ra44prT;KW!=5l{_-2o?^7`$89I{4iUFqx+aGB z^I(tvcgJ6@j|W&qn;wm?JZK}$+{**Cb^-on@!ubwX1>W8qze*AOR81wZ%+|pu3-n% zgDMTpB4-)tFjtMq1}q1REmsWhFDav{MXbGw$JuoU_BCw&`q+8f#kX;;HJ7tf8SK;y z-yyIQ(@yDRy3vID?(0r1caF%G*Vet8@W;K0*mfdrx!om@UWUlST0?`Fs+P&MLEk4D z>7$^pG{biHoLz3;?IWBK8?TLAD>%dcsp;}Wu@Tj%?4(P6^}yLo>gHTWf=icLacf(} zd~%N3x4HM*KSzz*hY&`33pQ{M9))D~5Px8DsF}Av2ie8wubQ=9ty8tp@98$WzJU2S z99x_iK8EYTe$QBTZehli@Sd>q@j9Ws@%+dsN@FH7$Z?FOe{e7DgBqvs5p#R>dmHjj zy$yBUGuR5WFW*j zT8A2yML_G1rk${*msseaCM9L%I^kV$c#&9Ew(XY!Hb0XK4n^~_=GCWz+hna|Q?&K^ znct2X69~)McE;~=A&_>aPhd}~VbfP_VHfMK(<53J%hz%<{B*<=w6|=Kb9nB2 zWiCV;eG)}F0fH=jV}eUtxrtCVoMfFetwmHHNvqp;QTzW9_vYbHzi;2TQc00Yl65Lc zj8e!_m`Vsq$i7S^dkD$yt%N8hghHk)2_frPXY9M|WGrKsEi=~HKfg=g=YGEH{rv9d zuje>Abj*8Zt~sys+Ro*5zAoE7n-cRE3B9_K(mAZ#dO>F<u zHLeol!DE>Mzg4u_K`_-5M)IYZ_|J zLB0oDt)0A^#MBXlVl}am8y0&(U{PGYrwpxiEdYe;_dMYv5`a0jv<7xLwN|9#nKIZ@ zqE9}+1xzHwVU!#y#eDlxbaZkeT_EDux^2lw%vj(pK=A=D zn=Q6(qcZIZ*t)blpIrHZnc6~y`H{J~;$)mxXuY_D$&+h~S8OYb zACA(7+S}wbw^dSPs)rtIfTY#+|CA|5%0RWo`yd+)K{|c_eLZCrd3&e>M>OIcrb);= z9rj<7tUm*K3gEd8wL zKza@)nY+E_f2y{^(BN+8G@bJ#w*e(Xnw&k?qv^X<4YjnTHi zYta&Rdz|mGZ|48Zns<>-&gq*CnMobm_CX`hjg%0wD4e&ykY3u~Sub>kUdIsLe3y>#Y zY`KRoJ$^!C?tR=bUP+O9qRK+2-?P_e(2SWSNQauiEt{dC0+L^5fMy#D0I64_A;ulW~gl3#L=fkW*$% zV`}`Zm=j8&2cll(zRZ13{%Nt%$1_wlcbTA9s1qj7X!K-sALtS_+kURv#rtCF7* z?Ox6=ZfCH9(nGm;qiw2A$#6k%N9e7=h4Fij3-;+WvLA3;E3q?v^_@6dt?1X}$2xqD`^`CiUuW)6i|jEY5iJzI5~s>yq%LKyJ&)t4J;R}QNG^F^C-B6=IINF(%1J(DF9`3rr7z&+GQXHE zB=EmXbX0X0@NBWjZ3$19x1Txr#@dTd{=&(OgKB+Vn0WeVHK15Ay=>~lA2DRPHS3I4 zwvBT7rK38D2wTp(j5w+~d19`rgs6skg_}I);G$Dq(!b5QC+12{z^7V4`=ZC=htBfd z-{;ut&02TGHONKD`m6WZrg7?YZD$S_SG%VNXEAqP7UwtP0~vG@M?twLALYP^`P}Hy zsRI{Ai^p>{mVbjP#+9nAb+#BIGp$r3<0Z@(*~Nc;R&zF7t}HU?zI*zG--qO%c8LUO zQbJC0bg+z?MzL%I%WP(-Y@D2RdG#l=369)L_B2~>+%9eFK3L00UUg<&o1wsz6WCXULP{NmW*{Y6>yv&5Cms1jXPso+zVr(6lzpGNo=-v9FMb-~~{8pb@Tl%K6WzI_F^1VXS@gB6f=fHUTmxNLp zOmY75Dw22`ID~u&lW6K>0AOe8G7~;U)P3=rZjk4#La5!6lQt!vR(|SqWZdF%uT`YV z!Eayf)*2qgb5x#)X_&ENm1nZQqy5G57k^ zI~;h(Oi@M_^#P)_p|2Kx6*cfQJ2j`~gkSd=eyLl#R^+ z!Qdqnb&k-|0}JM<&>iU@x@K zCuh;jTz=m%veKe%D~)c_&ov?9{F=iM4_8-m?HXPSf6jCCg+faVyB`HyXc{*U&o>f{ znOKgW5ZEnKE9^JV-DjjXVh&BPs&|WIC*L2g<`%cyitSmP3Eik9*1PUFUL)iMQA+TDPQ9~TFR_Q6%SW&a#6Tw35t;^wOvz_Rq6>|K)mK36 z{HcM`sRg2sbG3EXHe&VLUo7mLR5bl2hZLQbz|>~i&7l{CMROfBNFXq=4v^@WQ zQl!y*HBwTL!t=fH$YFTxCl$iWlq1aZWfg&c1pm{vI0w{l4S-y_%ApzD9Bfe-P}qUa zf>_@_$i0@|#|NBIo+i#xK%GCxl}^ArJ*%xDT41FM51Jo&`*M zD%nnp*zR~J*KKdK?a{}Q#|lo`&5C>yjJ0}M4PTesz8ESGGvL;dO<&EUiBe%1kI3Sa z7w^{Jb12*TIiqp`>L>sUjfR}r9L%H^SR^!dQQ{HH2q$_;u2aC?8 zNk-T4$h^JnR^B?+EL5Iva3=SFVhI0$(7Q)T8@JbGvbl4Eas3qJSmn5h2wXS1#w2;nHzB(>5{eSzTg`7nuRYlMz_8+9#H zkr7q8Uq+bg+eV4SMAZ022bCp=o5dXUej+g=jofEOT$Up(P@8fe2<5g`g`Cen6Y`); z{Ch`|iSyh1_9_odRNQJNll}QL7zY`7AR55sM-l|V^ishFp=M+EJr=v1-x8}4;lOZB6Q%wn_P`EAnWqb`ZQM)1aig}v&1?8FP5O{K^xD#<# z(k0jVGJEc1#puQHhawVK4Z*0Fo2}mnE3dnjrIx!&Eji_X$RBi=M-0d4Kj%nQS~=>> z;_{nC2>vS+M5d7B1!JbVYnTEnV(m!fgu4d-GGd$806;)=9<{3$s1rv&VM#+%Hn$Mb zfRanhxa8Int^y=Y5#K%Rocdx*|HxHiONuH$gvXjWo8NPOC~soZ7PZXUL|R9C@tzO6srCT<;T~(srQaY~ zvIk4Tzt9cG3UPjl{iwD2ycKMKNNWmA%MA!^=}ppA5hXuWY^J|-RqmowX|NWm9s?Jv zD6ZvJ(c_m-f1!BDb+3J$(aKYtLCuCP%xRoIrm=X;!=lezOZqZuSSkZU<9qv1SIU|* zsYW1T`WZZx*tNnsrF(Ee_?(I7dCSdw?sf;s#G$R^r2tm*%8RG(j*PgM_9ZN&H1jMW ziA!C=T$B%3As~&OKo?M&3Q(HLJD@cJijCeuID{iU@LB~4ke$bIA0JPPe9cvCTC-kLnDRut zA|K_s;&B&SfgQS>vlOW>8cH?Kq1gKU9Egh(mDKd)$iDXQnuxMbzAplBwFrHEOir3? zIUw!vb&Ld7dDox${tm=!_EeIlg#ERN%N||y+pfwxbL}Tnqqo?UsS{|UK%h&}!%c-< zVo_(n;Z}v~02|V6(wBl%dtuvlU?m#IKv|e zLb`}wfAj{Hh|hGl&(3TE_5rs54x)O3`Ic(>`}S;?coU5fx4ON%#lutBklozL18%;m zBw|KRm~!Rji^`bNJ?zNoW-nR6F-T0W$q!^1mocSbW+caB-W6iazq%G&|tQV zKQO_0X_Fn_z!CfW5aZLMdExoNYLNb_m8yD%n6n{!G$YCH$4Fq4#u73V!1D`q@1&wB zWSFWecw>AAYh)RKnsGGpiNXKSTP0RACz$n}+cOES;n0V5P=awbvCmP)O0FR1@<1c* z=NI&fyH8>5?5nCT&cpWf@4ODvEQbb`0p-Q*di01?y&}kd@e-)FH@_2z+5}+^z(S%; zTqQ8i%KLi)R#7n7`8N?io3{>;>}sX(yy_&mjBjKWYO`*{tmx}IRb}!1t;eF@us!G9 zRWTbjrhKdM$=vXkspMYYdyeq7^YF8I%PZZ#+uQ}4PJsG~TD-K*BHC~+pa!=jK+H6_ z>rOE93_KgyvXh45K^lT>$+MZ^;X32kc&}ex`Q@al%!!|SH>W~KQu-1IPbw@bWiPqJ zjX11v9qq zN*I$be@cVFjT43@m3=@seu*l;Ol+-hwe9!IG zhf)XW)>Ylb%G%ofPa!Vv9PI%qs5ql|FgGJ!wz6rkOg-Y(j47X{QTyAPH^IgC_*WZ~ zRy=N^bogDuGKXt(yYlKeBeO73d^S-hIOVR_Alr6@!#3{Ffh;dK zK@49Y?O!DXsnC~Q4lDQ4yqsw5o~|l5K4K{POMA)+Gsn-PA7yp3`UhWg*T* zBc>dv@B>wom=9^i<-!k4@53bu3n{sgv&{v0dpOgmi7Q;oLnIMqI01zqrhugQ^i!x_ z&i@u-{U2n={c2RB$K<({k%_nDNw8`%T$px3jQ0U32zBY_)V5zw<#?qo*%tS|C12T* zJOeNaIFX|Pwtcl3O};Y@kt!CMy?{};1qAx^c5+-_AMO}J;ONodsT>Coe>_xwnSKkD z@pw&l(Z%u+4m`r4zfqJfz=9%0WG~ETYA}K~^pqP7M>+r=BXv+22S0Y?v##7T%gGAQM`}JlpU$f4ow(O_JZywwKUN|)!lpnQRRv<(Piy}GwuY!@e z9at1WV!{I_spo*W3X833Q@RN1exk9;XDRQCL5lX?3l zsAqa(uQ*oBh&*jmNDs^4ACG8yiVnpZ+FrlCqkn8Vk$AsCRnT z1jGK-`imi#gT!DnBWwkV9Wp~NHabW>=WCv_{+b%m(fzkP+uxxXJFg}3iqfv-Yivlaz+*^}0^wa7!#`uWyaTqu zuD4xcx?wq1RS!UpX|1fTanRq9v(|F!9M=|BM`auo?()* zp-J?sUx%~x77ud0tr@OUwR`5VwsvSsVIf|n1T>&jiK|l7Ysb`a?$a459@)1pQwfBQ zX#msB{dYin!KzNuBrI&^5KObrL{62}j-BJs@{IG0&}wrI%xp1R@!faj$^(isrLLl)xGex~CpA&7%63@j68=Y`4VL5nYQ5O;EtcMrRBp0Qm z6vYI{DQ=Ume`+y*mUMsI*2{MAg1bfR$LfwK(8oocqyEA~`sZMWE7mS8kB1xAca*gL zakZJIvt+5pgOW`!-cBmZ?4BK&-1mZpaVX`)T`h9rRg}~vZeN%mEm!X30$N_n+1LAY za4dQ5#|4i{FzO?L2)wI-rP?u%_DWiPoM17U?J2uqy+fj(&-1u?vzw~>#>!v`$*cZU z3JP82fSh0k!!HGZA*75Y-HP(SouOCjeh{a&{lzlAGt{zRqy!CqxvvtT`Zd?FjD_4e zyJwH5D20N8U_Nxjs$i`_u4jP3R+H!&x|%ZeV{m+2lWmp%T#SsAr25n+yS<}tHbw)S zY$NXI{Q7w=qY#7@qW|Oy^r|di3;KG4K?`CtF0GFFMvK8_SdB1gA> zLVS-lPu#+C6EupL5}XfS?48Vb9V6!sc@Uhq(({2_exRAJKb6^LHHx9$>&rvv@gF=Y z$B?H$k-v#^+1Q7N?bCLD8d{z9eRJAh3~Tv;v@dVOtv3F`t&uKj3P>d1Vx|d=*Zx9C z$Z=h#=&jhyZlB!JTc-`z<=6Sm!vA97+4uctlZPZy4peIQ!2tW_T)J)uZ#xDEbU%dk z8#wjQn<@3gN8*{zUCJKjxN-uLm=8WK$NZ`-(jQ zY{g)c>8y3@_5jFZ6G1$?)$F;W;>h6czNz4D+RK{B*SsL zF;Gmq(_Ht(noYzM&l{!aobP(GPs+tud-E>oSXT12IbRj^=s%Z-VDi{BGdNQ&fc*D+ z2w-A}ITsMW9)rTHJ@w#x%UY|a;PwgjF_A6H|NddN$$$E;;CH5LZ5Z%w6V|RY(@NTQ zNKj+ACvdb~Ccs8l@)SfLbdj@W9>tvy8oh7P2%69NOhkoE5YeHsj0*#n&QC|YSMD1t z+C*JG@F``U#Y5A*NhynP-{Oa{V^icYy}S1R2sUzu@gn9x!`~VCYrabc43j+Vsd;)k zYztPx)U|Yka(L3Qd+cE0Q2^pBbM0U8aR1F~RumZ&j*4hJ$1N*C8!y%>8dfaOU?ZjQ zD{+Dd1aLmmdE*Af9J7-&sEay?@EDNd7yXYBhkvO&_&}jDPMys6xt?d@HI?5tuaFTIcaLG+mIoBnsl^b+OogG%62 z_r>l138DDkjL6?VQzgH}AU94)JqKD@u9y#X4Mk^PNONY1OO4ViXdS&c5#>G4mmdZW z?-?8)N|#p*L)Xd$Mqa>Ky}Gi|wy?pA^wLT*EJ0-6Ne#z9OA~0IHDLOG}`jv+o(ty3&RCp{w$wV}9_$l!2u4$ZTG@z5Mi6kPHf|Wt?bN>~ zOiQCE0wOMmUp#iTn*iBzZ-a|`4$+9?us8B`Mn#BV3i~Fa@cTnQIF6g04lx|fkps<)v6)`b&sOS z5=Fr5H{95!b0fEsNSGDYEHYN=_|n1b3voh8<_`x?C>5Q0FHbG8n18srak=&bF%ZET z8ZUv7lJt`gu&fmN03E+y5H}r`p5ZkH$c>9r)5Lf>==aGeSRE|XcRT#|`8=ry-QUJZ z6XA7L*=c8XkJ>FErS4qtxEq>V3DZ&h+Sq0;>XDs_l>z9eW^Vvr+W|-2gG~eQ+0}Yz zLzMg)*!!Qrm~Z0-EC@`0L^bpQgz0nnkO1!p4Z z24lBA$yfq_vK>(T{2E=i=-eNm!9RZx*kn;e0)u@AUsdxJ(S+JGmIomru2tk5;5;@4 z;o5|$fU6`ArVWb5h5w61EUyGH5J83-L7pGUNlteNW*&hZR%M{Ss`+&`aN=wOt*Y#l zoh+bQYk#>M!19fJRRMK%uu=!KLyBAsX$fTLL$Y@od>+Dru2}y6cLg{p+2uGo8S(`# zlC8Udky+v#dU6b@Sr*Z{`esPx z<}X9x%kU7zR>DvwPn1ZQhs3cl$Ku3@u?42>JMY&QaxZIryf?FDhQ6tHO)<5~0RJbg z@?VGH;q(wNgCm2j)zV!GoLN+T*5i6(1vN58U87V zi6W0TP-7A5FO~x!T+Sx}&pW%gU=>4-Y2%NujG1lMDPvNdQc#gPr(Edi-4eOPD>x_VR-m0Pr^>+Z5>jpTPL}qOo%NqhE0ICf00Q3Uw z0@crhBuJ_q3`yk!@v76n8UEW(2SC4U5cF{52`8pNzY;vBJ#*2>>$rS(i1c-7=cgQ> zheXCqV4rz3EiL4FbBoub+zf>|TQhjh^;U0fXM(H^>(ug?+(%1XC5(BK25SKHD11s9 zS@sxC;_O3aBUZjv zXf&oK#g^ns(GwwhG;Haa<3~n5Q=1F4>-sO60kGW}!p80CCBQf&{^#ql#~z|KrNnk3 zsT5#sP(Y)3d>A?iI=B8&fHT;9{#^q}?@^Sq;6$C&+EMqJ##4g&{=Bgx*}GF+k2}#BD&g@fXVoQx~5zCHMK0{7c^YspdP*sw=EUG`kO_xB6@erdA5FfuxF%nYftqw(%JH3$f{e zIbV<=>CjrGaY^a3VPG2|uLSJ>AC_nAT1U`%OqLn%z!-lo`83U#M((!9u_)=~k+pS) zPGNec`z|ZY#tdrbK5OdveO#Ph-X_W+x`pG7g4Mt_fzImk;(K#>RrB7_w8gkm8Czu*{o z6;I%#mJD3L`A|?tA2=9wKFTJHeMw28Yd#C$TTg$SFU+X7pGba6r3T8TJp66QJUhc- zjkrCH2nk@FBtI=@vJd;~)0Be=-d;D#iRGo2)csfP#)bB}zpsZpZ$}d*Wb=W(s z(d@!&r;HX)sUz2g29u5zYH;BvqqWaOSOy)a5j?6fiM-*xWD#acns0DrYfUG+E3@ek zr5)w6Tr)=MFIGnl{&?Uv_j27#rjqSw9=&Jn{VD>B7k?bafbKQihyFyoUB}rcU z&`w9?KAkEvHSl-K$vUC<=4~3^LDPF(IcpwY&yAm7Wi$=_SbCWCXd?+z>}uH8DMtD2 zADHe>Sbotk{YmJT^jE&oO1F>0)3AA*uJ5*MFl-lHkGNzyG(DgM-*OeuN!3KW{I>bp z+rrY~e8UZ|5YaZxD>pjy_A8qNxmkwb!uTORZ+B%UP2w8eLifO;eqM^Rv$bi-v1oPl z)~mbcari2fa@>J8aVQBEo`F|gSxwFc5ivyrvRf8I7?%V*)uf3}315|A7nqf+Snj+u zI5J`|>piQ<`^0AC%{-kc6yP}HD>Q@WZ2DT-EBC=k=~?e+2m`OR*zrnt`-5JK&{nd? z8-@&#P^Th|Zp5CcBAtytMe|=qk^S` zM$OHSy!C|R8(ggTg&d)j&zX*ec(u%*9o={xYq;eP=@8RBA$K+uR4X5-HM(_$+b;U? zKZ)F^tRBogzcTmjN1`eJQ^vRSmF$v|;Svh$?2;L0b6EOw7i@ddYm?P`wVph6-(2J` zObc8zYBqcU`lB0So7Pw@lY8+T;-NlP_iQQj)URO{=+Q4jAofXzZVV?jPp8a3Gz z;x)Nso@9T96<5G0{mwfEYc2Q%fs&HTh zk4NInVG_-!+oUs0b#ExL4Pt+SomHNToJ_y56$Va&?mVY?Bwpp0Q)$Ysp|hbsgp93- zZ5EEY&aOg*799!lN7!$>gM`%tM3C8ZIeWHzIu*n`apOsJt_mvpM-^sk5J_(2dWGED17dF7oW8GU&7^!OM#&w- zqt%_KW#B2CG>T*VP9P`z3M`KrI%q(bq(`0)(xrf7=*Nqnh(-#@kLr8W{Jz=^x42JJ`_uQE90BR{+geoLMiYutPq`_h-|V{t)a$60lwxd>g7}HRfsGT&8&k>4@;Tu zoqL#O!YY74Xum|Jf}+?F-J7`=&)yW&MP>F@$2LJ6bdd}?5*Y@-_f-ZyQ*a@x5uHT3V-MW%!^zu6*&_8h zeyf=Cx*WSy7o+h2R!i7Jc51*Ks#43uFKiDEsmKK1sOnqxzvF2ygo-Cswhb0cMn_p4 zev=oxN+153(_r#6wcln{%(=pAB`~z71unOVs&x8A-CA|Y>tdQa?I^ zx(~+g03D(0lFW68%f9H46<}08Wt`9LGhEO8lH&Z}lXOe=s{>N+PpGSNi_N*DeI#kr zukLZWV%H!fUynz=lC3tF96gU1S@qmojxxNJ7c;09bL8l2uV+tw@g)5&OuiqH?Ze>H zQFn8oRU7qc=68M47KyRwamWb#h?_*gKxv)R0)c#{8CD`R2mP`HORr~Z^EnAVfeU)9 zbbWf2)85zXRqiH|?U$-0O248%-elfWu1@;_%bN?Gm_6b0@h!CUy}7I8GhMI}&iQ=0 z2u8W!FP8HwOI<&T_CH+nzxgR~+jpeU$<-j|Z2Np@=f%Y|U2}&qm%w-G!?KG}QdN#x zba5EqaQ_Ed-QeB`U~7{g@;PJrhoMLSxW-E{&P8B_x~q)S$xd7PM2)TZtm#e_?T^N$ z<`7v!Y8qpFDz|7pOz}Ruz_WQ)uiHbTFyh_VzgSLqPNS$>zzfqlo!_>U`;1CcFY2?a zC`;1q8`pGp9&3#nOUGMA`|chwR#HRp8_QY0FS*TaB3u``{LTX|kXv#;ok} zcB}A8ru}y(h;764f|+6L9kOW-@`iOqycFSV@uYUh{YQ6&u*MvjN-wTu1)lMjA?nt3 zh45oW=<=T~&(lTXr5&!kVV-`!n7|*>rrswRuXjfYCwZ%*a>{VGXluZz_hVs&!QA56 zB9u|TNU=G)Z0&*DH=Uf$ywC`Cfd+~`&T1HR0>3E&a?a^G>VFm6J#@1wq=Zvk)+bCxY76VK{<@@SB+VU>v3k9;HA75544#*h>DocONJ%;B z7Mo+=9(QKNuQ+CX*%KjD3>~0fBYz}`=)~4v0-QQtb=^y^a{<$->=5taT02_N{s%`J zdfJPFDhv67-FK4^CAf&EV^$+I7tO%U#l5x=+k){Ci+WElnOxkv#nKvW5wZAh=5x*O zwcZruUn(O%&$C>t2%#sIrf*l2WEEC_%(NEmKcP2!)zbza{YF^j`Y-XzQZT2A=8(rv z;hom{n~Rqd9tz~vCv>ja~o-5_>Y8*=BIpSGW4&b_N}L%!+`fv zdycM_Nk&dLzq(MObE8?O1mq`u)zkME5t{CB#{Up0k9~Klj@jA#r z8`na_TVKqJM6_bIgoje(97g=7UY-t3_6Ek%+QGYHkqw zeUl4SM$y^dobq*p(pUl)xh+#SQr)zS)NbhHfJB~z);~G6|K;HR!~ZIFJF%ttPN zk9V%Rv~Dd2x;FX<%kxHVkv)H}WspQE#s0o6-zfOy?}06251#libPT*f*>xURfHF<2Fyu|w_EF@9t97Iag!eGdk7lZ8zT$B=>A zM{S`Yj@+wRIQnj8`yhJ0s*u8cVmV&GE78F=mq?b znZJ92fA~HHfJ1B}xKpcO;wQ$19G)AQ9{i^#^1%e=2OML4BUP7twk!Cw=|TUSgYVSY zUCGfYEQfR<>LXBd+*Q_QVfijMeG5}7pUK<}Tgz{{K z%39b?v}}JeYuX(dv0E_eitq<|5MT}gs4#Bp+V8GFgJwv{?>kM)t+L@z>~k8*?Za(iV~6WotNdxP7ohmU*&8k2!&_b+gF#Nt4(rzRD* zwLbl&G;-=^Pa6D5y?s50HQNyB^Lgv*LD4Hh`)Zqfr~BwWOGs<5IQI+@oeQELk;C(( z-kB&c>%|0a2W_v+wEk%xTwNsRFYp)!HR!nce{aNru{bzqhXcSyCS{usF~pI*Jr9xh z;3%NT+R)=F9YIlofV#VbE;)bpI%>`;5Iz%2j-?ENbw*StP!9gxQZ+RI`+}U3fXgES ziQD3DJ&%pV-dCpi=s#tymUUs74Nzg;2ig_wDR{M1122BrtT}cM+P>)cxWTox;OEK7 z2_h<^kBoyG1+{}3XZz~Awhk*sC@M8=|QfjZD7=gH%|O7BiDx! zi#-MXJOt7J*YfrF8hy4`)FwGKnh8ZiZ;CB1@RaqJ=t%ha*(a(+S`I(iWqV3Pxi!Dz zqO@K^U+l0ZqJ;tH+eciFSni<+_)Jx+-X(U1Mk+Ud__7e&>EX%}&SM?#oZ@72P0TAE z?VW5LRgx*zh&$4m3fXC9E5$>@(e@)8hhv;ie{?w=_N?=#>9NBem4bGH#u;d`7}Qt` za^TfC<{?QOc?Hn%{KfJbw*d$H+{AbnpsyKP)$d#jt2T2rUlm&QAnl(mPk%h12rk3B zgP2Tcc2=!}1PRSo(uWeLB@M=NPOl#b%9J!Vrgwi!v%hDVf6j$vp;_5!5h`{C0R1EO z)Z%fGa+E$O7>gV+lbu&?GJTfsrTYlyqBYDMd#rdfpHT_9N z*vgS<9pgqbl@hr!f-7;Uh3Xn-=gJ|cu1c$WoBr^mdHFfbMa^&MU3A?cET8G(ajNjA z(r47-gU){3=Bi3w`^!h-qEGCWm*aa<@3qJHE7y*)>VdKvF@IAQ8B>ce8rvUA*dGC<3){&$+bi(tYVA9HE4C!j!7({=pNV*dlM&PYf;X&eu1hAd zv0RnEzWUxDNxSCV++14vcClilb8kpDwlwOXw%_F!6HvS1;ie#YcfVxrm|a5i^sBh3 zdB(xx1hPUQh};*$cE)W0WR0u{pz3=IqCd-44AtQCP=C6*BwQKR@8M@2^QCl0IqR$3 z;I>TUn>*oYOD;Cg z`$fQwrW+{ffRz1K3(+^ybk4ZtbX@DA_KqfR*5<7i`#G%!NkJ>TsM65F#M^b8_c0cG2Jo`6`0Y)07gP#I_)NH21qLMA#I(cp z>-$4SAICUg+g;%S&6zQ?h2gMER?$xRsf$yCSPTw(4Z+xE4uZ6qnsbCcw1 z(p(5|7nPLTAa$GPw4ljVgXS1{d1OIOOJoFdSgIYrdXHPhQ}uXj@;PcTwz0NYtFf}@ftFY!LVHUX zlOgsggNd_+je+A30smDCwV_&R6?iJxBhX*d+4`ATt_3kkQuQ7)%-19tscSBfHk&6T+N7_dLEe;CaLjEq<@=`0%WepeO9n zOQ?poxAZ)7AKCVZ@YvZ_|L>J<2k4dl-=3|^r~y(MY%k`M*+Ln z+xBp!Y|`anjLRu2xmPvxmwFJPWaEnlQM;~3dZkZNBjL?M9*W!S^x7H_ALq1S@Sha{ z(XR?j)gZxGQ|7@>Bmef(r@-8>rkm{SWn?JoFBUvlr494IyvFJThSw8i>cufGagXGj zn@(9>Jj~SsuJk4e=NVXT3; zKZ8FfMHb6k4xUC1)25H-imbwud=k&{S?u1&Q@*u1h3(V}foU}n z(a$#sY#L{LovWS|+^YQ`axMFo;k74MLkwZp;C5GmS(J-}C)ygik;B4sNiqwC9i{R6 z!oH`KPW3&ag~nOPt0royOy(#I|N5Il;k1B!tHC4qfOCr~B$ zmo>C{^P4)p()R8SX!yn@aoMPJ19XF5t9<2R* z>(^cRd%~kB2s7Q~gV1lT1~lm}7A3<)@%4-1av`jn*8&s~2|Movs$6f*LQFHgH*)&* z=kDt}AK14TJQB-PA#@GK(smO>W(0j>pnS?yzMh86?&$7MF4tb}MOE}IqLh=1E==PdD|JiEmHa-)U+AvSW=J@SdzJ~>lSRMm=E7f= z%xB!ZP>oy2r-^{=>6Xg=1*hI={U5+zdmA~VSB#=KG3%I?g&xB_W`2(74(68K@`GVP zNB<+e(<7w;+Orc-L)}tlJK)iRej?ku-|7YKU$DQ0$r7;Z4;{4zcx6kF zLhD0r@vf52-dq-5h$W6mYmnxPIb5WcY_ya|{-`)gWXfS?E zeLM07YH0d3Eo`-;1nE22u>K)CHDP?_I-)wPAncJ_H0Z_Tf#U(U|NN3?%I;kt0u&&k z+aTN!oIk0%+uZv)db!X-x@F(ZqIUUf$L_Z*`*N*0xkrfVJDZl?b7*vY+g%1|v5ai~ zPgoW~sPT}$?u09i3&uEEl~=%}HNzAGYVY~`BMq%=6hPrx-U@4Ig-^oB;@d0pB>2`1 zMy|@?pJXEfK;Z9UgyoVk%~b230jbngjqhmPs6}n{AG7iJ@kOVPubD;5v%YWPzZch$ z0?c+M4>^o9Uk@EA@ng@UYfmb}^}9FL`U*B3%-h;L_yC zBb4=NU^OVXAciHnny6t>vT&rZgB;*As?y9@Fy>b&`LeKn{j-UH$iaG7$rPKVxC+}t zpAE5kI5E^`Da1q`^-jTbr*@5z)!~8MDo?fs0mAOryycA*lXf z{jnOdQezln9ms!ldK*slbI~m;2~vldYXr_-$(Dx}0+mht1Dkwg=qJYnnB!QIptQr*eeId_MX5TA;oO2yBWp0( z*@#{>5Kn%Up+hFQjpDiAlXkPm6LySXWuN$%f0|N}ZWOP7>tSis)D6pq>zdXnPvna8 za*KvGF~5`(7pn=q^X*guT`=d1|8BA?u>^b8Uu;ma%6clF&4DRHQcg+wW@>=WH&t?`gn%FrgVG7mtR%x)Map~3a}AoD=~Q$;LH^9)y(qgm%m zUd)Q1(V9m2DHbUP6vTCwQo+6ML=w&(zgbLEw6S;AslWM#X%^(}_WZeFr@+!YxaUoOZO7X6)va?S z(@1uVFaSvDxjXdmim?zeiK#*d;GG8)+{V4jKcnId1Lf>ACID{K$oBJpBAWQOXL}~@ z$tQH1m}|60R27Q1C{MFwb^Fq^D5bDu6W| z5Nwc2$S@&FgI(tM!~?1tw%W3ZPT{M%0f^JL$D`YD)kEJ*B5Sy8t0EslUI2cYcuVbDb5Gm-RYko$KYq4wlIo}Y^ z@ZWuh$0Rn0ed1ZxQ;7^O-t9}-{Ue1jw4NS49fQs*MVJ3`;P6W)GYk8U1z^Dhnt_*V z0*gd*D4n92wtsV^$~t{sOp*9b*2z8_cOc{AT*%Yt(S_K2xSNPs*WM2E=RU{bU@wx) z>8EP|J9D1{9?^u0NZDIJegNe=A`fi@_?Z?2Tx~qQjU35JtzeXj%&IT#`642cD$?O~ z(;7NoXynkIBB7nFOT>-GPv$(cTp|BtoK3~DlQ49iSmtp=Q~q9i0@si}h8Q{2KsZ2F zcRf-QKV-xd<fY(@ zCv(*w_I~GRKv(U>JY3QGJ7keVPNQ#^^+{SSCn^4@ zX`k8U{wRjK{Gs;^$taY*KR8H(-_k{BH=sICkI!^*a(F;G8LFeABR2SCS1_0g`f4r*o?9aXQK-FsZWk#BdbWhGPtDu5{f#S;eHnvIG=CC%wvk=oW{iP)?!3wpO3 zMf}>|VN6fBU%Q~L+gp{hwTqF*wo*d7@{_zo6RubFd!3aljBjp;4?J1Y@#sO!;y`JP z;X5VwGy07uqxtrAcaC|N@Lrjd0*mX?!N{Y$V2aU*F~)n zW&RNeR(|8UH>;1 zMV3$rB}3|xY>}mexk?Pl5{a^mQkG;dTliKklx>o-#*}SBOp7H;CVLr72-z9S$T~C3 z7-s1?x_{U2zV7AqdY(U?e~j06IG=Mq=X}rkZ0G%6LAAkn^+34EMQMet5Y`h*ah*?4 zhc%|(l*& zBzZy2vu~P2juh!7?1WwxyFD#xH^q3&jhp=_U@m|P4gQ(c%=j7$2UScaJ5v#5BQNDOl9P1JDf=@$gQo0N}lH3M+w-5nX>ML;ucnKC2#bFeAdEF z5<%iBdjde6t&7oLE!@Shc3(S;qIZ#V`fNLbKl1VHeFC8HLZa`YSi5hzg6Al9U_D40 znJTpr`LT=b>m1X_^E3_p;{qy>CZvh#lN|QPT=b(ADQ)zelHc6Ig?0JYf@&kKJ;z2q zfV)T=SfVd$m%{|q3X76aB8xl>KOX!l#JAO1qnbj0DfMl6*X@2)hvNjH_Q}be1&?z@ z3l1gw$I8}Dl32T9C&n8=ztH3y&oJLd1$}b51B03%=(BrXXGk@(ra8vRROR*W8Kp1G z9+@WhYg%;#gb76)Huem_E_ADXIXou=4L}_ms7Y{p+j64n6E;d_2U#s@P2UjF6Dbq& zf-&%iYw?J==DxOPhZF;k*QWUGI;s6|MmhbgWMe}352iTOz(+$r7~}s|w~ca&NH3kj z#sq{!5)kjm%czLbAKj&W1&cbDhRS@jl+bTSKhe9v8}PoR+$C+BiLLnNxdw-_UfPSJ zNqCE)su7X&IvrsD#4vOwMFc%IeX?Llr9S0qQX>pbuLDx*W~}4BmOk8I*{t^;T|Q1e za?0;od&D2BkL)zR%m@bmn87e4mzei!viUfBcV^|zrv__lhn)}8qnRZJ+I;M* za7eVX?!#ha@qvMN{8p5E-duF*YF;urP~zKyre3O(fxhE_rRC`qsyFb2WyMHgM^Ow0 zBU^i%J-+A+UR~8@mya0jJ533 zyND*U54LK%ZsK1u!ZsN#{(hBK`VDcse!=LCK);i={Zcy;babDC+R9NE4+aXmdIG4npigU=qb6(xR?^!GLYH9VE)x7?E zx8bY&ks~8YN?C$NzfT%Z8hyH=sACQFvO`~Rw21m>Lrn|M2K2(^f zu3;6i%Brr3c_X{5_nM6I3)McI_-&`L@OREZhGnCHI3*P|$@JazMdab@Te1%#%od66 znS#w9l1E+PwZ^tXFVDxyzv|-4Y*LOq$7 z`DTq)t8=d>w5J_+Dt$IkV*QaqL^o&qHVea2WQu}%PV;l|%OamhzBzU1=0o^snSYKB zvm-I5dIj-3<0qGWwZb7%sfC1c!I`Rx_%I_Qr*Ysz9gxUX5=*~SYB~5NqReY!@X$w{ z$k#zomj_{^Q>PQf#BX%Zwy|ee3w^W5UOmp`pabaD%;TIu^Ho<4m2*23oZF$0?#Z;Z zrc|d`ch)Q@`+D9R{(b9We74LjXbjnvbc20tChh7V0Hw%-lQhS*;VWt+L>6p4Z57jj zE0lh>cnVI^T1Jx1aT|K${DAN6)C&91lRC9u(g&)c2A$uLj9Uc$r5mpA*6%?-dXQwT zDGF~I{RTuf!`^Z2{bIAp-jAUm$e!q8D_W6akp-4yvIuQ)8~<09W?r`j>@x!$sKH8e z1z5%6G=iY{1l!Om%jo%;0kN@M1o4+o;p~MUl;tb^I!qzyzMyb3o zFyI$-A*RDWFfY#ToX(YDhrDS7*T)}16k=L*5s2F`XVP4H$>CnW{sbAs>`9qi+!++l z^m0Flaem4mTTdzX`NA7up-|JbCVEqpX33HSrgk$pU_>7GKy!wDaIz~5yjI8^BSW1x zbelA748djT{5ae1$9P3WPRKscKh1~HlJx%Gz#J99_Mm7mg`4wg;AX z@r+nZFhW>7EmnQ>p3ue;7o3!F(5)<@K8HSQ_(W`4gA#N=0Sh$eu%(gf;48gc6Wgi-nr^I?wv*>E@>J&c~@7(v*KSPypF4-!kCZ&HN4t-_ME z*POE_5xCT+8AhlL!J9eb6y+>*4^ExGMOti_1-NxkGnO2=Wn|5BoCvtSvwCds6}yAk zMvr7yM($;)e4w09%bd-{zq+|y-P`7&W}DLXJs)fIo}jV`+$yAS~cVBIFrFH$p`+ttYDo#2sFE3d%jJ! zMEW*wm@C&FpoOVawCB{jkNb^z+QFjew9>m3nB>EteBU5~>#vmEzkepw;&?JkioX}k zqWy)E^S@}C?>C;8auhwy8_eq;S7m%;m8Z>(al9kPGCF+Q{aU<8ZkfqOC5eaKF~!E- zJj~D-*GZd1asfh+pojVnJ|S!0ExSLK3{*nzS+5kq%-eR;+CKt_J17HB+Xu%p5G<5j z+C-BuQ%_}L_j)Di?14z{7Zh;4VHHJZZ`;L^@okOxT@9L@Et8fGz>paLI zQ1je?(l7jKPJ(mw@2y3y;>lI_EXM}3Mel6TquMZOXa?*>u5XmG9zm_Ko_l^+$0Mqb zPC}Xg$%e5rX-jC3mOZNN&VZi5981P2&@Aji9t-y;^qDGEFZ5<~hT-t((6UQLHy;l&Ava>bc>uPYhsForOw^ox?`rUY8E$=JPfMf4_Q`uFo_*P>u_wMJj+r(W&9kTcf_*mke?;#7!D7L)#iBA|H$z(DAy3wW zL#5#?jUYUehqCEUR&^BBE4lMX##1AN+tv7_-fiqRoqrsw7ns*V+N{XIOLr-Xr+gCNp<#;Oo4{^dol^(8K`>gMT7 zZg=42mN9ow`xXp%D3usjuRLc*kRl-`jU;Mw`bnQ3`Gn*7gn2#}6Zx*6JUP1EFJQ+^ zq&~}ljJ;oXs$_oXKE(n{RPkyalkHVGq(f;Fy4GV)Cmf?bN`CZI{dBnj>7=6obwwcD zuwM_b!Fz7rAPx=AOK4XGwt7!Jl`6fi@yAqHc7Z**HnHL1t+I=_R%o{t0X9@nUm9Lz z)fN$2bnv0IewDQFWgalcM;1hS)n}Y~nCS5ZNb;K9-eLRaBkZ^er~{t;{o~ zXvY_$Ra2EstpfI~UK-*JE2t+wt1;4`)?r~LiC{*yu6T8WsXvf`Ny#{EZC^%6<8=*m zKRIb|m_sn&x7@=zOD4oPG=E*l*^xSqukTaMO&wbAsCzK_wN3i!Q-z#-11gg5XvK65 z0l+jfVlBRv`f70>u77*rPdiU~NNi@Mdis*_8KGNe5ctILmf8eW3UsNy)*4YC{%|`R;6V6~; zZ3a*(ZOi&PQ&o%131kdMlENG2`*3Y`pzhRN@$zFjk5trrw9w=Hg|O>MT6f*e$J|DH zT;zF@DkfjBKAMH4jMb`1alSgMGGcQb?HBevEA4R(HJ-QaRdK1Qqf*{?eMnMQ{vZp> zM#%MPo8N_KD6RfMP9jHT! zM9ora7y&0#TzZV34_r1!PYUyc{4eiYJnULrB2nlKuD*F2^ZoJ^|iY;y%A!Cg9@2v?Wv>_ za<+bT{&ky~BXx|`GNi{7`;MAh4}3*hCNtbT&|R5bic>lI9g@QHt`~(-AC4h-VAcH% zu8|eGl$$;8sxIad*;)e_yYH-XF~_$pUNz1Qj<1b4u#txKTIdcwRcb@`CtpXFJHka? z>zNW24^=RO>4kazt^$U9$sX(c2aN)H#NL#o3hXZ?z9g?Kj!&W=UD1!Jn#At%vSNgd z5toI7yd5ka`MgdY>nlrmi;(_P_w&Q{Vtb9s<86HVC(&(97*4P76#H&_lGptR<)2(P zD#v0xU(Y^L-<`VOu;%(MW1Zc}4X<$(5|5Nu%0tU*;X;haaYSf=gYa=vlf|<99Qe_o zoZsD6gWIU0Cfp%b`8=1;C0)ng&>JJd6WCmLS8v?C?m>taA5M&*1}4ks*n9xl}z|@aKop&MkA_0_Q3~| zo+BCkCui3*dIO%h`ntcf$&D>D0|jx^CGR$y<@%@NWx}gIAI(v#V8)NzAmGoPY~+l*Yrgx@n2J zV{M2&O`NEqP;g~fDQ3vkEgIh<+f=km{74skMJvH?y{nU4Mm17R; zB4sYJy$P49%m;@jJuf@cYt1)3Uv^+eNix%sxH9PIcKGK)OnX#47wk$<#KOG13cQ1S z!)+Odt#cHi9syqc!4v}k`&^Qq><9mx$HR&{&+JBroxHc{z}ayc+%|SnVBZ5-n6+Et zn|84AE39w8;+JC?oxj~dA57AqqDQj6I)bcKm(Zv;$ySGkF4lP7@41 z|K;=l|NQi#0|?cjHu_=4Gmt1wqPSJ(&S|e_y1fjYZBYDH>Z)8TdcDL%GC)^UY0XZm z4B3nneywNo3cxUvG}FKT)_KT<`?+5dpS4BU+M4*n^hV#UcO|9912>0CXqGjLp;E1u zh+_r&Y_Zo@@~X^W8BO4FBIPcestigOe-%$|l`gustZeS}20S$Gp!mmY?OynS?s4o; zR`B^z!U`}H4a)l&YWbh-q5K2mYcxMN9rFfTkoM4iWf>%3)mVfa0I+w=(#Q8BK;mqK zPh_JdaC4VIy+OmT+P)W1!zlwb=<9o+)2O>}&M72_b&@f+A4x7VZF~r8#=i1Cxxg1WLrf;5gA)Aj%K6H_8xOHf@5QoY+Y(9DU+{=LEqTn!z~Rqs|~)6h#^m ze?QX@P3Yji<9DYgFW&BaAE~v?C~w8vvlZH2z(`C0hA*FbB*`^E-Pz-j(X6g zniX=0IPd?Q6wE4LSXGzFfQ{}!kzGyG-&_r3elona>^~6X&+IZ-jnL5F4oIB-QezX_ zu;C}y-4(D0`++*nf0+|txWxvAgCp&w+c1{B?bl!e!SDslCgKNnCJ;<+-w0=M8e`PXV4`{$^KEQ!Oaevq6*35w;;@|a&05#a}iIhYf zF{5Hy487#FHGBCfELivG<$Q<2RUY-0k%h;G%RdzO*58RGWyP*b?7k8%*XvE&_90

S>HQY|?q#lil2pSyF7z zn$Khs+EUqB9Jv`wmTbMsw0oke^GSnmXmTe&i~w%65kQI&0I6mH_67J(nmt~EVo^RE z=@@!R|Bo-E#p*TKqbd2{4aox+ceKT6# zZF~H{5PmtH4X}q8ZorR&)($ej1Z)e0q5)3ZzltMz(a!nC4CO1O5VLP3`BN{u_X3>M z8v01c4-keBAYJ4KrA@Y_-WPB(wkY_9(mdQ|5iC%#T{spKHLkX*z&;J$FgR=!MujWk zCc*fCs~%5WVTl7l&D}q_gvKc%oIjBg&_tOp=XcyiL{q1!tyxIk6?x2Ni8RQi=`yWF zV#A6t>0?Lw>yhdA43} zlLo47(CfqO#~9Yx^N4>83vjRfQ(Eo+i!@_+Z03__6=I@i&7HV5g=Y(#_;Fa#mb79X zoj9$+Av+*#BkAJS&`QypbKg0lf0HM|h+Tt7Q_MULVkVe%9BPJdiiJCYGou>E$b@gH z75X2oa>O_DU`?YY%C~^NvX*nMy~PJ)L)~|$08Xp#&E1n-uV1KdEuC{@S0HXi8YJP? zkAnTFED<%q4>g}{h6o?FR?0B|+YgL4Lfbm - - - - - Troubleshooting | VitePress - - - - - - - - - - - - - - -

Skip to content

Troubleshooting

UI5 Server

Chrome Redirects HTTP URLs to HTTPS (ERR_SSL_PROTOCOL_ERROR)

An HTTPS server or proxy that was previously running on a domain (e.g. localhost), might have set an HSTS header, enforcing Chrome to always use HTTPS for this domain. See https://www.chromium.org/hsts. This makes it impossible to connect to an HTTP-only server running on the same domain.

Resolution

You need to delete the HSTS mapping in chrome://net-internals/#hsts by entering the domain name (e.g. localhost) and pressing "delete".

Issues Not Listed Here

Please follow our Contribution Guidelines on how to report an issue.

UI5 Project

~/.ui5 Taking too Much Disk Space

There are possibly many versions of UI5 framework dependencies installed on your system, taking a large amount of disk space.

Resolution

Remove the .ui5/framework/ directory from your user's home directory:

sh
rm -rf ~/.ui5/framework/

Any missing framework dependencies will be downloaded again during the next UI5 CLI invocation.

Environment Variables

Changing the Log Level

In CI environments or in a combination with other tools, the usage of UI5 CLI's --log-level command parameter might be inconvenient and even impossible.

Resolution

Replace UI5 CLI's --log-level option with the UI5_LOG_LVL environment variable.

Example:

UI5_LOG_LVL=silly ui5 build

On Windows:

set UI5_LOG_LVL=silly ui5 build

Cross Environment via cross-env:

cross-env UI5_LOG_LVL=silly ui5 build

UI5 + Karma:

cross-env UI5_LOG_LVL=verbose npm run karma

WARNING

The combination of the UI5_LOG_LVL environment variable with the --log-level CLI parameter might lead to unexpected results; they should be used interchangeably but not together. The CLI parameter takes precedence over the UI5_LOG_LVL environment variable.

Changing UI5 CLI's Data Directory

UI5 CLI's data directory is by default at ~/.ui5. It's the place where the framework artifacts are stored. In some cases and environments this is not a convenient location and the user needs to provide a better one.

The path to it can either be provided via environment variable or permanently set in the configuration.

Info

Paths are resolved relative to the current root project path (i.e. where the package.json is located).

Environment variable UI5_DATA_DIR

Unix:

sh
UI5_DATA_DIR=/my/custom/location/.ui5 ui5 build

Windows:

sh
set UI5_DATA_DIR="C:\\my\\custom\\location\\.ui5" ui5 build

Configuration ui5DataDir

Configure a custom directory:

sh
ui5 config set ui5DataDir /my/custom/location/.ui5

Unset the configuration to switch back to the default directory:

sh
ui5 config set ui5DataDir
- - - - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/UI5-VitePress-fire-and-water.jpg b/packages/documentation/docs/.vitepress/dist/UI5-VitePress-fire-and-water.jpg deleted file mode 100644 index 87a85d9784fc1b228836e3f141d09cccb58ca3ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167975 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è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ˬO>6_PT8h${?nqeT;@I7;Ip!VP@b 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 jz5IASe)xkQ{`5!u_z^FE - - - - - UI5 Workspaces | VitePress - - - - - - - - - - - - - - -

Skip to content

UI5 Workspaces

Info

UI5 Workspaces is a new feature available since UI5 CLI v3.0.0

Example

ui5-workspace.yaml

yaml
yaml title="ui5-workspace.yaml"
-specVersion: workspace/1.0
-metadata:
-   name: default
-dependencyManagement:
-   resolutions:
-       - path: ../heavy.library

General Concept

UI5 Workspaces can be used to create a personalized local development environment for a UI5 project. They allow to use UI5 dependencies from local directories without the need to use the link features of package managers like npm. "UI5 dependencies" generally refers to projects that have a ui5.yaml.

Workspaces are typically configured in a ui5-workspace.yaml file, located next to the project's ui5.yaml. The file can contain one or many workspace configurations, each separated by three dashes. For example:

Example

ui5-workspace.yaml

yaml
specVersion: workspace/1.0
-metadata:
-   name: default
-dependencyManagement:
-   resolutions:
-  	    - path: ../heavy.library
----
-specVersion: workspace/1.0
-metadata:
-   name: extended
-dependencyManagement:
-   resolutions:
-  	    - path: ../heavy.library
-  	    - path: ../light.library
-  	    - path: ../test.library

If a workspace configuration named default exists, it will be used automatically; otherwise the workspace must be specified using the UI5 CLI parameter --workspace.

Workspaces can only be used in the project that is currently being worked on, i.e. the current root project. Workspace configurations of dependencies are ignored. The workspace file, however, does not necessarily have to be located within the project. You can reference any workspace configuration file via the UI5 CLI parameter --workspace-config.

This concept has been discussed in an RFC: RFC 0006 Local Dependency Resolution

Configuration

A UI5 Workspace configuration must define a specification version (specVersion) compatible with its configuration. For more information, see Workspace Specification Versions.

yaml
specVersion: "workspace/1.0"

Metadata

Example

yaml
specVersion: workspace/1.0
-metadata:
-   name: dolphin

name

A workspace must have a name. This allows to easily switch between individual workspace configurations.

If a workspace is named default, it will be used automatically, unless a different workspace is selected using the --workspace CLI parameter.

The name property must satisfy the following conditions. They are identical to project names:

  • Must be at least 3 characters long
  • Must be no longer than 80 characters
  • Must contain lowercase characters only
  • Must contain alphanumeric characters, dash, underscore and period only
    • Exception: The @ and / characters are allowed at certain positions as explained below
  • Must start with an alphabetic character or an @ character
  • If it starts with an @ character, it must contain exactly one forward slash /
    • This is aligned with the npm concept for package scopes, for example @org/lib.name

Dependency Management

UI5 Workspace configurations allow to influence the dependency resolution when working with a UI5 project.

Example

yaml
specVersion: workspace/1.0
-metadata:
-   name: dolphin
-dependencyManagement:
-	resolutions:
-  		- path: ../light.library
-  		- path: ../heavy.library
-  		- path: ../test.library

Resolutions

yaml
dependencyManagement:
-   	resolutions:
-       	- path: ../test.library

Resolution paths will be used by UI5 CLI to look for project dependencies. Any dependencies found via these paths will be used over the ones found with the regular dependency resolution mechanism. This includes UI5 CLI extensions.

Paths must point to a directory containing a package.json. UI5 CLI will attempt to find a UI5 project here. However, if the package.json contains a workspaces, or equivalently, ui5.workspaces configuration (which overrules the first), UI5 CLI will resolve the workspace first and attempt to find UI5 projects in the configured "npm workspaces". This is commonly used in mono-repos. An example can be found in the OpenUI5 repository.

Paths must be written in POSIX (i.e. using only forward slashes / as path segment separators) and must be relative to the workspace configuration file. Absolute paths, or paths relative to the home directory (~), are not allowed. This is to ensure that workspace configuration files are easy to share and to reduce the chance of them exposing sensitive information like user names or large directory hierarchies. Symbolic links are followed.

Note that this configuration only affects the resolution of dependencies which have already been found during the regular dependency resolution process of a project. For example, if a workspace resolution path resolves to a project that would otherwise not be part of the dependency tree of the current root project, it will not be added to the dependency tree. Also, transitive dependencies of resolved projects are not being followed.

Workspace Specification Versions

A workspace configuration must define a Specification Version by setting the specVersion property. UI5 CLI uses this information to detect whether the currently installed version is compatible with a workspace's configuration.

yaml
specVersion: "workspace/1.0"
-[...]

To use new features, a workspace configuration might need to update the specVersion property.

For a given Specification Version "workspace/MAJOR.MINOR"" we will increment:

  1. MAJOR when there are breaking changes that might require additional actions by the project's maintainer
  2. MINOR when adding new features that are fully backward-compatible

All changes are documented below.

Compatibility Matrix

Unless otherwise noted in the table below, UI5 CLI modules are backward-compatible.

VersionUI5 CLI Release
workspace/1.0v3.0.0+

Specification Version workspace/1.0

Initial version.

Specification Version workspace/1.0 configurations are compatible with UI5 CLI v3.0.0 and above.

- - - - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/assets/Benchmarking.md.BzpEKz8R.js b/packages/documentation/docs/.vitepress/dist/assets/Benchmarking.md.BzpEKz8R.js deleted file mode 100644 index 3a0ff7ef09..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/Benchmarking.md.BzpEKz8R.js +++ /dev/null @@ -1,14 +0,0 @@ -import{_ as s,c as a,o as e,ae as t}from"./chunks/framework.CBTkueSR.js";const c=JSON.parse('{"title":"Benchmarking UI5 CLI","description":"","frontmatter":{},"headers":[],"relativePath":"Benchmarking.md","filePath":"Benchmarking.md"}'),n={name:"Benchmarking.md"};function l(h,i,p,r,d,k){return e(),a("div",null,[...i[0]||(i[0]=[t(`

Benchmarking UI5 CLI

For benchmarking UI5 CLI we typically make use of the open source tool hyperfine.

In general we only benchmark calls to the UI5 CLI. However, we might add scripted benchmarks for some components in the future.

The following is a walk-through on how to evaluate the performance impact of an imaginary change in the UI5 Builder project.

Setup

  1. Install hyperfine

  2. Prepare the UI5 CLI projects you want to measure (optional if your development environment already reflects this):

    1. Start in an empty directory

      sh
      mkdir ui5-cli-benchmark && cd ui5-cli-benchmark/
    2. Clone UI5 CLI

      sh
      git clone git@github.com:SAP/ui5-cli.git
    3. Clone UI5 Builder (or your fork)

      sh
      git clone git@github.com:SAP/ui5-builder.git

      Make sure you check out the main branch, since we'll perform the baseline test first

    4. Install npm dependencies in both directories

      sh
      (cd ui5-cli && npm install)
      -(cd ui5-builder && npm install)
    5. Create global npm links for both projects

      sh
      (cd ui5-cli && npm link)
      -(cd ui5-builder && npm link)
    6. Link UI5 Builder into UI5 CLI

      sh
      (cd ui5-cli && npm link @ui5/builder)
    7. Verify your setup

      sh
      ui5 --version

      This should output the version and location of the UI5 CLI you just cloned.

      For example:

      3.0.0 (from /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs)
  3. Prepare your test project (we choose the openui5-sample-app)

    1. Clone the project

      sh
      git clone git@github.com:SAP/openui5-sample-app.git
    2. Navigate into the project

      sh
      cd openui5-sample-app
    3. Install any required npm dependencies

      sh
      npm install

      Note: We won't link UI5 CLI into this project. Instead, we'll call it directly.

    4. Verify that the previously installed UI5 CLI can be called with the following command:

      sh
      UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs --version

      On Windows:

      sh
      set UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs --version

      (Replace the path to ui5.cjs with the one shown in the previous ui5 --version output)

Benchmarking

  1. Depending on how reliable you'd like the measurements to be, consider preparing your system:

    1. Connect your computer to a power supply
    2. Make sure no updates or anti-virus scans are taking place
    3. Close all applications. This includes your IDE, since it might start indexing any new files created during the build, thus impacting I/O
    4. Don't interact with your system wile the benchmarking is running
  2. Perform the baseline measurement

    1. In the project, start your first benchmark

      sh
      hyperfine --warmup 1 \\
      -'UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs build' \\
      ---export-markdown ./baseline.md

      On Windows:

      sh
      hyperfine --warmup 1 \\
      -'set UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs build' \\
      ---export-markdown ./baseline.md
    2. Your baseline benchmark is now stored in baseline.md and should look similar to this:

      CommandMean [s]Min [s]Max [s]Relative
      UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs build1.439 ± 0.0361.4001.5071.00
  3. Prepare your change

    1. Switch to the branch that contains your change
      sh
      (cd ../ui5-builder && git checkout my-change)
    2. If your change requires different npm dependencies, reinstall them
      sh
      (cd ../ui5-builder && npm install)
    3. The link from UI5 CLI is still in place. However, if you have changes in multiple UI5 CLI modules, you might need to npm link those again
  4. Perform the change measurement

    1. In the project, start your second benchmark

      sh
      hyperfine --warmup 1 \\
      -'UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs build' \\
      ---export-markdown ./my_change.md

      On Windows:

      sh
      hyperfine --warmup 1 \\
      -'set UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs build' \\
      ---export-markdown ./my_change.md
    2. Your change's benchmark is now stored in my_change.md

Compile Results

  1. Merge both measurements into one markdown

    1. In this setup, Hyperfine can't correctly calculate the relative difference between results. The respective column always reads "1". Either remove the "Relative" column or calculate the relative difference yourself:

      • Use this formula to calculate the percentage increase based on the Mean result:
        (newMean - baselineMean) / baselineMean * 100
        ^^JavaScript function:^^
        #!js function calcDiff(baseVal, newVal) {return (newVal - baseVal) / baseVal * 100;}

      • Example for a performance improvement:
        Baseline of 10 seconds decreased to 7 seconds:
        (7-10)/10*100 = -30 => -30% change

      • Example for a performance deterioration:
        Baseline of 10 seconds increased to 12 seconds:
        (12-10)/10*100 = 20 => +20% change

    2. Change the unit in the Mean/Min/Max column headers to seconds or milliseconds according to your results.

    3. Change the command column to only contain the relevant ui5 build command, including any parameters. E.g. ui5 build --all

    4. You should end up with a markdown like this:

      md
      ui5-builder Ref | Command | Mean [s] | Min [s] | Max [s] | Relative
      -|:---|:---|---:|---:|---:|---:|
      -| main ([\`1234567\`](https://github.com/SAP/ui5-builder/commit/<sha>)) | \`ui5 build\` | 1.439 ± 0.036 | 1.400 | 1.507 | Baseline |
      -| feature-duck ([\`9101112\`](https://github.com/SAP/ui5-builder/commit/<sha>)) | \`ui5 build\` | 1.584 ± 0.074 | 1.477 | 1.680 | **+10%** |

      Rendering like this:

      ui5-builder RefCommandMean [s]Min [s]Max [s]Relative
      main (1234567)ui5 build1.439 ± 0.0361.4001.507Baseline
      feature-duck (9101112)ui5 build1.584 ± 0.0741.4771.680+10%
  2. You can now share these results on GitHub or wherever you might need them.

Happy benchmarking! 🏎

`,11)])])}const g=s(n,[["render",l]]);export{c as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/Benchmarking.md.BzpEKz8R.lean.js b/packages/documentation/docs/.vitepress/dist/assets/Benchmarking.md.BzpEKz8R.lean.js deleted file mode 100644 index 1e0898f55a..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/Benchmarking.md.BzpEKz8R.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as a,o as e,ae as t}from"./chunks/framework.CBTkueSR.js";const c=JSON.parse('{"title":"Benchmarking UI5 CLI","description":"","frontmatter":{},"headers":[],"relativePath":"Benchmarking.md","filePath":"Benchmarking.md"}'),n={name:"Benchmarking.md"};function l(h,i,p,r,d,k){return e(),a("div",null,[...i[0]||(i[0]=[t("",11)])])}const g=s(n,[["render",l]]);export{c as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/Builder.md.ssqqwD1L.js b/packages/documentation/docs/.vitepress/dist/assets/Builder.md.ssqqwD1L.js deleted file mode 100644 index 4470c8cfee..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/Builder.md.ssqqwD1L.js +++ /dev/null @@ -1,31 +0,0 @@ -import{_ as t,c as s,o as a,ae as i}from"./chunks/framework.CBTkueSR.js";const n="/assets/Task_Minify.C_54hEom.svg",g=JSON.parse('{"title":"UI5 Builder","description":"","frontmatter":{},"headers":[],"relativePath":"Builder.md","filePath":"Builder.md"}'),r={name:"Builder.md"};function l(o,e,d,c,p,h){return a(),s("div",null,[...e[0]||(e[0]=[i('

UI5 Builder

The UI5 Builder module takes care of building your project.

Based on a project's type, the UI5 Builder defines a series of build steps to execute; these are also called "tasks".

For every type there is a set of default tasks. You can disable single tasks using the --exclude-task CLI parameter, and you can include tasks using the --include-task parameter.

API Reference

Tasks

Tasks are specific build steps to be executed during build phase.

They are responsible for collecting resources which can be modified by a processor. A task configures one or more processors and supplies them with the collected resources. After the respective processor processed the resources, the task is able to continue with its workflow.

A project can add custom tasks to the build by using the Custom Tasks Extensibility.

Standard Tasks

All available standard tasks are documented in the API reference. Search for @ui5/builder/tasks/ to filter the API reference for all available tasks. The list below offers the actual order of their execution:

TaskType applicationType libraryType theme-library
escapeNonAsciiCharactersenabledenabled
replaceCopyrightenabledenabledenabled
replaceVersionenabledenabledenabled
replaceBuildtimeenabled
generateJsdocdisabled¹
executeJsdocSdkTransformationdisabled¹
minifyenabledenabled
generateFlexChangesBundleenabledenabled
generateLibraryManifestenabled
enhanceManifestenabledenabled
generateComponentPreloadenableddisabled²
generateLibraryPreloadenabled
generateStandaloneAppBundledisabled³
transformBootstrapHtmldisabled³
generateBundledisabled⁴disabled⁴
buildThemesenabledenabled
generateThemeDesignerResourcesdisabled⁵disabled⁵
generateVersionInfodisabled¹
generateCachebusterInfodisabled
generateApiIndex*disabled¹ *
generateResourcesJsondisableddisableddisabled

Disabled tasks can be activated by certain build modes, the project configuration, or by using the --include-task CLI parameter. See footnotes where given


¹ Enabled in jsdoc build, which disables most of the other tasks
² Enabled for projects defining a component preload configuration
³ Enabled in self-contained build, which disables generateComponentPreload and generateLibraryPreload
⁴ Enabled for projects defining a bundle configuration
⁵ Can be enabled for framework projects via the includeTask option. For other projects, this task is skipped

minify

The minify task compresses all JavaScript resources of a project while preserving the original sources as so-called debug variants. For example when compressing a resource named Module.js, its content will be minified and a new resource Module-dbg.js is created and placed next to it.

The UI5 runtime can be instructed to load those debug variants instead of compressed resources and bundles. This can ease debugging in some cases, since the original sources are then used directly in the browser. For details, refer to the UI5 framework documentation on debugging.

For each resource it compresses, the minify task will also create a source map resource. Browsers can use this to map the content of a compressed JavaScript resource back to the original source file (now contained in the debug variant). All this happens automatically once you open the development tools in the browser and start debugging a project. While the browser still executes the code of the compressed resources, it will also show the debug variants and use the source maps to connect the two. This results in an improved debugging experience, which is almost identical to loading the debug variants directly as described before, only much faster.

Related to this, the bundling tasks will also incorporate the generated source maps to map the content of the bundles to the individual debug variants of the bundled modules.

Input Source Maps

TIP

Support for input source maps has been added in UI5 CLI v3.7.0.

For projects facilitating transpilation (such as TypeScript-based projects), it is commonly desired to debug in the browser using the original sources, e.g. TypeScript files. To make this work, the transpilation process first needs to create source maps and reference them in the generated JavaScript code.

UI5 CLI's minify task will then find this reference and incorporate the source map into the minification process. In the end, the minified JavaScript resources will reference an updated source map, which reflects the transpilation as well as the minification. The browser can use this to map every statement back to the original TypeScript file, making debugging a breeze.

WARNING

If a resource has been modified by another build task before minify is executed, any referenced source map will be ignored. This is to ensure the integrity of the source maps in the build result.

It is possible that the modification of the resource content is not reflected in the associated source map, rendering it corrupted. A corrupt source map can make it impossible to properly analyze and debug a resource in the browser development tools.

Standard tasks which may modify resources without updating the associated source maps currently include replaceVersion, replaceCopyright and replaceBuildtime.

Expand the block below to view a diagram illustrating the minification process and source map handling.

Minification Activity Diagram

minify Task Activity

Generation of Supported Locales

The enhanceManifest task fills the supportedLocales property in the manifest.json of a UI5 library/application automatically with the available locales determined by the existence of the respective .properties translation files. To disable the automatic generation of the supportedLocales, set supportedLocales to any desired value. For further resource bundle configuration options, see Supported Locales and Fallback Chain.

Requirements

This feature only becomes active under the following conditions:

  • The _version property in the manifest.json is set to 1.21.0 or higher
  • The specified resource bundle is located inside the project and within the namespace defined in the manifest.json

Scenario: Application

txt
- webapp/i18n/
-  - i18n.properties
-  - i18n_en.properties
-  - i18n_en_US.properties
-  - i18n_de.properties
-  - i18n_de_DE.properties

In the manifest.json the supportedLocales property will be enhanced as follows:

Source

json
"models": {
-    "i18n": {
-        "type": "sap.ui.model.resource.ResourceModel",
-        "settings": {
-            "bundleName": "my.app.i18n.i18n"
-        }
-    }
-}

Build Result

json
"models": {
-    "i18n": {
-        "type": "sap.ui.model.resource.ResourceModel",
-        "settings": {
-            "bundleName": "my.app.i18n.i18n",
-            "supportedLocales": [
-                "",
-                "de",
-                "de_DE",
-                "en",
-                "en_US"
-            ]
-        }
-    }
-}

Processors

Processors work with provided resources. They contain the actual build step logic to apply specific modifications to supplied resources, or to make use of the resources' content to create new resources out of that.

Processors can be implemented generically. The string replacer is an example for that. Since string replacement is a common build step, it can be useful in different contexts, e.g. code, version, date, and copyright replacement. A concrete replacement operation could be achieved by passing a custom configuration to the processor. This way, multiple tasks can make use of the same processor to achieve their build step.

To get a list of all available processors, please visit the API reference and search for @ui5/builder/processors/.

Legacy Bundle Tooling (lbt)

JavaScript port of the "legacy" Maven/Java based bundle tooling.

JavaScript Files Requiring Top Level Scope

UI5 CLI packages JavaScript files that require "top level scope" as a string, provided your project uses a Specification Version lower than 4.0. In this case, the code is evaluated using eval at runtime.

This ensures that the script works as expected, e.g. with regards to implicitly used globals. However, this eval runtime feature will be discontinued with UI5 2.x because of security best practices and to comply with stricter CSP settings (i.e. unsafe-eval).

If your project defines Specification Version 4.0 or higher, files requiring top level scope are no longer part of the created bundle and following error is logged by UI5 CLI:

Module myFancyModule requires top level scope and can only be embedded as a string (requires 'eval'), which is not supported with specVersion 4.0 and higher.

If you see this error message, please adjust your code by applying one of the following options:

Option 1: Use ui5-tooling-modules to bundle third-party npm packages. It converts files to sap.ui.define modules automatically.

Option 2: Wrap the respective files manually in sap.ui.define modules as shown below:

Example

Before:

js
const myFancyModule = {};

After:

js
sap.ui.define([], () => {
-   "use strict";
-   const myFancyModule = {};
-   return myFancyModule;
-});
`,54)])])}const k=t(r,[["render",l]]);export{g as __pageData,k as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/Builder.md.ssqqwD1L.lean.js b/packages/documentation/docs/.vitepress/dist/assets/Builder.md.ssqqwD1L.lean.js deleted file mode 100644 index 330d6b2a30..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/Builder.md.ssqqwD1L.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as t,c as s,o as a,ae as i}from"./chunks/framework.CBTkueSR.js";const n="/assets/Task_Minify.C_54hEom.svg",g=JSON.parse('{"title":"UI5 Builder","description":"","frontmatter":{},"headers":[],"relativePath":"Builder.md","filePath":"Builder.md"}'),r={name:"Builder.md"};function l(o,e,d,c,p,h){return a(),s("div",null,[...e[0]||(e[0]=[i("",54)])])}const k=t(r,[["render",l]]);export{g as __pageData,k as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/CLI.md.D5X2ohRt.js b/packages/documentation/docs/.vitepress/dist/assets/CLI.md.D5X2ohRt.js deleted file mode 100644 index eb651858f5..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/CLI.md.D5X2ohRt.js +++ /dev/null @@ -1,4 +0,0 @@ -import{_ as t,c as a,o as s,ae as i}from"./chunks/framework.CBTkueSR.js";const h=JSON.parse('{"title":"UI5 CLI","description":"","frontmatter":{},"headers":[],"relativePath":"CLI.md","filePath":"CLI.md"}'),o={name:"CLI.md"};function n(d,e,r,l,p,c){return s(),a("div",null,[...e[0]||(e[0]=[i(`

UI5 CLI

Requirements

  • Node.js version v20.11.0 and higher or v22.0.0 and higher (v21 is not supported)
  • npm version v8.0.0 or higher

Installation

Install the CLI using the npm package manager:

sh
npm install --global @ui5/cli
-
-# Verify installation
-ui5 --help

Usage/Syntax

ui5 <command> [options]

The CLI automatically checks for updates using update-notifier. While this is skipped in CI environments, you might also opt-out manually by following the steps described here.

Common options

These options you can use with each command.

OptionDescriptionDetails
-h, --helpShow help[boolean]
-v, --versionShow version number[boolean]
-c, --configPath to project configuration file in YAML format[string]
--dependency-definitionPath to a YAML file containing the project's dependency tree. This option will disable resolution of node package dependencies.[string]
--workspace-configPath to workspace configuration file in YAML format[string]
-w, --workspaceName of the workspace configuration to use[string] [default: "default"]
--loglevel, --log-levelSet the logging level[string] [choices: "silent", "error", "warn", "info", "perf", "verbose", "silly"] [default: "info"]
--verboseEnable verbose logging.[boolean] [default: false]
--perfEnable performance measurements and related logging.[boolean] [default: false]
--silentDisable all log output.[boolean] [default: false]

Examples

Execute command using a static dependency tree instead of resolving node package dependencies

ui5 <command> --dependency-definition /path/to/projectDependencies.yaml

Execute command using a project configuration from custom path

ui5 <command> --config /path/to/ui5.yaml

Execute command using the 'dolphin' workspace of a ui5-workspace.yaml

ui5 <command> --workspace dolphin

Execute command with the maximum log output

ui5 <command> --log-level silly

Commands

ui5 add

Description

Add SAPUI5/OpenUI5 framework libraries to the project configuration.

Usage

ui5 add [--development] [--optional] <framework-libraries..>

Options

OptionDescriptionDetails
-D, --development, --devAdd as development dependency[boolean] [default: false]
-O, --optionalAdd as optional dependency[boolean] [default: false]

Positionals

PositionalDescriptionDetails
framework-librariesFramework library names[array] [required] [default: []]

Examples

Add the framework libraries sap.ui.core and sap.m as dependencies

ui5 add sap.ui.core sap.m

Add the framework library sap.ui.support as development dependency

ui5 add -D sap.ui.support

Add the framework library themelib_sap_fiori_3 as optional dependency

ui5 add --optional themelib_sap_fiori_3

ui5 build

Description

Build project in current directory

Usage

ui5 build

Child Commands

CommandDescription
ui5 build jsdocBuild JSDoc resources
ui5 build preload(default) Build project and create preload bundles
ui5 build self-containedBuild project and create self-contained bundle. Recommended to be used in conjunction with --include-all-dependencies

Options

OptionDescriptionDetails
-a, --include-all-dependencies, --allInclude all dependencies in the build result. This is equivalent to '--include-dependency "*"'[boolean] [default: false]
--include-dependencyA list of dependencies to be included in the build result. You can use the asterisk '*' as an alias for including all dependencies in the build result. The listed dependencies cannot be overruled by dependencies defined in 'exclude-dependency'. The provided name must match with the dependency name shown in 'ui5 ls --flat'[array]
--include-dependency-regexpA list of regular expressions defining dependencies to be included in the build result. This list is prioritized like 'include-dependency'.[array]
--include-dependency-treeA list of dependencies to be included in the build result. Transitive dependencies are implicitly included and do not need to be part of this list. These dependencies overrule the selection of 'exclude-dependency-tree' but can be overruled by 'exclude-dependency'.[array]
--exclude-dependencyA list of dependencies to be excluded from the build result. The listed dependencies can be overruled by dependencies defined in 'include-dependency'. The provided name must match with the dependency name shown in 'ui5 ls --flat'[array]
--exclude-dependency-regexpA list of regular expressions defining dependencies to be excluded from the build result. This list is prioritized like 'exclude-dependency'.[array]
--exclude-dependency-treeA list of dependencies to be excluded from the build result. Transitive dependencies are implicitly included and do not need to be part of this list.[array]
--destPath of build destination[string] [default: "./dist"]
--clean-destIf present, clean the destination directory before building[boolean] [default: false]
--create-build-manifestStore build metadata in a '.ui5' directory in the build destination, allowing reuse of the build result in other builds[boolean] [default: false]
--include-taskA list of tasks to be added to the default execution set. This option takes precedence over any excludes.[array]
--exclude-taskA list of tasks to be excluded from the default task execution set[array]
--framework-versionOverrides the framework version defined by the project. Takes the same value as the version part of "ui5 use"[string]
--cache-modeCache mode to use when consuming SNAPSHOT versions of framework dependencies. The 'Default' behavior is to invalidate the cache after 9 hours. 'Force' uses the cache only and does not create any requests. 'Off' invalidates any existing cache and updates from the repository[string] [choices: "Default", "Force", "Off"] [default: "Default"]
--experimental-css-variablesGenerate CSS variables (css-variables.css, css-variables.source.less) and skeleton (library-skeleton(-RTL).css) for all themes[boolean] [default: false]
--output-styleProcesses build results into a specific directory structure.
- Flat: Omits the project namespace and the "resources" directory.
- Namespace: Respects the project namespace and the "resources" directory, maintaining the original structure.
- Default: The default directory structure for every project type. For applications, this is identical to "Flat", and for libraries, it is "Namespace". Other types have a more distinct default output style.
[string] [choices: "Default", "Flat", "Namespace"] [default: "Default"]

Examples

Preload build for project without dependencies

ui5 build

Self-contained build for project

ui5 build self-contained

Build project but only apply the minify- and generateComponentPreload tasks

ui5 build --exclude-task=* --include-task=minify generateComponentPreload

Build project by applying all default tasks including the minify task and excluding the generateComponentPreload task

ui5 build --include-task=minify --exclude-task=generateComponentPreload

Preload build with experimental CSS variables artifacts

ui5 build --experimental-css-variables

ui5 config

Description

Get and set UI5 CLI configuration options

Usage

ui5 config

Child Commands

CommandDescription
ui5 config set <opt​ion> [value]Set the value for a given configuration option. Clear an existing configuration by omitting the value
ui5 config get <opt​ion>Get the value for a given configuration option
ui5 config listDisplay the current configuration

Examples

Set a value for the ui5DataDir configuration

ui5 config set ui5DataDir /path/to/.ui5

Unset the current value of the ui5DataDir configuration

ui5 config set ui5DataDir

ui5 init

Description

Initialize the UI5 CLI configuration for an application or library project.

Usage

ui5 init

ui5 remove

Description

Remove SAPUI5/OpenUI5 framework libraries from the project configuration.

Usage

ui5 remove <framework-libraries..>

Positionals

PositionalDescriptionDetails
framework-librariesFramework library names[array] [required] [default: []]

Examples

Remove the framework libraries sap.ui.core and sap.m as dependencies

ui5 remove sap.ui.core sap.m

ui5 serve

Description

Start a web server for the current project

Usage

ui5 serve

Options

OptionDescriptionDetails
-p, --portPort to bind on (default for HTTP: 8080, HTTP/2: 8443)[number]
-o, --openOpen web server root directory in default browser. Optionally, supplied relative path will be appended to the root URL[string]
--h2Shortcut for enabling the HTTP/2 protocol for the web server[boolean] [default: false]
--simple-indexUse a simplified view for the server directory listing[boolean] [default: false]
--accept-remote-connectionsAccept remote connections. By default the server only accepts connections from localhost[boolean] [default: false]
--keyPath to the private key[string] [default: "~/.ui5/server/server.key"]
--certPath to the certificate[string] [default: "~/.ui5/server/server.crt"]
--sap-csp-policiesAlways send content security policies 'sap-target-level-1' and 'sap-target-level-3' in report-only mode[boolean] [default: false]
--serve-csp-reportsCollects and serves CSP reports upon request to '/.ui5/csp/csp-reports.json'[boolean] [default: false]
--framework-versionOverrides the framework version defined by the project. Takes the same value as the version part of "ui5 use"[string]
--cache-modeCache mode to use when consuming SNAPSHOT versions of framework dependencies. The 'Default' behavior is to invalidate the cache after 9 hours. 'Force' uses the cache only and does not create any requests. 'Off' invalidates any existing cache and updates from the repository[string] [choices: "Default", "Force", "Off"] [default: "Default"]

Examples

Start a web server for the current project

ui5 serve

Enable the HTTP/2 protocol for the web server (requires SSL certificate)

ui5 serve --h2

Use the project configuration from a custom path

ui5 serve --config /path/to/ui5.yaml

Use a static dependency definition file

ui5 serve --dependency-definition /path/to/projectDependencies.yaml

Listen to port 1337 and launch default browser with http://localhost:1337/test/QUnit.html

ui5 serve --port 1337 --open tests/QUnit.html

ui5 tree

Description

Outputs the dependency tree of the current project to stdout. It takes all relevant parameters of ui5 build into account.

Usage

ui5 tree

Options

OptionDescriptionDetails
--flatOutput a flat list of all dependencies instead of a tree hierarchy[boolean] [default: false]
--levelLimit the number of levels shown in the tree hierarchy[number]
--framework-versionOverrides the framework version defined by the project. Takes the same value as the version part of "ui5 use"[string]
--cache-modeCache mode to use when consuming SNAPSHOT versions of framework dependencies. The 'Default' behavior is to invalidate the cache after 9 hours. 'Force' uses the cache only and does not create any requests. 'Off' invalidates any existing cache and updates from the repository[string] [choices: "Default", "Force", "Off"] [default: "Default"]

ui5 use

Description

Initialize or update the project's framework configuration.

Usage

ui5 use <framework-info>

Positionals

PositionalDescriptionDetails
framework-infoFramework name, version or both (name@version).
Name can be "SAPUI5" or "OpenUI5" (case-insensitive).
Version can be "latest" (default), a version or range according to the Semantic Versioning specification (https://semver.org/), or a tag available in the npm registry.
For SAP-internal usage the version can also be "latest-snapshot", a version or range ending with -SNAPSHOT, or a simplified range such as "1-SNAPSHOT", "1.x-SNAPSHOT" or "1.108-SNAPSHOT".
[string] [required]

Examples

Use SAPUI5 in the latest available version

ui5 use sapui5@latest

Use OpenUI5 in the latest available 1.76 patch version

ui5 use openui5@1.76

Use the latest available version of the configured framework

ui5 use latest

Use OpenUI5 in the latest available version

ui5 use openui5

ui5 versions

Description

Shows the versions of all UI5 CLI modules

Usage

ui5 versions

Local vs. Global Installation

In general, we recommend a global installation of the UI5 CLI (npm install --global @ui5/cli).

However, it makes sense to add the UI5 CLI as a devDependency (npm install --save-dev @ui5/cli) to a project's package.json. This ensures that every developer working on the project uses the same version of the UI5 CLI and your continuous integration environments also uses this version.

In case you have both, a local installation in one of your projects as well as a global installation, the UI5 CLI will always try to invoke the local installation. This is in part because npm scripts defined in your package.json will also always invoke the local installation.

This behavior can be disabled by setting the environment variable UI5_CLI_NO_LOCAL.

Example
You have a project located in the directory /my-application.

You have installed the UI5 CLI globally. In addition, the project's package.json defines a devDependency to @ui5/cli and a start script "ui5 serve". This means there are at least two installations of @ui5/cli on your system. Their versions might not match.

This table illustrates which of the two installations is used in different scenarios. Note how the UI5 CLI always tries to prefer the version installed in the project.

Current Working DirectoryCommandGlobal UI5 CLILocal UI5 CLI
/ui5 --versionenabled
/my-applicationui5 --versionenabled
/my-applicationui5 serveenabled
/my-applicationUI5_CLI_NO_LOCAL=X ui5 serveenabled
/my-applicationnpm startenabled
/my-applicationUI5_CLI_NO_LOCAL=X npm startenabled
`,140)])])}const g=t(o,[["render",n]]);export{h as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/CLI.md.D5X2ohRt.lean.js b/packages/documentation/docs/.vitepress/dist/assets/CLI.md.D5X2ohRt.lean.js deleted file mode 100644 index 7fdb4c8e21..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/CLI.md.D5X2ohRt.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as t,c as a,o as s,ae as i}from"./chunks/framework.CBTkueSR.js";const h=JSON.parse('{"title":"UI5 CLI","description":"","frontmatter":{},"headers":[],"relativePath":"CLI.md","filePath":"CLI.md"}'),o={name:"CLI.md"};function n(d,e,r,l,p,c){return s(),a("div",null,[...e[0]||(e[0]=[i("",140)])])}const g=t(o,[["render",n]]);export{h as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/CodeAnalysis.md.lj6v3W4Y.js b/packages/documentation/docs/.vitepress/dist/assets/CodeAnalysis.md.lj6v3W4Y.js deleted file mode 100644 index 69ed10b7fe..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/CodeAnalysis.md.lj6v3W4Y.js +++ /dev/null @@ -1,11 +0,0 @@ -import{_ as i,c as a,o as t,ae as n}from"./chunks/framework.CBTkueSR.js";const u=JSON.parse('{"title":"Code Analysis","description":"","frontmatter":{},"headers":[],"relativePath":"CodeAnalysis.md","filePath":"CodeAnalysis.md"}'),o={name:"CodeAnalysis.md"};function s(l,e,r,d,c,p){return t(),a("div",null,[...e[0]||(e[0]=[n(`

Code Analysis

During the build process, UI5 CLI executes a static code analysis of your project. In the following sections the term "simple literal" is used for the following language features:

  • string literals
  • numeric literals
  • Boolean literals
  • null / undefined
  • template literals without any expressions
  • arrays of the previous (spread operators are ignored)
  • object literals with "simple literals" used as keys and values (again, spread operators are ignored)

Dependency Analysis

UI5 CLI extracts dependency information from a project's code as outlined in the following sections. The APIs described there require the usage of "simple literals" when declaring dependencies.

JSModule Analyzer

The following APIs are analyzed by the JSModule Analyzer:

  • sap.ui.define
  • sap.ui.require
  • jQuery.sap.declare (deprecated)
  • jQuery.sap.require (deprecated)
  • sap.ui.requireSync (deprecated)
  • sap.ui.preload (restricted)
  • sap.ui.require.preload (restricted)

The JSModule Analyzer uses the "Abstract Syntax Tree" (AST) of a JavaScript file to decide whether a code block is executed conditionally or unconditionally.

The analyzer uses a set of rules to decide whether one of the above APIs is called whenever the module is executed or whether the API is only called under certain conditions.

For example, top-level code is always executed. Flow-control statements in JavaScript imply that certain blocks of code are only executed under certain conditions (for example, if blocks, else blocks, ...). Besides these inherent JavaScript rules, further common patterns are known to the analyzer, e.g. immediately invoked function expressions or the factory function of AMD modules.

Any dependencies found that - according to these rules - are always executed, are collected as eager (or standard) dependencies. Dependencies that are found on a code path that depends on certain conditions are collected as conditional dependencies.

The bundling implemented by UI5 CLI can either follow only eager dependencies (resolve: true) or additionally conditional dependencies (resolveConditional). For more information, see Custom Bundling.

When a dependency in one of the mentioned APIs is not a "simple literal" but an expression, the corresponding module is marked as "having dynamic dependencies". This marker is currently not further evaluated by UI5 CLI.

Component Analyzer

The Component Analyzer analyzes JavaScript files named Component.js to collect dependency information by searching for a manifest.json located in the same folder as the Component.js. If one is found, the sap.ui5 section is evaluated in the following way:

  • Any library dependency is added as a dependency to the library.js module of that library. If the library dependency is modeled as 'lazy', the module dependency will be added as 'conditional'.
  • Any component dependency is added as a dependency to a file named Component.js. If the dependency is modeled as 'lazy', the module dependency will be added as 'conditional'.
  • For each UI5 model for which a type is configured, a module dependency to that type is added.
  • For each route that contains a view name, a module dependency to that view is added.

Smart Template Analyzer

The Smart Template Analyzer analyzes a Smart Template app and its underlying template components to collect dependency information. It searches for a manifest.json located in the same folder as the Component.js. If it is found and if it is valid JSON, an sap.ui.generic.app section is searched and evaluated in the following way:

  • For each page configuration, the configured component is added as a dependency to the template app module.
  • If the page configuration contains a templateName, a dependency to that template view is added to the app.
  • Otherwise, the class definition of the component is analyzed to find a default template view name. If found, a dependency to that view is added to the app module.

The template component is analyzed in the following way:

  • precondition: the template component class is defined in an AMD-style module, using define or sap.ui.define
  • precondition: the module sap/suite/ui/generic/template/lib/TemplateAssembler is imported
  • precondition: a call to TemplateAssembler.getTemplateComponent is used to define the component class
  • precondition: that call is used in a top-level return statement of the factory function
  • precondition: necessary parameters to that call are given as an object literal (no further coding)
  • precondition: the settings define a managed property metadata.properties.templateName with a defaultValue of type string The default value of the property represents the template view of the template component. The manifest of the template app could in theory specify an alternative template in component.settings.templateName.

XML Template Analyzer

The XML Template Analyzer tackles XMLView and XMLFragment. It parses the XML, collects controls, and adds them as dependency to the ModuleInfo object. Additionally, some special dependencies are handled:

  • controller of the view
  • resource bundle (note: as locale-dependent dependencies can't be modelled yet in the ModuleInfo, only a dependency to the development version (aka raw language) of the bundle will be added)
  • component referenced via the ComponentContainer control
  • embedded fragments or views

In an XMLView/XMLFragment, usually three categories of element nodes exist: Controls, aggregations, and non-UI5 nodes (e.g. XHTML or SVG). The third category usually can be identified by its namespace. To distinguish between the first two categories, the analyzer checks whether a resource exists in the project or its dependencies whose name matches the qualified node name. For example, if the qualified node name is sap.m.Text, the analyzer checks whether sap/m/Text.js exists. If so, UI5 CLI detects this node as a control, otherwise as an aggregation.

XML Composite Analyzer

The XMLComposite control is deprecated since version UI5 1.88. Nevertheless, UI5 CLI will attempt to analyze the declaration of any such controls in a project.

The XML Composite Analyzer searches for the name of the configured fragment containing the XMLComposite control.

javascript
sap.ui.define([
-    "sap/ui/core/XMLComposite"
-], function(XMLComposite) {
-    return XMLComposite.extend("composites.MyComposite", {} 
-});
javascript
sap.ui.define([
-    "sap/ui/core/XMLComposite"
-], function(XMLComposite) {
-    return XMLComposite.extend("composites.MyComposite", {
-        fragment: "composites.custom.MyComposite"
-    } 
-});

Library Initialization

The library.js Analyzer checks every library.js file in the namespace of a library for occurences of a sap/ui/core/Core#initLibrary call. If found, the following information will be placed in the generated manifest.json:

  • noLibraryCSS: false when the noLibraryCSS property had been set in the initLibrary info object
  • types: string array with the names of the types contained in the library
  • controls: string array with the names of the controls defined in the library
  • elements: string array with the names of the elements defined in the library
  • interfaces: string array with the names of the interfaces defined in the library

sap/ui/core/Core#initLibrary requires the usage of "simple literals" for the parameters passed to this function call.

Note: Currently only the usage via the global sap.ui.getCore().initLibrary is supported by this analyzer. Requiring sap/ui/core/Core and then calling Core.initLibrary is not recognized by this analyzer.

JSDoc

The UI5 CLI offers a JSDoc build, which is enhanced by UI5-specific JSDoc features.

An UI5 SDK can be built locally. To get more insight into the local UI5 SDK build setup, have a look at our Developer's Guide.

Currently, the resources needed for a UI5 SDK build are stored in openui5 and in ui5-builder. This double maintenance is needed because these files are not part of the sap.ui.core library artefact, so building JSDoc for any library has no access to the needed resources. It's therefore necessary to have these resources also available in the ui5-builder. This might change in the future.

The following artefacts contribute to the JSDoc build:

  • jsdocGenerator.js: Executes the actual JSDoc build. UI5 CLI wrapper for plugin.cjs.

  • sdkTransformer.js: UI5 CLI wrapper for transformApiJson.cjs.

  • apiIndexGenerator.js: UI5 CLI wrapper for createIndexFiles.cjs.

  • createIndexFiles.cjs: Creates API index resources from all api.json resources and by interpreting the sap-ui-version.json available in the given test resources directory. The resulting index resources (e.g. api-index.json, api-index-deprecated.json, api-index-experimental.json and api-index-since.json) are only to be used in a UI5 SDK.

  • transformApiJson.cjs: Preprocesses api.json files for use in UI5 SDKs. Transforms the api.json as created by the JSDoc build into a pre-processed api.json file suitable for the SDK. The pre-processing includes formatting of type references, rewriting of links, and other time-consuming calculations.

  • plugin.cjs: UI5 plugin for JSDoc3. The plugin adds the following UI5-specific tag definitions to JSDoc3:

    • disclaimer
    • experimental
    • final
    • interface
    • implements
    • ui5-restricted, and more

    It furthermore listens to the following JSDoc3 events to implement additional functionality:

    • parseBegin: to create short names for all files that are to be parsed
    • fileBegin: to write to the log (a kind of progress indicator)
    • jsdocCommentFound: to pre-process comments, empty lines are used as paragraph markers, a default visibility is added, and legacy tag combinations used in JSDoc2 are converted to JSDoc3 conventions
    • newDoclet
    • parseComplete: remove undocumented/ignored/private doclets or duplicate doclets

    Last but not least, it implements an astNodeVisitor to detect UI5-specific "extend" calls and to create documentation for the properties, aggregations, etc. that are created with the "extend" call.

  • publish.cjs: JSDoc3 template for UI5 documentation generation.

    • adds missing namespaces
    • determines the export names of exported APIs
    • writes out the api.json from the collected JSDoc information
    • calculates the inheritance hierarchy
    • checks for cyclic dependencies
    • removes unnecessary whitespace from an HTML document
  • versionUtil.cjs: Provides helper methods to determine version-related information.

`,41)])])}const m=i(o,[["render",s]]);export{u as __pageData,m as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/CodeAnalysis.md.lj6v3W4Y.lean.js b/packages/documentation/docs/.vitepress/dist/assets/CodeAnalysis.md.lj6v3W4Y.lean.js deleted file mode 100644 index eb2edc3f59..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/CodeAnalysis.md.lj6v3W4Y.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as t,ae as n}from"./chunks/framework.CBTkueSR.js";const u=JSON.parse('{"title":"Code Analysis","description":"","frontmatter":{},"headers":[],"relativePath":"CodeAnalysis.md","filePath":"CodeAnalysis.md"}'),o={name:"CodeAnalysis.md"};function s(l,e,r,d,c,p){return t(),a("div",null,[...e[0]||(e[0]=[n("",41)])])}const m=i(o,[["render",s]]);export{u as __pageData,m as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/Configuration.md.DJDUtYxO.js b/packages/documentation/docs/.vitepress/dist/assets/Configuration.md.DJDUtYxO.js deleted file mode 100644 index 09adbe210e..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/Configuration.md.DJDUtYxO.js +++ /dev/null @@ -1,196 +0,0 @@ -import{_ as i,c as a,o as e,ae as t}from"./chunks/framework.CBTkueSR.js";const k=JSON.parse('{"title":"Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"Configuration.md","filePath":"Configuration.md"}'),n={name:"Configuration.md"};function l(p,s,o,r,h,d){return e(),a("div",null,[...s[0]||(s[0]=[t(`

Configuration

A projects UI5 CLI configuration is typically located in a YAML file named ui5.yaml, located in the root directory.

INFO

This document describes the configuration of UI5 CLI-based projects and extensions. It represents Specification Version 3.0.

Validation / IDE support

Starting with Specification Version 2.0 the configuration is validated according to a JSON schema.
The current version of the schema can be found here: https://ui5.github.io/cli/schema/ui5.yaml.json

The schema is also part of the JSON Schema Store Catalog which is used by the YAML Language Server. See the list of clients to find extensions for various IDEs and editors.

Example

yaml
specVersion: "4.0"
-type: application|library|theme-library|module
-metadata:
-  name: some.project.name

General Configuration

Specification Version and -Type

A project must define a specification version (specVersion), to which its configuration is compatible to. Also see Specification Versions.

In addition, a project must define a type. This can be either application, library, theme-library (since Specification Version 1.1), or module.

The type defines the default path mappings and build tasks. See UI5 Builder: Types for details.

Example

yaml
specVersion: "4.0"
-type: application
yaml
specVersion: "4.0"
-type: library
yaml
specVersion: "4.0"
-type: theme-library
yaml
specVersion: "4.0"
-type: module

Kind

The configuration may also contain a kind property. This is used to differentiate between projects and extensions.

This configuration defaults to kind: project, which means you typically only need to specify it for extensions like Custom Tasks.

Metadata

Example

yaml
metadata:
- name: my.company.project
- copyright: |-
-  My Project
-   * (c) Copyright 2009-\${currentYear} My Company
-   * Licensed under the XYZ License, Version n - see LICENSE.txt.

name

A project must have a name.

In UI5 CLI, a project is typically identified by the configured name. It must be unique and should ideally follow a namespace scheme like organization.product.project for UI5 projects or ui5-task-heavy-boulder for extension-projects.

The name property of projects defining Specification Version 3.0 and higher must satisfy the following conditions:

  • Must be at least 3 characters long
  • Must be no longer than 80 characters
  • Must contain lowercase characters only
  • Must contain alphanumeric characters, dash, underscore and period only
    • Exception: The @ and / characters are allowed at certain positions as explained below
  • Must start with an alphabetic character or an @ character
  • If it starts with an @ character, it must contain exactly one forward slash /
    • This is aligned with the npm concept for package scopes, for example @org/lib.name

A given copyright string will be used to fill placeholders like \${copyright} and @copyright@ in a project's source code. |- is a way to define a multi line string in YAML. Check the YAML Specification for details.
Inside the copyright string, you can use the placeholder \${currentYear} which will be replaced with the current year.

deprecated

In case your project is deprecated you may also define a property deprecated: true. In projects that have a direct dependency to your project, UI5 CLI will then display a deprecation warning.

Resources

Path Mapping

Depending on the project type, UI5 CLI expects your projects source files to be located in certain directories.

If your project's sources are located in different directories, you need to configure the path mapping accordingly. Depending on the type of project, there are several different path mappings available.

Note that all configured paths must be written in POSIX (i.e. using only forward slashes / as path segment separators) and relative to the project's root directory.

Available Path Mappings

Applications

  • webapp: Mapped to runtime path / (root)
yaml

-resources:
-  configuration:
-    paths:
-      webapp: webapp

Libraries

  • src: Mapped to runtime path /resources
  • test: Mapped to runtime path /test-resources
yaml
resources:
-  configuration:
-    paths:
-      src: src
-      test: test

Modules

Modules can map any virtual paths to any physical path within the project. However, it is recommended that modules include their namespace in thevirtual path and use the /resources prefix (e.g. /resources/my/librarymodule-xy/) to avoid name clashes with other projects.

yaml
resources:
-  configuration:
-    paths:
-      /resources/my/library/module-xy/: lib
-      /resources/my/library/module-xy-min/: dist

Example

For an application project with the following directory structure, youneed the path mapping configuration given below: Directory Structure:

yaml
my-app/
-\\_ ui5.yaml
-\\_ lib/ // [!code focus]
- \\_ js/ // [!code focus]
-   \\_ app/ // [!code focus]

Path Mapping Configuration:

yaml
resources:
- configuration:
-   paths:
-     webapp: lib/js/app // [!code focus]

Encoding of *.properties files

Info

This configuration is available since UI5 CLI v1.7.0

By default UI5 CLI expects different encodings for *.properties i18n files, depending on the project's specification version:

Specification VersionDefault propertiesFileSourceEncoding
2.0+UTF-8
0.1, 1.0 or 1.1ISO-8859-1

If your project uses a different encoding for *.properties files, you need to set the propertiesFileSourceEncoding configuration property.

UI5 CLI will read the corresponding files of the project in the given encoding. Any non-ASCII characters will be replaced with the respective Unicode escape sequences. This allows you to deploy the resulting files to any environment, independent of how it expects *.properties files to be encoded. Please refer to RFC 7 for details.

Custom Configuration

Info

This configuration is available since UI5 CLI v2.2.0 and applies only to projects defining Specification Version 2.1 or higher.

Custom configuration that is ignored by UI5 CLI.
This can be used to store UI5 specific configuration for third-party tools.

The "customConfiguration" value must be an object.
For third-party tools it is recommended to follow a namespace-like structure.

Framework Configuration

Info

This configuration is available since UI5 CLI v2.0.0 and applies only to projects defining [Specification Version(#specification-versions) 2.0 or higher.

Define your project's framework dependencies.

Framework and Version

In your project's framework configuration you must define whether you want to use the OpenUI5 or the SAPUI5 framework and which version:

yaml
framework:
-  name: OpenUI5
-  version: 1.82.0
yaml
framework:
-  name: SAPUI5
-  version: 1.82.0

If you are not sure which framework is right for you, see our documentation on the differences between OpenUI5 and SAPUI5.

You can find an overview of the available versions for each framework here:

Info

Projects that use the OpenUI5 framework cannot depend on projects thatuse the SAPUI5 framework.

Dependencies

Example

yaml
specVersion: "4.0"
-type: application
-metadata:
-  name: my.company.app
-framework:
-  name: OpenUI5
-  version: 1.82.0
-  libraries:
-    - name: sap.ui.core
-    - name: sap.m
-    - name: sap.ui.table
-    - name: themelib_sap_fiori_3
yaml
specVersion: "4.0"
-type: library
-metadata:
-  name: my.company.library
-framework:
-  name: SAPUI5
-  version: 1.82.0
-  libraries:
-    - name: sap.ui.core
-    - name: sap.m
-    - name: themelib_sap_belize
-      optional: true
-    - name: themelib_sap_bluecrystal
-      optional: true
-    - name: themelib_sap_fiori_3
-      optional: true

When building an application depending on this library as well as one of the theme libraries, only that theme is built for this library.

Runtime Dependencies

All libraries required by your project must be listed in the libraries section of the framework configuration:

yaml
framework:
-  name: OpenUI5
-  version: 1.82.0
-  libraries:
-    - name: sap.ui.core
-    - name: sap.m
-    - name: sap.ui.table
yaml
framework:
-  name: SAPUI5
-  version: 1.82.0
-  libraries:
-    - name: sap.ui.core
-    - name: sap.m
-    - name: sap.ui.comp

Development Dependencies

Development dependencies are only installed if the project defining them is the current root project. They are typically only required during the development of the project.

yaml
  libraries:
-    - name: sap.ushell
-      development: true

Note that a development dependency cannot be optional and vice versa.

Optional Dependencies

Optional dependencies are installed either if the project defining them is the current root project or if the dependency is already part of the current dependency tree. A typical use case is libraries defining optional dependencies to all theme libraries they support. You can choose which theme library to use by the application that is consuming the library by declaring it as a non-optional dependency.

yaml
  libraries:
-    - name: themelib_sap_fiori_3
-      optional: true

Build Configuration

Exclude Resources

Example

For projects of type module, this configuration is available since UI5CLI v3.5.0 and applies only to projects defining Specification Version 3.1 or higher.

yaml
builder:
- resources:
-   excludes:
-     # You can specify paths relative to the configured "webapp" directory
-     - "index.html"
-     # When defining absolute paths, make sure to specify the namespace plus the "/resources/" prefix
-     - "/resources/my/project/namespace/test/**"
yaml
builder:
- resources:
-   excludes:
-     # For libraries, all paths must be absolute, except for wildcards
-     - "/resources/some/project/name/test_results/**"
-     - "/test-resources/**"
-     - "!/test-resources/some/project/name/demo-app/**"
-     - "**/*.svg"
yaml
builder:
- resources:
-   excludes:
-     # For modules, all paths must be absolute, except for wildcards
-     - "/resources/my/library/module-xy/min/**"
-     - "!/resources/my/library/module-xy/min/module-xy-bundle.js"
-     - "**/*.svg"

You can exclude a projects resources from the build process using a list of glob patterns. Matching resources will be ignored by the builder and all build tasks.

Patterns are applied to the virtual resource paths (i.e. the UI5 runtime paths). Exclude patterns are always applied after any includes.

Cachebuster

Example

yaml
builder:
- cachebuster:
-   signatureType: time
yaml
builder:
- cachebuster:
-   signatureType: hash

By default, the generated cachebuster info file signatures are based on timestamps (time). In setups like CI environments, a mechanism based on file hashes (hash) might be more reliable. Also see PR #241 for more details.

Component Preload Generation

For projects of type application a Component-preload.js bundle is generated by default. This bundle will contain most UI5 runtime-relevant resources of the component.
You can override this default behavior by defining a componentPreload configuration.

For projects of type library, no Component Preload is created by default.
However you can define a componentPreload configuration to create Component Preload bundles. Those will be created in addition to the library-preload.js bundle.

There are two ways to define the set of components for which preload bundles should be generated. You can either provide paths (allowing patterns) or namespaces. You can also combine both configuration options. Defining any of them overrides the default preload bundle generation for the root component of application projects.

paths

Example

yaml
builder:
- componentPreload:
-   paths:
-       - "my/awesome/app/**/Component.js"

The paths option takes one or multiple patterns. For every matched file a separate Component-preload.js will be generated. Patterns are always applied relative to the project's virtual source directory /resources/.

namespaces

Example

yaml
builder:
- componentPreload:
-   namespaces:
-     - "my/awesome/app"
-     - "my/awesome/app/componentOne"
-     - "my/awesome/app/componentTwo"

The namespaces option takes one or multiple component namespaces, which correspond to the directory structures.

excludes

Info

This configuration is available since UI5 CLI v2.10.0 and applies only to projects defining [Specification Version(#specification-versions) 2.3 or higher.

Example

yaml
builder:
- componentPreload:
-   excludes:
-     - "my/awesome/app/localService/**"
yaml
builder:
- componentPreload:
-   namespaces:
-     - "my/awesome/app"
-     - "my/awesome/app/componentOne"
-     - "my/awesome/app/componentTwo"
-   excludes:
-     - "my/awesome/app/**/thirdparty/"
-     - "!my/awesome/app/componentTwo/thirdparty/NotExcluded.js"

List of modules declared as glob patterns (resource name patterns) that are excluded from the component preload bundles. Similarly to the use of a single * or double ** asterisk, a pattern ending with a slash / denotes an arbitrary number of characters or folder names. Re-includes have to be marked with a leading exclamation mark !. The order of filters is relevant; a later inclusion overrides an earlier exclusion, and vice versa.

Note that patterns are always applied relative to the project's virtual source directory /resources/. Re-includes must start with the namespace of the component they apply to.

Library Preload Generation

For projects of type library a library-preload.js bundle is generated by default. This bundle will contain most UI5 runtime-relevant resources of the library.

excludes

Info

This configuration is available since UI5 CLI v2.10.0 and applies only to projects defining Specification Version 2.3 or higher.

Example

yaml
builder:
- libraryPreload:
-   excludes:
-     - "my/lib/thirdparty/"
-     - "!my/lib/thirdparty/NotExcluded.js"

List of modules declared as glob patterns (resource name patterns) that are excluded from library-preload.js bundle. Similarly to the use of a single * or double ** asterisk, a pattern ending with a slash / denotes an arbitrary number of characters or folder names. Re-includes have to be marked with a leading exclamation mark !. The order of filters is relevant; a later inclusion overrides an earlier exclusion, and vice versa.

Note that patterns are always applied relative to the project's virtual source directory /resources/. Re-includes must start with the library's namespace.

Custom Tasks

Example

yaml
builder:
- customTasks:
-   - name: custom-task-1
-     beforeTask: replaceCopyright
-     configuration:
-       some-key: some value
-   - name: custom-task-2
-     afterTask: custom-task-1
-     configuration:
-       color: blue

You can define custom build tasks that will be executed for the project. Please refer to the Custom Tasks Documentation for a detailed explanation and examples of the build extensibility.

Each customTasks entry must define the name of the custom task as defined in its metadata.name property.

In addition, the execution order needs to be defined by referencing a standard task or an already configured custom task using the afterTask or beforeTask property.

Optionally, arbitrary configuration can be passed to the custom task.

JSDoc

Example

yaml
builder:
- jsdoc:
-   excludes:
-     - "some/project/name/thirdparty/**"

You can exclude the resources of a project from the JSDoc build process using a list of glob patterns. Matching resources will be ignored by the JSDoc build task.

Patterns are always applied relative to the project's virtual source directory /resources/.

These excludes are applied before any general builder excludes that have been defined in builder.resources.excludes.

Include Dependencies

Info

This configuration is available since UI5 CLI v2.12.0 and applies only to projects defining Specification Version 2.5 or higher.

Example

yaml
builder:
- settings:
-   includeDependency:
-     - shimmed.thirdparty.library
-   includeDependencyRegExp:
-     - ^com\\.namespace
-   includeDependencyTree:
-     - sap.m

You can include certain dependencies into the build process using the includeDependency builder setting. By using includeDependencyRegExp, a regular expression can be used, for example to specify a namespace to dynamically select a group of dependencies that have to be included into the build result. By using includeDependencyTree, a selected dependency including all of its sub-dependencies is used.

This configuration can be overwritten more precisely with the CLI parameters --include-dependency, --include-dependency-regexp, --include-dependency-tree, --exclude-dependency, --exclude-dependency-regexp and --exclude-dependency-tree.

Minification

For projects of types application and library, minification is done for all JavaScript files. During the minification step debug variants are created, original resources are minified, and source maps are created. You can exclude the resources of a project from minification using a list of glob patterns. Matching resources won't be minified, and no debug variants or source maps will be created.

The project's ui5.yaml file can contain a list of modules declared as glob patterns (resource name patterns) that are excluded from resource minification. Re-includes have to be marked with a leading exclamation mark !; see the example below. The order of filters is relevant; a later inclusion overrides an earlier exclusion, and vice versa.

Note that patterns are always applied relative to the project's virtual source directory /resources/.

Info

This configuration is available since UI5 CLI v2.14.0 and applies only to projects defining Specification Version 2.6 or higher.

Example

yaml
builder:
- minification:
-   excludes:
-     - "my/lib/thirdparty/"
-     - "!my/lib/thirdparty/NotExcluded.js"

Server Configuration

Example

yaml
server:
- settings:
-   httpPort: 1337
-   httpsPort: 1443

By default, UI5 CLI will serve applications using Port 8080. When running in HTTP/2 or HTTPS mode, Port 8443 will be used.

If the default port is already in use, the next highest free port will be used.

A project can also configure alternative default ports. If the configured port is already in use, an error will be thrown.

The default and configured server ports can always be overwritten with the CLI parameter --port.

Extension Configuration

Example

yaml
specVersion: "4.0"
-type: application
-metadata:
- name: my.application
----
-specVersion: "4.0"
-kind: extension
-type: project-shim
-metadata:
- name: my.application.thirdparty
-shims:
- configurations:
-   lodash:
-     specVersion: "4.0"
-     type: module
-     metadata:
-       name: lodash
-     resources:
-       configuration:
-         paths:
-           /resources/my/application/thirdparty/: ""

Extensions configuration can be added to any projects ui5.yaml. For better readability, it should to be located after the projects configuration, separated by three dashes "---".

In cases where an extension shall be reused across multiple projects you can make it a module itself and have its configuration in a standalone ui5.yaml located inside that module.

Extensions can be identified by the kind: extension configuration. Note that if no kind configuration is given, project is assumed.

Available Extensions

Custom Bundling

Example

yaml
builder:
- bundles:
-   - bundleDefinition:
-       name: "sap-ui-custom.js"
-       sections:
-         - mode: raw
-           filters:
-           - ui5loader-autoconfig.js
-           resolve: true
-           sort: true
-     bundleOptions:
-       optimize: true
-   - bundleDefinition:
-       name: "app.js"
-       sections:
-         - mode: preload
-           filters:
-             - some/app/Component.js
-           resolve: true
-           sort: true
-         - mode: provided
-           filters:
-           - ui5loader-autoconfig.js
-           resolve: true
-     bundleOptions:
-       optimize: true

Custom bundles can be defined in the ui5.yaml. Within the builder/bundles configuration a list of bundleDefinitions can be described.

Properties

bundles

A list of bundle definitions. A bundleDefinition contains of the following options:

  • name: The module bundle name

  • defaultFileTypes: List of default file types which should be included in the bundle. Defaults to: .js, .control.xml, .fragment.html, .fragment.json, .fragment.xml, .view.html, .view.json and .view.xml

  • sections: A list of module bundle definition sections. Each section specifies an embedding technology (see API-Reference) and lists the resources that should be in- or excluded from the section.

    • mode: The embedding technology (e.g. provided, raw, preload, bundleInfo, depCache, require)

    • filters: List of modules declared as glob patterns (resource name patterns) that are in- or excluded. Similarly to the use of a single * or double ** asterisk, a pattern ending with a slash / denotes an arbitrary number of characters or folder names. Excludes have to be marked with a leading exclamation mark !. The order of filters is relevant; a later inclusion overrides an earlier exclusion, and vice versa.

    • resolve: Setting resolve to true will also include all (transitive) dependencies of the files

    • resolveConditional: Whether conditional dependencies of modules should be resolved and added to the module set for this section. By default set to false

    • declareRawModules: Whether raw modules should be declared after jQuery.sap.global became available. With the usage of the ui5loader, this flag should be set to 'false'. By default set to false

    • renderer: Whether renderers for controls should be added to the module set. By default set to false

    • sort: By default, modules are sorted by their dependencies. The sorting can be suppressed by setting the option to false

    • async (only available if mode equals require): Specifies whether the require section of the module should use an asynchronous API. When set to true, the modules are loaded using sap.ui.require. When set to false, modules are loaded using sap.ui.requireSync, which is not available in UI5 2.x.

bundleOptions

  • optimize: If set to true, the module bundle gets minified

  • decorateBootstrapModule: By default set to false. If set to true, the module will be decorated with an optimization marker

  • addTryCatchRestartWrapper: By default set to false. If set to true, bootable module bundles gets wrapped with a try/catch to filter "Restart" errors

  • numberOfParts: By default set to 1. The number of parts into which a module bundle should be splitted

  • sourceMap: By default set to true. Adds source map support to the bundle. Available since UI5 CLI v4.0.0

Specification Versions

A project must define a specification version by setting the specVersion property. UI5 CLI uses this information to detect whether the currently installed version is compatible to a project's configuration.

yaml
specVersion: "4.0"
-[...]

To use new features, a project might need to update the specVersion property.

For a given Specification Version MAJOR.MINOR we will increment:

  1. MAJOR when there are breaking changes that might require additional actions by the project maintainer
  2. MINOR when adding new features that are fully backward compatible

All changes are documented below.

Compatibility Matrix

Unless otherwise noted in the table below, UI5 CLI modules are backward compatible.

VersionUI5 CLI Release
4.0v4.0.0+
3.2v3.8.0+
3.1v3.5.0+
3.0v3.0.0+
2.6v2.14.0+
2.5v2.12.0+
2.4v2.11.0+
2.3v2.10.0+
2.2v2.4.0+
2.1v2.2.0+
2.0v2.0.0+
1.1v1.13.0+
1.0v1.0.0+
0.1v0.0.1+

Specification Version 4.0

Breaking changes:

Specification Version 4.0 projects are supported by UI5 CLI v4.0.0 and above.

Also see Migrate to v4 for details on these breaking changes.

Specification Version 3.2

Features:

Specification Version 3.2 projects are supported by UI5 CLI v3.8.0 and above.

Specification Version 3.1

Features:

Specification Version 3.1 projects are supported by UI5 CLI v3.5.0 and above.

Specification Version 3.0

Breaking changes:

  • The metadata.name property is now restricted to contain only certain characters and no uppercase letters. See name for details

  • bundleOptions has been modified:

    • debugMode has been removed
    • optimize now always defaults to true #685

Features:

  • Adds support for sourceMap configuration for the application and library bundleOptions

Specification Version 3.0 projects are supported by UI5 CLI v3.0.0 and above.

Specification Version 2.6

Features:

  • Adds support for excludes configuration for the application and library minification

Specification Version 2.6 projects are supported by UI5 CLI v2.14.0 and above.

Specification Version 2.5

Features:

Specification Version 2.5 projects are supported by UI5 CLI v2.12.0 and above.

Specification Version 2.4

Features:

  • Adds support for bundleInfo mode in bundle definitions.

Specification Version 2.4 projects are supported by UI5 CLI v2.11.0 and above.

Specification Version 2.3

Features:

  • Adds support for excludes configuration of component- and library preload bundles

Specification Version 2.3 projects are supported by UI5 CLI v2.10.0 and above.

Specification Version 2.2

Features:

Specification Version 2.2 projects are supported by UI5 CLI v2.4.0 and above.

Specification Version 2.1

Features:

Specification Version 2.1 projects are supported by UI5 CLI v2.2.0 and above.

Specification Version 2.0

Breaking changes:

  • Adds and enforces schema validation of the ui5.yaml
  • By default the encoding of *.properties files is expected to be UTF-8 (as opposed to ISO-8859-1 in projects defining specification versions below 2.0)

Features:

  • Adds support for the "framework" configuration to consume SAPUI5 libraries.

Specification Version 2.0 projects are supported by UI5 CLI v2.0.0 and above.

Specification Version 1.1

Features:

  • Adds support for the theme-library type.

Specification Version 1.1 projects are supported by UI5 CLI v1.13.0 and above.

Specification Version 1.0

First stable release.

Specification Version 1.0 projects are supported by UI5 CLI v1.0.0 and above.

Specification Version 0.1

Initial version.

Specification Version 0.1 projects are compatible with UI5 CLI v0.0.1 and above.

`,214)])])}const u=i(n,[["render",l]]);export{k as __pageData,u as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/Configuration.md.DJDUtYxO.lean.js b/packages/documentation/docs/.vitepress/dist/assets/Configuration.md.DJDUtYxO.lean.js deleted file mode 100644 index ad9ba6e72a..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/Configuration.md.DJDUtYxO.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as e,ae as t}from"./chunks/framework.CBTkueSR.js";const k=JSON.parse('{"title":"Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"Configuration.md","filePath":"Configuration.md"}'),n={name:"Configuration.md"};function l(p,s,o,r,h,d){return e(),a("div",null,[...s[0]||(s[0]=[t("",214)])])}const u=i(n,[["render",l]]);export{k as __pageData,u as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/ESSupport.md.C_9do6hM.js b/packages/documentation/docs/.vitepress/dist/assets/ESSupport.md.C_9do6hM.js deleted file mode 100644 index 2f22fa2f7f..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/ESSupport.md.C_9do6hM.js +++ /dev/null @@ -1,235 +0,0 @@ -import{_ as i,c as a,o as e,ae as t}from"./chunks/framework.CBTkueSR.js";const E=JSON.parse('{"title":"ECMAScript Support","description":"","frontmatter":{},"headers":[],"relativePath":"ESSupport.md","filePath":"ESSupport.md"}'),n={name:"ESSupport.md"};function p(l,s,h,k,r,d){return e(),a("div",null,[...s[0]||(s[0]=[t(`

ECMAScript Support

UI5 Tooling offers general support for ES2023 ECMAScript features. While a ui5 build is executed, UI5 Tooling analyses a project's code. Depending on the project type, you have to consider some restrictions regarding the usage of certain ECMAScript syntax.

UI5 Tooling VersionSupported ECMAScript VersionNote
v3.11+ECMAScript 2023
v3.0+ECMAScript 2022
v2.0+ECMAScript 2009/ES5Note that code up to ECMAScript 2020 can be parsed, however required code analysis might not work correctly for specific language features

The following section describes all restrictions grouped by the kind of ECMAScript language feature. To get more insights into the code analysing executed by UI5 Tooling check out Code Analysis.

Language Features with Restrictions

The following sections describe the restrictions grouped by the ECMAScript language feature.

JavaScript modules

In general, UI5 Tooling only analyzes JavaScript files of type script. JavaScript Modules are not analyzed.

UI5 Tooling and the UI5 Runtime does not support the usage of export and import of JavaScript Modules. Therefore, sap.ui.define has to be used.

javascript
sap.ui.define([
-    "ModuleA",
-    "ModuleB"
-], function(ModuleA, ModuleB) {
-    return ModuleA.extend("ModuleC", {});
-});
javascript
import ModuleA from "ModuleA";
-import ModuleB from "ModuleB";
-export default class ModuleC extends ModuleA {};

Template Literal

Template Literals without an expressions can be used in all places where string literals can be used. However, since UI5 Tooling will attempt a static code analysis for certain calls to UI5 API, Template Literals with one or more expressions (e.g. Hello \${planets[2]}) can't be used in the scenarios described below.

Template Literal in sap.ui.define or sap.ui.require

Template Literals with one or more expressions inside a sap.ui.define or sap.ui.require call are not supported.

javascript
sap.ui.define([
-    \`ModuleA\`,
-    \`ModuleB\`
-], function(ModuleA, ModuleB) {
-});
javascript
const i = \`B\`;
-sap.ui.define([
-    \`ModuleA\`,
-    \`Module\${i}\`
-], function(ModuleA, ModuleB) {
-});

The same rule applies also for the usage of deprecated or no longer recommended APIs jQuery.sap.declare, jQuery.sap.declare, define, require, require.predefine, sap.ui.predefine, sap.ui.requireSync and sap.ui.require.preload.

Template Literal in Smart Template Declaration

When declaring a Smart Template using a Template Literal with one or more expressions in the name of the Smart Template is not supported.

javascript
sap.ui.define([
-    \`sap/suite/ui/generic/template/lib/TemplateAssembler\`
-], function(TemplateAssembler) {
-    return TemplateAssembler.getTemplateComponent(getMethods, 
-        \`sap.suite.ui.generic.templates.Page.Component\`, {
-            metadata: {
-                properties: {
-                    templateName: {
-                        type: \`string\`,
-                        defaultValue: \`sap.suite.ui.generic.templates.Page.view.Page\`
-                    }
-                },
-                manifest: \`json\`
-            }
-        }
-    );
-});
javascript
sap.ui.define([
-    \`sap/suite/ui/generic/template/lib/TemplateAssembler\`
-], function(TemplateAssembler) {
-    const name = \`Component\`;
-    return TemplateAssembler.getTemplateComponent(getMethods,
-        \`sap.suite.ui.generic.templates.Page.\${name}\`, {
-            metadata: {
-                properties: {
-                    templateName: {
-                        type: \`string\`,
-                        defaultValue: \`sap.suite.ui.generic.templates.Page.view.Page\`
-                    }
-                },
-                manifest: \`json\`
-            }
-        }
-    );
-});

Template Literal in XMLComposite Declaration

The XMLComposite control is deprecated since version UI5 1.88. Nevertheless UI5 Tooling will attempt to analyze the declaration of any such controls in a project.

Declaring an XMLComposite control using a Template Literal with one or more expressions in the name, is not supported.

javascript
sap.ui.define([
-    \`sap/ui/core/XMLComposite\`
-], function(XMLComposite) {
-    return XMLComposite.extend(\`composites.MyComposite\`, {} 
-});
javascript
sap.ui.define([
-    \`sap/ui/core/XMLComposite\`
-], function(XMLComposite) {
-    const name = \`MyComposite\`;
-    return XMLComposite.extend(\`composites.\${name}\`, {});
-});

Template Literal in sap/ui/core/Core#initLibrary Call

A library is typically initialized via an accompanying library.js. Within that file, the object which is supplied to the sap/ui/core/Core#initLibrary method, must not use a Template Literal with one or more expressions for the library name.

javascript
sap.ui.getCore().initLibrary({
-    name: \`my.lib\`
-});
javascript
const libraryName = \`lib\`;
-sap.ui.getCore().initLibrary({
-    name: \`my.\${libraryName}\`
-});

Reserved Variable Names in a Template Literal

While UI5 Tooling performs a build placeholders are replaced with a values offered by the build. For example \${version} is replaced with the actual version defined in the package.json of the project. Therefore it is required to not use any Template Literal where any expression contains variable with following names:

  • version
  • project.version
  • buildtime
  • copyright
javascript
const myVersion = \`1.2\`;
-const transformedVersion \`v\${myVersion}\`
javascript
const version = \`1.2\`;
-const transformedVersion \`v\${version}\`

UI5 Tooling searches for the exact match of \${version}, so with adding whitespaces before and after the variable name \${ version } UI5 Tooling won't replace this occurence. This can be enforced by the dedicated ESLint config template-curly-spacing with option always.

Spread Element

A Spread Element can be used in all places, except the following.

Spread Element in sap.ui.define or sap.ui.require

A Spread Element as a parameter in a sap.ui.define or sap.ui.require call is not supported.

javascript
sap.ui.define([
-    "ModuleA",
-    "ModuleB"
-], function(ModuleA, ModuleB) {
-});
javascript
const dependencies = ["ModuleA", "ModuleB"];
-sap.ui.define([
-    ...dependencies
-], function(ModuleA, ModuleB) {
-});

The same rule applies also for the usage of deprecated or no longer recommended APIs jQuery.sap.declare, jQuery.sap.declare, define, require, require.predefine, sap.ui.predefine, sap.ui.requireSync and sap.ui.require.preload.

Spread Element in Smart Template Declaration

When declaring a Smart Template, the usage of a Spread Element in the configuration is not supported.

javascript
sap.ui.define([
-    "sap/suite/ui/generic/template/lib/TemplateAssembler"
-], function(TemplateAssembler) {
-    return TemplateAssembler.getTemplateComponent(getMethods, 
-        "sap.suite.ui.generic.templates.Page.Component", {
-            metadata: {
-                properties: {
-                    templateName: {
-                        type: "string",
-                        defaultValue: "sap.suite.ui.generic.templates.Page.view.Page"
-                    }
-                },
-                manifest: "json"
-            }
-        }
-    );
-});
javascript
sap.ui.define([
-    "sap/suite/ui/generic/template/lib/TemplateAssembler"
-], function(TemplateAssembler) {
-    const myTemplate = {
-        templateName: {
-            type: "string",
-            defaultValue: "sap.suite.ui.generic.templates.Page.view.Page"
-        }
-    };
-    return TemplateAssembler.getTemplateComponent(getMethods,
-        "sap.suite.ui.generic.templates.Page.Component", {
-            metadata: {
-                properties: {
-                    ...myTemplate
-                }
-                manifest: "json"
-            }
-        }
-    );
-});

Spread Element in XMLComposite Declaration

The XMLComposite control is deprecated since version UI5 1.88. Nevertheless UI5 Tooling will attempt to analyze the declaration of any such controls in a project.

When declaring an XMLComposite, the usage of a Spread Element in the configuration is not supported.

javascript
sap.ui.define([
-    "sap/ui/core/XMLComposite"
-], function(XMLComposite) {
-    return XMLComposite.extend("composites.MyComposite", {
-        fragment: "composites.custom.MyComposite"
-    } 
-});
javascript
sap.ui.define([
-    "sap/ui/core/XMLComposite"
-], function(XMLComposite) {
-    const myXMLComposite = {
-          fragment: "composites.custom.MyComposite"
-    };
-    return XMLComposite.extend(\`composites.MyComposite\`, {
-        ...myXMLComposite
-    });
-});

Spread Element in sap/ui/core/Core#initLibrary Call

A library is typically initialized via an accompanying library.js. Within that file, the object which is supplied to the sap/ui/core/Core#initLibrary method, must not use a Spread Element.

javascript
sap.ui.getCore().initLibrary({
-    name: "my.lib"
-});
javascript
const mylib = {
-    name: "my.lib"
-};
-sap.ui.getCore().initLibrary({
-    ...mylib
-});

Object Expression

An Object Expression can be used in all places except in following places.

Object Expression in sap.ui.define or sap.ui.require

An Object Expression as a parameter in a sap.ui.define or sap.ui.require call is not supported.

javascript
sap.ui.define([
-    "Bar"
-], function(Bar){
-});
javascript
const dependency = "Bar";
-sap.ui.define([
-    dependency
-], function(Bar){
-});

The same rule applies also for the usage of deprecated or no longer recommended APIs jQuery.sap.declare, jQuery.sap.declare, define, require, require.predefine, sap.ui.predefine, sap.ui.requireSync and sap.ui.require.preload.

Object Expression in Smart Template Declaration

When declaring a Smart Template, the usage of an Object Expression in the configuration is not supported.

javascript
sap.ui.define([
-    "sap/suite/ui/generic/template/lib/TemplateAssembler"
-], function(TemplateAssembler) {
-    return TemplateAssembler.getTemplateComponent(getMethods, 
-        "sap.suite.ui.generic.templates.Page.Component", {
-            metadata: {
-                properties: {
-                    templateName: {
-                        type: "string",
-                        defaultValue: "sap.suite.ui.generic.templates.Page.view.Page"
-                    }
-                },
-                manifest: "json"
-            }
-        }
-    );
-});
javascript
sap.ui.define([
-    "sap/suite/ui/generic/template/lib/TemplateAssembler"
-], function(TemplateAssembler) {
-    const key = "templateName"
-    return TemplateAssembler.getTemplateComponent(getMethods,
-        \`sap.suite.ui.generic.templates.Page.\${name}\`, {
-            metadata: {
-                properties: {
-                    [key]: {
-                        type: "string",
-                        defaultValue: "sap.suite.ui.generic.templates.Page.view.Page"
-                    }
-                }
-                manifest: "json"
-            }
-        }
-    );
-});

Object Expression in XMLComposite Declaration

The XMLComposite control is deprecated since version UI5 1.88. Nevertheless UI5 Tooling will attempt to analyze the declaration of any such controls in a project.

When declaring an XMLComposite, the usage of an Object Expression in the configuration is not supported.

javascript
sap.ui.define([
-    "sap/ui/core/XMLComposite"
-], function(XMLComposite) {
-    return XMLComposite.extend("composites.MyComposite", {
-        fragment: "composites.custom.MyComposite"
-    } 
-});
javascript
sap.ui.define([
-    "sap/ui/core/XMLComposite"
-], function(XMLComposite) {
-    const key = "fragment";
-    return XMLComposite.extend("composites.MyComposite", {
-        [key]: "composites.custom.MyComposite"
-    });
-});

Object Expression in sap/ui/core/Core#initLibrary Call

A library is typically initialized via an accompanying library.js. Within that file, the object which is supplied to the sap/ui/core/Core#initLibrary method, must not use an Object Expression.

javascript
sap.ui.getCore().initLibrary({
-    name: "my.lib"
-});
javascript
const key = "name";
-sap.ui.getCore().initLibrary({
-    [key]: "my.lib"
-});

Computed Property

A Computed Property can be used in all places except in following places.

Computed Property when using extend

One or more Computed Property as a parameter in an UI5 Module extend call is not supported.

javascript
sap.ui.define([
-    "Bar"
-], function(Bar){
-    return Bar.extend("my.Bar" {});
-});
javascript
const name = "my";
-sap.ui.define([
-    "Bar"
-], function(Bar){
-    return Bar.extend(name + ".Bar", {});
-});

Computed Properties in sap/ui/core/Core#initLibrary Call

A library is typically initialized via an accompanying library.js. Within that file, the object which is supplied to the sap/ui/core/Core#initLibrary method, must not use an Computed Property.

javascript
sap.ui.getCore().initLibrary({
-    name: "my.lib"
-});
javascript
const name = "my";
-sap.ui.getCore().initLibrary({
-    name: name + ".lib"
-});

Class Declaration

If you want to generate a JSDoc build of your project and using a Class Declaration the class declaration should not be returned directly. Declare the class and return the class in a separate statement. If not JSDoc treats the the class declaration as a return statement and does not recognize any JSDoc if such is provided right above the class declaration.

javascript
sap.ui.define([
-    "Bar"
-], function(Bar){
-    /**
-     * JSDoc block here
-     */
-    class Foo extends Bar {
-        make () {}
-    }
-    return Foo;
-});
javascript
sap.ui.define([
-    "Bar"
-], function(Bar){
-    /**
-     * JSDoc block here
-     */
-    return class Foo extends Bar {
-        make () {}
-    }
-});

Arrow Function Expression

If you want to generate a JSDoc build of your project and use an Arrow Function Expression the JSDoc has to be written above the arrow function and not above the sap.ui.define/sap.ui.require command.

javascript
sap.ui.define([
-    "Bar"
-], 
-/**
- * JSDoc block here
- */
-(Bar) => Bar.extends("Foo", {
-}));
javascript
/**
- * JSDoc block here
- */
-sap.ui.define([
-    "Bar"
-], (Bar) => Bar.extends("Foo", {
-}));
`,77)])])}const c=i(n,[["render",p]]);export{E as __pageData,c as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/ESSupport.md.C_9do6hM.lean.js b/packages/documentation/docs/.vitepress/dist/assets/ESSupport.md.C_9do6hM.lean.js deleted file mode 100644 index a09ced2c33..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/ESSupport.md.C_9do6hM.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as e,ae as t}from"./chunks/framework.CBTkueSR.js";const E=JSON.parse('{"title":"ECMAScript Support","description":"","frontmatter":{},"headers":[],"relativePath":"ESSupport.md","filePath":"ESSupport.md"}'),n={name:"ESSupport.md"};function p(l,s,h,k,r,d){return e(),a("div",null,[...s[0]||(s[0]=[t("",77)])])}const c=i(n,[["render",p]]);export{E as __pageData,c as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/FAQ.md.icEjlMM4.js b/packages/documentation/docs/.vitepress/dist/assets/FAQ.md.icEjlMM4.js deleted file mode 100644 index 841aca08ec..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/FAQ.md.icEjlMM4.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as r,o as t,ae as n}from"./chunks/framework.CBTkueSR.js";const u=JSON.parse('{"title":"FAQ","description":"","frontmatter":{},"headers":[],"relativePath":"FAQ.md","filePath":"FAQ.md"}'),o={name:"FAQ.md"};function s(i,e,p,h,c,l){return t(),r("div",null,[...e[0]||(e[0]=[n('

FAQ

How Can I Contribute?

Please check our Contribution Guidelines.

How Can I Obtain Support?

Please follow our Contribution Guidelines on how to report an issue.

What's the Difference Between OpenUI5 and SAPUI5?

The open source project OpenUI5 provides most of the fundamental framework features. SAPUI5 enhances this by providing additional libraries under a different license.

OpenUI5 is provided under the Apache 2.0 license. The SAPUI5 packages that are consumed in UI5 CLI are provided under the terms of the SAP Developer License Agreement.

Note that projects which use the OpenUI5 framework cannot depend on projects that use the SAPUI5 framework. However, SAPUI5 projects can depend on OpenUI5 projects.

Please also see the UI5 SDK documentation "SAPUI5 vs. OpenUI5".

Why package.json? / Why npm?

Currently, UI5 CLI can only resolve dependencies defined in a package.json file. This might change in the future by adding Translators for additional dependency management systems.

To manage your dependencies, you can use almost any Node.js package manager that relies on package.json files. Popular ones are npm, Yarn and pnpm. UI5 CLI itself uses npm.

UI5 CLI resolves dependencies almost the same way Node.js does when executing a require / import statement.

Where are the npm Packages?

',16)])])}const f=a(o,[["render",s]]);export{u as __pageData,f as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/FAQ.md.icEjlMM4.lean.js b/packages/documentation/docs/.vitepress/dist/assets/FAQ.md.icEjlMM4.lean.js deleted file mode 100644 index 1e53b8887f..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/FAQ.md.icEjlMM4.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as r,o as t,ae as n}from"./chunks/framework.CBTkueSR.js";const u=JSON.parse('{"title":"FAQ","description":"","frontmatter":{},"headers":[],"relativePath":"FAQ.md","filePath":"FAQ.md"}'),o={name:"FAQ.md"};function s(i,e,p,h,c,l){return t(),r("div",null,[...e[0]||(e[0]=[n("",16)])])}const f=a(o,[["render",s]]);export{u as __pageData,f as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/FileSystem.md.D7YyUyY3.js b/packages/documentation/docs/.vitepress/dist/assets/FileSystem.md.D7YyUyY3.js deleted file mode 100644 index 27ffca444e..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/FileSystem.md.D7YyUyY3.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as r,c as t,o as a,ae as i}from"./chunks/framework.CBTkueSR.js";const d=JSON.parse('{"title":"UI5 FS","description":"","frontmatter":{},"headers":[],"relativePath":"FileSystem.md","filePath":"FileSystem.md"}'),s={name:"FileSystem.md"};function o(l,e,n,c,h,p){return a(),t("div",null,[...e[0]||(e[0]=[i('

UI5 FS

The UI5 FS provides a UI5-specific file system abstraction.

API Reference

Overview

The virtual file system "UI5 FS" offers an abstraction layer from the physical file system. Among other features, it can combine a set of scattered file locations into a well-defined virtual structure.

Resource

A Resource basically represents a file. Besides providing access to the file content, it also carries metadata like the virtual path of the Resource.

Resources are typically created and stored in Adapters. Once read from a physical file system, they are typically kept in memory for further processing in other modules.

This ensures a high build performance, as physical read and write access for a high number of resources is kept to a minimum.

Adapters

Adapters abstract access to different resource locations.

The Memory Adapter represents a virtual file system which maintains respective Resources inside a virtual data structure.

The File System Adapter, on the other hand, has direct access to the physical file system. It maps a "virtual base path" to a given physical path.

Both adapters provide APIs to retrieve and persist Resources, namely

  • to retrieve a single resource by its virtual path use byPath(),

  • to retrieve many resources based on patterns use byGlob(),

  • to persist a single resource use write().

Reader Collections

Reader collections allow grouped access to multiple adapters, which might even be nested in other reader collections.

They implement the same API for retrieving resources as adapters (byPath and byGlob). Multiple flavors exist:

  • ReaderCollection: The most basic collection. Allows parallel read access to multiple readers (i.e. adapters or collections)
  • ReaderCollectionPrioritized: Contains a list of readers which are searched in-order. This allows one reader to "overlay" resources of another
  • DuplexCollection: Contains a single reader and a single "writer". It therefore also implements the Adapter API for persisting resources (write()). When retrieving resources, the writer is prioritized over the reader
  • WriterCollection: Contains a set of writers and a mapping for each of them. When writing a resource, the writer is chosen based on the resource's virtual path.
',19)])])}const f=r(s,[["render",o]]);export{d as __pageData,f as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/FileSystem.md.D7YyUyY3.lean.js b/packages/documentation/docs/.vitepress/dist/assets/FileSystem.md.D7YyUyY3.lean.js deleted file mode 100644 index 3ab47dd7fb..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/FileSystem.md.D7YyUyY3.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as r,c as t,o as a,ae as i}from"./chunks/framework.CBTkueSR.js";const d=JSON.parse('{"title":"UI5 FS","description":"","frontmatter":{},"headers":[],"relativePath":"FileSystem.md","filePath":"FileSystem.md"}'),s={name:"FileSystem.md"};function o(l,e,n,c,h,p){return a(),t("div",null,[...e[0]||(e[0]=[i("",19)])])}const f=r(s,[["render",o]]);export{d as __pageData,f as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/GettingStarted.md.CPfMgG6N.js b/packages/documentation/docs/.vitepress/dist/assets/GettingStarted.md.CPfMgG6N.js deleted file mode 100644 index 169c10481a..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/GettingStarted.md.CPfMgG6N.js +++ /dev/null @@ -1,9 +0,0 @@ -import{_ as e,c as i,o as t,ae as s}from"./chunks/framework.CBTkueSR.js";const u=JSON.parse('{"title":"Getting Started","description":"","frontmatter":{},"headers":[],"relativePath":"GettingStarted.md","filePath":"GettingStarted.md"}'),n={name:"GettingStarted.md"};function l(o,a,p,r,h,d){return t(),i("div",null,[...a[0]||(a[0]=[s(`

Getting Started

Installing the UI5 CLI

Requirements

  • Node.js version v20.11.0 and higher or v22.0.0 and higher (v21 is not supported)
  • npm version v8.0.0 or higher

Installation

sh
# Global installation to have the command available
-npm install --global @ui5/cli
-
-# Additional local install in your project
-npm install --save-dev @ui5/cli
-
-# Verify installation
-ui5 --help

The globally installed UI5 CLI will always try to invoke a locally installed version of the UI5 CLI (if present). This way you can use different versions of the UI5 CLI across your projects. Please see the UI5 CLI documentation for details.

⚡️ Quick Start: OpenUI5 Sample App

Check out the OpenUI5 Sample App featuring a full blown How-to to play around with UI5 CLI!

Starting a New Project

The easiest way to start a new UI5 project is to use a template generator like generator-easy-ui5.

Choose a template that is designed for the type of project you want to create and the target environment where you want to deploy it to. Make sure that the template already uses UI5 CLI. A good indicator for that is the presence of a ui5.yaml file in the generated project.

When working with SAP Business Application Studio, there are several templates available to you. Check out the tutorial on creating a basic SAPUI5 application and deploying it to Cloud Foundry from within SAP Business Application Studio: Create an SAP Fiori App Using SAP Business Application Studio

You can find many guides on UI5 development with SAP Business Application Studio in the Tutorial Navigator.

Enabling an Existing Project

You can easily check whether or not a project (application or library) can already be used with the UI5 CLI by looking for a ui5.yaml file in the project's root directory.
This file (with some exceptions) is required for all projects and their dependencies (e.g. reuse libraries) to use them in the UI5 CLI.

Setup

If your project is not set up for use with the UI5 CLI yet, follow these steps:

  1. If your project does not have a package.json file, let npm generate it:

    sh
    npm init --yes
  2. Generate the ui5.yaml file:

    sh
    ui5 init
  3. Define the framework you want to use

sh
ui5 use openui5@latest
sh
ui5 use sapui5@latest

You can choose between the OpenUI5 and the SAPUI5 framework.

Don't know which one to choose? Check out our documentation on the differences between OpenUI5 and SAPUI5.

  1. Add required libraries

    sh
    ui5 add sap.ui.core sap.m sap.ui.table themelib_sap_fiori_3 # [...]

    You can find a documentation of all libraries, including samples and more, in the Demo Kit:

  2. Start the server and work on your project! 🎉

    sh
    ui5 serve

Tip

Use ui5 serve to start a local development server and ui5 build --all to produce an optimized, static version of your project, which you can then deploy to your production environment.

Find more information here:

  1. If you are using Git or similar version control, commit package.json and ui5.yaml to your repository.
    sh
    git add package.json ui5.yaml
    -git commit -m "Enable use with UI5 CLI"

Hooray! You can now use UI5 CLI in your project! 🎉

`,26)])])}const k=e(n,[["render",l]]);export{u as __pageData,k as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/GettingStarted.md.CPfMgG6N.lean.js b/packages/documentation/docs/.vitepress/dist/assets/GettingStarted.md.CPfMgG6N.lean.js deleted file mode 100644 index 33ce8d9ea7..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/GettingStarted.md.CPfMgG6N.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as i,o as t,ae as s}from"./chunks/framework.CBTkueSR.js";const u=JSON.parse('{"title":"Getting Started","description":"","frontmatter":{},"headers":[],"relativePath":"GettingStarted.md","filePath":"GettingStarted.md"}'),n={name:"GettingStarted.md"};function l(o,a,p,r,h,d){return t(),i("div",null,[...a[0]||(a[0]=[s("",26)])])}const k=e(n,[["render",l]]);export{u as __pageData,k as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/HomePage.md.BnZy5h7J.js b/packages/documentation/docs/.vitepress/dist/assets/HomePage.md.BnZy5h7J.js deleted file mode 100644 index 46e7148d61..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/HomePage.md.BnZy5h7J.js +++ /dev/null @@ -1,56 +0,0 @@ -import{_ as i,c as a,o as n,ae as t}from"./chunks/framework.CBTkueSR.js";const F=JSON.parse('{"title":"UI5 Tooling","description":"","frontmatter":{},"headers":[],"relativePath":"HomePage.md","filePath":"HomePage.md"}'),e={name:"HomePage.md"};function p(l,s,h,k,r,d){return n(),a("div",null,[...s[0]||(s[0]=[t(`

UI5 Tooling

An open and modular toolchain to develop state-of-the-art applications based on the UI5 framework.

🚀 New Release

UI5 Tooling V4 is here 🎉

Read the announcement blog post: SAP Community: UI5 Tooling 4.0

And checkout the Migrate to v4 documentation.

Get Started

Main Features

💻 UI5 CLI

Also see the UI5 CLI Documentation

sh
# Global
-npm install --global @ui5/cli
-
-# In your project
-npm install --save-dev @ui5/cli

⚙️ Project Setup

Configure your project for use with UI5 Tooling.
Also see the Configuration Documentation

❯ ui5 init
-Wrote ui5.yaml:
-
-specVersion: "4.0"
-metadata:
-  name: my-app
-type: application

🚚 Dependency Management

UI5 framework dependencies are managed by the tooling. All other dependencies are managed by your favorite node package manager.

❯ ui5 use SAPUI5@1.117.0
-Updated configuration written to ui5.yaml
-This project is now using SAPUI5 version 1.117.0
-
-❯ ui5 add sap.ui.core sap.m themelib_sap_fiori_3
-Updated configuration written to ui5.yaml
-Added framework libraries sap.ui.core sap.m themelib_sap_fiori_3 as dependencies

🏄 Development Server

Start a local development server to work on your project.
Also see the Server Documentation

❯ ui5 serve
-Server started
-URL: http://localhost:8080

🛠 Build for Production

Build an optimized version of your project.
Also see the Builder Documentation

bash
 ui5 build
-info graph:helpers:ui5Framework Using OpenUI5 version: 1.117.0
-info ProjectBuilder Preparing build for project my-app
-info ProjectBuilder   Target directory: ./dist
-info ProjectBuilder Cleaning target directory...
-info Project 1 of 1: Building application project my-app...
-info my-app Running task escapeNonAsciiCharacters...
-info my-app Running task replaceCopyright...
-info my-app Running task replaceVersion...
-info my-app Running task minify...
-info my-app Running task generateFlexChangesBundle...
-info my-app Running task generateComponentPreload...
-info ProjectBuilder Build succeeded in 296 ms
-info ProjectBuilder Executing cleanup tasks...

🧪 Node.js API

Most UI5 Tooling modules provide JavaScript APIs for direct consumption in other Node.js projects. This allows you to rely on UI5 Tooling for UI5-specific build functionality and project handling, while creating your own tools to perfectly match the needs of your project.

All available APIs are documented in the UI5 Tooling API Reference.

js
import {graphFromPackageDependencies} from "@ui5/project/graph";
-
-async function buildApp(projectPath, destinationPath) {
-    const graph = await graphFromPackageDependencies({
-        cwd: projectPath
-    });
-    await graph.build({
-        destPath: destinationPath,
-        selfContained: true,
-        excludedTasks: ["transformBootstrapHtml"],
-        includedDependencies: ["*"]
-    });
-}
js
async function buildApp(projectPath, destinationPath) { 
-    const {graphFromPackageDependencies} = 
-        await import("@ui5/project/graph");
-    const graph = await graphFromPackageDependencies({
-        cwd: projectPath
-    });
-    await graph.build({
-        destPath: destinationPath,
-        selfContained: true,
-        excludedTasks: ["transformBootstrapHtml"],
-        includedDependencies: ["*"]
-    });
-}
`,24)])])}const g=i(e,[["render",p]]);export{F as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/HomePage.md.BnZy5h7J.lean.js b/packages/documentation/docs/.vitepress/dist/assets/HomePage.md.BnZy5h7J.lean.js deleted file mode 100644 index 25afff9f4f..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/HomePage.md.BnZy5h7J.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,ae as t}from"./chunks/framework.CBTkueSR.js";const F=JSON.parse('{"title":"UI5 Tooling","description":"","frontmatter":{},"headers":[],"relativePath":"HomePage.md","filePath":"HomePage.md"}'),e={name:"HomePage.md"};function p(l,s,h,k,r,d){return n(),a("div",null,[...s[0]||(s[0]=[t("",24)])])}const g=i(e,[["render",p]]);export{F as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/OpenUI5.md.BhzTxPJW.js b/packages/documentation/docs/.vitepress/dist/assets/OpenUI5.md.BhzTxPJW.js deleted file mode 100644 index ad8d47f7dc..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/OpenUI5.md.BhzTxPJW.js +++ /dev/null @@ -1,27 +0,0 @@ -import{_ as i,c as a,o as n,ae as e}from"./chunks/framework.CBTkueSR.js";const E=JSON.parse('{"title":"Consuming OpenUI5 Libraries","description":"","frontmatter":{},"headers":[],"relativePath":"OpenUI5.md","filePath":"OpenUI5.md"}'),t={name:"OpenUI5.md"};function p(l,s,h,k,r,o){return n(),a("div",null,[...s[0]||(s[0]=[e(`

Consuming OpenUI5 Libraries

OpenUI5 consumption with UI5 CLI is very similar to SAPUI5 consumption. Please refer to the documentation on Consuming SAPUI5 Libraries for a general description of how UI5 CLI can fetch and provide framework dependencies to your project.

Note that projects using the SAPUI5 framework can depend on projects using the OpenUI5 framework. However, OpenUI5 projects can't depend on SAPUI5 projects.

Please also refer to our documentation on the differences between OpenUI5 and SAPUI5.

INFO

The minimum OpenUI5 version that can be consumed by UI5 CLI is 1.52.5

Configuration

Your project's ui5.yaml provides a configuration section dedicated to framework dependency handling.

This configuration can be maintained by editing the file, or by using the UI5 CLI:

Example

Using the UI5 CLI:

sh
ui5 use openui5@latest
-ui5 add sap.ui.core sap.m sap.ui.table themelib_sap_fiori_3

Example ui5.yaml of an application

yaml
specVersion: "4.0"
-type: application
-metadata:
-  name: some.project.name
-framework:
-  name: OpenUI5
-  version: 1.76.0
-  libraries:
-    - name: sap.ui.core
-    - name: sap.m
-    - name: sap.ui.table
-    - name: themelib_sap_fiori_3

Example ui5.yaml of a library

yaml
specVersion: "4.0"
-type: library
-metadata:
-  name: some.library
-framework:
-  name: OpenUI5
-  version: 1.76.0
-  libraries:
-    - name: sap.ui.core
-    - name: themelib_sap_belize
-      optional: true
-    - name: themelib_sap_bluecrystal
-      optional: true
-    - name: themelib_sap_fiori_3
-      optional: true

Please make sure that your project defines Specification Version 2.0 or higher.

For details, please see the corresponding framework configuration documentation.

Linking Framework Dependencies

When working on UI5 applications or libraries that use OpenUI5, you can link a local OpenUI5 repository into that project. This allows you to make changes to the project itself as well as to the OpenUI5 libraries simultaneously and test them immediately.

A detailed step-by-step guide on how to achieve such a setup with the OpenUI5 Sample App can be found here.

OpenUI5 Framework Development

Please refer to the OpenUI5 Framework Development Documentation.

`,20)])])}const g=i(t,[["render",p]]);export{E as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/OpenUI5.md.BhzTxPJW.lean.js b/packages/documentation/docs/.vitepress/dist/assets/OpenUI5.md.BhzTxPJW.lean.js deleted file mode 100644 index 136480b7d7..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/OpenUI5.md.BhzTxPJW.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,ae as e}from"./chunks/framework.CBTkueSR.js";const E=JSON.parse('{"title":"Consuming OpenUI5 Libraries","description":"","frontmatter":{},"headers":[],"relativePath":"OpenUI5.md","filePath":"OpenUI5.md"}'),t={name:"OpenUI5.md"};function p(l,s,h,k,r,o){return n(),a("div",null,[...s[0]||(s[0]=[e("",20)])])}const g=i(t,[["render",p]]);export{E as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/Overview.md.Bxk3KCe3.js b/packages/documentation/docs/.vitepress/dist/assets/Overview.md.Bxk3KCe3.js deleted file mode 100644 index 3bd7f8f8a1..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/Overview.md.Bxk3KCe3.js +++ /dev/null @@ -1,32 +0,0 @@ -import{_ as a,c as s,o as n,ae as i}from"./chunks/framework.CBTkueSR.js";const k=JSON.parse('{"title":"Development Overview","description":"","frontmatter":{},"headers":[],"relativePath":"Overview.md","filePath":"Overview.md"}'),t={name:"Overview.md"};function o(p,e,r,l,d,h){return n(),s("div",null,[...e[0]||(e[0]=[i(`

Development Overview

When developing a UI5 project on your local system, you should use the UI5 Server (ui5 serve) and not the UI5 Builder (ui5 build). Building a project should only be required when deploying it.

However, you might have good reasons to also use the UI5 Builder during development. In such cases, feel free to let us know! Maybe your use case could be covered by a future enhancement of the UI5 Server.

Project Dependencies

UI5 CLI differentiates between "framework dependencies" and "project dependencies".

Framework dependencies are generally libraries and themes provided by the SAP frameworks "OpenUI5" and "SAPUI5". UI5 CLI will take care of downloading them and handling their versions for you. Please see the corresponding documentation on both options:

Project dependencies are all other libraries, custom themes, UI5 CLI extensions or JavaScript modules your project depends on. In general these dependencies are maintained in the package.json of your project. See also: FAQ: Why package.json? / Why npm?.

Linking Projects

Would you like to work on an application project and one or more of its dependencies at the same time? We got you covered!

UI5 Workspaces

The recommended approach for setting up a development environment where simultaneous work on multiple UI5 projects is required.

Head over to the UI5 Workspaces documentation for the details. Below is an example based on a simple scenario with an application and a reuse library project:

Example: Your Directory Structure

my-app/
-    \\_ node_modules/
-    \\_ webapp/
-    \\_ ui5.yaml
-    \\_ package.json
-my-reuse-library/
-    \\_ node_modules/
-    \\_ src/
-    \\_ test/
-    \\_ ui5.yaml
-    \\_ package.json

In its package.json, my-app should already define a dependency to my-reuse-library. So, after running the npm install command, a copy of the my-reuse-library-package should be retrieved from the package registry and added to my-app's node_modules/ directory.

In the my-app directory, create a new file named ui5-workspace.yaml with the following content:

yaml
specVersion: workspace/1.0
-metadata:
-    name: default
-dependencyManagement:
-    resolutions:
-        - path: ../my-reuse-library

That's it! Start a server via ui5 serve, and you will see that any changes you make in my-reuse-library are immediately visible in my-app.

Package Managers

By leaving dependency management up to the tool of your choice (see FAQ: Why package.json? / Why npm?) you have a variety of other options for linking dependencies into your project.

Here is an example using the npm CLI in Version 8, an application, and a reuse library project:

Example: Your Directory Structure

my-app/
-    \\_ node_modules/
-    \\_ webapp/
-    \\_ ui5.yaml
-    \\_ package.json
-my-reuse-library/
-    \\_ node_modules/
-    \\_ src/
-    \\_ test/
-    \\_ ui5.yaml
-    \\_ package.json

In its package.json, my-app should already define a dependency to my-reuse-library. So, after running the npm install command, a copy of the "my-reuse-library"-package should be retrieved from the package registry and added to my-app's node_modules/ directory.

Now all you need to do is replacing this copy of the my-reuse-library package with a link to the my-reuse-library project located somewhere on your computer. In this example it is right next to my-app, but that doesn't really matter.

First, in the directory of the my-reuse-library project, create a global link:

sh
npm link

Then, in the my-app directory, use that link to replace the registry package:

sh
npm link my-reuse-library

Note: "my-reuse-library" is the name defined in the package.json and not necessarily the directory or ui5.yaml name

That's it. You can check whether the linking worked by executing ui5 tree in the my-app directory and looking for the path attributes in its output.

Static Dependency Definition

As an alternative to defining your project dependencies in the package.json, you can define a static dependency hierarchy for the project in a YAML file. This is typically only advised in special cases where none of the other concepts work.

To use such a file in UI5 CLI, provide a path to it using the --dependency-definition parameter. Note that all package.json dependencies will be ignored (including UI5 CLI extensions), but UI5 framework dependencies defined in ui5.yaml will still be used.

Example: projectDependencies.yaml

yaml
id: my.app
-version: "local"
-path: "."
-dependencies:
-  - id: my.lib
-    version: "local"
-    path: "../my.lib"

By placing this file in the root directory of the my.app application project, you can start a server with a local copy of the my.lib dependency, located in the same parent directory, using the command ui5 serve --dependency-definition ./projectDependencies.yaml.

The structure of the dependency definition file follows that of the @ui5/project/graph/providers/DependencyTree~TreeNode type.

HTTP/2 Development Webserver

The UI5 CLI contains a web server to serve the project via HTTP/2 protocol.

sh
ui5 serve --h2

This requires an SSL certificate. You are guided through the automatic generation process. Also see the UI5 Server documentation

Integration in Other Tools

One of the key features of the UI5 CLI is its modularization. Single parts of UI5 CLI can easily be integrated in other Node.js-based tools and frameworks like Grunt or Gulp.

All JavaScript APIs available for direct consumption are listed here. However, for standard UI5 development, the UI5 CLI should always be the first choice.

`,46)])])}const u=a(t,[["render",o]]);export{k as __pageData,u as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/Overview.md.Bxk3KCe3.lean.js b/packages/documentation/docs/.vitepress/dist/assets/Overview.md.Bxk3KCe3.lean.js deleted file mode 100644 index cb7a30f7f9..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/Overview.md.Bxk3KCe3.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as s,o as n,ae as i}from"./chunks/framework.CBTkueSR.js";const k=JSON.parse('{"title":"Development Overview","description":"","frontmatter":{},"headers":[],"relativePath":"Overview.md","filePath":"Overview.md"}'),t={name:"Overview.md"};function o(p,e,r,l,d,h){return n(),s("div",null,[...e[0]||(e[0]=[i("",46)])])}const u=a(t,[["render",o]]);export{k as __pageData,u as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/Privacy.md.DEAZGlsC.js b/packages/documentation/docs/.vitepress/dist/assets/Privacy.md.DEAZGlsC.js deleted file mode 100644 index db65add00c..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/Privacy.md.DEAZGlsC.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as r,c as i,o as s,j as a,a as e}from"./chunks/framework.CBTkueSR.js";const y=JSON.parse('{"title":"Privacy","description":"","frontmatter":{},"headers":[],"relativePath":"Privacy.md","filePath":"Privacy.md"}'),o={name:"Privacy.md"};function c(n,t,p,l,d,h){return s(),i("div",null,[...t[0]||(t[0]=[a("h1",{id:"privacy",tabindex:"-1"},[e("Privacy "),a("a",{class:"header-anchor",href:"#privacy","aria-label":'Permalink to "Privacy"'},"​")],-1),a("p",null,[e("This site is hosted by "),a("a",{href:"https://pages.github.com/",target:"_blank"},"GitHub Pages"),e(". Please see the "),a("a",{href:"https://docs.github.com/en/github/site-policy/github-privacy-statement",target:"_blank"}," GitHub Privacy Statement"),e(" for any information how GitHub processes your personal data.")],-1)])])}const u=r(o,[["render",c]]);export{y as __pageData,u as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/Privacy.md.DEAZGlsC.lean.js b/packages/documentation/docs/.vitepress/dist/assets/Privacy.md.DEAZGlsC.lean.js deleted file mode 100644 index db65add00c..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/Privacy.md.DEAZGlsC.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as r,c as i,o as s,j as a,a as e}from"./chunks/framework.CBTkueSR.js";const y=JSON.parse('{"title":"Privacy","description":"","frontmatter":{},"headers":[],"relativePath":"Privacy.md","filePath":"Privacy.md"}'),o={name:"Privacy.md"};function c(n,t,p,l,d,h){return s(),i("div",null,[...t[0]||(t[0]=[a("h1",{id:"privacy",tabindex:"-1"},[e("Privacy "),a("a",{class:"header-anchor",href:"#privacy","aria-label":'Permalink to "Privacy"'},"​")],-1),a("p",null,[e("This site is hosted by "),a("a",{href:"https://pages.github.com/",target:"_blank"},"GitHub Pages"),e(". Please see the "),a("a",{href:"https://docs.github.com/en/github/site-policy/github-privacy-statement",target:"_blank"}," GitHub Privacy Statement"),e(" for any information how GitHub processes your personal data.")],-1)])])}const u=r(o,[["render",c]]);export{y as __pageData,u as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/Project.md.DXUu18Wn.js b/packages/documentation/docs/.vitepress/dist/assets/Project.md.DXUu18Wn.js deleted file mode 100644 index 8f5720ba93..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/Project.md.DXUu18Wn.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as t,c as r,o,ae as a}from"./chunks/framework.CBTkueSR.js";const h=JSON.parse('{"title":"UI5 Project","description":"","frontmatter":{},"headers":[],"relativePath":"Project.md","filePath":"Project.md"}'),d={name:"Project.md"};function i(c,e,s,n,l,p){return o(),r("div",null,[...e[0]||(e[0]=[a('

UI5 Project

The UI5 Project module provides functionality to build a UI5 project. Also see Development Overview: Project Dependencies.

Types

Types define how a project can be configured and how it is built. A type orchestrates a set of tasks and defines the order in which they get applied during build phase. Furthermore, it takes care of formatting and validating the project-specific configuration.

Also see UI5 Project: Configuration

application

Projects of type application are typically the main or root project. In a projects dependency tree, there should only be one project of type application. If multiple are found, those further away from the root are ignored.

The source directory of an application (typically named webapp) is mapped to the virtual root path /.

An applications source directory may or may not contain a Component.js file. If it does, it must also contain a manifest.json file. If there is a Component.js file, an optimized Component-preload.js file will be generated during the build.

library

UI5 libraries are often referred to as reuse-, custom- or control libraries. They are a key component in sharing code across multiple projects in UI5.

A project of type library must have a source directory (typically named src). It may also feature a "test" directory. These directories are mapped to the virtual directories /resources for the sources and /test-resources for the test resources.

These directories should contain a directory structure representing the namespace of the library (e.g. src/my/first/library) to prevent name clashes between the resources of different libraries.

theme-library

Available since Specification Version 1.1

UI5 theme libraries provide theming resources for the controls of one or multiple libraries.

A project of type theme-library must have a source directory (typically named src). It may also feature a "test" directory. These directories are mapped to the virtual directories /resources for the sources and /test-resources for the test resources.

The source directory must contain a directory structure representing the namespaces of the libraries it provides theme resources for. For example, a theme library named my_custom_theme, providing resources for a library named my.library should have these resources in a directory path my/library/themes/my_custom_theme/.

module

The module type is meant for usage with non-UI5 resources like third-party libraries. Their path mapping can be configured freely. During a build, their resources are copied without modifications.

Build Output Style

The Output Style offers you control over your project's build output folder. Namespaces like sap.m or sap.ui.core can be streamlined, producing a more concise and flat output. For example, a resource like /resources/sap/m/RangeSlider.js will be transformed into ./RangeSlider.js. And vice versa, applications that are built by default with Flat output, can leverage any namespaces they might have.

In the table below you can find the available combinations of project type & output style.

Project Type / Requested Output StyleResulting Style
application
DefaultRoot project is written Flat-style. ¹
FlatSame as Default.
NamespaceRoot project is written Namespace-style (resources are prefixed with the project's namespace). ¹
library
DefaultRoot project is written Namespace-style. ¹
FlatRoot project is written Flat-style (without its namespace, logging warnings for resources outside of it). ¹
NamespaceSame as Default.
theme-library
DefaultRoot project is written in the style of the sources (multiple namespaces). ¹
FlatUnsupported ²
NamespaceUnsupported ²
module
DefaultRoot project is written with the configured paths. ^1^
FlatUnsupported ^3^
NamespaceUnsupported ^3^

¹ The Output Style is only applied to the root project's output folder structure. Any dependencies included in the build would retain their Default output style.
² Theme libraries in most cases have more than one namespace.
³ Modules have explicit path mappings configured and no namespace concept.

API Reference

',26)])])}const m=t(d,[["render",i]]);export{h as __pageData,m as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/Project.md.DXUu18Wn.lean.js b/packages/documentation/docs/.vitepress/dist/assets/Project.md.DXUu18Wn.lean.js deleted file mode 100644 index 8e0e225c10..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/Project.md.DXUu18Wn.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as t,c as r,o,ae as a}from"./chunks/framework.CBTkueSR.js";const h=JSON.parse('{"title":"UI5 Project","description":"","frontmatter":{},"headers":[],"relativePath":"Project.md","filePath":"Project.md"}'),d={name:"Project.md"};function i(c,e,s,n,l,p){return o(),r("div",null,[...e[0]||(e[0]=[a("",26)])])}const m=t(d,[["render",i]]);export{h as __pageData,m as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/SAPUI5.md.DzeOp_G2.js b/packages/documentation/docs/.vitepress/dist/assets/SAPUI5.md.DzeOp_G2.js deleted file mode 100644 index fbf414ee74..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/SAPUI5.md.DzeOp_G2.js +++ /dev/null @@ -1,32 +0,0 @@ -import{_ as i,c as a,o as e,ae as n}from"./chunks/framework.CBTkueSR.js";const E=JSON.parse('{"title":"Consuming SAPUI5 Libraries","description":"","frontmatter":{},"headers":[],"relativePath":"SAPUI5.md","filePath":"SAPUI5.md"}'),t={name:"SAPUI5.md"};function h(l,s,p,k,r,o){return e(),a("div",null,[...s[0]||(s[0]=[n(`

Consuming SAPUI5 Libraries

The minimum version of SAPUI5 that can be consumed by UI5 CLI as described below is **1.76.0.**  
-For lower versions, consider using the [CDN bootstrap](https://ui5.sap.com/#/topic/2d3eb2f322ea4a82983c1c62a33ec4ae) or a custom middleware like [ui5-middleware-simpleproxy](https://www.npmjs.com/package/ui5-middleware-simpleproxy).
-

Overview

SAPUI5 libraries are hosted on the public npm registry at registry.npmjs.org. However, you should not install them using node package managers such as npm. Let UI5 CLI handle them instead by following this guide.

INFO

For more background information also see the Blog Post "UI5ers Buzz #49: The UI5 CLI and SAPUI5 – The Next Step"

Usage

Since Version 2.0 of the UI5 CLI, it will automatically download all required framework dependencies of a project that have been listed in the corresponding ui5.yaml file. They will be cached in a .ui5 directory located in the user's home directory. This happens transparently whenever you execute the ui5 serve or ui5 build commands.

All non-framework dependencies, such as reuse libraries or UI5 CLI extensions, still need to be maintained as npm dependencies in the projects package.json. At the same time, framework dependencies listed in the ui5.yaml should not be listed in the package.json as they will be ignored by the UI5 CLI.

Configuration

Your project's ui5.yaml provides a configuration section dedicated to framework dependency handling.

This configuration can be maintained by editing the file, or by using the UI5 CLI:

IMPORTANT

Using the UI5 CLI:

sh
ui5 use sapui5@latest
-ui5 add sap.ui.core sap.m sap.ui.comp themelib_sap_fiori_3
-ui5 add -D sap.ushell

Example ui5.yaml of an application

yaml
specVersion: "4.0"
-type: application
-metadata:
-  name: some.project.name
-framework:
-  name: SAPUI5
-  version: 1.82.0
-  libraries:
-    - name: sap.ui.core
-    - name: sap.m
-    - name: sap.ui.comp
-    - name: sap.ushell
-      development: true
-    - name: themelib_sap_fiori_3

Example ui5.yaml of a library

yaml
specVersion: "4.0"
-type: library
-metadata:
-  name: some.library
-framework:
-  name: SAPUI5
-  version: 1.82.0
-  libraries:
-    - name: sap.ui.core
-    - name: themelib_sap_belize
-      optional: true
-    - name: themelib_sap_bluecrystal
-      optional: true
-    - name: themelib_sap_fiori_3
-      optional: true

Please make sure that your project defines Specification Version 2.0 or higher.

For details please refer to the framework configuration documentation.

Differences Between OpenUI5 and SAPUI5

Please refer to our documentation on the differences between OpenUI5 and SAPUI5

`,20)])])}const c=i(t,[["render",h]]);export{E as __pageData,c as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/SAPUI5.md.DzeOp_G2.lean.js b/packages/documentation/docs/.vitepress/dist/assets/SAPUI5.md.DzeOp_G2.lean.js deleted file mode 100644 index 48a47c7e64..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/SAPUI5.md.DzeOp_G2.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as e,ae as n}from"./chunks/framework.CBTkueSR.js";const E=JSON.parse('{"title":"Consuming SAPUI5 Libraries","description":"","frontmatter":{},"headers":[],"relativePath":"SAPUI5.md","filePath":"SAPUI5.md"}'),t={name:"SAPUI5.md"};function h(l,s,p,k,r,o){return e(),a("div",null,[...s[0]||(s[0]=[n("",20)])])}const c=i(t,[["render",h]]);export{E as __pageData,c as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/Server.md.0NEcQ1ii.js b/packages/documentation/docs/.vitepress/dist/assets/Server.md.0NEcQ1ii.js deleted file mode 100644 index 73a7630211..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/Server.md.0NEcQ1ii.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as r,c as t,o as a,ae as s}from"./chunks/framework.CBTkueSR.js";const u=JSON.parse('{"title":"UI5 Server","description":"","frontmatter":{},"headers":[],"relativePath":"Server.md","filePath":"Server.md"}'),o={name:"Server.md"};function i(d,e,n,c,l,h){return a(),t("div",null,[...e[0]||(e[0]=[s('

UI5 Server

The UI5 Server module can serve project's sources for development and testing purposes.

API Reference

Custom Server Middleware Extensibility

All available standard middleware are listed below in the order of their execution.

A project can also add custom middleware to the server by using the Custom Server Middleware Extensibility.

MiddlewareDescription
cspSee chapter csp
compressionStandard Express compression middleware
corsStandard Express cors middleware
discoverySee chapter discovery
serveResourcesSee chapter serveResources
testRunnerSee chapter testRunner
serveThemesSee chapter serveThemes
versionInfoSee chapter versionInfo
nonReadRequestsSee chapter nonReadRequests
serveIndexSee chapter serveIndex

csp

The Content Security Policy (CSP) middleware is active by default.

The header content-security-policy can be set by adding URL parameter sap-ui-xx-csp-policy to the request with the policy name as value.

To set the policy to report-only, append :report-only or :ro to the policy name. E.g. /index.html?sap-ui-xx-csp-policy=sap-target-level-1:report-only

sendSAPTargetCSP parameter

The default CSP policies can be modified using parameter sendSAPTargetCSP (--sap-csp-policies when using the CLI). With sendSAPTargetCSP set to true the policies sap-target-level-1 and sap-target-level-3 policies are activated and send as report-only.

Serve CSP Reports

Serving of CSP reports can be activated with parameter serveCSPReports (--serve-csp-reports when using the CLI). With serveCSPReports set to true, the CSP reports are collected and can be downloaded from the server path /.ui5/csp/csp-reports.json.

discovery

This middleware lists project files with URLs under several /discovery endpoints. This is exclusively used by the OpenUI5 test suite application.

serveResources

This middleware resolves requests using the ui5-fs-file system abstraction.

The following file content transformations are executed:

  • Escaping non-ASCII characters in .properties translation files based on a project's configuration
  • Enhancing the manifest.json with supported locales determined by available .properties translation files

testRunner

Serves a static version of the UI5 QUnit TestRunner at /test-resources/sap/ui/qunit/testrunner.html.

serveThemes

Compiles CSS files for themes on-the-fly from the source *.less files.

Changes made to these *.less files while the server is running will automatically lead to the re-compilation of the relevant CSS files when requested again.

versionInfo

Generates and serves the version info file /resources/sap-ui-version.json, which is required for several framework functionalities.

nonReadRequests

Answers all non-read requests (POST, PUT, DELETE, etc.) that have not been answered by any other middleware with the 404 "Not Found" status code . This signals the client that these operations are not supported by the server.

serveIndex

In case a directory has been requested, this middleware renders an HTML with a list of the directory's content.

SSL Certificates

When starting the UI5 Server in HTTPS- or HTTP/2 mode, for example by using UI5 CLI parameter --h2, you will be prompted for the automatic generation of a local SSL certificate if necessary.

Follow the given instructions and enter your password to install the generated certificate as trusted. You can find the generated certificate and corresponding private key under .ui5/server in your user's home directory.

TIP

If Chrome unintentionally redirects an HTTP-URL to HTTPS, you need to delete the HSTS mapping in chrome://net-internals/#hsts by entering the domain name (e.g. localhost) and pressing "delete".

',36)])])}const f=r(o,[["render",i]]);export{u as __pageData,f as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/Server.md.0NEcQ1ii.lean.js b/packages/documentation/docs/.vitepress/dist/assets/Server.md.0NEcQ1ii.lean.js deleted file mode 100644 index 4a71d1ccb1..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/Server.md.0NEcQ1ii.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as r,c as t,o as a,ae as s}from"./chunks/framework.CBTkueSR.js";const u=JSON.parse('{"title":"UI5 Server","description":"","frontmatter":{},"headers":[],"relativePath":"Server.md","filePath":"Server.md"}'),o={name:"Server.md"};function i(d,e,n,c,l,h){return a(),t("div",null,[...e[0]||(e[0]=[s("",36)])])}const f=r(o,[["render",i]]);export{u as __pageData,f as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/Task_Minify.C_54hEom.svg b/packages/documentation/docs/.vitepress/dist/assets/Task_Minify.C_54hEom.svg deleted file mode 100644 index 30f3c19ce4..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/Task_Minify.C_54hEom.svg +++ /dev/null @@ -1,459 +0,0 @@ - - - - - - - - - - - - - - - - - Task_Minify - - - Layer 1 - - - - - Minify a JS - Resource - - - - - - - - processors/minifier - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Terser - - - - - tasks/minify - - - - - - - Search for Source Map - Reference in Resource - - - - - - - Remove - sourceMappingURL - Reference in Resource - - - - - - - Resolve - Reference - - - - - - - Log Warning - "Not Supported" - - - - - - - Locate Resource - within Project - - - - - - - Decode - base64 - Payload - - - - - - - Clone Source Map - - - - - - - Create Debug - Variant by Cloning - Modified Resource - - - - - - This Indicates the - Presence of an - "Input Source Map" - - - - - - - Execute Minification - (Using Input Source Map If - One Has Been Resolved) - - - - - - - Reference Source - Map in Debug - Resource - - - - - - - - - - - - Contains a Reference - - - - - - - - - - - - - - - - Resource Has Been Modified by Previous Tasks - - - - - - - - - - - - - - - - - - - Relative URL - - - - - - - - - Data-URL ("data:") - - - - - - - - - Absolute URL or - HTTP(S) URL - - - - - - - - - - - - - Not Found - - - - - - - - - - Log Warning - "Not Found" - - - - - - - - - - - - - - - - - - - - - - - - - - Contains No Reference - - - - - - - - - Found - - - - - - - - - - - - - - - - - - - - - - - - - Change "file" - Attribute to Name of - Debug Resource - - - - - - - Create Resource - "<debug resource - name>.map" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Searching For String - "//# sourceMappingURL=" - at the End of the File - - - - - - There Is a High Risk That the - Referenced Source Map Does - Not Reflect the Modification - - - - - - - - - - - - - Resource Is Not Modified - - - - - - - - - - - - - Appending String - "//# sourceMappingURL=<debug resource name>.map" - to the End of the Resource - - - - - - - Write Resources - to Workspace - - - - - - This Is the Only Path - on Which Terser Will - Be Provided With an - Input Source Map - - - - - - - - - - - - - - - - - - - - - - - - Resulting Resources (Example): - • Module.js - • Module.js.map - • Module-dbg.js - • Module-dbg.js.map - - - - - diff --git a/packages/documentation/docs/.vitepress/dist/assets/Troubleshooting.md.zLa9CUap.js b/packages/documentation/docs/.vitepress/dist/assets/Troubleshooting.md.zLa9CUap.js deleted file mode 100644 index 395cbcfbde..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/Troubleshooting.md.zLa9CUap.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as i,o as s,ae as t}from"./chunks/framework.CBTkueSR.js";const u=JSON.parse('{"title":"Troubleshooting","description":"","frontmatter":{},"headers":[],"relativePath":"Troubleshooting.md","filePath":"Troubleshooting.md"}'),o={name:"Troubleshooting.md"};function n(r,e,h,l,d,p){return s(),i("div",null,[...e[0]||(e[0]=[t('

Troubleshooting

UI5 Server

Chrome Redirects HTTP URLs to HTTPS (ERR_SSL_PROTOCOL_ERROR)

An HTTPS server or proxy that was previously running on a domain (e.g. localhost), might have set an HSTS header, enforcing Chrome to always use HTTPS for this domain. See https://www.chromium.org/hsts. This makes it impossible to connect to an HTTP-only server running on the same domain.

Resolution

You need to delete the HSTS mapping in chrome://net-internals/#hsts by entering the domain name (e.g. localhost) and pressing "delete".

Issues Not Listed Here

Please follow our Contribution Guidelines on how to report an issue.

UI5 Project

~/.ui5 Taking too Much Disk Space

There are possibly many versions of UI5 framework dependencies installed on your system, taking a large amount of disk space.

Resolution

Remove the .ui5/framework/ directory from your user's home directory:

sh
rm -rf ~/.ui5/framework/

Any missing framework dependencies will be downloaded again during the next UI5 CLI invocation.

Environment Variables

Changing the Log Level

In CI environments or in a combination with other tools, the usage of UI5 CLI's --log-level command parameter might be inconvenient and even impossible.

Resolution

Replace UI5 CLI's --log-level option with the UI5_LOG_LVL environment variable.

Example:

UI5_LOG_LVL=silly ui5 build

On Windows:

set UI5_LOG_LVL=silly ui5 build

Cross Environment via cross-env:

cross-env UI5_LOG_LVL=silly ui5 build

UI5 + Karma:

cross-env UI5_LOG_LVL=verbose npm run karma

WARNING

The combination of the UI5_LOG_LVL environment variable with the --log-level CLI parameter might lead to unexpected results; they should be used interchangeably but not together. The CLI parameter takes precedence over the UI5_LOG_LVL environment variable.

Changing UI5 CLI's Data Directory

UI5 CLI's data directory is by default at ~/.ui5. It's the place where the framework artifacts are stored. In some cases and environments this is not a convenient location and the user needs to provide a better one.

The path to it can either be provided via environment variable or permanently set in the configuration.

Info

Paths are resolved relative to the current root project path (i.e. where the package.json is located).

Environment variable UI5_DATA_DIR

Unix:

sh
UI5_DATA_DIR=/my/custom/location/.ui5 ui5 build

Windows:

sh
set UI5_DATA_DIR="C:\\\\my\\\\custom\\\\location\\\\.ui5" ui5 build

Configuration ui5DataDir

Configure a custom directory:

sh
ui5 config set ui5DataDir /my/custom/location/.ui5

Unset the configuration to switch back to the default directory:

sh
ui5 config set ui5DataDir
',43)])])}const k=a(o,[["render",n]]);export{u as __pageData,k as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/Troubleshooting.md.zLa9CUap.lean.js b/packages/documentation/docs/.vitepress/dist/assets/Troubleshooting.md.zLa9CUap.lean.js deleted file mode 100644 index 3c055275ba..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/Troubleshooting.md.zLa9CUap.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as i,o as s,ae as t}from"./chunks/framework.CBTkueSR.js";const u=JSON.parse('{"title":"Troubleshooting","description":"","frontmatter":{},"headers":[],"relativePath":"Troubleshooting.md","filePath":"Troubleshooting.md"}'),o={name:"Troubleshooting.md"};function n(r,e,h,l,d,p){return s(),i("div",null,[...e[0]||(e[0]=[t("",43)])])}const k=a(o,[["render",n]]);export{u as __pageData,k as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/Workspace.md.Cozjt-6A.js b/packages/documentation/docs/.vitepress/dist/assets/Workspace.md.Cozjt-6A.js deleted file mode 100644 index d8f699bb3b..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/Workspace.md.Cozjt-6A.js +++ /dev/null @@ -1,33 +0,0 @@ -import{_ as a,c as i,o as e,ae as t}from"./chunks/framework.CBTkueSR.js";const d=JSON.parse('{"title":"UI5 Workspaces","description":"","frontmatter":{},"headers":[],"relativePath":"Workspace.md","filePath":"Workspace.md"}'),n={name:"Workspace.md"};function l(p,s,o,r,h,c){return e(),i("div",null,[...s[0]||(s[0]=[t(`

UI5 Workspaces

Info

UI5 Workspaces is a new feature available since UI5 CLI v3.0.0

Example

ui5-workspace.yaml

yaml
yaml title="ui5-workspace.yaml"
-specVersion: workspace/1.0
-metadata:
-   name: default
-dependencyManagement:
-   resolutions:
-       - path: ../heavy.library

General Concept

UI5 Workspaces can be used to create a personalized local development environment for a UI5 project. They allow to use UI5 dependencies from local directories without the need to use the link features of package managers like npm. "UI5 dependencies" generally refers to projects that have a ui5.yaml.

Workspaces are typically configured in a ui5-workspace.yaml file, located next to the project's ui5.yaml. The file can contain one or many workspace configurations, each separated by three dashes. For example:

Example

ui5-workspace.yaml

yaml
specVersion: workspace/1.0
-metadata:
-   name: default
-dependencyManagement:
-   resolutions:
-  	    - path: ../heavy.library
----
-specVersion: workspace/1.0
-metadata:
-   name: extended
-dependencyManagement:
-   resolutions:
-  	    - path: ../heavy.library
-  	    - path: ../light.library
-  	    - path: ../test.library

If a workspace configuration named default exists, it will be used automatically; otherwise the workspace must be specified using the UI5 CLI parameter --workspace.

Workspaces can only be used in the project that is currently being worked on, i.e. the current root project. Workspace configurations of dependencies are ignored. The workspace file, however, does not necessarily have to be located within the project. You can reference any workspace configuration file via the UI5 CLI parameter --workspace-config.

This concept has been discussed in an RFC: RFC 0006 Local Dependency Resolution

Configuration

A UI5 Workspace configuration must define a specification version (specVersion) compatible with its configuration. For more information, see Workspace Specification Versions.

yaml
specVersion: "workspace/1.0"

Metadata

Example

yaml
specVersion: workspace/1.0
-metadata:
-   name: dolphin

name

A workspace must have a name. This allows to easily switch between individual workspace configurations.

If a workspace is named default, it will be used automatically, unless a different workspace is selected using the --workspace CLI parameter.

The name property must satisfy the following conditions. They are identical to project names:

  • Must be at least 3 characters long
  • Must be no longer than 80 characters
  • Must contain lowercase characters only
  • Must contain alphanumeric characters, dash, underscore and period only
    • Exception: The @ and / characters are allowed at certain positions as explained below
  • Must start with an alphabetic character or an @ character
  • If it starts with an @ character, it must contain exactly one forward slash /
    • This is aligned with the npm concept for package scopes, for example @org/lib.name

Dependency Management

UI5 Workspace configurations allow to influence the dependency resolution when working with a UI5 project.

Example

yaml
specVersion: workspace/1.0
-metadata:
-   name: dolphin
-dependencyManagement:
-	resolutions:
-  		- path: ../light.library
-  		- path: ../heavy.library
-  		- path: ../test.library

Resolutions

yaml
dependencyManagement:
-   	resolutions:
-       	- path: ../test.library

Resolution paths will be used by UI5 CLI to look for project dependencies. Any dependencies found via these paths will be used over the ones found with the regular dependency resolution mechanism. This includes UI5 CLI extensions.

Paths must point to a directory containing a package.json. UI5 CLI will attempt to find a UI5 project here. However, if the package.json contains a workspaces, or equivalently, ui5.workspaces configuration (which overrules the first), UI5 CLI will resolve the workspace first and attempt to find UI5 projects in the configured "npm workspaces". This is commonly used in mono-repos. An example can be found in the OpenUI5 repository.

Paths must be written in POSIX (i.e. using only forward slashes / as path segment separators) and must be relative to the workspace configuration file. Absolute paths, or paths relative to the home directory (~), are not allowed. This is to ensure that workspace configuration files are easy to share and to reduce the chance of them exposing sensitive information like user names or large directory hierarchies. Symbolic links are followed.

Note that this configuration only affects the resolution of dependencies which have already been found during the regular dependency resolution process of a project. For example, if a workspace resolution path resolves to a project that would otherwise not be part of the dependency tree of the current root project, it will not be added to the dependency tree. Also, transitive dependencies of resolved projects are not being followed.

Workspace Specification Versions

A workspace configuration must define a Specification Version by setting the specVersion property. UI5 CLI uses this information to detect whether the currently installed version is compatible with a workspace's configuration.

yaml
specVersion: "workspace/1.0"
-[...]

To use new features, a workspace configuration might need to update the specVersion property.

For a given Specification Version "workspace/MAJOR.MINOR"" we will increment:

  1. MAJOR when there are breaking changes that might require additional actions by the project's maintainer
  2. MINOR when adding new features that are fully backward-compatible

All changes are documented below.

Compatibility Matrix

Unless otherwise noted in the table below, UI5 CLI modules are backward-compatible.

VersionUI5 CLI Release
workspace/1.0v3.0.0+

Specification Version workspace/1.0

Initial version.

Specification Version workspace/1.0 configurations are compatible with UI5 CLI v3.0.0 and above.

`,42)])])}const g=a(n,[["render",l]]);export{d as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/Workspace.md.Cozjt-6A.lean.js b/packages/documentation/docs/.vitepress/dist/assets/Workspace.md.Cozjt-6A.lean.js deleted file mode 100644 index df3ad581c5..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/Workspace.md.Cozjt-6A.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as i,o as e,ae as t}from"./chunks/framework.CBTkueSR.js";const d=JSON.parse('{"title":"UI5 Workspaces","description":"","frontmatter":{},"headers":[],"relativePath":"Workspace.md","filePath":"Workspace.md"}'),n={name:"Workspace.md"};function l(p,s,o,r,h,c){return e(),i("div",null,[...s[0]||(s[0]=[t("",42)])])}const g=a(n,[["render",l]]);export{d as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/app.BXNXXhu6.js b/packages/documentation/docs/.vitepress/dist/assets/app.BXNXXhu6.js deleted file mode 100644 index 9d0f2969e0..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/app.BXNXXhu6.js +++ /dev/null @@ -1 +0,0 @@ -import{t as p}from"./chunks/theme.CWt1tcxf.js";import{R as s,a0 as i,a1 as u,a2 as c,a3 as l,a4 as f,a5 as d,a6 as m,a7 as h,a8 as g,a9 as A,d as v,u as y,v as C,s as P,aa as b,ab as w,ac as R,ad as E}from"./chunks/framework.CBTkueSR.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=y();return C(()=>{P(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&b(),w(),R(),n.setup&&n.setup(),()=>E(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=_(),a=D();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function D(){return A(S)}function _(){let e=s;return h(a=>{let t=g(a),o=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),o=import(t)),s&&(e=!1),o},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/chunks/framework.CBTkueSR.js b/packages/documentation/docs/.vitepress/dist/assets/chunks/framework.CBTkueSR.js deleted file mode 100644 index aa65ec1f36..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/chunks/framework.CBTkueSR.js +++ /dev/null @@ -1,18 +0,0 @@ -/** -* @vue/shared v3.5.22 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/function Ps(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const se={},Rt=[],ke=()=>{},Xr=()=>!1,en=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Is=e=>e.startsWith("onUpdate:"),fe=Object.assign,Ls=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Po=Object.prototype.hasOwnProperty,Q=(e,t)=>Po.call(e,t),B=Array.isArray,Mt=e=>In(e)==="[object Map]",Yr=e=>In(e)==="[object Set]",G=e=>typeof e=="function",le=e=>typeof e=="string",Qe=e=>typeof e=="symbol",ee=e=>e!==null&&typeof e=="object",zr=e=>(ee(e)||G(e))&&G(e.then)&&G(e.catch),Jr=Object.prototype.toString,In=e=>Jr.call(e),Io=e=>In(e).slice(8,-1),Qr=e=>In(e)==="[object Object]",Ns=e=>le(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Ot=Ps(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Ln=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Lo=/-\w/g,Ne=Ln(e=>e.replace(Lo,t=>t.slice(1).toUpperCase())),No=/\B([A-Z])/g,lt=Ln(e=>e.replace(No,"-$1").toLowerCase()),Nn=Ln(e=>e.charAt(0).toUpperCase()+e.slice(1)),vn=Ln(e=>e?`on${Nn(e)}`:""),rt=(e,t)=>!Object.is(e,t),Yn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},Fo=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Ho=e=>{const t=le(e)?Number(e):NaN;return isNaN(t)?e:t};let sr;const Fn=()=>sr||(sr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Fs(e){if(B(e)){const t={};for(let n=0;n{if(n){const s=n.split($o);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function Hs(e){let t="";if(le(e))t=e;else if(B(e))for(let n=0;n!!(e&&e.__v_isRef===!0),Uo=e=>le(e)?e:e==null?"":B(e)||ee(e)&&(e.toString===Jr||!G(e.toString))?ti(e)?Uo(e.value):JSON.stringify(e,ni,2):String(e),ni=(e,t)=>ti(t)?ni(e,t.value):Mt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],i)=>(n[zn(s,i)+" =>"]=r,n),{})}:Yr(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>zn(n))}:Qe(t)?zn(t):ee(t)&&!B(t)&&!Qr(t)?String(t):t,zn=(e,t="")=>{var n;return Qe(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** -* @vue/reactivity v3.5.22 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let ge;class Bo{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=ge,!t&&ge&&(this.index=(ge.scopes||(ge.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0&&--this._on===0&&(ge=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n0)return;if(Wt){let t=Wt;for(Wt=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Vt;){let t=Vt;for(Vt=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function li(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function ci(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),js(s),qo(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function ys(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(ai(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function ai(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Kt)||(e.globalVersion=Kt,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!ys(e))))return;e.flags|=2;const t=e.dep,n=ne,s=He;ne=e,He=!0;try{li(e);const r=e.fn(e._value);(t.version===0||rt(r,e._value))&&(e.flags|=128,e._value=r,t.version++)}catch(r){throw t.version++,r}finally{ne=n,He=s,ci(e),e.flags&=-3}}function js(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)js(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function qo(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let He=!0;const fi=[];function Xe(){fi.push(He),He=!1}function Ye(){const e=fi.pop();He=e===void 0?!0:e}function rr(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=ne;ne=void 0;try{t()}finally{ne=n}}}let Kt=0;class Go{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Hn{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!ne||!He||ne===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==ne)n=this.activeLink=new Go(ne,this),ne.deps?(n.prevDep=ne.depsTail,ne.depsTail.nextDep=n,ne.depsTail=n):ne.deps=ne.depsTail=n,ui(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=ne.depsTail,n.nextDep=void 0,ne.depsTail.nextDep=n,ne.depsTail=n,ne.deps===n&&(ne.deps=s)}return n}trigger(t){this.version++,Kt++,this.notify(t)}notify(t){Ds();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{$s()}}}function ui(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)ui(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Sn=new WeakMap,pt=Symbol(""),_s=Symbol(""),qt=Symbol("");function ve(e,t,n){if(He&&ne){let s=Sn.get(e);s||Sn.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new Hn),r.map=s,r.key=n),r.track()}}function Ge(e,t,n,s,r,i){const l=Sn.get(e);if(!l){Kt++;return}const o=c=>{c&&c.trigger()};if(Ds(),t==="clear")l.forEach(o);else{const c=B(e),f=c&&Ns(n);if(c&&n==="length"){const a=Number(s);l.forEach((h,v)=>{(v==="length"||v===qt||!Qe(v)&&v>=a)&&o(h)})}else switch((n!==void 0||l.has(void 0))&&o(l.get(n)),f&&o(l.get(qt)),t){case"add":c?f&&o(l.get("length")):(o(l.get(pt)),Mt(e)&&o(l.get(_s)));break;case"delete":c||(o(l.get(pt)),Mt(e)&&o(l.get(_s)));break;case"set":Mt(e)&&o(l.get(pt));break}}$s()}function Xo(e,t){const n=Sn.get(e);return n&&n.get(t)}function Et(e){const t=J(e);return t===e?t:(ve(t,"iterate",qt),Pe(e)?t:t.map(ue))}function Dn(e){return ve(e=J(e),"iterate",qt),e}const Yo={__proto__:null,[Symbol.iterator](){return Qn(this,Symbol.iterator,ue)},concat(...e){return Et(this).concat(...e.map(t=>B(t)?Et(t):t))},entries(){return Qn(this,"entries",e=>(e[1]=ue(e[1]),e))},every(e,t){return Ue(this,"every",e,t,void 0,arguments)},filter(e,t){return Ue(this,"filter",e,t,n=>n.map(ue),arguments)},find(e,t){return Ue(this,"find",e,t,ue,arguments)},findIndex(e,t){return Ue(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Ue(this,"findLast",e,t,ue,arguments)},findLastIndex(e,t){return Ue(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Ue(this,"forEach",e,t,void 0,arguments)},includes(...e){return Zn(this,"includes",e)},indexOf(...e){return Zn(this,"indexOf",e)},join(e){return Et(this).join(e)},lastIndexOf(...e){return Zn(this,"lastIndexOf",e)},map(e,t){return Ue(this,"map",e,t,void 0,arguments)},pop(){return Dt(this,"pop")},push(...e){return Dt(this,"push",e)},reduce(e,...t){return ir(this,"reduce",e,t)},reduceRight(e,...t){return ir(this,"reduceRight",e,t)},shift(){return Dt(this,"shift")},some(e,t){return Ue(this,"some",e,t,void 0,arguments)},splice(...e){return Dt(this,"splice",e)},toReversed(){return Et(this).toReversed()},toSorted(e){return Et(this).toSorted(e)},toSpliced(...e){return Et(this).toSpliced(...e)},unshift(...e){return Dt(this,"unshift",e)},values(){return Qn(this,"values",ue)}};function Qn(e,t,n){const s=Dn(e),r=s[t]();return s!==e&&!Pe(e)&&(r._next=r.next,r.next=()=>{const i=r._next();return i.done||(i.value=n(i.value)),i}),r}const zo=Array.prototype;function Ue(e,t,n,s,r,i){const l=Dn(e),o=l!==e&&!Pe(e),c=l[t];if(c!==zo[t]){const h=c.apply(e,i);return o?ue(h):h}let f=n;l!==e&&(o?f=function(h,v){return n.call(this,ue(h),v,e)}:n.length>2&&(f=function(h,v){return n.call(this,h,v,e)}));const a=c.call(l,f,s);return o&&r?r(a):a}function ir(e,t,n,s){const r=Dn(e);let i=n;return r!==e&&(Pe(e)?n.length>3&&(i=function(l,o,c){return n.call(this,l,o,c,e)}):i=function(l,o,c){return n.call(this,l,ue(o),c,e)}),r[t](i,...s)}function Zn(e,t,n){const s=J(e);ve(s,"iterate",qt);const r=s[t](...n);return(r===-1||r===!1)&&ks(n[0])?(n[0]=J(n[0]),s[t](...n)):r}function Dt(e,t,n=[]){Xe(),Ds();const s=J(e)[t].apply(e,n);return $s(),Ye(),s}const Jo=Ps("__proto__,__v_isRef,__isVue"),di=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Qe));function Qo(e){Qe(e)||(e=String(e));const t=J(this);return ve(t,"has",e),t.hasOwnProperty(e)}class hi{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?cl:vi:i?mi:gi).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const l=B(t);if(!r){let c;if(l&&(c=Yo[n]))return c;if(n==="hasOwnProperty")return Qo}const o=Reflect.get(t,n,ae(t)?t:s);if((Qe(n)?di.has(n):Jo(n))||(r||ve(t,"get",n),i))return o;if(ae(o)){const c=l&&Ns(n)?o:o.value;return r&&ee(c)?Gt(c):c}return ee(o)?r?Gt(o):Lt(o):o}}class pi extends hi{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];if(!this._isShallow){const c=it(i);if(!Pe(s)&&!it(s)&&(i=J(i),s=J(s)),!B(t)&&ae(i)&&!ae(s))return c||(i.value=s),!0}const l=B(t)&&Ns(n)?Number(n)e,on=e=>Reflect.getPrototypeOf(e);function sl(e,t,n){return function(...s){const r=this.__v_raw,i=J(r),l=Mt(i),o=e==="entries"||e===Symbol.iterator&&l,c=e==="keys"&&l,f=r[e](...s),a=n?bs:t?xn:ue;return!t&&ve(i,"iterate",c?_s:pt),{next(){const{value:h,done:v}=f.next();return v?{value:h,done:v}:{value:o?[a(h[0]),a(h[1])]:a(h),done:v}},[Symbol.iterator](){return this}}}}function ln(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function rl(e,t){const n={get(r){const i=this.__v_raw,l=J(i),o=J(r);e||(rt(r,o)&&ve(l,"get",r),ve(l,"get",o));const{has:c}=on(l),f=t?bs:e?xn:ue;if(c.call(l,r))return f(i.get(r));if(c.call(l,o))return f(i.get(o));i!==l&&i.get(r)},get size(){const r=this.__v_raw;return!e&&ve(J(r),"iterate",pt),r.size},has(r){const i=this.__v_raw,l=J(i),o=J(r);return e||(rt(r,o)&&ve(l,"has",r),ve(l,"has",o)),r===o?i.has(r):i.has(r)||i.has(o)},forEach(r,i){const l=this,o=l.__v_raw,c=J(o),f=t?bs:e?xn:ue;return!e&&ve(c,"iterate",pt),o.forEach((a,h)=>r.call(i,f(a),f(h),l))}};return fe(n,e?{add:ln("add"),set:ln("set"),delete:ln("delete"),clear:ln("clear")}:{add(r){!t&&!Pe(r)&&!it(r)&&(r=J(r));const i=J(this);return on(i).has.call(i,r)||(i.add(r),Ge(i,"add",r,r)),this},set(r,i){!t&&!Pe(i)&&!it(i)&&(i=J(i));const l=J(this),{has:o,get:c}=on(l);let f=o.call(l,r);f||(r=J(r),f=o.call(l,r));const a=c.call(l,r);return l.set(r,i),f?rt(i,a)&&Ge(l,"set",r,i):Ge(l,"add",r,i),this},delete(r){const i=J(this),{has:l,get:o}=on(i);let c=l.call(i,r);c||(r=J(r),c=l.call(i,r)),o&&o.call(i,r);const f=i.delete(r);return c&&Ge(i,"delete",r,void 0),f},clear(){const r=J(this),i=r.size!==0,l=r.clear();return i&&Ge(r,"clear",void 0,void 0),l}}),["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=sl(r,e,t)}),n}function Vs(e,t){const n=rl(e,t);return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(Q(n,r)&&r in s?n:s,r,i)}const il={get:Vs(!1,!1)},ol={get:Vs(!1,!0)},ll={get:Vs(!0,!1)};const gi=new WeakMap,mi=new WeakMap,vi=new WeakMap,cl=new WeakMap;function al(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function fl(e){return e.__v_skip||!Object.isExtensible(e)?0:al(Io(e))}function Lt(e){return it(e)?e:Ws(e,!1,el,il,gi)}function ul(e){return Ws(e,!1,nl,ol,mi)}function Gt(e){return Ws(e,!0,tl,ll,vi)}function Ws(e,t,n,s,r){if(!ee(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=fl(e);if(i===0)return e;const l=r.get(e);if(l)return l;const o=new Proxy(e,i===2?s:n);return r.set(e,o),o}function gt(e){return it(e)?gt(e.__v_raw):!!(e&&e.__v_isReactive)}function it(e){return!!(e&&e.__v_isReadonly)}function Pe(e){return!!(e&&e.__v_isShallow)}function ks(e){return e?!!e.__v_raw:!1}function J(e){const t=e&&e.__v_raw;return t?J(t):e}function yn(e){return!Q(e,"__v_skip")&&Object.isExtensible(e)&&Zr(e,"__v_skip",!0),e}const ue=e=>ee(e)?Lt(e):e,xn=e=>ee(e)?Gt(e):e;function ae(e){return e?e.__v_isRef===!0:!1}function mt(e){return yi(e,!1)}function Ie(e){return yi(e,!0)}function yi(e,t){return ae(e)?e:new dl(e,t)}class dl{constructor(t,n){this.dep=new Hn,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:J(t),this._value=n?t:ue(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||Pe(t)||it(t);t=s?t:J(t),rt(t,n)&&(this._rawValue=t,this._value=s?t:ue(t),this.dep.trigger())}}function Us(e){return ae(e)?e.value:e}function ce(e){return G(e)?e():Us(e)}const hl={get:(e,t,n)=>t==="__v_raw"?e:Us(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return ae(r)&&!ae(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function _i(e){return gt(e)?e:new Proxy(e,hl)}class pl{constructor(t){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new Hn,{get:s,set:r}=t(n.track.bind(n),n.trigger.bind(n));this._get=s,this._set=r}get value(){return this._value=this._get()}set value(t){this._set(t)}}function gl(e){return new pl(e)}class ml{constructor(t,n,s){this._object=t,this._key=n,this._defaultValue=s,this.__v_isRef=!0,this._value=void 0}get value(){const t=this._object[this._key];return this._value=t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return Xo(J(this._object),this._key)}}class vl{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function yl(e,t,n){return ae(e)?e:G(e)?new vl(e):ee(e)&&arguments.length>1?_l(e,t,n):mt(e)}function _l(e,t,n){const s=e[t];return ae(s)?s:new ml(e,t,n)}class bl{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Hn(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Kt-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&ne!==this)return oi(this,!0),!0}get value(){const t=this.dep.track();return ai(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function wl(e,t,n=!1){let s,r;return G(e)?s=e:(s=e.get,r=e.set),new bl(s,r,n)}const cn={},Tn=new WeakMap;let dt;function Sl(e,t=!1,n=dt){if(n){let s=Tn.get(n);s||Tn.set(n,s=[]),s.push(e)}}function xl(e,t,n=se){const{immediate:s,deep:r,once:i,scheduler:l,augmentJob:o,call:c}=n,f=g=>r?g:Pe(g)||r===!1||r===0?st(g,1):st(g);let a,h,v,y,C=!1,I=!1;if(ae(e)?(h=()=>e.value,C=Pe(e)):gt(e)?(h=()=>f(e),C=!0):B(e)?(I=!0,C=e.some(g=>gt(g)||Pe(g)),h=()=>e.map(g=>{if(ae(g))return g.value;if(gt(g))return f(g);if(G(g))return c?c(g,2):g()})):G(e)?t?h=c?()=>c(e,2):e:h=()=>{if(v){Xe();try{v()}finally{Ye()}}const g=dt;dt=a;try{return c?c(e,3,[y]):e(y)}finally{dt=g}}:h=ke,t&&r){const g=h,O=r===!0?1/0:r;h=()=>st(g(),O)}const K=si(),H=()=>{a.stop(),K&&K.active&&Ls(K.effects,a)};if(i&&t){const g=t;t=(...O)=>{g(...O),H()}}let V=I?new Array(e.length).fill(cn):cn;const p=g=>{if(!(!(a.flags&1)||!a.dirty&&!g))if(t){const O=a.run();if(r||C||(I?O.some((W,R)=>rt(W,V[R])):rt(O,V))){v&&v();const W=dt;dt=a;try{const R=[O,V===cn?void 0:I&&V[0]===cn?[]:V,y];V=O,c?c(t,3,R):t(...R)}finally{dt=W}}}else a.run()};return o&&o(p),a=new ri(h),a.scheduler=l?()=>l(p,!1):p,y=g=>Sl(g,!1,a),v=a.onStop=()=>{const g=Tn.get(a);if(g){if(c)c(g,4);else for(const O of g)O();Tn.delete(a)}},t?s?p(!0):V=a.run():l?l(p.bind(null,!0),!0):a.run(),H.pause=a.pause.bind(a),H.resume=a.resume.bind(a),H.stop=H,H}function st(e,t=1/0,n){if(t<=0||!ee(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,ae(e))st(e.value,t,n);else if(B(e))for(let s=0;s{st(s,t,n)});else if(Qr(e)){for(const s in e)st(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&st(e[s],t,n)}return e}/** -* @vue/runtime-core v3.5.22 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/function tn(e,t,n,s){try{return s?e(...s):e()}catch(r){$n(r,t,n)}}function De(e,t,n,s){if(G(e)){const r=tn(e,t,n,s);return r&&zr(r)&&r.catch(i=>{$n(i,t,n)}),r}if(B(e)){const r=[];for(let i=0;i>>1,r=be[s],i=Xt(r);i=Xt(n)?be.push(e):be.splice(El(t),0,e),e.flags|=1,wi()}}function wi(){En||(En=bi.then(Si))}function Cl(e){B(e)?Pt.push(...e):tt&&e.id===-1?tt.splice(At+1,0,e):e.flags&1||(Pt.push(e),e.flags|=1),wi()}function or(e,t,n=Ve+1){for(;nXt(n)-Xt(s));if(Pt.length=0,tt){tt.push(...t);return}for(tt=t,At=0;Ate.id==null?e.flags&2?-1:1/0:e.id;function Si(e){try{for(Ve=0;Ve{s._d&&On(-1);const i=An(t);let l;try{l=e(...r)}finally{An(i),s._d&&On(1)}return l};return s._n=!0,s._c=!0,s._d=!0,s}function We(e,t,n,s){const r=e.dirs,i=t&&t.dirs;for(let l=0;le.__isTeleport,qe=Symbol("_leaveCb"),an=Symbol("_enterCb");function Ml(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return Nt(()=>{e.isMounted=!0}),Li(()=>{e.isUnmounting=!0}),e}const Re=[Function,Array],Ei={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Re,onEnter:Re,onAfterEnter:Re,onEnterCancelled:Re,onBeforeLeave:Re,onLeave:Re,onAfterLeave:Re,onLeaveCancelled:Re,onBeforeAppear:Re,onAppear:Re,onAfterAppear:Re,onAppearCancelled:Re},Ci=e=>{const t=e.subTree;return t.component?Ci(t.component):t},Ol={name:"BaseTransition",props:Ei,setup(e,{slots:t}){const n=xt(),s=Ml();return()=>{const r=t.default&&Mi(t.default(),!0);if(!r||!r.length)return;const i=Ai(r),l=J(e),{mode:o}=l;if(s.isLeaving)return es(i);const c=lr(i);if(!c)return es(i);let f=ws(c,l,s,n,h=>f=h);c.type!==de&&Yt(c,f);let a=n.subTree&&lr(n.subTree);if(a&&a.type!==de&&!ht(a,c)&&Ci(n).type!==de){let h=ws(a,l,s,n);if(Yt(a,h),o==="out-in"&&c.type!==de)return s.isLeaving=!0,h.afterLeave=()=>{s.isLeaving=!1,n.job.flags&8||n.update(),delete h.afterLeave,a=void 0},es(i);o==="in-out"&&c.type!==de?h.delayLeave=(v,y,C)=>{const I=Ri(s,a);I[String(a.key)]=a,v[qe]=()=>{y(),v[qe]=void 0,delete f.delayedLeave,a=void 0},f.delayedLeave=()=>{C(),delete f.delayedLeave,a=void 0}}:a=void 0}else a&&(a=void 0);return i}}};function Ai(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==de){t=n;break}}return t}const Pl=Ol;function Ri(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function ws(e,t,n,s,r){const{appear:i,mode:l,persisted:o=!1,onBeforeEnter:c,onEnter:f,onAfterEnter:a,onEnterCancelled:h,onBeforeLeave:v,onLeave:y,onAfterLeave:C,onLeaveCancelled:I,onBeforeAppear:K,onAppear:H,onAfterAppear:V,onAppearCancelled:p}=t,g=String(e.key),O=Ri(n,e),W=(T,P)=>{T&&De(T,s,9,P)},R=(T,P)=>{const E=P[1];W(T,P),B(T)?T.every(_=>_.length<=1)&&E():T.length<=1&&E()},U={mode:l,persisted:o,beforeEnter(T){let P=c;if(!n.isMounted)if(i)P=K||c;else return;T[qe]&&T[qe](!0);const E=O[g];E&&ht(e,E)&&E.el[qe]&&E.el[qe](),W(P,[T])},enter(T){let P=f,E=a,_=h;if(!n.isMounted)if(i)P=H||f,E=V||a,_=p||h;else return;let N=!1;const Y=T[an]=re=>{N||(N=!0,re?W(_,[T]):W(E,[T]),U.delayedLeave&&U.delayedLeave(),T[an]=void 0)};P?R(P,[T,Y]):Y()},leave(T,P){const E=String(e.key);if(T[an]&&T[an](!0),n.isUnmounting)return P();W(v,[T]);let _=!1;const N=T[qe]=Y=>{_||(_=!0,P(),Y?W(I,[T]):W(C,[T]),T[qe]=void 0,O[E]===e&&delete O[E])};O[E]=e,y?R(y,[T,N]):N()},clone(T){const P=ws(T,t,n,s,r);return r&&r(P),P}};return U}function es(e){if(Vn(e))return e=ot(e),e.children=null,e}function lr(e){if(!Vn(e))return Ti(e.type)&&e.children?Ai(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&G(n.default))return n.default()}}function Yt(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Yt(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Mi(e,t=!1,n){let s=[],r=0;for(let i=0;i1)for(let i=0;iIt(C,t&&(B(t)?t[I]:t),n,s,r));return}if(vt(s)&&!r){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&It(e,t,n,s.component.subTree);return}const i=s.shapeFlag&4?Xs(s.component):s.el,l=r?null:i,{i:o,r:c}=e,f=t&&t.r,a=o.refs===se?o.refs={}:o.refs,h=o.setupState,v=J(h),y=h===se?Xr:C=>Q(v,C);if(f!=null&&f!==c){if(cr(t),le(f))a[f]=null,y(f)&&(h[f]=null);else if(ae(f)){f.value=null;const C=t;C.k&&(a[C.k]=null)}}if(G(c))tn(c,o,12,[l,a]);else{const C=le(c),I=ae(c);if(C||I){const K=()=>{if(e.f){const H=C?y(c)?h[c]:a[c]:c.value;if(r)B(H)&&Ls(H,i);else if(B(H))H.includes(i)||H.push(i);else if(C)a[c]=[i],y(c)&&(h[c]=a[c]);else{const V=[i];c.value=V,e.k&&(a[e.k]=V)}}else C?(a[c]=l,y(c)&&(h[c]=l)):I&&(c.value=l,e.k&&(a[e.k]=l))};if(l){const H=()=>{K(),Rn.delete(e)};H.id=-1,Rn.set(e,H),Ce(H,n)}else cr(e),K()}}}function cr(e){const t=Rn.get(e);t&&(t.flags|=8,Rn.delete(e))}let ar=!1;const Ct=()=>{ar||(console.error("Hydration completed but contains mismatches."),ar=!0)},Il=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",Ll=e=>e.namespaceURI.includes("MathML"),fn=e=>{if(e.nodeType===1){if(Il(e))return"svg";if(Ll(e))return"mathml"}},un=e=>e.nodeType===8;function Nl(e){const{mt:t,p:n,o:{patchProp:s,createText:r,nextSibling:i,parentNode:l,remove:o,insert:c,createComment:f}}=e,a=(p,g)=>{if(!g.hasChildNodes()){n(null,p,g),Cn(),g._vnode=p;return}h(g.firstChild,p,null,null,null),Cn(),g._vnode=p},h=(p,g,O,W,R,U=!1)=>{U=U||!!g.dynamicChildren;const T=un(p)&&p.data==="[",P=()=>I(p,g,O,W,R,T),{type:E,ref:_,shapeFlag:N,patchFlag:Y}=g;let re=p.nodeType;g.el=p,Y===-2&&(U=!1,g.dynamicChildren=null);let $=null;switch(E){case bt:re!==3?g.children===""?(c(g.el=r(""),l(p),p),$=p):$=P():(p.data!==g.children&&(Ct(),p.data=g.children),$=i(p));break;case de:V(p)?($=i(p),H(g.el=p.content.firstChild,p,O)):re!==8||T?$=P():$=i(p);break;case Ut:if(T&&(p=i(p),re=p.nodeType),re===1||re===3){$=p;const X=!g.children.length;for(let D=0;D{U=U||!!g.dynamicChildren;const{type:T,props:P,patchFlag:E,shapeFlag:_,dirs:N,transition:Y}=g,re=T==="input"||T==="option";if(re||E!==-1){N&&We(g,null,O,"created");let $=!1;if(V(p)){$=zi(null,Y)&&O&&O.vnode.props&&O.vnode.props.appear;const D=p.content.firstChild;if($){const oe=D.getAttribute("class");oe&&(D.$cls=oe),Y.beforeEnter(D)}H(D,p,O),g.el=p=D}if(_&16&&!(P&&(P.innerHTML||P.textContent))){let D=y(p.firstChild,g,p,O,W,R,U);for(;D;){dn(p,1)||Ct();const oe=D;D=D.nextSibling,o(oe)}}else if(_&8){let D=g.children;D[0]===` -`&&(p.tagName==="PRE"||p.tagName==="TEXTAREA")&&(D=D.slice(1)),p.textContent!==D&&(dn(p,0)||Ct(),p.textContent=g.children)}if(P){if(re||!U||E&48){const D=p.tagName.includes("-");for(const oe in P)(re&&(oe.endsWith("value")||oe==="indeterminate")||en(oe)&&!Ot(oe)||oe[0]==="."||D)&&s(p,oe,null,P[oe],void 0,O)}else if(P.onClick)s(p,"onClick",null,P.onClick,void 0,O);else if(E&4&>(P.style))for(const D in P.style)P.style[D]}let X;(X=P&&P.onVnodeBeforeMount)&&Me(X,O,g),N&&We(g,null,O,"beforeMount"),((X=P&&P.onVnodeMounted)||N||$)&&ro(()=>{X&&Me(X,O,g),$&&Y.enter(p),N&&We(g,null,O,"mounted")},W)}return p.nextSibling},y=(p,g,O,W,R,U,T)=>{T=T||!!g.dynamicChildren;const P=g.children,E=P.length;for(let _=0;_{const{slotScopeIds:T}=g;T&&(R=R?R.concat(T):T);const P=l(p),E=y(i(p),g,P,O,W,R,U);return E&&un(E)&&E.data==="]"?i(g.anchor=E):(Ct(),c(g.anchor=f("]"),P,E),E)},I=(p,g,O,W,R,U)=>{if(dn(p.parentElement,1)||Ct(),g.el=null,U){const E=K(p);for(;;){const _=i(p);if(_&&_!==E)o(_);else break}}const T=i(p),P=l(p);return o(p),n(null,g,P,T,O,W,fn(P),R),O&&(O.vnode.el=g.el,no(O,g.el)),T},K=(p,g="[",O="]")=>{let W=0;for(;p;)if(p=i(p),p&&un(p)&&(p.data===g&&W++,p.data===O)){if(W===0)return i(p);W--}return p},H=(p,g,O)=>{const W=g.parentNode;W&&W.replaceChild(p,g);let R=O;for(;R;)R.vnode.el===g&&(R.vnode.el=R.subTree.el=p),R=R.parent},V=p=>p.nodeType===1&&p.tagName==="TEMPLATE";return[a,h]}const fr="data-allow-mismatch",Fl={0:"text",1:"children",2:"class",3:"style",4:"attribute"};function dn(e,t){if(t===0||t===1)for(;e&&!e.hasAttribute(fr);)e=e.parentElement;const n=e&&e.getAttribute(fr);if(n==null)return!1;if(n==="")return!0;{const s=n.split(",");return t===0&&s.includes("children")?!0:s.includes(Fl[t])}}Fn().requestIdleCallback;Fn().cancelIdleCallback;const vt=e=>!!e.type.__asyncLoader,Vn=e=>e.type.__isKeepAlive;function Hl(e,t){Ii(e,"a",t)}function Dl(e,t){Ii(e,"da",t)}function Ii(e,t,n=ye){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(Wn(t,s,n),n){let r=n.parent;for(;r&&r.parent;)Vn(r.parent.vnode)&&$l(s,t,n,r),r=r.parent}}function $l(e,t,n,s){const r=Wn(t,e,s,!0);kn(()=>{Ls(s[t],r)},n)}function Wn(e,t,n=ye,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...l)=>{Xe();const o=nn(n),c=De(t,n,e,l);return o(),Ye(),c});return s?r.unshift(i):r.push(i),i}}const Ze=e=>(t,n=ye)=>{(!Qt||e==="sp")&&Wn(e,(...s)=>t(...s),n)},jl=Ze("bm"),Nt=Ze("m"),Vl=Ze("bu"),Wl=Ze("u"),Li=Ze("bum"),kn=Ze("um"),kl=Ze("sp"),Ul=Ze("rtg"),Bl=Ze("rtc");function Kl(e,t=ye){Wn("ec",e,t)}const Ni="components";function pf(e,t){return Hi(Ni,e,!0,t)||e}const Fi=Symbol.for("v-ndc");function gf(e){return le(e)?Hi(Ni,e,!1)||e:e||Fi}function Hi(e,t,n=!0,s=!1){const r=Se||ye;if(r){const i=r.type;{const o=Oc(i,!1);if(o&&(o===t||o===Ne(t)||o===Nn(Ne(t))))return i}const l=ur(r[e]||i[e],t)||ur(r.appContext[e],t);return!l&&s?i:l}}function ur(e,t){return e&&(e[t]||e[Ne(t)]||e[Nn(Ne(t))])}function mf(e,t,n,s){let r;const i=n,l=B(e);if(l||le(e)){const o=l&>(e);let c=!1,f=!1;o&&(c=!Pe(e),f=it(e),e=Dn(e)),r=new Array(e.length);for(let a=0,h=e.length;at(o,c,void 0,i));else{const o=Object.keys(e);r=new Array(o.length);for(let c=0,f=o.length;c0;return t!=="default"&&(n.name=t),Cs(),As(we,null,[he("slot",n,s&&s())],f?-2:64)}let i=e[t];i&&i._c&&(i._d=!1),Cs();const l=i&&Di(i(n)),o=n.key||l&&l.key,c=As(we,{key:(o&&!Qe(o)?o:`_${t}`)+(!l&&s?"_fb":"")},l||(s?s():[]),l&&e._===1?64:-2);return!r&&c.scopeId&&(c.slotScopeIds=[c.scopeId+"-s"]),i&&i._c&&(i._d=!0),c}function Di(e){return e.some(t=>Jt(t)?!(t.type===de||t.type===we&&!Di(t.children)):!0)?e:null}function yf(e,t){const n={};for(const s in e)n[/[A-Z]/.test(s)?`on:${s}`:vn(s)]=e[s];return n}const Ss=e=>e?ao(e)?Xs(e):Ss(e.parent):null,kt=fe(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Ss(e.parent),$root:e=>Ss(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>ji(e),$forceUpdate:e=>e.f||(e.f=()=>{Bs(e.update)}),$nextTick:e=>e.n||(e.n=jn.bind(e.proxy)),$watch:e=>hc.bind(e)}),ts=(e,t)=>e!==se&&!e.__isScriptSetup&&Q(e,t),ql={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:l,type:o,appContext:c}=e;let f;if(t[0]!=="$"){const y=l[t];if(y!==void 0)switch(y){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(ts(s,t))return l[t]=1,s[t];if(r!==se&&Q(r,t))return l[t]=2,r[t];if((f=e.propsOptions[0])&&Q(f,t))return l[t]=3,i[t];if(n!==se&&Q(n,t))return l[t]=4,n[t];xs&&(l[t]=0)}}const a=kt[t];let h,v;if(a)return t==="$attrs"&&ve(e.attrs,"get",""),a(e);if((h=o.__cssModules)&&(h=h[t]))return h;if(n!==se&&Q(n,t))return l[t]=4,n[t];if(v=c.config.globalProperties,Q(v,t))return v[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return ts(r,t)?(r[t]=n,!0):s!==se&&Q(s,t)?(s[t]=n,!0):Q(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,propsOptions:i,type:l}},o){let c,f;return!!(n[o]||e!==se&&o[0]!=="$"&&Q(e,o)||ts(t,o)||(c=i[0])&&Q(c,o)||Q(s,o)||Q(kt,o)||Q(r.config.globalProperties,o)||(f=l.__cssModules)&&f[o])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Q(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function _f(){return Gl().slots}function Gl(e){const t=xt();return t.setupContext||(t.setupContext=uo(t))}function dr(e){return B(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let xs=!0;function Xl(e){const t=ji(e),n=e.proxy,s=e.ctx;xs=!1,t.beforeCreate&&hr(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:l,watch:o,provide:c,inject:f,created:a,beforeMount:h,mounted:v,beforeUpdate:y,updated:C,activated:I,deactivated:K,beforeDestroy:H,beforeUnmount:V,destroyed:p,unmounted:g,render:O,renderTracked:W,renderTriggered:R,errorCaptured:U,serverPrefetch:T,expose:P,inheritAttrs:E,components:_,directives:N,filters:Y}=t;if(f&&Yl(f,s,null),l)for(const X in l){const D=l[X];G(D)&&(s[X]=D.bind(n))}if(r){const X=r.call(n,n);ee(X)&&(e.data=Lt(X))}if(xs=!0,i)for(const X in i){const D=i[X],oe=G(D)?D.bind(n,n):G(D.get)?D.get.bind(n,n):ke,sn=!G(D)&&G(D.set)?D.set.bind(n):ke,ct=ie({get:oe,set:sn});Object.defineProperty(s,X,{enumerable:!0,configurable:!0,get:()=>ct.value,set:$e=>ct.value=$e})}if(o)for(const X in o)$i(o[X],s,n,X);if(c){const X=G(c)?c.call(n):c;Reflect.ownKeys(X).forEach(D=>{tc(D,X[D])})}a&&hr(a,e,"c");function $(X,D){B(D)?D.forEach(oe=>X(oe.bind(n))):D&&X(D.bind(n))}if($(jl,h),$(Nt,v),$(Vl,y),$(Wl,C),$(Hl,I),$(Dl,K),$(Kl,U),$(Bl,W),$(Ul,R),$(Li,V),$(kn,g),$(kl,T),B(P))if(P.length){const X=e.exposed||(e.exposed={});P.forEach(D=>{Object.defineProperty(X,D,{get:()=>n[D],set:oe=>n[D]=oe,enumerable:!0})})}else e.exposed||(e.exposed={});O&&e.render===ke&&(e.render=O),E!=null&&(e.inheritAttrs=E),_&&(e.components=_),N&&(e.directives=N),T&&Pi(e)}function Yl(e,t,n=ke){B(e)&&(e=Ts(e));for(const s in e){const r=e[s];let i;ee(r)?"default"in r?i=_t(r.from||s,r.default,!0):i=_t(r.from||s):i=_t(r),ae(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:l=>i.value=l}):t[s]=i}}function hr(e,t,n){De(B(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function $i(e,t,n,s){let r=s.includes(".")?eo(n,s):()=>n[s];if(le(e)){const i=t[e];G(i)&&Le(r,i)}else if(G(e))Le(r,e.bind(n));else if(ee(e))if(B(e))e.forEach(i=>$i(i,t,n,s));else{const i=G(e.handler)?e.handler.bind(n):t[e.handler];G(i)&&Le(r,i,e)}}function ji(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:l}}=e.appContext,o=i.get(t);let c;return o?c=o:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(f=>Mn(c,f,l,!0)),Mn(c,t,l)),ee(t)&&i.set(t,c),c}function Mn(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&Mn(e,i,n,!0),r&&r.forEach(l=>Mn(e,l,n,!0));for(const l in t)if(!(s&&l==="expose")){const o=zl[l]||n&&n[l];e[l]=o?o(e[l],t[l]):t[l]}return e}const zl={data:pr,props:gr,emits:gr,methods:jt,computed:jt,beforeCreate:_e,created:_e,beforeMount:_e,mounted:_e,beforeUpdate:_e,updated:_e,beforeDestroy:_e,beforeUnmount:_e,destroyed:_e,unmounted:_e,activated:_e,deactivated:_e,errorCaptured:_e,serverPrefetch:_e,components:jt,directives:jt,watch:Ql,provide:pr,inject:Jl};function pr(e,t){return t?e?function(){return fe(G(e)?e.call(this,this):e,G(t)?t.call(this,this):t)}:t:e}function Jl(e,t){return jt(Ts(e),Ts(t))}function Ts(e){if(B(e)){const t={};for(let n=0;n1)return n&&G(t)?t.call(s&&s.proxy):t}}function Wi(){return!!(xt()||yt)}const ki={},Ui=()=>Object.create(ki),Bi=e=>Object.getPrototypeOf(e)===ki;function nc(e,t,n,s=!1){const r={},i=Ui();e.propsDefaults=Object.create(null),Ki(e,t,r,i);for(const l in e.propsOptions[0])l in r||(r[l]=void 0);n?e.props=s?r:ul(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function sc(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:l}}=e,o=J(r),[c]=e.propsOptions;let f=!1;if((s||l>0)&&!(l&16)){if(l&8){const a=e.vnode.dynamicProps;for(let h=0;h{c=!0;const[v,y]=qi(h,t,!0);fe(l,v),y&&o.push(...y)};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}if(!i&&!c)return ee(e)&&s.set(e,Rt),Rt;if(B(i))for(let a=0;ae==="_"||e==="_ctx"||e==="$stable",qs=e=>B(e)?e.map(Oe):[Oe(e)],ic=(e,t,n)=>{if(t._n)return t;const s=Al((...r)=>qs(t(...r)),n);return s._c=!1,s},Gi=(e,t,n)=>{const s=e._ctx;for(const r in e){if(Ks(r))continue;const i=e[r];if(G(i))t[r]=ic(r,i,s);else if(i!=null){const l=qs(i);t[r]=()=>l}}},Xi=(e,t)=>{const n=qs(t);e.slots.default=()=>n},Yi=(e,t,n)=>{for(const s in t)(n||!Ks(s))&&(e[s]=t[s])},oc=(e,t,n)=>{const s=e.slots=Ui();if(e.vnode.shapeFlag&32){const r=t._;r?(Yi(s,t,n),n&&Zr(s,"_",r,!0)):Gi(t,s)}else t&&Xi(e,t)},lc=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,l=se;if(s.shapeFlag&32){const o=t._;o?n&&o===1?i=!1:Yi(r,t,n):(i=!t.$stable,Gi(t,r)),l=t}else t&&(Xi(e,t),l={default:1});if(i)for(const o in r)!Ks(o)&&l[o]==null&&delete r[o]},Ce=ro;function cc(e){return ac(e,Nl)}function ac(e,t){const n=Fn();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:l,createText:o,createComment:c,setText:f,setElementText:a,parentNode:h,nextSibling:v,setScopeId:y=ke,insertStaticContent:C}=e,I=(u,d,m,S=null,b=null,w=null,L=void 0,M=null,A=!!d.dynamicChildren)=>{if(u===d)return;u&&!ht(u,d)&&(S=rn(u),$e(u,b,w,!0),u=null),d.patchFlag===-2&&(A=!1,d.dynamicChildren=null);const{type:x,ref:k,shapeFlag:F}=d;switch(x){case bt:K(u,d,m,S);break;case de:H(u,d,m,S);break;case Ut:u==null&&V(d,m,S,L);break;case we:_(u,d,m,S,b,w,L,M,A);break;default:F&1?O(u,d,m,S,b,w,L,M,A):F&6?N(u,d,m,S,b,w,L,M,A):(F&64||F&128)&&x.process(u,d,m,S,b,w,L,M,A,Tt)}k!=null&&b?It(k,u&&u.ref,w,d||u,!d):k==null&&u&&u.ref!=null&&It(u.ref,null,w,u,!0)},K=(u,d,m,S)=>{if(u==null)s(d.el=o(d.children),m,S);else{const b=d.el=u.el;d.children!==u.children&&f(b,d.children)}},H=(u,d,m,S)=>{u==null?s(d.el=c(d.children||""),m,S):d.el=u.el},V=(u,d,m,S)=>{[u.el,u.anchor]=C(u.children,d,m,S,u.el,u.anchor)},p=({el:u,anchor:d},m,S)=>{let b;for(;u&&u!==d;)b=v(u),s(u,m,S),u=b;s(d,m,S)},g=({el:u,anchor:d})=>{let m;for(;u&&u!==d;)m=v(u),r(u),u=m;r(d)},O=(u,d,m,S,b,w,L,M,A)=>{d.type==="svg"?L="svg":d.type==="math"&&(L="mathml"),u==null?W(d,m,S,b,w,L,M,A):T(u,d,b,w,L,M,A)},W=(u,d,m,S,b,w,L,M)=>{let A,x;const{props:k,shapeFlag:F,transition:j,dirs:q}=u;if(A=u.el=l(u.type,w,k&&k.is,k),F&8?a(A,u.children):F&16&&U(u.children,A,null,S,b,ns(u,w),L,M),q&&We(u,null,S,"created"),R(A,u,u.scopeId,L,S),k){for(const te in k)te!=="value"&&!Ot(te)&&i(A,te,null,k[te],w,S);"value"in k&&i(A,"value",null,k.value,w),(x=k.onVnodeBeforeMount)&&Me(x,S,u)}q&&We(u,null,S,"beforeMount");const z=zi(b,j);z&&j.beforeEnter(A),s(A,d,m),((x=k&&k.onVnodeMounted)||z||q)&&Ce(()=>{x&&Me(x,S,u),z&&j.enter(A),q&&We(u,null,S,"mounted")},b)},R=(u,d,m,S,b)=>{if(m&&y(u,m),S)for(let w=0;w{for(let x=A;x{const M=d.el=u.el;let{patchFlag:A,dynamicChildren:x,dirs:k}=d;A|=u.patchFlag&16;const F=u.props||se,j=d.props||se;let q;if(m&&at(m,!1),(q=j.onVnodeBeforeUpdate)&&Me(q,m,d,u),k&&We(d,u,m,"beforeUpdate"),m&&at(m,!0),(F.innerHTML&&j.innerHTML==null||F.textContent&&j.textContent==null)&&a(M,""),x?P(u.dynamicChildren,x,M,m,S,ns(d,b),w):L||D(u,d,M,null,m,S,ns(d,b),w,!1),A>0){if(A&16)E(M,F,j,m,b);else if(A&2&&F.class!==j.class&&i(M,"class",null,j.class,b),A&4&&i(M,"style",F.style,j.style,b),A&8){const z=d.dynamicProps;for(let te=0;te{q&&Me(q,m,d,u),k&&We(d,u,m,"updated")},S)},P=(u,d,m,S,b,w,L)=>{for(let M=0;M{if(d!==m){if(d!==se)for(const w in d)!Ot(w)&&!(w in m)&&i(u,w,d[w],null,b,S);for(const w in m){if(Ot(w))continue;const L=m[w],M=d[w];L!==M&&w!=="value"&&i(u,w,M,L,b,S)}"value"in m&&i(u,"value",d.value,m.value,b)}},_=(u,d,m,S,b,w,L,M,A)=>{const x=d.el=u?u.el:o(""),k=d.anchor=u?u.anchor:o("");let{patchFlag:F,dynamicChildren:j,slotScopeIds:q}=d;q&&(M=M?M.concat(q):q),u==null?(s(x,m,S),s(k,m,S),U(d.children||[],m,k,b,w,L,M,A)):F>0&&F&64&&j&&u.dynamicChildren?(P(u.dynamicChildren,j,m,b,w,L,M),(d.key!=null||b&&d===b.subTree)&&Ji(u,d,!0)):D(u,d,m,k,b,w,L,M,A)},N=(u,d,m,S,b,w,L,M,A)=>{d.slotScopeIds=M,u==null?d.shapeFlag&512?b.ctx.activate(d,m,S,L,A):Y(d,m,S,b,w,L,A):re(u,d,A)},Y=(u,d,m,S,b,w,L)=>{const M=u.component=Cc(u,S,b);if(Vn(u)&&(M.ctx.renderer=Tt),Ac(M,!1,L),M.asyncDep){if(b&&b.registerDep(M,$,L),!u.el){const A=M.subTree=he(de);H(null,A,d,m),u.placeholder=A.el}}else $(M,u,d,m,b,w,L)},re=(u,d,m)=>{const S=d.component=u.component;if(_c(u,d,m))if(S.asyncDep&&!S.asyncResolved){X(S,d,m);return}else S.next=d,S.update();else d.el=u.el,S.vnode=d},$=(u,d,m,S,b,w,L)=>{const M=()=>{if(u.isMounted){let{next:F,bu:j,u:q,parent:z,vnode:te}=u;{const Te=Qi(u);if(Te){F&&(F.el=te.el,X(u,F,L)),Te.asyncDep.then(()=>{u.isUnmounted||M()});return}}let Z=F,xe;at(u,!1),F?(F.el=te.el,X(u,F,L)):F=te,j&&Yn(j),(xe=F.props&&F.props.onVnodeBeforeUpdate)&&Me(xe,z,F,te),at(u,!0);const pe=ss(u),Fe=u.subTree;u.subTree=pe,I(Fe,pe,h(Fe.el),rn(Fe),u,b,w),F.el=pe.el,Z===null&&no(u,pe.el),q&&Ce(q,b),(xe=F.props&&F.props.onVnodeUpdated)&&Ce(()=>Me(xe,z,F,te),b)}else{let F;const{el:j,props:q}=d,{bm:z,m:te,parent:Z,root:xe,type:pe}=u,Fe=vt(d);if(at(u,!1),z&&Yn(z),!Fe&&(F=q&&q.onVnodeBeforeMount)&&Me(F,Z,d),at(u,!0),j&&Xn){const Te=()=>{u.subTree=ss(u),Xn(j,u.subTree,u,b,null)};Fe&&pe.__asyncHydrate?pe.__asyncHydrate(j,u,Te):Te()}else{xe.ce&&xe.ce._def.shadowRoot!==!1&&xe.ce._injectChildStyle(pe);const Te=u.subTree=ss(u);I(null,Te,m,S,u,b,w),d.el=Te.el}if(te&&Ce(te,b),!Fe&&(F=q&&q.onVnodeMounted)){const Te=d;Ce(()=>Me(F,Z,Te),b)}(d.shapeFlag&256||Z&&vt(Z.vnode)&&Z.vnode.shapeFlag&256)&&u.a&&Ce(u.a,b),u.isMounted=!0,d=m=S=null}};u.scope.on();const A=u.effect=new ri(M);u.scope.off();const x=u.update=A.run.bind(A),k=u.job=A.runIfDirty.bind(A);k.i=u,k.id=u.uid,A.scheduler=()=>Bs(k),at(u,!0),x()},X=(u,d,m)=>{d.component=u;const S=u.vnode.props;u.vnode=d,u.next=null,sc(u,d.props,S,m),lc(u,d.children,m),Xe(),or(u),Ye()},D=(u,d,m,S,b,w,L,M,A=!1)=>{const x=u&&u.children,k=u?u.shapeFlag:0,F=d.children,{patchFlag:j,shapeFlag:q}=d;if(j>0){if(j&128){sn(x,F,m,S,b,w,L,M,A);return}else if(j&256){oe(x,F,m,S,b,w,L,M,A);return}}q&8?(k&16&&Ft(x,b,w),F!==x&&a(m,F)):k&16?q&16?sn(x,F,m,S,b,w,L,M,A):Ft(x,b,w,!0):(k&8&&a(m,""),q&16&&U(F,m,S,b,w,L,M,A))},oe=(u,d,m,S,b,w,L,M,A)=>{u=u||Rt,d=d||Rt;const x=u.length,k=d.length,F=Math.min(x,k);let j;for(j=0;jk?Ft(u,b,w,!0,!1,F):U(d,m,S,b,w,L,M,A,F)},sn=(u,d,m,S,b,w,L,M,A)=>{let x=0;const k=d.length;let F=u.length-1,j=k-1;for(;x<=F&&x<=j;){const q=u[x],z=d[x]=A?nt(d[x]):Oe(d[x]);if(ht(q,z))I(q,z,m,null,b,w,L,M,A);else break;x++}for(;x<=F&&x<=j;){const q=u[F],z=d[j]=A?nt(d[j]):Oe(d[j]);if(ht(q,z))I(q,z,m,null,b,w,L,M,A);else break;F--,j--}if(x>F){if(x<=j){const q=j+1,z=qj)for(;x<=F;)$e(u[x],b,w,!0),x++;else{const q=x,z=x,te=new Map;for(x=z;x<=j;x++){const Ee=d[x]=A?nt(d[x]):Oe(d[x]);Ee.key!=null&&te.set(Ee.key,x)}let Z,xe=0;const pe=j-z+1;let Fe=!1,Te=0;const Ht=new Array(pe);for(x=0;x=pe){$e(Ee,b,w,!0);continue}let je;if(Ee.key!=null)je=te.get(Ee.key);else for(Z=z;Z<=j;Z++)if(Ht[Z-z]===0&&ht(Ee,d[Z])){je=Z;break}je===void 0?$e(Ee,b,w,!0):(Ht[je-z]=x+1,je>=Te?Te=je:Fe=!0,I(Ee,d[je],m,null,b,w,L,M,A),xe++)}const er=Fe?fc(Ht):Rt;for(Z=er.length-1,x=pe-1;x>=0;x--){const Ee=z+x,je=d[Ee],tr=d[Ee+1],nr=Ee+1{const{el:w,type:L,transition:M,children:A,shapeFlag:x}=u;if(x&6){ct(u.component.subTree,d,m,S);return}if(x&128){u.suspense.move(d,m,S);return}if(x&64){L.move(u,d,m,Tt);return}if(L===we){s(w,d,m);for(let F=0;FM.enter(w),b);else{const{leave:F,delayLeave:j,afterLeave:q}=M,z=()=>{u.ctx.isUnmounted?r(w):s(w,d,m)},te=()=>{w._isLeaving&&w[qe](!0),F(w,()=>{z(),q&&q()})};j?j(w,z,te):te()}else s(w,d,m)},$e=(u,d,m,S=!1,b=!1)=>{const{type:w,props:L,ref:M,children:A,dynamicChildren:x,shapeFlag:k,patchFlag:F,dirs:j,cacheIndex:q}=u;if(F===-2&&(b=!1),M!=null&&(Xe(),It(M,null,m,u,!0),Ye()),q!=null&&(d.renderCache[q]=void 0),k&256){d.ctx.deactivate(u);return}const z=k&1&&j,te=!vt(u);let Z;if(te&&(Z=L&&L.onVnodeBeforeUnmount)&&Me(Z,d,u),k&6)Oo(u.component,m,S);else{if(k&128){u.suspense.unmount(m,S);return}z&&We(u,null,d,"beforeUnmount"),k&64?u.type.remove(u,d,m,Tt,S):x&&!x.hasOnce&&(w!==we||F>0&&F&64)?Ft(x,d,m,!1,!0):(w===we&&F&384||!b&&k&16)&&Ft(A,d,m),S&&Qs(u)}(te&&(Z=L&&L.onVnodeUnmounted)||z)&&Ce(()=>{Z&&Me(Z,d,u),z&&We(u,null,d,"unmounted")},m)},Qs=u=>{const{type:d,el:m,anchor:S,transition:b}=u;if(d===we){Mo(m,S);return}if(d===Ut){g(u);return}const w=()=>{r(m),b&&!b.persisted&&b.afterLeave&&b.afterLeave()};if(u.shapeFlag&1&&b&&!b.persisted){const{leave:L,delayLeave:M}=b,A=()=>L(m,w);M?M(u.el,w,A):A()}else w()},Mo=(u,d)=>{let m;for(;u!==d;)m=v(u),r(u),u=m;r(d)},Oo=(u,d,m)=>{const{bum:S,scope:b,job:w,subTree:L,um:M,m:A,a:x}=u;vr(A),vr(x),S&&Yn(S),b.stop(),w&&(w.flags|=8,$e(L,u,d,m)),M&&Ce(M,d),Ce(()=>{u.isUnmounted=!0},d)},Ft=(u,d,m,S=!1,b=!1,w=0)=>{for(let L=w;L{if(u.shapeFlag&6)return rn(u.component.subTree);if(u.shapeFlag&128)return u.suspense.next();const d=v(u.anchor||u.el),m=d&&d[Rl];return m?v(m):d};let qn=!1;const Zs=(u,d,m)=>{u==null?d._vnode&&$e(d._vnode,null,null,!0):I(d._vnode||null,u,d,null,null,null,m),d._vnode=u,qn||(qn=!0,or(),Cn(),qn=!1)},Tt={p:I,um:$e,m:ct,r:Qs,mt:Y,mc:U,pc:D,pbc:P,n:rn,o:e};let Gn,Xn;return t&&([Gn,Xn]=t(Tt)),{render:Zs,hydrate:Gn,createApp:ec(Zs,Gn)}}function ns({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function at({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function zi(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Ji(e,t,n=!1){const s=e.children,r=t.children;if(B(s)&&B(r))for(let i=0;i>1,e[n[o]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,l=n[i-1];i-- >0;)n[i]=l,l=t[l];return n}function Qi(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Qi(t)}function vr(e){if(e)for(let t=0;t_t(uc);function Zi(e,t){return Un(e,null,t)}function bf(e,t){return Un(e,null,{flush:"post"})}function Le(e,t,n){return Un(e,t,n)}function Un(e,t,n=se){const{immediate:s,deep:r,flush:i,once:l}=n,o=fe({},n),c=t&&s||!t&&i!=="post";let f;if(Qt){if(i==="sync"){const y=dc();f=y.__watcherHandles||(y.__watcherHandles=[])}else if(!c){const y=()=>{};return y.stop=ke,y.resume=ke,y.pause=ke,y}}const a=ye;o.call=(y,C,I)=>De(y,a,C,I);let h=!1;i==="post"?o.scheduler=y=>{Ce(y,a&&a.suspense)}:i!=="sync"&&(h=!0,o.scheduler=(y,C)=>{C?y():Bs(y)}),o.augmentJob=y=>{t&&(y.flags|=4),h&&(y.flags|=2,a&&(y.id=a.uid,y.i=a))};const v=xl(e,t,o);return Qt&&(f?f.push(v):c&&v()),v}function hc(e,t,n){const s=this.proxy,r=le(e)?e.includes(".")?eo(s,e):()=>s[e]:e.bind(s,s);let i;G(t)?i=t:(i=t.handler,n=t);const l=nn(this),o=Un(r,i.bind(s),n);return l(),o}function eo(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;rt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ne(t)}Modifiers`]||e[`${lt(t)}Modifiers`];function gc(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||se;let r=n;const i=t.startsWith("update:"),l=i&&pc(s,t.slice(7));l&&(l.trim&&(r=n.map(a=>le(a)?a.trim():a)),l.number&&(r=n.map(Fo)));let o,c=s[o=vn(t)]||s[o=vn(Ne(t))];!c&&i&&(c=s[o=vn(lt(t))]),c&&De(c,e,6,r);const f=s[o+"Once"];if(f){if(!e.emitted)e.emitted={};else if(e.emitted[o])return;e.emitted[o]=!0,De(f,e,6,r)}}const mc=new WeakMap;function to(e,t,n=!1){const s=n?mc:t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let l={},o=!1;if(!G(e)){const c=f=>{const a=to(f,t,!0);a&&(o=!0,fe(l,a))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!o?(ee(e)&&s.set(e,null),null):(B(i)?i.forEach(c=>l[c]=null):fe(l,i),ee(e)&&s.set(e,l),l)}function Bn(e,t){return!e||!en(t)?!1:(t=t.slice(2).replace(/Once$/,""),Q(e,t[0].toLowerCase()+t.slice(1))||Q(e,lt(t))||Q(e,t))}function ss(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[i],slots:l,attrs:o,emit:c,render:f,renderCache:a,props:h,data:v,setupState:y,ctx:C,inheritAttrs:I}=e,K=An(e);let H,V;try{if(n.shapeFlag&4){const g=r||s,O=g;H=Oe(f.call(O,g,a,h,y,v,C)),V=o}else{const g=t;H=Oe(g.length>1?g(h,{attrs:o,slots:l,emit:c}):g(h,null)),V=t.props?o:vc(o)}}catch(g){Bt.length=0,$n(g,e,1),H=he(de)}let p=H;if(V&&I!==!1){const g=Object.keys(V),{shapeFlag:O}=p;g.length&&O&7&&(i&&g.some(Is)&&(V=yc(V,i)),p=ot(p,V,!1,!0))}return n.dirs&&(p=ot(p,null,!1,!0),p.dirs=p.dirs?p.dirs.concat(n.dirs):n.dirs),n.transition&&Yt(p,n.transition),H=p,An(K),H}const vc=e=>{let t;for(const n in e)(n==="class"||n==="style"||en(n))&&((t||(t={}))[n]=e[n]);return t},yc=(e,t)=>{const n={};for(const s in e)(!Is(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function _c(e,t,n){const{props:s,children:r,component:i}=e,{props:l,children:o,patchFlag:c}=t,f=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?yr(s,l,f):!!l;if(c&8){const a=t.dynamicProps;for(let h=0;he.__isSuspense;function ro(e,t){t&&t.pendingBranch?B(e)?t.effects.push(...e):t.effects.push(e):Cl(e)}const we=Symbol.for("v-fgt"),bt=Symbol.for("v-txt"),de=Symbol.for("v-cmt"),Ut=Symbol.for("v-stc"),Bt=[];let Ae=null;function Cs(e=!1){Bt.push(Ae=e?null:[])}function bc(){Bt.pop(),Ae=Bt[Bt.length-1]||null}let zt=1;function On(e,t=!1){zt+=e,e<0&&Ae&&t&&(Ae.hasOnce=!0)}function io(e){return e.dynamicChildren=zt>0?Ae||Rt:null,bc(),zt>0&&Ae&&Ae.push(e),e}function wf(e,t,n,s,r,i){return io(lo(e,t,n,s,r,i,!0))}function As(e,t,n,s,r){return io(he(e,t,n,s,r,!0))}function Jt(e){return e?e.__v_isVNode===!0:!1}function ht(e,t){return e.type===t.type&&e.key===t.key}const oo=({key:e})=>e??null,_n=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?le(e)||ae(e)||G(e)?{i:Se,r:e,k:t,f:!!n}:e:null);function lo(e,t=null,n=null,s=0,r=null,i=e===we?0:1,l=!1,o=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&oo(t),ref:t&&_n(t),scopeId:xi,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:Se};return o?(Gs(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=le(n)?8:16),zt>0&&!l&&Ae&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Ae.push(c),c}const he=wc;function wc(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===Fi)&&(e=de),Jt(e)){const o=ot(e,t,!0);return n&&Gs(o,n),zt>0&&!i&&Ae&&(o.shapeFlag&6?Ae[Ae.indexOf(e)]=o:Ae.push(o)),o.patchFlag=-2,o}if(Pc(e)&&(e=e.__vccOpts),t){t=Sc(t);let{class:o,style:c}=t;o&&!le(o)&&(t.class=Hs(o)),ee(c)&&(ks(c)&&!B(c)&&(c=fe({},c)),t.style=Fs(c))}const l=le(e)?1:so(e)?128:Ti(e)?64:ee(e)?4:G(e)?2:0;return lo(e,t,n,s,r,l,i,!0)}function Sc(e){return e?ks(e)||Bi(e)?fe({},e):e:null}function ot(e,t,n=!1,s=!1){const{props:r,ref:i,patchFlag:l,children:o,transition:c}=e,f=t?xc(r||{},t):r,a={__v_isVNode:!0,__v_skip:!0,type:e.type,props:f,key:f&&oo(f),ref:t&&t.ref?n&&i?B(i)?i.concat(_n(t)):[i,_n(t)]:_n(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:o,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==we?l===-1?16:l|16:l,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&ot(e.ssContent),ssFallback:e.ssFallback&&ot(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&s&&Yt(a,c.clone(a)),a}function co(e=" ",t=0){return he(bt,null,e,t)}function Sf(e,t){const n=he(Ut,null,e);return n.staticCount=t,n}function xf(e="",t=!1){return t?(Cs(),As(de,null,e)):he(de,null,e)}function Oe(e){return e==null||typeof e=="boolean"?he(de):B(e)?he(we,null,e.slice()):Jt(e)?nt(e):he(bt,null,String(e))}function nt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:ot(e)}function Gs(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(B(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),Gs(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!Bi(t)?t._ctx=Se:r===3&&Se&&(Se.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else G(t)?(t={default:t,_ctx:Se},n=32):(t=String(t),s&64?(n=16,t=[co(t)]):n=8);e.children=t,e.shapeFlag|=n}function xc(...e){const t={};for(let n=0;nye||Se;let Pn,Rs;{const e=Fn(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(l=>l(i)):r[0](i)}};Pn=t("__VUE_INSTANCE_SETTERS__",n=>ye=n),Rs=t("__VUE_SSR_SETTERS__",n=>Qt=n)}const nn=e=>{const t=ye;return Pn(e),e.scope.on(),()=>{e.scope.off(),Pn(t)}},_r=()=>{ye&&ye.scope.off(),Pn(null)};function ao(e){return e.vnode.shapeFlag&4}let Qt=!1;function Ac(e,t=!1,n=!1){t&&Rs(t);const{props:s,children:r}=e.vnode,i=ao(e);nc(e,s,i,t),oc(e,r,n||t);const l=i?Rc(e,t):void 0;return t&&Rs(!1),l}function Rc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,ql);const{setup:s}=n;if(s){Xe();const r=e.setupContext=s.length>1?uo(e):null,i=nn(e),l=tn(s,e,0,[e.props,r]),o=zr(l);if(Ye(),i(),(o||e.sp)&&!vt(e)&&Pi(e),o){if(l.then(_r,_r),t)return l.then(c=>{br(e,c)}).catch(c=>{$n(c,e,0)});e.asyncDep=l}else br(e,l)}else fo(e)}function br(e,t,n){G(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ee(t)&&(e.setupState=_i(t)),fo(e)}function fo(e,t,n){const s=e.type;e.render||(e.render=s.render||ke);{const r=nn(e);Xe();try{Xl(e)}finally{Ye(),r()}}}const Mc={get(e,t){return ve(e,"get",""),e[t]}};function uo(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Mc),slots:e.slots,emit:e.emit,expose:t}}function Xs(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(_i(yn(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in kt)return kt[n](e)},has(t,n){return n in t||n in kt}})):e.proxy}function Oc(e,t=!0){return G(e)?e.displayName||e.name:e.name||t&&e.__name}function Pc(e){return G(e)&&"__vccOpts"in e}const ie=(e,t)=>wl(e,t,Qt);function Ms(e,t,n){try{On(-1);const s=arguments.length;return s===2?ee(t)&&!B(t)?Jt(t)?he(e,null,[t]):he(e,t):he(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&Jt(n)&&(n=[n]),he(e,t,n))}finally{On(1)}}const Ic="3.5.22";/** -* @vue/runtime-dom v3.5.22 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let Os;const wr=typeof window<"u"&&window.trustedTypes;if(wr)try{Os=wr.createPolicy("vue",{createHTML:e=>e})}catch{}const ho=Os?e=>Os.createHTML(e):e=>e,Lc="http://www.w3.org/2000/svg",Nc="http://www.w3.org/1998/Math/MathML",Ke=typeof document<"u"?document:null,Sr=Ke&&Ke.createElement("template"),Fc={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?Ke.createElementNS(Lc,e):t==="mathml"?Ke.createElementNS(Nc,e):n?Ke.createElement(e,{is:n}):Ke.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>Ke.createTextNode(e),createComment:e=>Ke.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Ke.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const l=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{Sr.innerHTML=ho(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const o=Sr.content;if(s==="svg"||s==="mathml"){const c=o.firstChild;for(;c.firstChild;)o.appendChild(c.firstChild);o.removeChild(c)}t.insertBefore(o,n)}return[l?l.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},et="transition",$t="animation",Zt=Symbol("_vtc"),po={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},Hc=fe({},Ei,po),Dc=e=>(e.displayName="Transition",e.props=Hc,e),Tf=Dc((e,{slots:t})=>Ms(Pl,$c(e),t)),ft=(e,t=[])=>{B(e)?e.forEach(n=>n(...t)):e&&e(...t)},xr=e=>e?B(e)?e.some(t=>t.length>1):e.length>1:!1;function $c(e){const t={};for(const _ in e)_ in po||(t[_]=e[_]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:i=`${n}-enter-from`,enterActiveClass:l=`${n}-enter-active`,enterToClass:o=`${n}-enter-to`,appearFromClass:c=i,appearActiveClass:f=l,appearToClass:a=o,leaveFromClass:h=`${n}-leave-from`,leaveActiveClass:v=`${n}-leave-active`,leaveToClass:y=`${n}-leave-to`}=e,C=jc(r),I=C&&C[0],K=C&&C[1],{onBeforeEnter:H,onEnter:V,onEnterCancelled:p,onLeave:g,onLeaveCancelled:O,onBeforeAppear:W=H,onAppear:R=V,onAppearCancelled:U=p}=t,T=(_,N,Y,re)=>{_._enterCancelled=re,ut(_,N?a:o),ut(_,N?f:l),Y&&Y()},P=(_,N)=>{_._isLeaving=!1,ut(_,h),ut(_,y),ut(_,v),N&&N()},E=_=>(N,Y)=>{const re=_?R:V,$=()=>T(N,_,Y);ft(re,[N,$]),Tr(()=>{ut(N,_?c:i),Be(N,_?a:o),xr(re)||Er(N,s,I,$)})};return fe(t,{onBeforeEnter(_){ft(H,[_]),Be(_,i),Be(_,l)},onBeforeAppear(_){ft(W,[_]),Be(_,c),Be(_,f)},onEnter:E(!1),onAppear:E(!0),onLeave(_,N){_._isLeaving=!0;const Y=()=>P(_,N);Be(_,h),_._enterCancelled?(Be(_,v),Rr(_)):(Rr(_),Be(_,v)),Tr(()=>{_._isLeaving&&(ut(_,h),Be(_,y),xr(g)||Er(_,s,K,Y))}),ft(g,[_,Y])},onEnterCancelled(_){T(_,!1,void 0,!0),ft(p,[_])},onAppearCancelled(_){T(_,!0,void 0,!0),ft(U,[_])},onLeaveCancelled(_){P(_),ft(O,[_])}})}function jc(e){if(e==null)return null;if(ee(e))return[rs(e.enter),rs(e.leave)];{const t=rs(e);return[t,t]}}function rs(e){return Ho(e)}function Be(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Zt]||(e[Zt]=new Set)).add(t)}function ut(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[Zt];n&&(n.delete(t),n.size||(e[Zt]=void 0))}function Tr(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Vc=0;function Er(e,t,n,s){const r=e._endId=++Vc,i=()=>{r===e._endId&&s()};if(n!=null)return setTimeout(i,n);const{type:l,timeout:o,propCount:c}=Wc(e,t);if(!l)return s();const f=l+"end";let a=0;const h=()=>{e.removeEventListener(f,v),i()},v=y=>{y.target===e&&++a>=c&&h()};setTimeout(()=>{a(n[C]||"").split(", "),r=s(`${et}Delay`),i=s(`${et}Duration`),l=Cr(r,i),o=s(`${$t}Delay`),c=s(`${$t}Duration`),f=Cr(o,c);let a=null,h=0,v=0;t===et?l>0&&(a=et,h=l,v=i.length):t===$t?f>0&&(a=$t,h=f,v=c.length):(h=Math.max(l,f),a=h>0?l>f?et:$t:null,v=a?a===et?i.length:c.length:0);const y=a===et&&/\b(?:transform|all)(?:,|$)/.test(s(`${et}Property`).toString());return{type:a,timeout:h,propCount:v,hasTransform:y}}function Cr(e,t){for(;e.lengthAr(n)+Ar(e[s])))}function Ar(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function Rr(e){return(e?e.ownerDocument:document).body.offsetHeight}function kc(e,t,n){const s=e[Zt];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Mr=Symbol("_vod"),Uc=Symbol("_vsh"),Bc=Symbol(""),Kc=/(?:^|;)\s*display\s*:/;function qc(e,t,n){const s=e.style,r=le(n);let i=!1;if(n&&!r){if(t)if(le(t))for(const l of t.split(";")){const o=l.slice(0,l.indexOf(":")).trim();n[o]==null&&bn(s,o,"")}else for(const l in t)n[l]==null&&bn(s,l,"");for(const l in n)l==="display"&&(i=!0),bn(s,l,n[l])}else if(r){if(t!==n){const l=s[Bc];l&&(n+=";"+l),s.cssText=n,i=Kc.test(n)}}else t&&e.removeAttribute("style");Mr in e&&(e[Mr]=i?s.display:"",e[Uc]&&(s.display="none"))}const Or=/\s*!important$/;function bn(e,t,n){if(B(n))n.forEach(s=>bn(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=Gc(e,t);Or.test(n)?e.setProperty(lt(s),n.replace(Or,""),"important"):e[s]=n}}const Pr=["Webkit","Moz","ms"],is={};function Gc(e,t){const n=is[t];if(n)return n;let s=Ne(t);if(s!=="filter"&&s in e)return is[t]=s;s=Nn(s);for(let r=0;ros||(Qc.then(()=>os=0),os=Date.now());function ea(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;De(ta(s,n.value),t,5,[s])};return n.value=e,n.attached=Zc(),n}function ta(e,t){if(B(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const Dr=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,na=(e,t,n,s,r,i)=>{const l=r==="svg";t==="class"?kc(e,s,l):t==="style"?qc(e,n,s):en(t)?Is(t)||zc(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):sa(e,t,s,l))?(Nr(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Lr(e,t,s,l,i,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!le(s))?Nr(e,Ne(t),s,i,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Lr(e,t,s,l))};function sa(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&Dr(t)&&G(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return Dr(t)&&le(n)?!1:t in e}const ra=["ctrl","shift","alt","meta"],ia={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>ra.some(n=>e[`${n}Key`]&&!t.includes(n))},Ef=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(r,...i)=>{for(let l=0;l{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=r=>{if(!("key"in r))return;const i=lt(r.key);if(t.some(l=>l===i||oa[l]===i))return e(r)})},la=fe({patchProp:na},Fc);let ls,$r=!1;function ca(){return ls=$r?ls:cc(la),$r=!0,ls}const Af=(...e)=>{const t=ca().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=fa(s);if(r)return n(r,!0,aa(r))},t};function aa(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function fa(e){return le(e)?document.querySelector(e):e}const ua=window.__VP_SITE_DATA__;function go(e){return si()?(Ko(e),!0):!1}const cs=new WeakMap,da=(...e)=>{var t;const n=e[0],s=(t=xt())==null?void 0:t.proxy;if(s==null&&!Wi())throw new Error("injectLocal must be called in setup");return s&&cs.has(s)&&n in cs.get(s)?cs.get(s)[n]:_t(...e)},mo=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const ha=Object.prototype.toString,pa=e=>ha.call(e)==="[object Object]",St=()=>{},jr=ga();function ga(){var e,t;return mo&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function Ys(e,t){function n(...s){return new Promise((r,i)=>{Promise.resolve(e(()=>t.apply(this,s),{fn:t,thisArg:this,args:s})).then(r).catch(i)})}return n}const vo=e=>e();function ma(e,t={}){let n,s,r=St;const i=c=>{clearTimeout(c),r(),r=St};let l;return c=>{const f=ce(e),a=ce(t.maxWait);return n&&i(n),f<=0||a!==void 0&&a<=0?(s&&(i(s),s=null),Promise.resolve(c())):new Promise((h,v)=>{r=t.rejectOnCancel?v:h,l=c,a&&!s&&(s=setTimeout(()=>{n&&i(n),s=null,h(l())},a)),n=setTimeout(()=>{s&&i(s),s=null,h(c())},f)})}}function va(...e){let t=0,n,s=!0,r=St,i,l,o,c,f;!ae(e[0])&&typeof e[0]=="object"?{delay:l,trailing:o=!0,leading:c=!0,rejectOnCancel:f=!1}=e[0]:[l,o=!0,c=!0,f=!1]=e;const a=()=>{n&&(clearTimeout(n),n=void 0,r(),r=St)};return v=>{const y=ce(l),C=Date.now()-t,I=()=>i=v();return a(),y<=0?(t=Date.now(),I()):(C>y&&(c||!s)?(t=Date.now(),I()):o&&(i=new Promise((K,H)=>{r=f?H:K,n=setTimeout(()=>{t=Date.now(),s=!0,K(I()),a()},Math.max(0,y-C))})),!c&&!n&&(n=setTimeout(()=>s=!0,y)),s=!1,i)}}function ya(e=vo,t={}){const{initialState:n="active"}=t,s=zs(n==="active");function r(){s.value=!1}function i(){s.value=!0}const l=(...o)=>{s.value&&e(...o)};return{isActive:Gt(s),pause:r,resume:i,eventFilter:l}}function Vr(e){return e.endsWith("rem")?Number.parseFloat(e)*16:Number.parseFloat(e)}function _a(e){return xt()}function as(e){return Array.isArray(e)?e:[e]}function zs(...e){if(e.length!==1)return yl(...e);const t=e[0];return typeof t=="function"?Gt(gl(()=>({get:t,set:St}))):mt(t)}function ba(e,t=200,n={}){return Ys(ma(t,n),e)}function wa(e,t=200,n=!1,s=!0,r=!1){return Ys(va(t,n,s,r),e)}function Sa(e,t,n={}){const{eventFilter:s=vo,...r}=n;return Le(e,Ys(s,t),r)}function xa(e,t,n={}){const{eventFilter:s,initialState:r="active",...i}=n,{eventFilter:l,pause:o,resume:c,isActive:f}=ya(s,{initialState:r});return{stop:Sa(e,t,{...i,eventFilter:l}),pause:o,resume:c,isActive:f}}function Kn(e,t=!0,n){_a()?Nt(e,n):t?e():jn(e)}function Ta(e,t,n){return Le(e,t,{...n,immediate:!0})}const ze=mo?window:void 0;function Js(e){var t;const n=ce(e);return(t=n==null?void 0:n.$el)!=null?t:n}function Je(...e){const t=[],n=()=>{t.forEach(o=>o()),t.length=0},s=(o,c,f,a)=>(o.addEventListener(c,f,a),()=>o.removeEventListener(c,f,a)),r=ie(()=>{const o=as(ce(e[0])).filter(c=>c!=null);return o.every(c=>typeof c!="string")?o:void 0}),i=Ta(()=>{var o,c;return[(c=(o=r.value)==null?void 0:o.map(f=>Js(f)))!=null?c:[ze].filter(f=>f!=null),as(ce(r.value?e[1]:e[0])),as(Us(r.value?e[2]:e[1])),ce(r.value?e[3]:e[2])]},([o,c,f,a])=>{if(n(),!(o!=null&&o.length)||!(c!=null&&c.length)||!(f!=null&&f.length))return;const h=pa(a)?{...a}:a;t.push(...o.flatMap(v=>c.flatMap(y=>f.map(C=>s(v,y,C,h)))))},{flush:"post"}),l=()=>{i(),n()};return go(n),l}function Ea(){const e=Ie(!1),t=xt();return t&&Nt(()=>{e.value=!0},t),e}function Ca(e){const t=Ea();return ie(()=>(t.value,!!e()))}function Aa(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function Rf(...e){let t,n,s={};e.length===3?(t=e[0],n=e[1],s=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],s=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:r=ze,eventName:i="keydown",passive:l=!1,dedupe:o=!1}=s,c=Aa(t);return Je(r,i,a=>{a.repeat&&ce(o)||c(a)&&n(a)},l)}const Ra=Symbol("vueuse-ssr-width");function Ma(){const e=Wi()?da(Ra,null):null;return typeof e=="number"?e:void 0}function yo(e,t={}){const{window:n=ze,ssrWidth:s=Ma()}=t,r=Ca(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function"),i=Ie(typeof s=="number"),l=Ie(),o=Ie(!1),c=f=>{o.value=f.matches};return Zi(()=>{if(i.value){i.value=!r.value;const f=ce(e).split(",");o.value=f.some(a=>{const h=a.includes("not all"),v=a.match(/\(\s*min-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/),y=a.match(/\(\s*max-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/);let C=!!(v||y);return v&&C&&(C=s>=Vr(v[1])),y&&C&&(C=s<=Vr(y[1])),h?!C:C});return}r.value&&(l.value=n.matchMedia(ce(e)),o.value=l.value.matches)}),Je(l,"change",c,{passive:!0}),ie(()=>o.value)}const hn=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},pn="__vueuse_ssr_handlers__",Oa=Pa();function Pa(){return pn in hn||(hn[pn]=hn[pn]||{}),hn[pn]}function _o(e,t){return Oa[e]||t}function bo(e){return yo("(prefers-color-scheme: dark)",e)}function Ia(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const La={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},Wr="vueuse-storage";function Na(e,t,n,s={}){var r;const{flush:i="pre",deep:l=!0,listenToStorageChanges:o=!0,writeDefaults:c=!0,mergeDefaults:f=!1,shallow:a,window:h=ze,eventFilter:v,onError:y=E=>{console.error(E)},initOnMounted:C}=s,I=(a?Ie:mt)(typeof t=="function"?t():t),K=ie(()=>ce(e));if(!n)try{n=_o("getDefaultStorage",()=>{var E;return(E=ze)==null?void 0:E.localStorage})()}catch(E){y(E)}if(!n)return I;const H=ce(t),V=Ia(H),p=(r=s.serializer)!=null?r:La[V],{pause:g,resume:O}=xa(I,()=>R(I.value),{flush:i,deep:l,eventFilter:v});Le(K,()=>T(),{flush:i}),h&&o&&Kn(()=>{n instanceof Storage?Je(h,"storage",T,{passive:!0}):Je(h,Wr,P),C&&T()}),C||T();function W(E,_){if(h){const N={key:K.value,oldValue:E,newValue:_,storageArea:n};h.dispatchEvent(n instanceof Storage?new StorageEvent("storage",N):new CustomEvent(Wr,{detail:N}))}}function R(E){try{const _=n.getItem(K.value);if(E==null)W(_,null),n.removeItem(K.value);else{const N=p.write(E);_!==N&&(n.setItem(K.value,N),W(_,N))}}catch(_){y(_)}}function U(E){const _=E?E.newValue:n.getItem(K.value);if(_==null)return c&&H!=null&&n.setItem(K.value,p.write(H)),H;if(!E&&f){const N=p.read(_);return typeof f=="function"?f(N,H):V==="object"&&!Array.isArray(N)?{...H,...N}:N}else return typeof _!="string"?_:p.read(_)}function T(E){if(!(E&&E.storageArea!==n)){if(E&&E.key==null){I.value=H;return}if(!(E&&E.key!==K.value)){g();try{(E==null?void 0:E.newValue)!==p.write(I.value)&&(I.value=U(E))}catch(_){y(_)}finally{E?jn(O):O()}}}}function P(E){T(E.detail)}return I}const Fa="*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}";function Ha(e={}){const{selector:t="html",attribute:n="class",initialValue:s="auto",window:r=ze,storage:i,storageKey:l="vueuse-color-scheme",listenToStorageChanges:o=!0,storageRef:c,emitAuto:f,disableTransition:a=!0}=e,h={auto:"",light:"light",dark:"dark",...e.modes||{}},v=bo({window:r}),y=ie(()=>v.value?"dark":"light"),C=c||(l==null?zs(s):Na(l,s,i,{window:r,listenToStorageChanges:o})),I=ie(()=>C.value==="auto"?y.value:C.value),K=_o("updateHTMLAttrs",(g,O,W)=>{const R=typeof g=="string"?r==null?void 0:r.document.querySelector(g):Js(g);if(!R)return;const U=new Set,T=new Set;let P=null;if(O==="class"){const _=W.split(/\s/g);Object.values(h).flatMap(N=>(N||"").split(/\s/g)).filter(Boolean).forEach(N=>{_.includes(N)?U.add(N):T.add(N)})}else P={key:O,value:W};if(U.size===0&&T.size===0&&P===null)return;let E;a&&(E=r.document.createElement("style"),E.appendChild(document.createTextNode(Fa)),r.document.head.appendChild(E));for(const _ of U)R.classList.add(_);for(const _ of T)R.classList.remove(_);P&&R.setAttribute(P.key,P.value),a&&(r.getComputedStyle(E).opacity,document.head.removeChild(E))});function H(g){var O;K(t,n,(O=h[g])!=null?O:g)}function V(g){e.onChanged?e.onChanged(g,H):H(g)}Le(I,V,{flush:"post",immediate:!0}),Kn(()=>V(I.value));const p=ie({get(){return f?C.value:I.value},set(g){C.value=g}});return Object.assign(p,{store:C,system:y,state:I})}function Da(e={}){const{valueDark:t="dark",valueLight:n=""}=e,s=Ha({...e,onChanged:(l,o)=>{var c;e.onChanged?(c=e.onChanged)==null||c.call(e,l==="dark",o,l):o(l)},modes:{dark:t,light:n}}),r=ie(()=>s.system.value);return ie({get(){return s.value==="dark"},set(l){const o=l?"dark":"light";r.value===o?s.value="auto":s.value=o}})}function fs(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}const kr=1;function $a(e,t={}){const{throttle:n=0,idle:s=200,onStop:r=St,onScroll:i=St,offset:l={left:0,right:0,top:0,bottom:0},eventListenerOptions:o={capture:!1,passive:!0},behavior:c="auto",window:f=ze,onError:a=R=>{console.error(R)}}=t,h=Ie(0),v=Ie(0),y=ie({get(){return h.value},set(R){I(R,void 0)}}),C=ie({get(){return v.value},set(R){I(void 0,R)}});function I(R,U){var T,P,E,_;if(!f)return;const N=ce(e);if(!N)return;(E=N instanceof Document?f.document.body:N)==null||E.scrollTo({top:(T=ce(U))!=null?T:C.value,left:(P=ce(R))!=null?P:y.value,behavior:ce(c)});const Y=((_=N==null?void 0:N.document)==null?void 0:_.documentElement)||(N==null?void 0:N.documentElement)||N;y!=null&&(h.value=Y.scrollLeft),C!=null&&(v.value=Y.scrollTop)}const K=Ie(!1),H=Lt({left:!0,right:!1,top:!0,bottom:!1}),V=Lt({left:!1,right:!1,top:!1,bottom:!1}),p=R=>{K.value&&(K.value=!1,V.left=!1,V.right=!1,V.top=!1,V.bottom=!1,r(R))},g=ba(p,n+s),O=R=>{var U;if(!f)return;const T=((U=R==null?void 0:R.document)==null?void 0:U.documentElement)||(R==null?void 0:R.documentElement)||Js(R),{display:P,flexDirection:E,direction:_}=getComputedStyle(T),N=_==="rtl"?-1:1,Y=T.scrollLeft;V.left=Yh.value;const re=Math.abs(Y*N)<=(l.left||0),$=Math.abs(Y*N)+T.clientWidth>=T.scrollWidth-(l.right||0)-kr;P==="flex"&&E==="row-reverse"?(H.left=$,H.right=re):(H.left=re,H.right=$),h.value=Y;let X=T.scrollTop;R===f.document&&!X&&(X=f.document.body.scrollTop),V.top=Xv.value;const D=Math.abs(X)<=(l.top||0),oe=Math.abs(X)+T.clientHeight>=T.scrollHeight-(l.bottom||0)-kr;P==="flex"&&E==="column-reverse"?(H.top=oe,H.bottom=D):(H.top=D,H.bottom=oe),v.value=X},W=R=>{var U;if(!f)return;const T=(U=R.target.documentElement)!=null?U:R.target;O(T),K.value=!0,g(R),i(R)};return Je(e,"scroll",n?wa(W,n,!0,!1):W,o),Kn(()=>{try{const R=ce(e);if(!R)return;O(R)}catch(R){a(R)}}),Je(e,"scrollend",p,o),{x:y,y:C,isScrolling:K,arrivedState:H,directions:V,measure(){const R=ce(e);f&&R&&O(R)}}}function wo(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const us=new WeakMap;function Mf(e,t=!1){const n=Ie(t);let s=null,r="";Le(zs(e),o=>{const c=fs(ce(o));if(c){const f=c;if(us.get(f)||us.set(f,f.style.overflow),f.style.overflow!=="hidden"&&(r=f.style.overflow),f.style.overflow==="hidden")return n.value=!0;if(n.value)return f.style.overflow="hidden"}},{immediate:!0});const i=()=>{const o=fs(ce(e));!o||n.value||(jr&&(s=Je(o,"touchmove",c=>{ja(c)},{passive:!1})),o.style.overflow="hidden",n.value=!0)},l=()=>{const o=fs(ce(e));!o||!n.value||(jr&&(s==null||s()),o.style.overflow=r,us.delete(o),n.value=!1)};return go(l),ie({get(){return n.value},set(o){o?i():l()}})}function Of(e={}){const{window:t=ze,...n}=e;return $a(t,n)}function Pf(e={}){const{window:t=ze,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:s=Number.POSITIVE_INFINITY,listenOrientation:r=!0,includeScrollbar:i=!0,type:l="inner"}=e,o=Ie(n),c=Ie(s),f=()=>{if(t)if(l==="outer")o.value=t.outerWidth,c.value=t.outerHeight;else if(l==="visual"&&t.visualViewport){const{width:h,height:v,scale:y}=t.visualViewport;o.value=Math.round(h*y),c.value=Math.round(v*y)}else i?(o.value=t.innerWidth,c.value=t.innerHeight):(o.value=t.document.documentElement.clientWidth,c.value=t.document.documentElement.clientHeight)};f(),Kn(f);const a={passive:!0};if(Je("resize",f,a),t&&l==="visual"&&t.visualViewport&&Je(t.visualViewport,"resize",f,a),r){const h=yo("(orientation: portrait)");Le(h,()=>f())}return{width:o,height:c}}const ds={};var hs={};const So=/^(?:[a-z]+:|\/\/)/i,Va="vitepress-theme-appearance",Wa=/#.*$/,ka=/[?#].*$/,Ua=/(?:(^|\/)index)?\.(?:md|html)$/,me=typeof document<"u",xo={relativePath:"404.md",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function Ba(e,t,n=!1){if(t===void 0)return!1;if(e=Ur(`/${e}`),n)return new RegExp(t).test(e);if(Ur(t)!==e)return!1;const s=t.match(Wa);return s?(me?location.hash:"")===s[0]:!0}function Ur(e){return decodeURI(e).replace(ka,"").replace(Ua,"$1")}function Ka(e){return So.test(e)}function qa(e,t){return Object.keys((e==null?void 0:e.locales)||{}).find(n=>n!=="root"&&!Ka(n)&&Ba(t,`/${n}/`,!0))||"root"}function Ga(e,t){var s,r,i,l,o,c,f;const n=qa(e,t);return Object.assign({},e,{localeIndex:n,lang:((s=e.locales[n])==null?void 0:s.lang)??e.lang,dir:((r=e.locales[n])==null?void 0:r.dir)??e.dir,title:((i=e.locales[n])==null?void 0:i.title)??e.title,titleTemplate:((l=e.locales[n])==null?void 0:l.titleTemplate)??e.titleTemplate,description:((o=e.locales[n])==null?void 0:o.description)??e.description,head:Eo(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(f=e.locales[n])==null?void 0:f.themeConfig}})}function To(e,t){const n=t.title||e.title,s=t.titleTemplate??e.titleTemplate;if(typeof s=="string"&&s.includes(":title"))return s.replace(/:title/g,n);const r=Xa(e.title,s);return n===r.slice(3)?n:`${n}${r}`}function Xa(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function Ya(e,t){const[n,s]=t;if(n!=="meta")return!1;const r=Object.entries(s)[0];return r==null?!1:e.some(([i,l])=>i===n&&l[r[0]]===r[1])}function Eo(e,t){return[...e.filter(n=>!Ya(t,n)),...t]}const za=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,Ja=/^[a-z]:/i;function Br(e){const t=Ja.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(za,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const ps=new Set;function Qa(e){if(ps.size===0){const n=typeof process=="object"&&(hs==null?void 0:hs.VITE_EXTRA_EXTENSIONS)||(ds==null?void 0:ds.VITE_EXTRA_EXTENSIONS)||"";("3g2,3gp,aac,ai,apng,au,avif,bin,bmp,cer,class,conf,crl,css,csv,dll,doc,eps,epub,exe,gif,gz,ics,ief,jar,jpe,jpeg,jpg,js,json,jsonld,m4a,man,mid,midi,mjs,mov,mp2,mp3,mp4,mpe,mpeg,mpg,mpp,oga,ogg,ogv,ogx,opus,otf,p10,p7c,p7m,p7s,pdf,png,ps,qt,roff,rtf,rtx,ser,svg,t,tif,tiff,tr,ts,tsv,ttf,txt,vtt,wav,weba,webm,webp,woff,woff2,xhtml,xml,yaml,yml,zip"+(n&&typeof n=="string"?","+n:"")).split(",").forEach(s=>ps.add(s))}const t=e.split(".").pop();return t==null||!ps.has(t.toLowerCase())}const Za=Symbol(),wt=Ie(ua);function If(e){const t=ie(()=>Ga(wt.value,e.data.relativePath)),n=t.value.appearance,s=n==="force-dark"?mt(!0):n==="force-auto"?bo():n?Da({storageKey:Va,initialValue:()=>n==="dark"?"dark":"auto",...typeof n=="object"?n:{}}):mt(!1),r=mt(me?location.hash:"");return me&&window.addEventListener("hashchange",()=>{r.value=location.hash}),Le(()=>e.data,()=>{r.value=me?location.hash:""}),{site:t,theme:ie(()=>t.value.themeConfig),page:ie(()=>e.data),frontmatter:ie(()=>e.data.frontmatter),params:ie(()=>e.data.params),lang:ie(()=>t.value.lang),dir:ie(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:ie(()=>t.value.localeIndex||"root"),title:ie(()=>To(t.value,e.data)),description:ie(()=>e.data.description||t.value.description),isDark:s,hash:ie(()=>r.value)}}function ef(){const e=_t(Za);if(!e)throw new Error("vitepress data not properly injected in app");return e}function tf(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function Kr(e){return So.test(e)||!e.startsWith("/")?e:tf(wt.value.base,e)}function nf(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),me){const n="/";t=Br(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let s=__VP_HASH_MAP__[t.toLowerCase()];if(s||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",s=__VP_HASH_MAP__[t.toLowerCase()]),!s)return null;t=`${n}assets/${t}.${s}.js`}else t=`./${Br(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let wn=[];function Lf(e){wn.push(e),kn(()=>{wn=wn.filter(t=>t!==e)})}function sf(){let e=wt.value.scrollOffset,t=0,n=24;if(typeof e=="object"&&"padding"in e&&(n=e.padding,e=e.selector),typeof e=="number")t=e;else if(typeof e=="string")t=qr(e,n);else if(Array.isArray(e))for(const s of e){const r=qr(s,n);if(r){t=r;break}}return t}function qr(e,t){const n=document.querySelector(e);if(!n)return 0;const s=n.getBoundingClientRect().bottom;return s<0?0:s+t}const rf=Symbol(),Co="http://a.com",of=()=>({path:"/",component:null,data:xo});function Nf(e,t){const n=Lt(of()),s={route:n,go:r};async function r(o=me?location.href:"/"){var c,f;o=gs(o),await((c=s.onBeforeRouteChange)==null?void 0:c.call(s,o))!==!1&&(me&&o!==gs(location.href)&&(history.replaceState({scrollPosition:window.scrollY},""),history.pushState({},"",o)),await l(o),await((f=s.onAfterRouteChange??s.onAfterRouteChanged)==null?void 0:f(o)))}let i=null;async function l(o,c=0,f=!1){var v,y;if(await((v=s.onBeforePageLoad)==null?void 0:v.call(s,o))===!1)return;const a=new URL(o,Co),h=i=a.pathname;try{let C=await e(h);if(!C)throw new Error(`Page not found: ${h}`);if(i===h){i=null;const{default:I,__pageData:K}=C;if(!I)throw new Error(`Invalid route component: ${I}`);await((y=s.onAfterPageLoad)==null?void 0:y.call(s,o)),n.path=me?h:Kr(h),n.component=yn(I),n.data=yn(K),me&&jn(()=>{let H=wt.value.base+K.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!wt.value.cleanUrls&&!H.endsWith("/")&&(H+=".html"),H!==a.pathname&&(a.pathname=H,o=H+a.search+a.hash,history.replaceState({},"",o)),a.hash&&!c){let V=null;try{V=document.getElementById(decodeURIComponent(a.hash).slice(1))}catch(p){console.warn(p)}if(V){Gr(V,a.hash);return}}window.scrollTo(0,c)})}}catch(C){if(!/fetch|Page not found/.test(C.message)&&!/^\/404(\.html|\/)?$/.test(o)&&console.error(C),!f)try{const I=await fetch(wt.value.base+"hashmap.json");window.__VP_HASH_MAP__=await I.json(),await l(o,c,!0);return}catch{}if(i===h){i=null,n.path=me?h:Kr(h),n.component=t?yn(t):null;const I=me?h.replace(/(^|\/)$/,"$1index").replace(/(\.html)?$/,".md").replace(/^\//,""):"404.md";n.data={...xo,relativePath:I}}}}return me&&(history.state===null&&history.replaceState({},""),window.addEventListener("click",o=>{if(o.defaultPrevented||!(o.target instanceof Element)||o.target.closest("button")||o.button!==0||o.ctrlKey||o.shiftKey||o.altKey||o.metaKey)return;const c=o.target.closest("a");if(!c||c.closest(".vp-raw")||c.hasAttribute("download")||c.hasAttribute("target"))return;const f=c.getAttribute("href")??(c instanceof SVGAElement?c.getAttribute("xlink:href"):null);if(f==null)return;const{href:a,origin:h,pathname:v,hash:y,search:C}=new URL(f,c.baseURI),I=new URL(location.href);h===I.origin&&Qa(v)&&(o.preventDefault(),v===I.pathname&&C===I.search?(y!==I.hash&&(history.pushState({},"",a),window.dispatchEvent(new HashChangeEvent("hashchange",{oldURL:I.href,newURL:a}))),y?Gr(c,y,c.classList.contains("header-anchor")):window.scrollTo(0,0)):r(a))},{capture:!0}),window.addEventListener("popstate",async o=>{var f;if(o.state===null)return;const c=gs(location.href);await l(c,o.state&&o.state.scrollPosition||0),await((f=s.onAfterRouteChange??s.onAfterRouteChanged)==null?void 0:f(c))}),window.addEventListener("hashchange",o=>{o.preventDefault()})),s}function lf(){const e=_t(rf);if(!e)throw new Error("useRouter() is called without provider.");return e}function Ao(){return lf().route}function Gr(e,t,n=!1){let s=null;try{s=e.classList.contains("header-anchor")?e:document.getElementById(decodeURIComponent(t).slice(1))}catch(r){console.warn(r)}if(s){let r=function(){!n||Math.abs(l-window.scrollY)>window.innerHeight?window.scrollTo(0,l):window.scrollTo({left:0,top:l,behavior:"smooth"})};const i=parseInt(window.getComputedStyle(s).paddingTop,10),l=window.scrollY+s.getBoundingClientRect().top-sf()+i;requestAnimationFrame(r)}}function gs(e){const t=new URL(e,Co);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),wt.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash}const gn=()=>wn.forEach(e=>e()),Ff=Oi({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=Ao(),{frontmatter:n,site:s}=ef();return Le(n,gn,{deep:!0,flush:"post"}),()=>Ms(e.as,s.value.contentProps??{style:{position:"relative"}},[t.component?Ms(t.component,{onVnodeMounted:gn,onVnodeUpdated:gn,onVnodeUnmounted:gn}):"404 Page Not Found"])}}),Hf=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},Df=Oi({setup(e,{slots:t}){const n=mt(!1);return Nt(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function $f(){me&&window.addEventListener("click",e=>{var n;const t=e.target;if(t.matches(".vp-code-group input")){const s=(n=t.parentElement)==null?void 0:n.parentElement;if(!s)return;const r=Array.from(s.querySelectorAll("input")).indexOf(t);if(r<0)return;const i=s.querySelector(".blocks");if(!i)return;const l=Array.from(i.children).find(f=>f.classList.contains("active"));if(!l)return;const o=i.children[r];if(!o||l===o)return;l.classList.remove("active"),o.classList.add("active");const c=s==null?void 0:s.querySelector(`label[for="${t.id}"]`);c==null||c.scrollIntoView({block:"nearest"})}})}function jf(){if(me){const e=new WeakMap;window.addEventListener("click",t=>{var s;const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const r=n.parentElement,i=(s=n.nextElementSibling)==null?void 0:s.nextElementSibling;if(!r||!i)return;const l=/language-(shellscript|shell|bash|sh|zsh)/.test(r.className),o=[".vp-copy-ignore",".diff.remove"],c=i.cloneNode(!0);c.querySelectorAll(o.join(",")).forEach(a=>a.remove());let f=c.textContent||"";l&&(f=f.replace(/^ *(\$|>) /gm,"").trim()),cf(f).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const a=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,a)})}})}}async function cf(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const s=document.getSelection(),r=s?s.rangeCount>0&&s.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),r&&(s.removeAllRanges(),s.addRange(r)),n&&n.focus()}}function Vf(e,t){let n=!0,s=[];const r=i=>{if(n){n=!1,i.forEach(o=>{const c=ms(o);for(const f of document.head.children)if(f.isEqualNode(c)){s.push(f);return}});return}const l=i.map(ms);s.forEach((o,c)=>{const f=l.findIndex(a=>a==null?void 0:a.isEqualNode(o??null));f!==-1?delete l[f]:(o==null||o.remove(),delete s[c])}),l.forEach(o=>o&&document.head.appendChild(o)),s=[...s,...l].filter(Boolean)};Zi(()=>{const i=e.data,l=t.value,o=i&&i.description,c=i&&i.frontmatter.head||[],f=To(l,i);f!==document.title&&(document.title=f);const a=o||l.description;let h=document.querySelector("meta[name=description]");h?h.getAttribute("content")!==a&&h.setAttribute("content",a):ms(["meta",{name:"description",content:a}]),r(Eo(l.head,ff(c)))})}function ms([e,t,n]){const s=document.createElement(e);for(const r in t)s.setAttribute(r,t[r]);return n&&(s.innerHTML=n),e==="script"&&t.async==null&&(s.async=!1),s}function af(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function ff(e){return e.filter(t=>!af(t))}const vs=new Set,Ro=()=>document.createElement("link"),uf=e=>{const t=Ro();t.rel="prefetch",t.href=e,document.head.appendChild(t)},df=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let mn;const hf=me&&(mn=Ro())&&mn.relList&&mn.relList.supports&&mn.relList.supports("prefetch")?uf:df;function Wf(){if(!me||!window.IntersectionObserver)return;let e;if((e=navigator.connection)&&(e.saveData||/2g/.test(e.effectiveType)))return;const t=window.requestIdleCallback||setTimeout;let n=null;const s=()=>{n&&n.disconnect(),n=new IntersectionObserver(i=>{i.forEach(l=>{if(l.isIntersecting){const o=l.target;n.unobserve(o);const{pathname:c}=o;if(!vs.has(c)){vs.add(c);const f=nf(c);f&&hf(f)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(i=>{const{hostname:l,pathname:o}=new URL(i.href instanceof SVGAnimatedString?i.href.animVal:i.href,i.baseURI),c=o.match(/\.\w+$/);c&&c[0]!==".html"||i.target!=="_blank"&&l===location.hostname&&(o!==location.pathname?n.observe(i):vs.add(o))})})};Nt(s);const r=Ao();Le(()=>r.path,s),kn(()=>{n&&n.disconnect()})}export{_f as $,sf as A,mf as B,pf as C,Ie as D,Lf as E,we as F,he as G,gf as H,So as I,Ao as J,xc as K,_t as L,Pf as M,Fs as N,Rf as O,jn as P,Of as Q,me as R,Gt as S,Tf as T,Mf as U,tc as V,yf as W,Cf as X,Li as Y,Ef as Z,Hf as _,co as a,Vf as a0,rf as a1,If as a2,Za as a3,Ff as a4,Df as a5,wt as a6,Nf as a7,nf as a8,Af as a9,Wf as aa,jf as ab,$f as ac,Ms as ad,Sf as ae,As as b,wf as c,Oi as d,xf as e,Qa as f,Kr as g,ie as h,Ka as i,lo as j,Us as k,Ba as l,yo as m,Hs as n,Cs as o,mt as p,Le as q,vf as r,Zi as s,Uo as t,ef as u,Nt as v,Al as w,kn as x,bf as y,Wl as z}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/chunks/theme.CWt1tcxf.js b/packages/documentation/docs/.vitepress/dist/assets/chunks/theme.CWt1tcxf.js deleted file mode 100644 index dc123cc1c8..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/chunks/theme.CWt1tcxf.js +++ /dev/null @@ -1 +0,0 @@ -import{d as p,c as u,r as c,n as T,o as s,a as j,t as N,b as _,w as h,T as ce,e as m,_ as b,u as He,i as Ae,f as Be,g as ue,h as g,j as v,k as i,l as z,m as se,p as S,q as F,s as Y,v as U,x as de,y as ve,z as Ce,A as Ee,F as x,B as H,C as W,D as ge,E as Q,G as k,H as C,I as $e,J as X,K as G,L as Z,M as Fe,N as ye,O as De,P as Pe,Q as Le,R as ee,S as Oe,U as Ve,V as Se,W as Ge,X as Ue,Y as je,Z as ze,$ as We}from"./framework.CBTkueSR.js";const qe=p({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(e){return(t,n)=>(s(),u("span",{class:T(["VPBadge",e.type])},[c(t.$slots,"default",{},()=>[j(N(e.text),1)])],2))}}),Ke={key:0,class:"VPBackdrop"},Re=p({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(e){return(t,n)=>(s(),_(ce,{name:"fade"},{default:h(()=>[e.show?(s(),u("div",Ke)):m("",!0)]),_:1}))}}),Je=b(Re,[["__scopeId","data-v-c79a1216"]]),P=He;function Ye(e,t){let n,a=!1;return()=>{n&&clearTimeout(n),a?n=setTimeout(e,t):(e(),(a=!0)&&setTimeout(()=>a=!1,t))}}function ie(e){return e.startsWith("/")?e:`/${e}`}function fe(e){const{pathname:t,search:n,hash:a,protocol:o}=new URL(e,"http://a.com");if(Ae(e)||e.startsWith("#")||!o.startsWith("http")||!Be(t))return e;const{site:r}=P(),l=t.endsWith("/")||t.endsWith(".html")?e:e.replace(/(?:(^\.+)\/)?.*$/,`$1${t.replace(/(\.md)?$/,r.value.cleanUrls?"":".html")}${n}${a}`);return ue(l)}function K({correspondingLink:e=!1}={}){const{site:t,localeIndex:n,page:a,theme:o,hash:r}=P(),l=g(()=>{var d,y;return{label:(d=t.value.locales[n.value])==null?void 0:d.label,link:((y=t.value.locales[n.value])==null?void 0:y.link)||(n.value==="root"?"/":`/${n.value}/`)}});return{localeLinks:g(()=>Object.entries(t.value.locales).flatMap(([d,y])=>l.value.label===y.label?[]:{text:y.label,link:Qe(y.link||(d==="root"?"/":`/${d}/`),o.value.i18nRouting!==!1&&e,a.value.relativePath.slice(l.value.link.length-1),!t.value.cleanUrls)+r.value})),currentLang:l}}function Qe(e,t,n,a){return t?e.replace(/\/$/,"")+ie(n.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,a?".html":"")):e}const Xe={class:"NotFound"},Ze={class:"code"},et={class:"title"},tt={class:"quote"},nt={class:"action"},at=["href","aria-label"],ot=p({__name:"NotFound",setup(e){const{theme:t}=P(),{currentLang:n}=K();return(a,o)=>{var r,l,f,d,y;return s(),u("div",Xe,[v("p",Ze,N(((r=i(t).notFound)==null?void 0:r.code)??"404"),1),v("h1",et,N(((l=i(t).notFound)==null?void 0:l.title)??"PAGE NOT FOUND"),1),o[0]||(o[0]=v("div",{class:"divider"},null,-1)),v("blockquote",tt,N(((f=i(t).notFound)==null?void 0:f.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),v("div",nt,[v("a",{class:"link",href:i(ue)(i(n).link),"aria-label":((d=i(t).notFound)==null?void 0:d.linkLabel)??"go to home"},N(((y=i(t).notFound)==null?void 0:y.linkText)??"Take me home"),9,at)])])}}}),st=b(ot,[["__scopeId","data-v-d6be1790"]]);function Te(e,t){if(Array.isArray(e))return R(e);if(e==null)return[];t=ie(t);const n=Object.keys(e).sort((o,r)=>r.split("/").length-o.split("/").length).find(o=>t.startsWith(ie(o))),a=n?e[n]:[];return Array.isArray(a)?R(a):R(a.items,a.base)}function it(e){const t=[];let n=0;for(const a in e){const o=e[a];if(o.items){n=t.push(o);continue}t[n]||t.push({items:[]}),t[n].items.push(o)}return t}function rt(e){const t=[];function n(a){for(const o of a)o.text&&o.link&&t.push({text:o.text,link:o.link,docFooterText:o.docFooterText}),o.items&&n(o.items)}return n(e),t}function re(e,t){return Array.isArray(t)?t.some(n=>re(e,n)):z(e,t.link)?!0:t.items?re(e,t.items):!1}function R(e,t){return[...e].map(n=>{const a={...n},o=a.base||t;return o&&a.link&&(a.link=o+a.link),a.items&&(a.items=R(a.items,o)),a})}function D(){const{frontmatter:e,page:t,theme:n}=P(),a=se("(min-width: 960px)"),o=S(!1),r=g(()=>{const w=n.value.sidebar,A=t.value.relativePath;return w?Te(w,A):[]}),l=S(r.value);F(r,(w,A)=>{JSON.stringify(w)!==JSON.stringify(A)&&(l.value=r.value)});const f=g(()=>e.value.sidebar!==!1&&l.value.length>0&&e.value.layout!=="home"),d=g(()=>y?e.value.aside==null?n.value.aside==="left":e.value.aside==="left":!1),y=g(()=>e.value.layout==="home"?!1:e.value.aside!=null?!!e.value.aside:n.value.aside!==!1),L=g(()=>f.value&&a.value),$=g(()=>f.value?it(l.value):[]);function V(){o.value=!0}function M(){o.value=!1}function I(){o.value?M():V()}return{isOpen:o,sidebar:l,sidebarGroups:$,hasSidebar:f,hasAside:y,leftAside:d,isSidebarEnabled:L,open:V,close:M,toggle:I}}function lt(e,t){let n;Y(()=>{n=e.value?document.activeElement:void 0}),U(()=>{window.addEventListener("keyup",a)}),de(()=>{window.removeEventListener("keyup",a)});function a(o){o.key==="Escape"&&e.value&&(t(),n==null||n.focus())}}function ct(e){const{page:t,hash:n}=P(),a=S(!1),o=g(()=>e.value.collapsed!=null),r=g(()=>!!e.value.link),l=S(!1),f=()=>{l.value=z(t.value.relativePath,e.value.link)};F([t,e,n],f),U(f);const d=g(()=>l.value?!0:e.value.items?re(t.value.relativePath,e.value.items):!1),y=g(()=>!!(e.value.items&&e.value.items.length));Y(()=>{a.value=!!(o.value&&e.value.collapsed)}),ve(()=>{(l.value||d.value)&&(a.value=!1)});function L(){o.value&&(a.value=!a.value)}return{collapsed:a,collapsible:o,isLink:r,isActiveLink:l,hasActiveLink:d,hasChildren:y,toggle:L}}function ut(){const{hasSidebar:e}=D(),t=se("(min-width: 960px)"),n=se("(min-width: 1280px)");return{isAsideEnabled:g(()=>!n.value&&!t.value?!1:e.value?n.value:t.value)}}const dt=/\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\b/,le=[];function Ne(e){return typeof e.outline=="object"&&!Array.isArray(e.outline)&&e.outline.label||e.outlineTitle||"On this page"}function he(e){const t=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(n=>n.id&&n.hasChildNodes()).map(n=>{const a=Number(n.tagName[1]);return{element:n,title:vt(n),link:"#"+n.id,level:a}});return ft(t,e)}function vt(e){let t="";for(const n of e.childNodes)if(n.nodeType===1){if(dt.test(n.className))continue;t+=n.textContent}else n.nodeType===3&&(t+=n.textContent);return t.trim()}function ft(e,t){if(t===!1)return[];const n=(typeof t=="object"&&!Array.isArray(t)?t.level:t)||2,[a,o]=typeof n=="number"?[n,n]:n==="deep"?[2,6]:n;return pt(e,a,o)}function ht(e,t){const{isAsideEnabled:n}=ut(),a=Ye(r,100);let o=null;U(()=>{requestAnimationFrame(r),window.addEventListener("scroll",a)}),Ce(()=>{l(location.hash)}),de(()=>{window.removeEventListener("scroll",a)});function r(){if(!n.value)return;const f=window.scrollY,d=window.innerHeight,y=document.body.offsetHeight,L=Math.abs(f+d-y)<1,$=le.map(({element:M,link:I})=>({link:I,top:mt(M)})).filter(({top:M})=>!Number.isNaN(M)).sort((M,I)=>M.top-I.top);if(!$.length){l(null);return}if(f<1){l(null);return}if(L){l($[$.length-1].link);return}let V=null;for(const{link:M,top:I}of $){if(I>f+Ee()+4)break;V=M}l(V)}function l(f){o&&o.classList.remove("active"),f==null?o=null:o=e.value.querySelector(`a[href="${decodeURIComponent(f)}"]`);const d=o;d?(d.classList.add("active"),t.value.style.top=d.offsetTop+39+"px",t.value.style.opacity="1"):(t.value.style.top="33px",t.value.style.opacity="0")}}function mt(e){let t=0;for(;e!==document.body;){if(e===null)return NaN;t+=e.offsetTop,e=e.offsetParent}return t}function pt(e,t,n){le.length=0;const a=[],o=[];return e.forEach(r=>{const l={...r,children:[]};let f=o[o.length-1];for(;f&&f.level>=l.level;)o.pop(),f=o[o.length-1];if(l.element.classList.contains("ignore-header")||f&&"shouldIgnore"in f){o.push({level:l.level,shouldIgnore:!0});return}l.level>n||l.level{const o=W("VPDocOutlineItem",!0);return s(),u("ul",{class:T(["VPDocOutlineItem",e.root?"root":"nested"])},[(s(!0),u(x,null,H(e.headers,({children:r,link:l,title:f})=>(s(),u("li",null,[v("a",{class:"outline-link",href:l,onClick:t,title:f},N(f),9,kt),r!=null&&r.length?(s(),_(o,{key:0,headers:r},null,8,["headers"])):m("",!0)]))),256))],2)}}}),Me=b(_t,[["__scopeId","data-v-b933a997"]]),bt={class:"content"},gt={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},$t=p({__name:"VPDocAsideOutline",setup(e){const{frontmatter:t,theme:n}=P(),a=ge([]);Q(()=>{a.value=he(t.value.outline??n.value.outline)});const o=S(),r=S();return ht(o,r),(l,f)=>(s(),u("nav",{"aria-labelledby":"doc-outline-aria-label",class:T(["VPDocAsideOutline",{"has-outline":a.value.length>0}]),ref_key:"container",ref:o},[v("div",bt,[v("div",{class:"outline-marker",ref_key:"marker",ref:r},null,512),v("div",gt,N(i(Ne)(i(n))),1),k(Me,{headers:a.value,root:!0},null,8,["headers"])])],2))}}),yt=b($t,[["__scopeId","data-v-a5bbad30"]]),Pt={class:"VPDocAsideCarbonAds"},Lt=p({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(e){const t=()=>null;return(n,a)=>(s(),u("div",Pt,[k(i(t),{"carbon-ads":e.carbonAds},null,8,["carbon-ads"])]))}}),Vt={class:"VPDocAside"},St=p({__name:"VPDocAside",setup(e){const{theme:t}=P();return(n,a)=>(s(),u("div",Vt,[c(n.$slots,"aside-top",{},void 0,!0),c(n.$slots,"aside-outline-before",{},void 0,!0),k(yt),c(n.$slots,"aside-outline-after",{},void 0,!0),a[0]||(a[0]=v("div",{class:"spacer"},null,-1)),c(n.$slots,"aside-ads-before",{},void 0,!0),i(t).carbonAds?(s(),_(Lt,{key:0,"carbon-ads":i(t).carbonAds},null,8,["carbon-ads"])):m("",!0),c(n.$slots,"aside-ads-after",{},void 0,!0),c(n.$slots,"aside-bottom",{},void 0,!0)]))}}),Tt=b(St,[["__scopeId","data-v-3f215769"]]);function Nt(){const{theme:e,page:t}=P();return g(()=>{const{text:n="Edit this page",pattern:a=""}=e.value.editLink||{};let o;return typeof a=="function"?o=a(t.value):o=a.replace(/:path/g,t.value.filePath),{url:o,text:n}})}function Mt(){const{page:e,theme:t,frontmatter:n}=P();return g(()=>{var y,L,$,V,M,I,w,A;const a=Te(t.value.sidebar,e.value.relativePath),o=rt(a),r=xt(o,B=>B.link.replace(/[?#].*$/,"")),l=r.findIndex(B=>z(e.value.relativePath,B.link)),f=((y=t.value.docFooter)==null?void 0:y.prev)===!1&&!n.value.prev||n.value.prev===!1,d=((L=t.value.docFooter)==null?void 0:L.next)===!1&&!n.value.next||n.value.next===!1;return{prev:f?void 0:{text:(typeof n.value.prev=="string"?n.value.prev:typeof n.value.prev=="object"?n.value.prev.text:void 0)??(($=r[l-1])==null?void 0:$.docFooterText)??((V=r[l-1])==null?void 0:V.text),link:(typeof n.value.prev=="object"?n.value.prev.link:void 0)??((M=r[l-1])==null?void 0:M.link)},next:d?void 0:{text:(typeof n.value.next=="string"?n.value.next:typeof n.value.next=="object"?n.value.next.text:void 0)??((I=r[l+1])==null?void 0:I.docFooterText)??((w=r[l+1])==null?void 0:w.text),link:(typeof n.value.next=="object"?n.value.next.link:void 0)??((A=r[l+1])==null?void 0:A.link)}}})}function xt(e,t){const n=new Set;return e.filter(a=>{const o=t(a);return n.has(o)?!1:n.add(o)})}const E=p({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(e){const t=e,n=g(()=>t.tag??(t.href?"a":"span")),a=g(()=>t.href&&$e.test(t.href)||t.target==="_blank");return(o,r)=>(s(),_(C(n.value),{class:T(["VPLink",{link:e.href,"vp-external-link-icon":a.value,"no-icon":e.noIcon}]),href:e.href?i(fe)(e.href):void 0,target:e.target??(a.value?"_blank":void 0),rel:e.rel??(a.value?"noreferrer":void 0)},{default:h(()=>[c(o.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),It={class:"VPLastUpdated"},wt=["datetime"],Ht=p({__name:"VPDocFooterLastUpdated",setup(e){const{theme:t,page:n,lang:a}=P(),o=g(()=>new Date(n.value.lastUpdated)),r=g(()=>o.value.toISOString()),l=S("");return U(()=>{Y(()=>{var f,d,y;l.value=new Intl.DateTimeFormat((d=(f=t.value.lastUpdated)==null?void 0:f.formatOptions)!=null&&d.forceLocale?a.value:void 0,((y=t.value.lastUpdated)==null?void 0:y.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(o.value)})}),(f,d)=>{var y;return s(),u("p",It,[j(N(((y=i(t).lastUpdated)==null?void 0:y.text)||i(t).lastUpdatedText||"Last updated")+": ",1),v("time",{datetime:r.value},N(l.value),9,wt)])}}}),At=b(Ht,[["__scopeId","data-v-e98dd255"]]),Bt={key:0,class:"VPDocFooter"},Ct={key:0,class:"edit-info"},Et={key:0,class:"edit-link"},Ft={key:1,class:"last-updated"},Dt={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},Ot={class:"pager"},Gt=["innerHTML"],Ut=["innerHTML"],jt={class:"pager"},zt=["innerHTML"],Wt=["innerHTML"],qt=p({__name:"VPDocFooter",setup(e){const{theme:t,page:n,frontmatter:a}=P(),o=Nt(),r=Mt(),l=g(()=>t.value.editLink&&a.value.editLink!==!1),f=g(()=>n.value.lastUpdated),d=g(()=>l.value||f.value||r.value.prev||r.value.next);return(y,L)=>{var $,V,M,I;return d.value?(s(),u("footer",Bt,[c(y.$slots,"doc-footer-before",{},void 0,!0),l.value||f.value?(s(),u("div",Ct,[l.value?(s(),u("div",Et,[k(E,{class:"edit-link-button",href:i(o).url,"no-icon":!0},{default:h(()=>[L[0]||(L[0]=v("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),j(" "+N(i(o).text),1)]),_:1},8,["href"])])):m("",!0),f.value?(s(),u("div",Ft,[k(At)])):m("",!0)])):m("",!0),($=i(r).prev)!=null&&$.link||(V=i(r).next)!=null&&V.link?(s(),u("nav",Dt,[L[1]||(L[1]=v("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),v("div",Ot,[(M=i(r).prev)!=null&&M.link?(s(),_(E,{key:0,class:"pager-link prev",href:i(r).prev.link},{default:h(()=>{var w;return[v("span",{class:"desc",innerHTML:((w=i(t).docFooter)==null?void 0:w.prev)||"Previous page"},null,8,Gt),v("span",{class:"title",innerHTML:i(r).prev.text},null,8,Ut)]}),_:1},8,["href"])):m("",!0)]),v("div",jt,[(I=i(r).next)!=null&&I.link?(s(),_(E,{key:0,class:"pager-link next",href:i(r).next.link},{default:h(()=>{var w;return[v("span",{class:"desc",innerHTML:((w=i(t).docFooter)==null?void 0:w.next)||"Next page"},null,8,zt),v("span",{class:"title",innerHTML:i(r).next.text},null,8,Wt)]}),_:1},8,["href"])):m("",!0)])])):m("",!0)])):m("",!0)}}}),Kt=b(qt,[["__scopeId","data-v-e257564d"]]),Rt={class:"container"},Jt={class:"aside-container"},Yt={class:"aside-content"},Qt={class:"content"},Xt={class:"content-container"},Zt={class:"main"},en=p({__name:"VPDoc",setup(e){const{theme:t}=P(),n=X(),{hasSidebar:a,hasAside:o,leftAside:r}=D(),l=g(()=>n.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(f,d)=>{const y=W("Content");return s(),u("div",{class:T(["VPDoc",{"has-sidebar":i(a),"has-aside":i(o)}])},[c(f.$slots,"doc-top",{},void 0,!0),v("div",Rt,[i(o)?(s(),u("div",{key:0,class:T(["aside",{"left-aside":i(r)}])},[d[0]||(d[0]=v("div",{class:"aside-curtain"},null,-1)),v("div",Jt,[v("div",Yt,[k(Tt,null,{"aside-top":h(()=>[c(f.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":h(()=>[c(f.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":h(()=>[c(f.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":h(()=>[c(f.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":h(()=>[c(f.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":h(()=>[c(f.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):m("",!0),v("div",Qt,[v("div",Xt,[c(f.$slots,"doc-before",{},void 0,!0),v("main",Zt,[k(y,{class:T(["vp-doc",[l.value,i(t).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),k(Kt,null,{"doc-footer-before":h(()=>[c(f.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),c(f.$slots,"doc-after",{},void 0,!0)])])]),c(f.$slots,"doc-bottom",{},void 0,!0)],2)}}}),tn=b(en,[["__scopeId","data-v-39a288b8"]]),nn=p({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(e){const t=e,n=g(()=>t.href&&$e.test(t.href)),a=g(()=>t.tag||(t.href?"a":"button"));return(o,r)=>(s(),_(C(a.value),{class:T(["VPButton",[e.size,e.theme]]),href:e.href?i(fe)(e.href):void 0,target:t.target??(n.value?"_blank":void 0),rel:t.rel??(n.value?"noreferrer":void 0)},{default:h(()=>[j(N(e.text),1)]),_:1},8,["class","href","target","rel"]))}}),an=b(nn,[["__scopeId","data-v-fa7799d5"]]),on=["src","alt"],sn=p({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(e){return(t,n)=>{const a=W("VPImage",!0);return e.image?(s(),u(x,{key:0},[typeof e.image=="string"||"src"in e.image?(s(),u("img",G({key:0,class:"VPImage"},typeof e.image=="string"?t.$attrs:{...e.image,...t.$attrs},{src:i(ue)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,on)):(s(),u(x,{key:1},[k(a,G({class:"dark",image:e.image.dark,alt:e.image.alt},t.$attrs),null,16,["image","alt"]),k(a,G({class:"light",image:e.image.light,alt:e.image.alt},t.$attrs),null,16,["image","alt"])],64))],64)):m("",!0)}}}),J=b(sn,[["__scopeId","data-v-8426fc1a"]]),rn={class:"container"},ln={class:"main"},cn={class:"heading"},un=["innerHTML"],dn=["innerHTML"],vn=["innerHTML"],fn={key:0,class:"actions"},hn={key:0,class:"image"},mn={class:"image-container"},pn=p({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(e){const t=Z("hero-image-slot-exists");return(n,a)=>(s(),u("div",{class:T(["VPHero",{"has-image":e.image||i(t)}])},[v("div",rn,[v("div",ln,[c(n.$slots,"home-hero-info-before",{},void 0,!0),c(n.$slots,"home-hero-info",{},()=>[v("h1",cn,[e.name?(s(),u("span",{key:0,innerHTML:e.name,class:"name clip"},null,8,un)):m("",!0),e.text?(s(),u("span",{key:1,innerHTML:e.text,class:"text"},null,8,dn)):m("",!0)]),e.tagline?(s(),u("p",{key:0,innerHTML:e.tagline,class:"tagline"},null,8,vn)):m("",!0)],!0),c(n.$slots,"home-hero-info-after",{},void 0,!0),e.actions?(s(),u("div",fn,[(s(!0),u(x,null,H(e.actions,o=>(s(),u("div",{key:o.link,class:"action"},[k(an,{tag:"a",size:"medium",theme:o.theme,text:o.text,href:o.link,target:o.target,rel:o.rel},null,8,["theme","text","href","target","rel"])]))),128))])):m("",!0),c(n.$slots,"home-hero-actions-after",{},void 0,!0)]),e.image||i(t)?(s(),u("div",hn,[v("div",mn,[a[0]||(a[0]=v("div",{class:"image-bg"},null,-1)),c(n.$slots,"home-hero-image",{},()=>[e.image?(s(),_(J,{key:0,class:"image-src",image:e.image},null,8,["image"])):m("",!0)],!0)])])):m("",!0)])],2))}}),kn=b(pn,[["__scopeId","data-v-4f9c455b"]]),_n=p({__name:"VPHomeHero",setup(e){const{frontmatter:t}=P();return(n,a)=>i(t).hero?(s(),_(kn,{key:0,class:"VPHomeHero",name:i(t).hero.name,text:i(t).hero.text,tagline:i(t).hero.tagline,image:i(t).hero.image,actions:i(t).hero.actions},{"home-hero-info-before":h(()=>[c(n.$slots,"home-hero-info-before")]),"home-hero-info":h(()=>[c(n.$slots,"home-hero-info")]),"home-hero-info-after":h(()=>[c(n.$slots,"home-hero-info-after")]),"home-hero-actions-after":h(()=>[c(n.$slots,"home-hero-actions-after")]),"home-hero-image":h(()=>[c(n.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):m("",!0)}}),bn={class:"box"},gn={key:0,class:"icon"},$n=["innerHTML"],yn=["innerHTML"],Pn=["innerHTML"],Ln={key:4,class:"link-text"},Vn={class:"link-text-value"},Sn=p({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(e){return(t,n)=>(s(),_(E,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:h(()=>[v("article",bn,[typeof e.icon=="object"&&e.icon.wrap?(s(),u("div",gn,[k(J,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(s(),_(J,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(s(),u("div",{key:2,class:"icon",innerHTML:e.icon},null,8,$n)):m("",!0),v("h2",{class:"title",innerHTML:e.title},null,8,yn),e.details?(s(),u("p",{key:3,class:"details",innerHTML:e.details},null,8,Pn)):m("",!0),e.linkText?(s(),u("div",Ln,[v("p",Vn,[j(N(e.linkText)+" ",1),n[0]||(n[0]=v("span",{class:"vpi-arrow-right link-text-icon"},null,-1))])])):m("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),Tn=b(Sn,[["__scopeId","data-v-a3976bdc"]]),Nn={key:0,class:"VPFeatures"},Mn={class:"container"},xn={class:"items"},In=p({__name:"VPFeatures",props:{features:{}},setup(e){const t=e,n=g(()=>{const a=t.features.length;if(a){if(a===2)return"grid-2";if(a===3)return"grid-3";if(a%3===0)return"grid-6";if(a>3)return"grid-4"}else return});return(a,o)=>e.features?(s(),u("div",Nn,[v("div",Mn,[v("div",xn,[(s(!0),u(x,null,H(e.features,r=>(s(),u("div",{key:r.title,class:T(["item",[n.value]])},[k(Tn,{icon:r.icon,title:r.title,details:r.details,link:r.link,"link-text":r.linkText,rel:r.rel,target:r.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):m("",!0)}}),wn=b(In,[["__scopeId","data-v-a6181336"]]),Hn=p({__name:"VPHomeFeatures",setup(e){const{frontmatter:t}=P();return(n,a)=>i(t).features?(s(),_(wn,{key:0,class:"VPHomeFeatures",features:i(t).features},null,8,["features"])):m("",!0)}}),An=p({__name:"VPHomeContent",setup(e){const{width:t}=Fe({initialWidth:0,includeScrollbar:!1});return(n,a)=>(s(),u("div",{class:"vp-doc container",style:ye(i(t)?{"--vp-offset":`calc(50% - ${i(t)/2}px)`}:{})},[c(n.$slots,"default",{},void 0,!0)],4))}}),Bn=b(An,[["__scopeId","data-v-8e2d4988"]]),Cn=p({__name:"VPHome",setup(e){const{frontmatter:t,theme:n}=P();return(a,o)=>{const r=W("Content");return s(),u("div",{class:T(["VPHome",{"external-link-icon-enabled":i(n).externalLinkIcon}])},[c(a.$slots,"home-hero-before",{},void 0,!0),k(_n,null,{"home-hero-info-before":h(()=>[c(a.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":h(()=>[c(a.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":h(()=>[c(a.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":h(()=>[c(a.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":h(()=>[c(a.$slots,"home-hero-image",{},void 0,!0)]),_:3}),c(a.$slots,"home-hero-after",{},void 0,!0),c(a.$slots,"home-features-before",{},void 0,!0),k(Hn),c(a.$slots,"home-features-after",{},void 0,!0),i(t).markdownStyles!==!1?(s(),_(Bn,{key:0},{default:h(()=>[k(r)]),_:1})):(s(),_(r,{key:1}))],2)}}}),En=b(Cn,[["__scopeId","data-v-8b561e3d"]]),Fn={},Dn={class:"VPPage"};function On(e,t){const n=W("Content");return s(),u("div",Dn,[c(e.$slots,"page-top"),k(n),c(e.$slots,"page-bottom")])}const Gn=b(Fn,[["render",On]]),Un=p({__name:"VPContent",setup(e){const{page:t,frontmatter:n}=P(),{hasSidebar:a}=D();return(o,r)=>(s(),u("div",{class:T(["VPContent",{"has-sidebar":i(a),"is-home":i(n).layout==="home"}]),id:"VPContent"},[i(t).isNotFound?c(o.$slots,"not-found",{key:0},()=>[k(st)],!0):i(n).layout==="page"?(s(),_(Gn,{key:1},{"page-top":h(()=>[c(o.$slots,"page-top",{},void 0,!0)]),"page-bottom":h(()=>[c(o.$slots,"page-bottom",{},void 0,!0)]),_:3})):i(n).layout==="home"?(s(),_(En,{key:2},{"home-hero-before":h(()=>[c(o.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":h(()=>[c(o.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":h(()=>[c(o.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":h(()=>[c(o.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":h(()=>[c(o.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":h(()=>[c(o.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":h(()=>[c(o.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":h(()=>[c(o.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":h(()=>[c(o.$slots,"home-features-after",{},void 0,!0)]),_:3})):i(n).layout&&i(n).layout!=="doc"?(s(),_(C(i(n).layout),{key:3})):(s(),_(tn,{key:4},{"doc-top":h(()=>[c(o.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":h(()=>[c(o.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":h(()=>[c(o.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":h(()=>[c(o.$slots,"doc-before",{},void 0,!0)]),"doc-after":h(()=>[c(o.$slots,"doc-after",{},void 0,!0)]),"aside-top":h(()=>[c(o.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":h(()=>[c(o.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":h(()=>[c(o.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":h(()=>[c(o.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":h(()=>[c(o.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":h(()=>[c(o.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),jn=b(Un,[["__scopeId","data-v-1428d186"]]),zn={class:"container"},Wn=["innerHTML"],qn=["innerHTML"],Kn=p({__name:"VPFooter",setup(e){const{theme:t,frontmatter:n}=P(),{hasSidebar:a}=D();return(o,r)=>i(t).footer&&i(n).footer!==!1?(s(),u("footer",{key:0,class:T(["VPFooter",{"has-sidebar":i(a)}])},[v("div",zn,[i(t).footer.message?(s(),u("p",{key:0,class:"message",innerHTML:i(t).footer.message},null,8,Wn)):m("",!0),i(t).footer.copyright?(s(),u("p",{key:1,class:"copyright",innerHTML:i(t).footer.copyright},null,8,qn)):m("",!0)])],2)):m("",!0)}}),Rn=b(Kn,[["__scopeId","data-v-e315a0ad"]]);function Jn(){const{theme:e,frontmatter:t}=P(),n=ge([]),a=g(()=>n.value.length>0);return Q(()=>{n.value=he(t.value.outline??e.value.outline)}),{headers:n,hasLocalNav:a}}const Yn={class:"menu-text"},Qn={class:"header"},Xn={class:"outline"},Zn=p({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(e){const t=e,{theme:n}=P(),a=S(!1),o=S(0),r=S(),l=S();function f($){var V;(V=r.value)!=null&&V.contains($.target)||(a.value=!1)}F(a,$=>{if($){document.addEventListener("click",f);return}document.removeEventListener("click",f)}),De("Escape",()=>{a.value=!1}),Q(()=>{a.value=!1});function d(){a.value=!a.value,o.value=window.innerHeight+Math.min(window.scrollY-t.navHeight,0)}function y($){$.target.classList.contains("outline-link")&&(l.value&&(l.value.style.transition="none"),Pe(()=>{a.value=!1}))}function L(){a.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return($,V)=>(s(),u("div",{class:"VPLocalNavOutlineDropdown",style:ye({"--vp-vh":o.value+"px"}),ref_key:"main",ref:r},[e.headers.length>0?(s(),u("button",{key:0,onClick:d,class:T({open:a.value})},[v("span",Yn,N(i(Ne)(i(n))),1),V[0]||(V[0]=v("span",{class:"vpi-chevron-right icon"},null,-1))],2)):(s(),u("button",{key:1,onClick:L},N(i(n).returnToTopLabel||"Return to top"),1)),k(ce,{name:"flyout"},{default:h(()=>[a.value?(s(),u("div",{key:0,ref_key:"items",ref:l,class:"items",onClick:y},[v("div",Qn,[v("a",{class:"top-link",href:"#",onClick:L},N(i(n).returnToTopLabel||"Return to top"),1)]),v("div",Xn,[k(Me,{headers:e.headers},null,8,["headers"])])],512)):m("",!0)]),_:1})],4))}}),ea=b(Zn,[["__scopeId","data-v-8a42e2b4"]]),ta={class:"container"},na=["aria-expanded"],aa={class:"menu-text"},oa=p({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(e){const{theme:t,frontmatter:n}=P(),{hasSidebar:a}=D(),{headers:o}=Jn(),{y:r}=Le(),l=S(0);U(()=>{l.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),Q(()=>{o.value=he(n.value.outline??t.value.outline)});const f=g(()=>o.value.length===0),d=g(()=>f.value&&!a.value),y=g(()=>({VPLocalNav:!0,"has-sidebar":a.value,empty:f.value,fixed:d.value}));return(L,$)=>i(n).layout!=="home"&&(!d.value||i(r)>=l.value)?(s(),u("div",{key:0,class:T(y.value)},[v("div",ta,[i(a)?(s(),u("button",{key:0,class:"menu","aria-expanded":e.open,"aria-controls":"VPSidebarNav",onClick:$[0]||($[0]=V=>L.$emit("open-menu"))},[$[1]||($[1]=v("span",{class:"vpi-align-left menu-icon"},null,-1)),v("span",aa,N(i(t).sidebarMenuLabel||"Menu"),1)],8,na)):m("",!0),k(ea,{headers:i(o),navHeight:l.value},null,8,["headers","navHeight"])])],2)):m("",!0)}}),sa=b(oa,[["__scopeId","data-v-a6f0e41e"]]);function ia(){const e=S(!1);function t(){e.value=!0,window.addEventListener("resize",o)}function n(){e.value=!1,window.removeEventListener("resize",o)}function a(){e.value?n():t()}function o(){window.outerWidth>=768&&n()}const r=X();return F(()=>r.path,n),{isScreenOpen:e,openScreen:t,closeScreen:n,toggleScreen:a}}const ra={},la={class:"VPSwitch",type:"button",role:"switch"},ca={class:"check"},ua={key:0,class:"icon"};function da(e,t){return s(),u("button",la,[v("span",ca,[e.$slots.default?(s(),u("span",ua,[c(e.$slots,"default",{},void 0,!0)])):m("",!0)])])}const va=b(ra,[["render",da],["__scopeId","data-v-1d5665e3"]]),fa=p({__name:"VPSwitchAppearance",setup(e){const{isDark:t,theme:n}=P(),a=Z("toggle-appearance",()=>{t.value=!t.value}),o=S("");return ve(()=>{o.value=t.value?n.value.lightModeSwitchTitle||"Switch to light theme":n.value.darkModeSwitchTitle||"Switch to dark theme"}),(r,l)=>(s(),_(va,{title:o.value,class:"VPSwitchAppearance","aria-checked":i(t),onClick:i(a)},{default:h(()=>[...l[0]||(l[0]=[v("span",{class:"vpi-sun sun"},null,-1),v("span",{class:"vpi-moon moon"},null,-1)])]),_:1},8,["title","aria-checked","onClick"]))}}),me=b(fa,[["__scopeId","data-v-5337faa4"]]),ha={key:0,class:"VPNavBarAppearance"},ma=p({__name:"VPNavBarAppearance",setup(e){const{site:t}=P();return(n,a)=>i(t).appearance&&i(t).appearance!=="force-dark"&&i(t).appearance!=="force-auto"?(s(),u("div",ha,[k(me)])):m("",!0)}}),pa=b(ma,[["__scopeId","data-v-6c893767"]]),pe=S();let xe=!1,oe=0;function ka(e){const t=S(!1);if(ee){!xe&&_a(),oe++;const n=F(pe,a=>{var o,r,l;a===e.el.value||(o=e.el.value)!=null&&o.contains(a)?(t.value=!0,(r=e.onFocus)==null||r.call(e)):(t.value=!1,(l=e.onBlur)==null||l.call(e))});de(()=>{n(),oe--,oe||ba()})}return Oe(t)}function _a(){document.addEventListener("focusin",Ie),xe=!0,pe.value=document.activeElement}function ba(){document.removeEventListener("focusin",Ie)}function Ie(){pe.value=document.activeElement}const ga={class:"VPMenuLink"},$a=["innerHTML"],ya=p({__name:"VPMenuLink",props:{item:{}},setup(e){const{page:t}=P();return(n,a)=>(s(),u("div",ga,[k(E,{class:T({active:i(z)(i(t).relativePath,e.item.activeMatch||e.item.link,!!e.item.activeMatch)}),href:e.item.link,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon},{default:h(()=>[v("span",{innerHTML:e.item.text},null,8,$a)]),_:1},8,["class","href","target","rel","no-icon"])]))}}),te=b(ya,[["__scopeId","data-v-35975db6"]]),Pa={class:"VPMenuGroup"},La={key:0,class:"title"},Va=p({__name:"VPMenuGroup",props:{text:{},items:{}},setup(e){return(t,n)=>(s(),u("div",Pa,[e.text?(s(),u("p",La,N(e.text),1)):m("",!0),(s(!0),u(x,null,H(e.items,a=>(s(),u(x,null,["link"in a?(s(),_(te,{key:0,item:a},null,8,["item"])):m("",!0)],64))),256))]))}}),Sa=b(Va,[["__scopeId","data-v-69e747b5"]]),Ta={class:"VPMenu"},Na={key:0,class:"items"},Ma=p({__name:"VPMenu",props:{items:{}},setup(e){return(t,n)=>(s(),u("div",Ta,[e.items?(s(),u("div",Na,[(s(!0),u(x,null,H(e.items,a=>(s(),u(x,{key:JSON.stringify(a)},["link"in a?(s(),_(te,{key:0,item:a},null,8,["item"])):"component"in a?(s(),_(C(a.component),G({key:1,ref_for:!0},a.props),null,16)):(s(),_(Sa,{key:2,text:a.text,items:a.items},null,8,["text","items"]))],64))),128))])):m("",!0),c(t.$slots,"default",{},void 0,!0)]))}}),xa=b(Ma,[["__scopeId","data-v-b98bc113"]]),Ia=["aria-expanded","aria-label"],wa={key:0,class:"text"},Ha=["innerHTML"],Aa={key:1,class:"vpi-more-horizontal icon"},Ba={class:"menu"},Ca=p({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(e){const t=S(!1),n=S();ka({el:n,onBlur:a});function a(){t.value=!1}return(o,r)=>(s(),u("div",{class:"VPFlyout",ref_key:"el",ref:n,onMouseenter:r[1]||(r[1]=l=>t.value=!0),onMouseleave:r[2]||(r[2]=l=>t.value=!1)},[v("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":t.value,"aria-label":e.label,onClick:r[0]||(r[0]=l=>t.value=!t.value)},[e.button||e.icon?(s(),u("span",wa,[e.icon?(s(),u("span",{key:0,class:T([e.icon,"option-icon"])},null,2)):m("",!0),e.button?(s(),u("span",{key:1,innerHTML:e.button},null,8,Ha)):m("",!0),r[3]||(r[3]=v("span",{class:"vpi-chevron-down text-icon"},null,-1))])):(s(),u("span",Aa))],8,Ia),v("div",Ba,[k(xa,{items:e.items},{default:h(()=>[c(o.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),ke=b(Ca,[["__scopeId","data-v-cf11d7a2"]]),Ea=["href","aria-label","innerHTML"],Fa=p({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(e){const t=e,n=S();U(async()=>{var r;await Pe();const o=(r=n.value)==null?void 0:r.children[0];o instanceof HTMLElement&&o.className.startsWith("vpi-social-")&&(getComputedStyle(o).maskImage||getComputedStyle(o).webkitMaskImage)==="none"&&o.style.setProperty("--icon",`url('https://api.iconify.design/simple-icons/${t.icon}.svg')`)});const a=g(()=>typeof t.icon=="object"?t.icon.svg:``);return(o,r)=>(s(),u("a",{ref_key:"el",ref:n,class:"VPSocialLink no-icon",href:e.link,"aria-label":e.ariaLabel??(typeof e.icon=="string"?e.icon:""),target:"_blank",rel:"noopener",innerHTML:a.value},null,8,Ea))}}),Da=b(Fa,[["__scopeId","data-v-bd121fe5"]]),Oa={class:"VPSocialLinks"},Ga=p({__name:"VPSocialLinks",props:{links:{}},setup(e){return(t,n)=>(s(),u("div",Oa,[(s(!0),u(x,null,H(e.links,({link:a,icon:o,ariaLabel:r})=>(s(),_(Da,{key:a,icon:o,link:a,ariaLabel:r},null,8,["icon","link","ariaLabel"]))),128))]))}}),_e=b(Ga,[["__scopeId","data-v-7bc22406"]]),Ua={key:0,class:"group translations"},ja={class:"trans-title"},za={key:1,class:"group"},Wa={class:"item appearance"},qa={class:"label"},Ka={class:"appearance-action"},Ra={key:2,class:"group"},Ja={class:"item social-links"},Ya=p({__name:"VPNavBarExtra",setup(e){const{site:t,theme:n}=P(),{localeLinks:a,currentLang:o}=K({correspondingLink:!0}),r=g(()=>a.value.length&&o.value.label||t.value.appearance||n.value.socialLinks);return(l,f)=>r.value?(s(),_(ke,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:h(()=>[i(a).length&&i(o).label?(s(),u("div",Ua,[v("p",ja,N(i(o).label),1),(s(!0),u(x,null,H(i(a),d=>(s(),_(te,{key:d.link,item:d},null,8,["item"]))),128))])):m("",!0),i(t).appearance&&i(t).appearance!=="force-dark"&&i(t).appearance!=="force-auto"?(s(),u("div",za,[v("div",Wa,[v("p",qa,N(i(n).darkModeSwitchLabel||"Appearance"),1),v("div",Ka,[k(me)])])])):m("",!0),i(n).socialLinks?(s(),u("div",Ra,[v("div",Ja,[k(_e,{class:"social-links-list",links:i(n).socialLinks},null,8,["links"])])])):m("",!0)]),_:1})):m("",!0)}}),Qa=b(Ya,[["__scopeId","data-v-bb2aa2f0"]]),Xa=["aria-expanded"],Za=p({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(e){return(t,n)=>(s(),u("button",{type:"button",class:T(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:n[0]||(n[0]=a=>t.$emit("click"))},[...n[1]||(n[1]=[v("span",{class:"container"},[v("span",{class:"top"}),v("span",{class:"middle"}),v("span",{class:"bottom"})],-1)])],10,Xa))}}),eo=b(Za,[["__scopeId","data-v-e5dd9c1c"]]),to=["innerHTML"],no=p({__name:"VPNavBarMenuLink",props:{item:{}},setup(e){const{page:t}=P();return(n,a)=>(s(),_(E,{class:T({VPNavBarMenuLink:!0,active:i(z)(i(t).relativePath,e.item.activeMatch||e.item.link,!!e.item.activeMatch)}),href:e.item.link,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,tabindex:"0"},{default:h(()=>[v("span",{innerHTML:e.item.text},null,8,to)]),_:1},8,["class","href","target","rel","no-icon"]))}}),ao=b(no,[["__scopeId","data-v-e56f3d57"]]),oo=p({__name:"VPNavBarMenuGroup",props:{item:{}},setup(e){const t=e,{page:n}=P(),a=r=>"component"in r?!1:"link"in r?z(n.value.relativePath,r.link,!!t.item.activeMatch):r.items.some(a),o=g(()=>a(t.item));return(r,l)=>(s(),_(ke,{class:T({VPNavBarMenuGroup:!0,active:i(z)(i(n).relativePath,e.item.activeMatch,!!e.item.activeMatch)||o.value}),button:e.item.text,items:e.item.items},null,8,["class","button","items"]))}}),so={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},io=p({__name:"VPNavBarMenu",setup(e){const{theme:t}=P();return(n,a)=>i(t).nav?(s(),u("nav",so,[a[0]||(a[0]=v("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),(s(!0),u(x,null,H(i(t).nav,o=>(s(),u(x,{key:JSON.stringify(o)},["link"in o?(s(),_(ao,{key:0,item:o},null,8,["item"])):"component"in o?(s(),_(C(o.component),G({key:1,ref_for:!0},o.props),null,16)):(s(),_(oo,{key:2,item:o},null,8,["item"]))],64))),128))])):m("",!0)}}),ro=b(io,[["__scopeId","data-v-dc692963"]]);function lo(e){const{localeIndex:t,theme:n}=P();function a(o){var I,w,A;const r=o.split("."),l=(I=n.value.search)==null?void 0:I.options,f=l&&typeof l=="object",d=f&&((A=(w=l.locales)==null?void 0:w[t.value])==null?void 0:A.translations)||null,y=f&&l.translations||null;let L=d,$=y,V=e;const M=r.pop();for(const B of r){let O=null;const q=V==null?void 0:V[B];q&&(O=V=q);const ne=$==null?void 0:$[B];ne&&(O=$=ne);const ae=L==null?void 0:L[B];ae&&(O=L=ae),q||(V=O),ne||($=O),ae||(L=O)}return(L==null?void 0:L[M])??($==null?void 0:$[M])??(V==null?void 0:V[M])??""}return a}const co=["aria-label"],uo={class:"DocSearch-Button-Container"},vo={class:"DocSearch-Button-Placeholder"},be=p({__name:"VPNavBarSearchButton",setup(e){const n=lo({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(a,o)=>(s(),u("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":i(n)("button.buttonAriaLabel")},[v("span",uo,[o[0]||(o[0]=v("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1)),v("span",vo,N(i(n)("button.buttonText")),1)]),o[1]||(o[1]=v("span",{class:"DocSearch-Button-Keys"},[v("kbd",{class:"DocSearch-Button-Key"}),v("kbd",{class:"DocSearch-Button-Key"},"K")],-1))],8,co))}}),fo={class:"VPNavBarSearch"},ho={id:"local-search"},mo={key:1,id:"docsearch"},po=p({__name:"VPNavBarSearch",setup(e){const t=()=>null,n=()=>null,{theme:a}=P(),o=S(!1),r=S(!1);U(()=>{});function l(){o.value||(o.value=!0,setTimeout(f,16))}function f(){const L=new Event("keydown");L.key="k",L.metaKey=!0,window.dispatchEvent(L),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||f()},16)}const d=S(!1),y="";return(L,$)=>{var V;return s(),u("div",fo,[i(y)==="local"?(s(),u(x,{key:0},[d.value?(s(),_(i(t),{key:0,onClose:$[0]||($[0]=M=>d.value=!1)})):m("",!0),v("div",ho,[k(be,{onClick:$[1]||($[1]=M=>d.value=!0)})])],64)):i(y)==="algolia"?(s(),u(x,{key:1},[o.value?(s(),_(i(n),{key:0,algolia:((V=i(a).search)==null?void 0:V.options)??i(a).algolia,onVnodeBeforeMount:$[2]||($[2]=M=>r.value=!0)},null,8,["algolia"])):m("",!0),r.value?m("",!0):(s(),u("div",mo,[k(be,{onClick:l})]))],64)):m("",!0)])}}}),ko=p({__name:"VPNavBarSocialLinks",setup(e){const{theme:t}=P();return(n,a)=>i(t).socialLinks?(s(),_(_e,{key:0,class:"VPNavBarSocialLinks",links:i(t).socialLinks},null,8,["links"])):m("",!0)}}),_o=b(ko,[["__scopeId","data-v-0394ad82"]]),bo=["href","rel","target"],go=["innerHTML"],$o={key:2},yo=p({__name:"VPNavBarTitle",setup(e){const{site:t,theme:n}=P(),{hasSidebar:a}=D(),{currentLang:o}=K(),r=g(()=>{var d;return typeof n.value.logoLink=="string"?n.value.logoLink:(d=n.value.logoLink)==null?void 0:d.link}),l=g(()=>{var d;return typeof n.value.logoLink=="string"||(d=n.value.logoLink)==null?void 0:d.rel}),f=g(()=>{var d;return typeof n.value.logoLink=="string"||(d=n.value.logoLink)==null?void 0:d.target});return(d,y)=>(s(),u("div",{class:T(["VPNavBarTitle",{"has-sidebar":i(a)}])},[v("a",{class:"title",href:r.value??i(fe)(i(o).link),rel:l.value,target:f.value},[c(d.$slots,"nav-bar-title-before",{},void 0,!0),i(n).logo?(s(),_(J,{key:0,class:"logo",image:i(n).logo},null,8,["image"])):m("",!0),i(n).siteTitle?(s(),u("span",{key:1,innerHTML:i(n).siteTitle},null,8,go)):i(n).siteTitle===void 0?(s(),u("span",$o,N(i(t).title),1)):m("",!0),c(d.$slots,"nav-bar-title-after",{},void 0,!0)],8,bo)],2))}}),Po=b(yo,[["__scopeId","data-v-1168a8e4"]]),Lo={class:"items"},Vo={class:"title"},So=p({__name:"VPNavBarTranslations",setup(e){const{theme:t}=P(),{localeLinks:n,currentLang:a}=K({correspondingLink:!0});return(o,r)=>i(n).length&&i(a).label?(s(),_(ke,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:i(t).langMenuLabel||"Change language"},{default:h(()=>[v("div",Lo,[v("p",Vo,N(i(a).label),1),(s(!0),u(x,null,H(i(n),l=>(s(),_(te,{key:l.link,item:l},null,8,["item"]))),128))])]),_:1},8,["label"])):m("",!0)}}),To=b(So,[["__scopeId","data-v-88af2de4"]]),No={class:"wrapper"},Mo={class:"container"},xo={class:"title"},Io={class:"content"},wo={class:"content-body"},Ho=p({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(e){const t=e,{y:n}=Le(),{hasSidebar:a}=D(),{frontmatter:o}=P(),r=S({});return ve(()=>{r.value={"has-sidebar":a.value,home:o.value.layout==="home",top:n.value===0,"screen-open":t.isScreenOpen}}),(l,f)=>(s(),u("div",{class:T(["VPNavBar",r.value])},[v("div",No,[v("div",Mo,[v("div",xo,[k(Po,null,{"nav-bar-title-before":h(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":h(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),v("div",Io,[v("div",wo,[c(l.$slots,"nav-bar-content-before",{},void 0,!0),k(po,{class:"search"}),k(ro,{class:"menu"}),k(To,{class:"translations"}),k(pa,{class:"appearance"}),k(_o,{class:"social-links"}),k(Qa,{class:"extra"}),c(l.$slots,"nav-bar-content-after",{},void 0,!0),k(eo,{class:"hamburger",active:e.isScreenOpen,onClick:f[0]||(f[0]=d=>l.$emit("toggle-screen"))},null,8,["active"])])])])]),f[1]||(f[1]=v("div",{class:"divider"},[v("div",{class:"divider-line"})],-1))],2))}}),Ao=b(Ho,[["__scopeId","data-v-6aa21345"]]),Bo={key:0,class:"VPNavScreenAppearance"},Co={class:"text"},Eo=p({__name:"VPNavScreenAppearance",setup(e){const{site:t,theme:n}=P();return(a,o)=>i(t).appearance&&i(t).appearance!=="force-dark"&&i(t).appearance!=="force-auto"?(s(),u("div",Bo,[v("p",Co,N(i(n).darkModeSwitchLabel||"Appearance"),1),k(me)])):m("",!0)}}),Fo=b(Eo,[["__scopeId","data-v-b44890b2"]]),Do=["innerHTML"],Oo=p({__name:"VPNavScreenMenuLink",props:{item:{}},setup(e){const t=Z("close-screen");return(n,a)=>(s(),_(E,{class:"VPNavScreenMenuLink",href:e.item.link,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,onClick:i(t)},{default:h(()=>[v("span",{innerHTML:e.item.text},null,8,Do)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),Go=b(Oo,[["__scopeId","data-v-df37e6dd"]]),Uo=["innerHTML"],jo=p({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(e){const t=Z("close-screen");return(n,a)=>(s(),_(E,{class:"VPNavScreenMenuGroupLink",href:e.item.link,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,onClick:i(t)},{default:h(()=>[v("span",{innerHTML:e.item.text},null,8,Uo)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),we=b(jo,[["__scopeId","data-v-3e9c20e4"]]),zo={class:"VPNavScreenMenuGroupSection"},Wo={key:0,class:"title"},qo=p({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(e){return(t,n)=>(s(),u("div",zo,[e.text?(s(),u("p",Wo,N(e.text),1)):m("",!0),(s(!0),u(x,null,H(e.items,a=>(s(),_(we,{key:a.text,item:a},null,8,["item"]))),128))]))}}),Ko=b(qo,[["__scopeId","data-v-8133b170"]]),Ro=["aria-controls","aria-expanded"],Jo=["innerHTML"],Yo=["id"],Qo={key:0,class:"item"},Xo={key:1,class:"item"},Zo={key:2,class:"group"},es=p({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(e){const t=e,n=S(!1),a=g(()=>`NavScreenGroup-${t.text.replace(" ","-").toLowerCase()}`);function o(){n.value=!n.value}return(r,l)=>(s(),u("div",{class:T(["VPNavScreenMenuGroup",{open:n.value}])},[v("button",{class:"button","aria-controls":a.value,"aria-expanded":n.value,onClick:o},[v("span",{class:"button-text",innerHTML:e.text},null,8,Jo),l[0]||(l[0]=v("span",{class:"vpi-plus button-icon"},null,-1))],8,Ro),v("div",{id:a.value,class:"items"},[(s(!0),u(x,null,H(e.items,f=>(s(),u(x,{key:JSON.stringify(f)},["link"in f?(s(),u("div",Qo,[k(we,{item:f},null,8,["item"])])):"component"in f?(s(),u("div",Xo,[(s(),_(C(f.component),G({ref_for:!0},f.props,{"screen-menu":""}),null,16))])):(s(),u("div",Zo,[k(Ko,{text:f.text,items:f.items},null,8,["text","items"])]))],64))),128))],8,Yo)],2))}}),ts=b(es,[["__scopeId","data-v-b9ab8c58"]]),ns={key:0,class:"VPNavScreenMenu"},as=p({__name:"VPNavScreenMenu",setup(e){const{theme:t}=P();return(n,a)=>i(t).nav?(s(),u("nav",ns,[(s(!0),u(x,null,H(i(t).nav,o=>(s(),u(x,{key:JSON.stringify(o)},["link"in o?(s(),_(Go,{key:0,item:o},null,8,["item"])):"component"in o?(s(),_(C(o.component),G({key:1,ref_for:!0},o.props,{"screen-menu":""}),null,16)):(s(),_(ts,{key:2,text:o.text||"",items:o.items},null,8,["text","items"]))],64))),128))])):m("",!0)}}),os=p({__name:"VPNavScreenSocialLinks",setup(e){const{theme:t}=P();return(n,a)=>i(t).socialLinks?(s(),_(_e,{key:0,class:"VPNavScreenSocialLinks",links:i(t).socialLinks},null,8,["links"])):m("",!0)}}),ss={class:"list"},is=p({__name:"VPNavScreenTranslations",setup(e){const{localeLinks:t,currentLang:n}=K({correspondingLink:!0}),a=S(!1);function o(){a.value=!a.value}return(r,l)=>i(t).length&&i(n).label?(s(),u("div",{key:0,class:T(["VPNavScreenTranslations",{open:a.value}])},[v("button",{class:"title",onClick:o},[l[0]||(l[0]=v("span",{class:"vpi-languages icon lang"},null,-1)),j(" "+N(i(n).label)+" ",1),l[1]||(l[1]=v("span",{class:"vpi-chevron-down icon chevron"},null,-1))]),v("ul",ss,[(s(!0),u(x,null,H(i(t),f=>(s(),u("li",{key:f.link,class:"item"},[k(E,{class:"link",href:f.link},{default:h(()=>[j(N(f.text),1)]),_:2},1032,["href"])]))),128))])],2)):m("",!0)}}),rs=b(is,[["__scopeId","data-v-858fe1a4"]]),ls={class:"container"},cs=p({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(e){const t=S(null),n=Ve(ee?document.body:null);return(a,o)=>(s(),_(ce,{name:"fade",onEnter:o[0]||(o[0]=r=>n.value=!0),onAfterLeave:o[1]||(o[1]=r=>n.value=!1)},{default:h(()=>[e.open?(s(),u("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:t,id:"VPNavScreen"},[v("div",ls,[c(a.$slots,"nav-screen-content-before",{},void 0,!0),k(as,{class:"menu"}),k(rs,{class:"translations"}),k(Fo,{class:"appearance"}),k(os,{class:"social-links"}),c(a.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):m("",!0)]),_:3}))}}),us=b(cs,[["__scopeId","data-v-f2779853"]]),ds={key:0,class:"VPNav"},vs=p({__name:"VPNav",setup(e){const{isScreenOpen:t,closeScreen:n,toggleScreen:a}=ia(),{frontmatter:o}=P(),r=g(()=>o.value.navbar!==!1);return Se("close-screen",n),Y(()=>{ee&&document.documentElement.classList.toggle("hide-nav",!r.value)}),(l,f)=>r.value?(s(),u("header",ds,[k(Ao,{"is-screen-open":i(t),onToggleScreen:i(a)},{"nav-bar-title-before":h(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":h(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":h(()=>[c(l.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":h(()=>[c(l.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),k(us,{open:i(t)},{"nav-screen-content-before":h(()=>[c(l.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":h(()=>[c(l.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):m("",!0)}}),fs=b(vs,[["__scopeId","data-v-ae24b3ad"]]),hs=["role","tabindex"],ms={key:1,class:"items"},ps=p({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(e){const t=e,{collapsed:n,collapsible:a,isLink:o,isActiveLink:r,hasActiveLink:l,hasChildren:f,toggle:d}=ct(g(()=>t.item)),y=g(()=>f.value?"section":"div"),L=g(()=>o.value?"a":"div"),$=g(()=>f.value?t.depth+2===7?"p":`h${t.depth+2}`:"p"),V=g(()=>o.value?void 0:"button"),M=g(()=>[[`level-${t.depth}`],{collapsible:a.value},{collapsed:n.value},{"is-link":o.value},{"is-active":r.value},{"has-active":l.value}]);function I(A){"key"in A&&A.key!=="Enter"||!t.item.link&&d()}function w(){t.item.link&&d()}return(A,B)=>{const O=W("VPSidebarItem",!0);return s(),_(C(y.value),{class:T(["VPSidebarItem",M.value])},{default:h(()=>[e.item.text?(s(),u("div",G({key:0,class:"item",role:V.value},Ge(e.item.items?{click:I,keydown:I}:{},!0),{tabindex:e.item.items&&0}),[B[1]||(B[1]=v("div",{class:"indicator"},null,-1)),e.item.link?(s(),_(E,{key:0,tag:L.value,class:"link",href:e.item.link,rel:e.item.rel,target:e.item.target},{default:h(()=>[(s(),_(C($.value),{class:"text",innerHTML:e.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(s(),_(C($.value),{key:1,class:"text",innerHTML:e.item.text},null,8,["innerHTML"])),e.item.collapsed!=null&&e.item.items&&e.item.items.length?(s(),u("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:w,onKeydown:Ue(w,["enter"]),tabindex:"0"},[...B[0]||(B[0]=[v("span",{class:"vpi-chevron-right caret-icon"},null,-1)])],32)):m("",!0)],16,hs)):m("",!0),e.item.items&&e.item.items.length?(s(),u("div",ms,[e.depth<5?(s(!0),u(x,{key:0},H(e.item.items,q=>(s(),_(O,{key:q.text,item:q,depth:e.depth+1},null,8,["item","depth"]))),128)):m("",!0)])):m("",!0)]),_:1},8,["class"])}}}),ks=b(ps,[["__scopeId","data-v-b3fd67f8"]]),_s=p({__name:"VPSidebarGroup",props:{items:{}},setup(e){const t=S(!0);let n=null;return U(()=>{n=setTimeout(()=>{n=null,t.value=!1},300)}),je(()=>{n!=null&&(clearTimeout(n),n=null)}),(a,o)=>(s(!0),u(x,null,H(e.items,r=>(s(),u("div",{key:r.text,class:T(["group",{"no-transition":t.value}])},[k(ks,{item:r,depth:0},null,8,["item"])],2))),128))}}),bs=b(_s,[["__scopeId","data-v-c40bc020"]]),gs={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},$s=p({__name:"VPSidebar",props:{open:{type:Boolean}},setup(e){const{sidebarGroups:t,hasSidebar:n}=D(),a=e,o=S(null),r=Ve(ee?document.body:null);F([a,o],()=>{var f;a.open?(r.value=!0,(f=o.value)==null||f.focus()):r.value=!1},{immediate:!0,flush:"post"});const l=S(0);return F(t,()=>{l.value+=1},{deep:!0}),(f,d)=>i(n)?(s(),u("aside",{key:0,class:T(["VPSidebar",{open:e.open}]),ref_key:"navEl",ref:o,onClick:d[0]||(d[0]=ze(()=>{},["stop"]))},[d[2]||(d[2]=v("div",{class:"curtain"},null,-1)),v("nav",gs,[d[1]||(d[1]=v("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),c(f.$slots,"sidebar-nav-before",{},void 0,!0),(s(),_(bs,{items:i(t),key:l.value},null,8,["items"])),c(f.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):m("",!0)}}),ys=b($s,[["__scopeId","data-v-319d5ca6"]]),Ps=p({__name:"VPSkipLink",setup(e){const{theme:t}=P(),n=X(),a=S();F(()=>n.path,()=>a.value.focus());function o({target:r}){const l=document.getElementById(decodeURIComponent(r.hash).slice(1));if(l){const f=()=>{l.removeAttribute("tabindex"),l.removeEventListener("blur",f)};l.setAttribute("tabindex","-1"),l.addEventListener("blur",f),l.focus(),window.scrollTo(0,0)}}return(r,l)=>(s(),u(x,null,[v("span",{ref_key:"backToTop",ref:a,tabindex:"-1"},null,512),v("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:o},N(i(t).skipToContentLabel||"Skip to content"),1)],64))}}),Ls=b(Ps,[["__scopeId","data-v-0b0ada53"]]),Vs=p({__name:"Layout",setup(e){const{isOpen:t,open:n,close:a}=D(),o=X();F(()=>o.path,a),lt(t,a);const{frontmatter:r}=P(),l=We(),f=g(()=>!!l["home-hero-image"]);return Se("hero-image-slot-exists",f),(d,y)=>{const L=W("Content");return i(r).layout!==!1?(s(),u("div",{key:0,class:T(["Layout",i(r).pageClass])},[c(d.$slots,"layout-top",{},void 0,!0),k(Ls),k(Je,{class:"backdrop",show:i(t),onClick:i(a)},null,8,["show","onClick"]),k(fs,null,{"nav-bar-title-before":h(()=>[c(d.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":h(()=>[c(d.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":h(()=>[c(d.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":h(()=>[c(d.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":h(()=>[c(d.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":h(()=>[c(d.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),k(sa,{open:i(t),onOpenMenu:i(n)},null,8,["open","onOpenMenu"]),k(ys,{open:i(t)},{"sidebar-nav-before":h(()=>[c(d.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":h(()=>[c(d.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),k(jn,null,{"page-top":h(()=>[c(d.$slots,"page-top",{},void 0,!0)]),"page-bottom":h(()=>[c(d.$slots,"page-bottom",{},void 0,!0)]),"not-found":h(()=>[c(d.$slots,"not-found",{},void 0,!0)]),"home-hero-before":h(()=>[c(d.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":h(()=>[c(d.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":h(()=>[c(d.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":h(()=>[c(d.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":h(()=>[c(d.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":h(()=>[c(d.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":h(()=>[c(d.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":h(()=>[c(d.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":h(()=>[c(d.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":h(()=>[c(d.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":h(()=>[c(d.$slots,"doc-before",{},void 0,!0)]),"doc-after":h(()=>[c(d.$slots,"doc-after",{},void 0,!0)]),"doc-top":h(()=>[c(d.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":h(()=>[c(d.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":h(()=>[c(d.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":h(()=>[c(d.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":h(()=>[c(d.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":h(()=>[c(d.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":h(()=>[c(d.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":h(()=>[c(d.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),k(Rn),c(d.$slots,"layout-bottom",{},void 0,!0)],2)):(s(),_(L,{key:1}))}}}),Ss=b(Vs,[["__scopeId","data-v-5d98c3a5"]]),Ns={Layout:Ss,enhanceApp:({app:e})=>{e.component("Badge",qe)}};export{Ns as t}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/extensibility_CustomServerMiddleware.md.x59WjcrL.js b/packages/documentation/docs/.vitepress/dist/assets/extensibility_CustomServerMiddleware.md.x59WjcrL.js deleted file mode 100644 index cad1d89f9a..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/extensibility_CustomServerMiddleware.md.x59WjcrL.js +++ /dev/null @@ -1,153 +0,0 @@ -import{_ as i,c as a,o as n,ae as e}from"./chunks/framework.CBTkueSR.js";const o=JSON.parse('{"title":"Custom UI5 Server Middleware","description":"","frontmatter":{},"headers":[],"relativePath":"extensibility/CustomServerMiddleware.md","filePath":"extensibility/CustomServerMiddleware.md"}'),t={name:"extensibility/CustomServerMiddleware.md"};function l(h,s,p,k,r,d){return n(),a("div",null,[...s[0]||(s[0]=[e(`

Custom UI5 Server Middleware

The UI5 Server Extensibility enables you to enhance the functionality of the UI5 Server. You may want to handle requests differently. For example add various headers to a response or parse data of a POST request in a specific way. For this you can plug custom middleware implementations into the internal express server of the UI5 Server module.

The UI5 community already created many custom middleware packages which you can integrate into your project. They are often prefixed by ui5-middleware- to make them easily searchable in the npm registry.

Please note that custom middleware packages from third parties can not only modify how your project is served but also execute arbitrary code on your system. In fact, this is the case for all npm packages you install. Always act with the according care and follow best practices.

Configuration

In a projects ui5.yaml file, you can define additional server middleware modules that will be executed when the request is received by the server. This configuration exclusively affects the server started in this project. Custom middleware configurations defined in any dependencies are ignored.

A middleware may be executed before or after any other middleware. This can either be a standard middleware or another custom middleware.

Example: Basic configuration

yaml
# In this example configuration, two custom tasks are defined: 'babel' and 'render-markdown-files'.
-specVersion: "4.0"
-type: application
-metadata:
-  name: my.application
-server:
-  customMiddleware:
-    - name: myCustomMiddleware
-      mountPath: /myapp
-      afterMiddleware: compression
-      configuration:
-        debug: true

In the above example the middleware compression is already included as a standard middleware by the UI5 Server. When serving the application my.application, the server will call the custom middleware myCustomMiddleware after compression.

There can be optional configuration parameters which are passed directly to the custom middleware implementation (see below).

An optional mountPath for which the middleware function is invoked can be provided. It will be passed to the app.use call (see express API reference).

Execution order

Note that middleware configurations are applied in the order they are defined. When referencing another custom middleware, it has to be defined before that reference.

Custom Middleware Extension

A custom middleware extension consists of a ui5.yaml and a custom middleware implementation. It can be a standalone module or part of an existing UI5 project.

Example: ui5.yaml

yaml
specVersion: "4.0"
-kind: extension
-type: server-middleware
-metadata:
-  name: markdownHandler
-middleware:
-  path: lib/middleware/markdownHandler.js

Custom middleware extensions can be standalone modules which are handled as dependencies.

Alternatively you can implement a custom middleware extension as part of your UI5 project. In that case, the configuration of the extension is part of your project configuration inside the ui5.yaml as shown below.

The UI5 Server will detect the custom middleware configuration of the project and use the middleware on startup.

Example: Custom Middleware Extension defined in UI5 project

yaml
# Project configuration for the above example
-specVersion: "4.0"
-kind: project
-type: application
-metadata:
-  name: my.application
-server:
-  customMiddleware:
-    - name: markdownHandler
-      beforeMiddleware: serveResources
----
-# Custom middleware extension as part of your project
-specVersion: "4.0"
-kind: extension
-type: server-middleware
-metadata:
-  name: markdownHandler
-middleware:
-  path: lib/middleware/markdownHandler.js

Custom Middleware Implementation

A custom middleware implementation needs to return a function with the following signature:

js
/**
- * Custom UI5 Server middleware API
- * 
- * @param {object} parameters Parameters
- * @param {@ui5/logger/Logger} parameters.log
- *      Logger instance for use in the custom middleware.
- *      This parameter is only provided to custom middleware
- *      extensions defining Specification Version 3.0 and later.
- * @param {@ui5/server.middleware.MiddlewareUtil} parameters.middlewareUtil
- *      Specification version-dependent interface to a
- *      MiddlewareUtil instance. See the corresponding API reference for details:
- *      https://sap.github.io/ui5-tooling/v4/api/@ui5_server_middleware_MiddlewareUtil.html
- * @param {object} parameters.options Options
- * @param {string} parameters.options.configuration
- *      Custom middleware configuration, as defined in the project's ui5.yaml
- * @param {string} parameters.options.middlewareName
- *      Name of the custom middleware.
- *      This parameter is only provided to custom middleware extensions
- *      defining Specification Version 3.0 and later
- * @param {object} parameters.resources Readers for accessing resources
- * @param {module:@ui5/fs.AbstractReader} parameters.resources.all
- *      Reader to access resources of the root project and its dependencies
- * @param {module:@ui5/fs.AbstractReader} parameters.resources.rootProject
- *      Reader to access resources of the root project
- * @param {module:@ui5/fs.AbstractReader} parameters.resources.dependencies
- *      Reader to access resources of the project's dependencies.
- * @returns {function} Middleware function to use
- */
-export default function({log, middlewareUtil, options, resources}) {
-    return async function (req, res, next) {
-        // [...]
-    }
-};
js
/**
- * Custom UI5 Server middleware API
- * 
- * @param {object} parameters Parameters
- * @param {@ui5/logger/Logger} parameters.log
- *      Logger instance for use in the custom middleware.
- *      This parameter is only provided to custom middleware
- *      extensions defining Specification Version 3.0 and later.
- * @param {@ui5/server.middleware.MiddlewareUtil} parameters.middlewareUtil
- *      Specification version-dependent interface to a
- *      MiddlewareUtil instance. See the corresponding API reference for details:
- *      https://sap.github.io/ui5-tooling/v4/api/@ui5_server_middleware_MiddlewareUtil.html
- * @param {object} parameters.options Options
- * @param {string} parameters.options.configuration
- *      Custom middleware configuration, as defined in the project's ui5.yaml
- * @param {string} parameters.options.middlewareName
- *      Name of the custom middleware.
- *      This parameter is only provided to custom middleware extensions
- *      defining Specification Version 3.0 and later
- * @param {object} parameters.resources Readers for accessing resources
- * @param {module:@ui5/fs.AbstractReader} parameters.resources.all
- *      Reader to access resources of the root project and its dependencies
- * @param {module:@ui5/fs.AbstractReader} parameters.resources.rootProject
- *      Reader to access resources of the root project
- * @param {module:@ui5/fs.AbstractReader} parameters.resources.dependencies
- *      Reader to access resources of the project's dependencies.
- * @returns {function} Middleware function to use
- */
-module.exports = function({log, middlewareUtil, options, resources}) {
-    return async function (req, res, next) {
-        // [...]
-    }
-};

Example: lib/middleware/markdownHandler.(m)js

js

-   
-import MarkdownIt from "markdown-it";export default async function({log, middlewareUtil, options, resources}) {
-    const md = new MarkdownIt();
-    return function (req, res, next) {
-        if (!req.path || !req.path.endsWith(".html")) {
-            // Do not handle non-HTML requests
-            next();
-            return;
-        }
-        // Try to read a corresponding markdown file
-        resources.rootProject.byPath(req.path.replace(".html", ".md")).then(async (resource) => {
-            if (!resource) {
-                // No file found, hand over to next middleware
-                next();
-                return;
-            }
-            log.info(\`Rendering markdown for \${resource.getPath()}\`);
-            const markdown = await resource.getBuffer();
-            // Generate HTML from markdown string
-            const html = md.render(markdown.toString());
-            res.type('.html');
-            res.end(html);
-        }).catch((err) => {
-            next(err);
-        });
-   }
- };
js
module.exports = async function({log, middlewareUtil, options, resources}) {
-    const MarkdownIt = require("markdown-it");
-    const md = new MarkdownIt();
-    return function (req, res, next) {
-        if (!req.path || !req.path.endsWith(".html")) {
-            // Do not handle non-HTML requests
-            next();
-            return;
-        }
-        // Try to read a corresponding markdown file
-        resources.rootProject.byPath(req.path.replace(".html", ".md")).then(async (resource) => {
-            if (!resource) {
-                // No file found, hand over to next middleware
-                next();
-                return;
-            }
-            log.info(\`Rendering markdown for \${resource.getPath()}\`);
-            const markdown = await resource.getBuffer();
-            // Generate HTML from markdown string
-            const html = md.render(markdown.toString());
-            res.type('.html');
-            res.end(html);
-        }).catch((err) => {
-            next(err);
-        });
-    }
-};

Helper Class MiddlewareUtil

Custom middleware defining Specification Version 2.0 or higher have access to an interface of a MiddlewareUtil instance.

In this case, a middlewareUtil object is provided as a part of the custom middleware's parameters. Depending on the specification version of the custom middleware, a set of helper functions is available to the implementation. The lowest required specification version for every function is listed in the MiddlewareUtil API reference.

Integration with karma-ui5

WARNING

The Karma project has been deprecated as of 2023

karma-ui5 is a plugin for the popular Karma test runner. Based on your configuration, it can fetch resources from a dedicated server or start an internal server using parts of UI5 Tooling.

In the latter case, any custom middleware configured in the default ui5.yaml of the project will be used automatically.

However, since Karma uses the connect framework, as opposed to UI5 Tooling's express, custom middleware might not always work as expected. Compared to connect, the express framework provides a more versatile API to middleware.

Therefore, if you plan to use custom middleware in an integrated scenario with karma-ui5, you must restrict the middleware to using the connect API only to ensure compatibility.

Alternatively, you can start a server with the usual ui5 serve command and configure the corresponding URL for use by karma-ui5.

`,33)])])}const g=i(t,[["render",l]]);export{o as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/extensibility_CustomServerMiddleware.md.x59WjcrL.lean.js b/packages/documentation/docs/.vitepress/dist/assets/extensibility_CustomServerMiddleware.md.x59WjcrL.lean.js deleted file mode 100644 index a1eea7368c..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/extensibility_CustomServerMiddleware.md.x59WjcrL.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,ae as e}from"./chunks/framework.CBTkueSR.js";const o=JSON.parse('{"title":"Custom UI5 Server Middleware","description":"","frontmatter":{},"headers":[],"relativePath":"extensibility/CustomServerMiddleware.md","filePath":"extensibility/CustomServerMiddleware.md"}'),t={name:"extensibility/CustomServerMiddleware.md"};function l(h,s,p,k,r,d){return n(),a("div",null,[...s[0]||(s[0]=[e("",33)])])}const g=i(t,[["render",l]]);export{o as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/extensibility_CustomTasks.md.iHprFA7D.js b/packages/documentation/docs/.vitepress/dist/assets/extensibility_CustomTasks.md.iHprFA7D.js deleted file mode 100644 index 9c0f881275..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/extensibility_CustomTasks.md.iHprFA7D.js +++ /dev/null @@ -1,307 +0,0 @@ -import{_ as i,c as a,o as n,ae as t}from"./chunks/framework.CBTkueSR.js";const g=JSON.parse('{"title":"Custom UI5 Builder Tasks","description":"","frontmatter":{},"headers":[],"relativePath":"extensibility/CustomTasks.md","filePath":"extensibility/CustomTasks.md"}'),e={name:"extensibility/CustomTasks.md"};function h(l,s,p,k,r,d){return n(),a("div",null,[...s[0]||(s[0]=[t(`

Custom UI5 Builder Tasks

The UI5 Build Extensibility enables you to enhance the build process of any UI5 project. In addition to the standard tasks, custom tasks can be created.

The UI5 community already created many custom tasks which you can integrate into your project. They are often prefixed by ui5-task- to make them easily searchable in the npm registry.

Please note that custom tasks from third parties can not only modify your project but also execute arbitrary code on your system. In fact, this is the case for all npm packages you install. Always act with the according care and follow best practices.

Configuration

You can configure your build process with additional build task. These custom tasks are defined in the project configuration.

To hook your custom tasks into the different build phases of a project, they need to reference other tasks to be executed before or after. This can be a standard task or another custom task. Standard tasks that are disabled, even though they are not executed, can still be referenced by custom tasks, which will be performed in their designated position.

In the below example, when building the library my.library the custom babel task will be executed before the standard task generateComponentPreload.
Another custom task called render-markdown-files is then executed immediately after the standard task minify.

Example: Basic configuration

yaml
# In this example configuration, two custom tasks are defined: 'babel' and 'render-markdown-files'.
-specVersion: "4.0"
-type: library
-metadata:
-  name: my.library
-builder:
-  customTasks:
-    - name: babel
-      beforeTask: generateComponentPreload
-    - name: render-markdown-files
-      afterTask: minify
-      configuration:
-        markdownStyle:
-            firstH1IsTitle: true

Example: Connect multiple custom tasks

You can also connect multiple custom tasks with each other. The order in the configuration is important in this case. You have to make sure that a task is defined before you reference it via beforeTask or afterTask.

yaml
# In this example, 'my-custom-task-2' gets executed after 'my-custom-task-1'.
-specVersion: "4.0"
-type: library
-metadata:
-  name: my.library
-builder:
-  customTasks:
-    - name: my-custom-task-1
-      beforeTask: generateComponentPreload
-    - name: my-custom-task-2
-      afterTask: my-custom-task-1

Custom Task Extension

A custom task extension consists of a ui5.yaml and a task implementation. It can be a standalone module or part of an existing UI5 project.

Example: ui5.yaml

yaml
specVersion: "4.0"
-kind: extension
-type: task
-metadata:
-  name: render-markdown-files
-task:
-  path: lib/tasks/renderMarkdownFiles.js

Task extensions can be standalone modules which are handled as dependencies.

Alternatively you can implement a task extension as part of your UI5 project. In that case, the configuration of the extension is part of your project configuration inside the ui5.yaml as shown below.

The task extension will then be automatically collected and processed during the processing of the project.

Example: Custom Task Extension defined in UI5 project

yaml
# Project configuration for the above example
-specVersion: "4.0"
-kind: project
-type: library
-metadata:
-  name: my.library
-builder:
-  customTasks:
-    - name: render-markdown-files
-      afterTask: minify
-      configuration:
-        markdownStyle:
-            firstH1IsTitle: true
----
-# Task extension as part of your project
-specVersion: "4.0"
-kind: extension
-type: task
-metadata:
-  name: render-markdown-files
-task:
-  path: lib/tasks/renderMarkdownFiles.js

Task Implementation

A custom task implementation needs to return a function with the following signature:

js
/**
- * Custom task API
- *
- * @param {object} parameters
- * 
- * @param {module:@ui5/fs.AbstractReader} parameters.dependencies
- *      Reader to access resources of the project's dependencies
- * @param {@ui5/logger/Logger} parameters.log
- *      Logger instance for use in the custom task.
- *      This parameter is only available to custom task extensions
- *      defining Specification Version 3.0 and later.
- * @param {object} parameters.options Options
- * @param {string} parameters.options.projectName
- *      Name of the project currently being built
- * @param {string} parameters.options.projectNamespace
- *      Namespace of the project currently being built
- * @param {string} parameters.options.configuration
- *      Custom task configuration, as defined in the project's ui5.yaml
- * @param {string} parameters.options.taskName
- *      Name of the custom task.
- *      This parameter is only provided to custom task extensions
- *      defining Specification Version 3.0 and later.
- * @param {@ui5/builder.tasks.TaskUtil} parameters.taskUtil
- *      Specification Version-dependent interface to a TaskUtil instance.
- *      See the corresponding API reference for details:
- *      https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html
- * @param {module:@ui5/fs.DuplexCollection} parameters.workspace
- *      Reader/Writer to access and modify resources of the
- *      project currently being built
- * @returns {Promise<undefined>}
- *      Promise resolving once the task has finished
- */
-export default async function({dependencies, log, options, taskUtil,workspace}) {
-    // [...]
-};
js
/**
- * Custom task API
- *
- * @param {object} parameters
- * 
- * @param {module:@ui5/fs.AbstractReader} parameters.dependencies
- *      Reader to access resources of the project's dependencies
- * @param {@ui5/logger/Logger} parameters.log
- *      Logger instance for use in the custom task.
- *      This parameter is only available to custom task extensions
- *      defining Specification Version 3.0 and later.
- * @param {object} parameters.options Options
- * @param {string} parameters.options.projectName
- *      Name of the project currently being built
- * @param {string} parameters.options.projectNamespace
- *      Namespace of the project currently being built
- * @param {string} parameters.options.configuration
- *      Custom task configuration, as defined in the project's ui5.yaml
- * @param {string} parameters.options.taskName
- *      Name of the custom task.
- *      This parameter is only provided to custom task extensions
- *      defining Specification Version 3.0 and later.
- * @param {@ui5/builder.tasks.TaskUtil} parameters.taskUtil
- *      Specification Version-dependent interface to a TaskUtil instance.
- *      See the corresponding API reference for details:
- *      https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html
- * @param {module:@ui5/fs.DuplexCollection} parameters.workspace
- *      Reader/Writer to access and modify resources of the
- *      project currently being built
- * @returns {Promise<undefined>}
- *      Promise resolving once the task has finished
- */
-module.exports = async function({dependencies, log, options, taskUtil,workspace}) {
-    // [...]
-};

Required Dependencies

Info

This functionality has been added with UI5 CLI v3.0.0

Custom tasks can export an optional callback function determineRequiredDependencies to control which dependency-resources are made available through the dependencies-reader that is provided to the task. By reducing the amount of required dependencies or by not requiring any, UI5 Tooling might be able to build a project faster.

Before executing a task, UI5 Tooling will ensure that all required dependencies have been built.

If this callback is not provided, UI5 Tooling will make an assumption as to whether the custom task requires access to any resources of dependencies based on the defined Specification Version of the custom task extension:

  • Specification Version 3.0 and later: If no callback is provided, UI5 Tooling assumes that no dependencies are required. In this case, the dependencies parameter will be omitted.
  • Specification Versions before 3.0: If no callback is provided, UI5 Tooling assumes that all dependencies are required.

For more details, see also RFC 0012 UI5 Tooling Extension API v3

js
/**
- * Callback function to define the list of required dependencies
- *
- * @param {object} parameters
- * @param {Set} parameters.availableDependencies
- *      Set containing the names of all direct dependencies of
- *      the project currently being built.
- * @param {function} parameters.getDependencies
- *      Identical to TaskUtil#getDependencies
- *         (see https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html).
- *      Creates a list of names of all direct dependencies
- *      of a given project.
- * @param {function} parameters.getProject
- *      Identical to TaskUtil#getProject
- *         (see https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html).
- *      Retrieves a Project-instance for a given project name.
- * @param {object} parameters.options
- *      Identical to the options given to the standard task function.
- * @returns {Promise<Set>}
- *      Promise resolving with a Set containing all dependencies
- *      that should be made available to the task.
- *      UI5 Tooling will ensure that those dependencies have been
- *      built before executing the task.
- */
-export async function determineRequiredDependencie({availableDependencies, getDependencies, getProject, options}) {
-    // "availableDependencies" could look like this: Set(3) { "sap.ui.core", "sap.m", "my.lib" }
-    // Reduce list of required dependencies: Do not require any UI5 framework projects
-    availableDependencies.forEach((depName) => {
-        if (getProject(depName).isFrameworkProject()) {
-            availableDependencies.delete(depName)
-        }
-    });
-    // => Only resources of project "my.lib" will be available to the task
-    return availableDependencies;
-}
js
/**
- * Callback function to define the list of required dependencies
- *
- * @param {object} parameters
- * @param {Set} parameters.availableDependencies
- *      Set containing the names of all direct dependencies of
- *      the project currently being built.
- * @param {function} parameters.getDependencies
- *      Identical to TaskUtil#getDependencies
- *         (see https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html).
- *      Creates a list of names of all direct dependencies
- *      of a given project.
- * @param {function} parameters.getProject
- *      Identical to TaskUtil#getProject
- *         (see https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html).
- *      Retrieves a Project-instance for a given project name.
- * @param {object} parameters.options
- *      Identical to the options given to the standard task function.
- * @returns {Promise<Set>}
- *      Promise resolving with a Set containing all dependencies
- *      that should be made available to the task.
- *      UI5 Tooling will ensure that those dependencies have been
- *      built before executing the task.
- */
-module.exports.determineRequiredDependencies = async functio({availableDependencies, getDependencies, getProject, options}) {
-    // "availableDependencies" could look like this: Set(3) { "sap.ui.core", "sap.m", "my.lib" }
-    // Reduce list of required dependencies: Do not require any UI5 framework projects
-    availableDependencies.forEach((depName) => {
-        if (getProject(depName).isFrameworkProject()) {
-            availableDependencies.delete(depName)
-        }
-    });
-    // => Only resources of project "my.lib" will be available to the task
-    return availableDependencies;
-}

Examples

The following code snippets show examples for custom task implementations.

Example: lib/tasks/renderMarkdownFiles.js

This example is making use of the resourceFactory TaskUtil API to create new resources based on the output of a third-party module for rendering Markdown files. The created resources are added to the build result by writing them into the provided workspace.

js
import path from "node:path";
-import renderMarkdown from "./renderMarkdown.js";
-/*
-* Render all .md (Markdown) files in the project to HTML
-*/
-export default async function({dependencies, log, options, taskUtil,workspace}) {
-    const {createResource} = taskUtil.resourceFactory;
-    const textResources = await workspace.byGlob("**/*.md");
-    await Promise.all(textResources.map(async (resource) => {
-        const markdownResourcePath = resource.getPath();
-        log.info(\`Rendering markdown file \${markdownResourcePath}...\`);
-        const htmlString = await renderMarkdown(await resource.getString(), options.configuration);
-        // Note: @ui5/fs virtual paths are always (on *all* platforms) POSIX. Therefore using path.posix here
-        const newResourceName = path.posix.basename(markdownResourcePath, ".md") + ".html";
-        const newResourcePath = path.posix.join(path.posix.dirname(markdownResourcePath), newResourceName);
-        const markdownResource = createResource({
-            path: newResourcePath,
-            string: htmlString
-        });
-        await workspace.write(markdownResource);
-    }));
-};
js
const path = require("node:path");
-const renderMarkdown = require("./renderMarkdown.js");
-/*
-* Render all .md (Markdown) files in the project to HTML
-*/
-module.exports = async function({dependencies, log, options, taskUtil,workspace}) {
-    const {createResource} = taskUtil.resourceFactory;
-    const textResources = await workspace.byGlob("**/*.md");
-    await Promise.all(textResources.map(async (resource) => {
-        const markdownResourcePath = resource.getPath();
-        log.info(\`Rendering markdown file \${markdownResourcePath}...\`);
-        const htmlString = await renderMarkdown(await resource.getString(), options.configuration);
-        // Note: @ui5/fs virtual paths are always (on *all* platforms) POSIX. Therefore using path.posix here
-        const newResourceName = path.posix.basename(markdownResourcePath, ".md") + ".html";
-        const newResourcePath = path.posix.join(path.posix.dirname(markdownResourcePath), newResourceName);
-        const markdownResource = createResource({
-            path: newResourcePath,
-            string: htmlString
-        });
-        await workspace.write(markdownResource);
-    }));
-};

WARNING

Depending on your project setup, UI5 Tooling tends to open many files simultaneously during a build. To prevent errors like EMFILE: too many open files, we urge custom task implementations to use the graceful-fs module as a drop-in replacement for the native fs module in case it is used.

Tasks should ideally use the reader/writer APIs provided by UI5 Tooling for working with project resources.

Example: lib/tasks/compileLicenseSummary.js

This example is making use of multiple TaskUtil APIs to retrieve additional information about the project currently being built (taskUtil.getProject()) and its direct dependencies (taskUtil.getDependencies()). Project configuration files like package.json can be accessed directly using project.getRootReader().

js
import path from "node:path";
-/*
-* Compile a list of all licenses of the project's dependencies
-* and write it to "dependency-license-summary.json"
-*/
-export default async function({dependencies, log, options, taskUtil,workspace}) {
-    const {createResource} = taskUtil.resourceFactory;
-    const licenses = new Map();
-    const projectsVisited = new Set();
-    async function processProject(project) {
-        return Promise.all(taskUtil.getDependencies().map(async (projectName) => {
-            if (projectsVisited.has(projectName)) {
-                return;
-            }
-            projectsVisited.add(projectName);
-            const project = taskUtil.getProject(projectName);
-            const pkgResource = await project.getRootReader().byPath("/package.json");
-            if (pkgResource) {
-                const pkg = JSON.parse(await pkgResource.getString())
-                // Add project to list of licenses
-                if (licenses.has(pkg.license)) {
-                    licenses.get(pkg.license).push(project.getName());
-                } else {
-                    // License not yet in map. Define it
-                    licenses.set(pkg.license, [project.getName()]);
-                }
-            } else {
-                log.info(\`Could not find package.json file in project \${project.getName()}\`);
-            }
-            return processProject(project);
-        }));
-    }
-    // Start processing dependencies of the root project
-    await processProject(taskUtil.getProject());
-    const summaryResource = createResource({
-        path: "/dependency-license-summary.json",
-        string: JSON.stringify(Object.fromEntries(licenses), null, "\\t")
-    });
-    await workspace.write(summaryResource);
-};
js
const path = require("node:path");
-/*
-* Compile a list of all licenses of the project's dependencies
-* and write it to "dependency-license-summary.json"
-*/
-module.exports = async function({dependencies, log, options, taskUtil,workspace}) {
-    const {createResource} = taskUtil.resourceFactory;
-    const licenses = new Map();
-    const projectsVisited = new Set();
-    async function processProject(project) {
-        return Promise.all(taskUtil.getDependencies().map(async (projectName) => {
-            if (projectsVisited.has(projectName)) {
-                return;
-            }
-            projectsVisited.add(projectName);
-            const project = taskUtil.getProject(projectName);
-            const pkgResource = await project.getRootReader().byPath("/package.json");
-            if (pkgResource) {
-                const pkg = JSON.parse(await pkgResource.getString())
-                // Add project to list of licenses
-                if (licenses.has(pkg.license)) {
-                    licenses.get(pkg.license).push(project.getName());
-                } else {
-                    // License not yet in map. Define it
-                    licenses.set(pkg.license, [project.getName()]);
-                }
-            } else {
-                log.info(\`Could not find package.json file in project \${project.getName()}\`);
-            }
-            return processProject(project);
-        }));
-    }
-    // Start processing dependencies of the root project
-    await processProject(taskUtil.getProject());
-    const summaryResource = createResource({
-        path: "/dependency-license-summary.json",
-        string: JSON.stringify(Object.fromEntries(licenses), null, "\\t")
-    });
-    await workspace.write(summaryResource);
-};

Helper Class TaskUtil

Custom tasks defining Specification Version 2.2 or higher have access to an interface of a TaskUtil instance.

In this case, a taskUtil object is provided as a part of the custom task's parameters. Depending on the specification version of the custom task, a set of helper functions is available to the implementation. The lowest required specification version for every function is listed in the TaskUtil API reference.

`,45)])])}const o=i(e,[["render",h]]);export{g as __pageData,o as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/extensibility_CustomTasks.md.iHprFA7D.lean.js b/packages/documentation/docs/.vitepress/dist/assets/extensibility_CustomTasks.md.iHprFA7D.lean.js deleted file mode 100644 index ed8909c64a..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/extensibility_CustomTasks.md.iHprFA7D.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,ae as t}from"./chunks/framework.CBTkueSR.js";const g=JSON.parse('{"title":"Custom UI5 Builder Tasks","description":"","frontmatter":{},"headers":[],"relativePath":"extensibility/CustomTasks.md","filePath":"extensibility/CustomTasks.md"}'),e={name:"extensibility/CustomTasks.md"};function h(l,s,p,k,r,d){return n(),a("div",null,[...s[0]||(s[0]=[t("",45)])])}const o=i(e,[["render",h]]);export{g as __pageData,o as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/extensibility_ProjectShims.md.BoGGAAX7.js b/packages/documentation/docs/.vitepress/dist/assets/extensibility_ProjectShims.md.BoGGAAX7.js deleted file mode 100644 index f957f91025..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/extensibility_ProjectShims.md.BoGGAAX7.js +++ /dev/null @@ -1,112 +0,0 @@ -import{_ as i,c as a,o as n,ae as e}from"./chunks/framework.CBTkueSR.js";const E=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"extensibility/ProjectShims.md","filePath":"extensibility/ProjectShims.md"}'),l={name:"extensibility/ProjectShims.md"};function t(p,s,h,k,r,d){return n(),a("div",null,[...s[0]||(s[0]=[e(`

Project Shims

A project shim extension can be used to define or extend a project configuration of a module. The most popular use case is probably to add UI5 project configuration to a third party module that otherwise could not be used with the UI5 CLI.

Also see RFC 0002 Project Shims.

Structure

yaml
specVersion: "4.0"
-kind: extension
-type: project-shim
-metadata:
-  name: <name of project shim extension>
-shims:
-  configurations:
-    <module name (id)>:
-      specVersion: "4.0"
-      type: <project type>
-      metadata:
-        name: <project name>
-    <module name (id)>:
-      specVersion: "4.0"
-      type: <project type>
-      metadata:
-        name: <project name>
-  dependencies:
-    <module name (id)>:
-      - <module name (id)>
-      - <module name (id)>
-      - <module name (id)>
-  collections:
-    <module name>:
-      modules:
-        <id>: <relative path>
-        <id>: <relative path>
-        <id>: <relative path>

"module name" refers to the name of the module as identified by the used translator. E.g. when using the npm translator, the name declared in the modules package.json is used here. In most cases, the module name also becomes the internal ID of the project.

Properties

configurations (optional)

Used to add configuration to any module.

Map of module names. The values represent the configuration that should be applied to the module.

Note: Configuration is applied to the module using Object.assign(). This means that existing configuration properties will be overwritten.

dependencies (optional)

Used to add dependencies to any module.

Map of module names. The value is an array of module names that this module depends on. Note that the other modules need to be part of the dependency tree of the root project (not as direct children, just somewhere).

collections (optional)

Used when a dependency contains multiple modules. Also referred to as a Monorepo.

Map of module names. The values are objects with collection-specific configuration:

  • modules: Map of project IDs and their relative file system paths inside the collection module. The project ID does not have to match the actual module name (as for instance defined in the modules package.json). UI5 Project will use it in place of a module name.

Example A:

An application "my-application" defines a npm dependency to lodash in its package.json and configures it by using a project-shim extension added to its ui5.yaml.

ui5.yaml

yaml
specVersion: "4.0"
-type: application
-metadata:
-  name: my.application
---- # Everything below this line could also be put into the ui5.yaml of a standalone extension module
-specVersion: "4.0"
-kind: extension
-type: project-shim
-metadata:
-  name: my.application.thirdparty
-shims:
-  configurations:
-    lodash: # name as defined in package.json
-      specVersion: "4.0"
-      type: module # Use module type
-      metadata:
-        name: lodash
-      resources:
-        configuration:
-          paths:
-            /resources/my/application/thirdparty/: "" # map root directory of lodash module

Example B:

An application "application.a" depends on a library "legacy.library.a" which does not contain a ui5.yaml or package.json yet (nor do its dependencies).

Structure of the legacy library directories (two repositories)
legacy-libs/
-    \\_ src/
-        \\_ library.a/
-            \\_ src/
-            \\_ test/
-        \\_ library.b/
-            \\_ src/
-            \\_ test/
-legacy-library-x/
-    \\_ src/
-    \\_ test/
Dependencies between the legacy libraries
legacy.library.a depends on legacy.library.b
-legacy.library.a depends on legacy.library.x
-
-legacy.library.b depends on legacy.library.x
application.a

Directory structure

application-a/
-    \\_ node_modules/
-        \\_ legacy-libs/
-        \\_ legacy-library-x/
-    \\_ webapp/
-    \\_ ui5.yaml
-    \\_ package.json

package.json (extract)
napa can install git repositories that are lacking a package.json with npm. Within ui5-project, the npm translator already detects dependencies defined in the napa section of a package.json and tries to resolve them.

json
{
-    "scripts": {
-        "install": "napa"
-    },
-    "napa": {
-        "legacy-libs": "<git-repository-url>",
-        "legacy-library-x": "<git-repository-url>"
-    }
-}

ui5.yaml
The shim defined in the application configures the legacy libraries and defines their dependencies. This shim might as well be a standalone module that is added to the applications dependencies. That would be the typical reuse scenario for shims.

yaml
specVersion: "4.0"
-type: application
-metadata:
-  name: application.a
-----
-specVersion: "4.0"
-kind: extension
-type: project-shim
-metadata:
-  name: legacy-lib-shims
-shims:
-  configurations:
-    legacy-library-a:
-      specVersion: "4.0"
-      type: library
-      metadata:
-        name: legacy.library.a
-    legacy-library-b:
-      specVersion: "4.0"
-      type: library
-      metadata:
-        name: legacy.library.b
-    legacy-library-x:
-      specVersion: "4.0"
-      type: library
-      metadata:
-        name: legacy.library.x
-  dependencies:
-    legacy-library-a:
-      - legacy-library-b
-      - legacy-library-x
-    legacy-library-b:
-      - legacy-library-x
-  collections:
-    legacy-libs:
-      modules:
-        legacy-library-a: src/library.a
-        legacy-library-b: src/library.b
`,35)])])}const c=i(l,[["render",t]]);export{E as __pageData,c as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/extensibility_ProjectShims.md.BoGGAAX7.lean.js b/packages/documentation/docs/.vitepress/dist/assets/extensibility_ProjectShims.md.BoGGAAX7.lean.js deleted file mode 100644 index 99ac12eaca..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/extensibility_ProjectShims.md.BoGGAAX7.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,ae as e}from"./chunks/framework.CBTkueSR.js";const E=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"extensibility/ProjectShims.md","filePath":"extensibility/ProjectShims.md"}'),l={name:"extensibility/ProjectShims.md"};function t(p,s,h,k,r,d){return n(),a("div",null,[...s[0]||(s[0]=[e("",35)])])}const c=i(l,[["render",t]]);export{E as __pageData,c as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/index.md.Bk6Xmwmv.js b/packages/documentation/docs/.vitepress/dist/assets/index.md.Bk6Xmwmv.js deleted file mode 100644 index 307ac9c634..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/index.md.Bk6Xmwmv.js +++ /dev/null @@ -1,56 +0,0 @@ -import{_ as i,c as a,o as n,ae as t}from"./chunks/framework.CBTkueSR.js";const F=JSON.parse('{"title":"UI5 CLI","description":"","frontmatter":{"layout":"home"},"headers":[],"relativePath":"index.md","filePath":"index.md"}'),e={name:"index.md"};function p(l,s,h,k,r,d){return n(),a("div",null,[...s[0]||(s[0]=[t(`

UI5 CLI

Project Rename

UI5 Tooling has been renamed to UI5 CLI 🚨

Read the announcement blog post: SAP Community: Goodbye UI5 Tooling - Hello UI5 CLI!

New Release

UI5 CLI V4 is here 🎉

Read the announcement blog post: SAP Community: UI5 CLI 4.0

And checkout the Migrate to v4 documentation.

Get Started

Main Features

💻 UI5 CLI

Also see the UI5 CLI Documentation

sh
# Global
-npm install --global @ui5/cli
-
-# In your project
-npm install --save-dev @ui5/cli

⚙️ Project Setup

Configure your project for use with UI5 CLI.
Also see the Configuration Documentation

❯ ui5 init
-Wrote ui5.yaml:
-
-specVersion: "4.0"
-metadata:
-  name: my-app
-type: application

🚚 Dependency Management

UI5 framework dependencies are managed by UI5 CLI. All other dependencies are managed by your favorite node package manager.

❯ ui5 use SAPUI5@1.117.0
-Updated configuration written to ui5.yaml
-This project is now using SAPUI5 version 1.117.0
-
-❯ ui5 add sap.ui.core sap.m themelib_sap_fiori_3
-Updated configuration written to ui5.yaml
-Added framework libraries sap.ui.core sap.m themelib_sap_fiori_3 as dependencies

🏄 Development Server

Start a local development server to work on your project.
Also see the Server Documentation

❯ ui5 serve
-Server started
-URL: http://localhost:8080

🛠 Build for Production

Build an optimized version of your project.
Also see the Builder Documentation

bash
 ui5 build
-info graph:helpers:ui5Framework Using OpenUI5 version: 1.117.0
-info ProjectBuilder Preparing build for project my-app
-info ProjectBuilder   Target directory: ./dist
-info ProjectBuilder Cleaning target directory...
-info Project 1 of 1: Building application project my-app...
-info my-app Running task escapeNonAsciiCharacters...
-info my-app Running task replaceCopyright...
-info my-app Running task replaceVersion...
-info my-app Running task minify...
-info my-app Running task generateFlexChangesBundle...
-info my-app Running task generateComponentPreload...
-info ProjectBuilder Build succeeded in 296 ms
-info ProjectBuilder Executing cleanup tasks...

🧪 Node.js API

Most UI5 CLI modules provide JavaScript APIs for direct consumption in other Node.js projects. This allows you to rely on UI5 CLI for UI5-specific build functionality and project handling, while creating your own tools to perfectly match the needs of your project.

All available APIs are documented in the UI5 CLI API Reference.

js
import {graphFromPackageDependencies} from "@ui5/project/graph";
-
-async function buildApp(projectPath, destinationPath) {
-    const graph = await graphFromPackageDependencies({
-        cwd: projectPath
-    });
-    await graph.build({
-        destPath: destinationPath,
-        selfContained: true,
-        excludedTasks: ["transformBootstrapHtml"],
-        includedDependencies: ["*"]
-    });
-}
js
async function buildApp(projectPath, destinationPath) {
-    const {graphFromPackageDependencies} = 
-        await import("@ui5/project/graph");
-    const graph = await graphFromPackageDependencies({
-        cwd: projectPath
-    });
-    await graph.build({
-        destPath: destinationPath,
-        selfContained: true,
-        excludedTasks: ["transformBootstrapHtml"],
-        includedDependencies: ["*"]
-    });
-}
`,24)])])}const g=i(e,[["render",p]]);export{F as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/index.md.Bk6Xmwmv.lean.js b/packages/documentation/docs/.vitepress/dist/assets/index.md.Bk6Xmwmv.lean.js deleted file mode 100644 index 214b97fa61..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/index.md.Bk6Xmwmv.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as a,o as n,ae as t}from"./chunks/framework.CBTkueSR.js";const F=JSON.parse('{"title":"UI5 CLI","description":"","frontmatter":{"layout":"home"},"headers":[],"relativePath":"index.md","filePath":"index.md"}'),e={name:"index.md"};function p(l,s,h,k,r,d){return n(),a("div",null,[...s[0]||(s[0]=[t("",24)])])}const g=i(e,[["render",p]]);export{F as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/indexJsdoc.md.DfRJIwTb.js b/packages/documentation/docs/.vitepress/dist/assets/indexJsdoc.md.DfRJIwTb.js deleted file mode 100644 index 0648788657..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/indexJsdoc.md.DfRJIwTb.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as r,o as t,ae as n}from"./chunks/framework.CBTkueSR.js";const u=JSON.parse('{"title":"UI5 CLI API Reference","description":"","frontmatter":{},"headers":[],"relativePath":"indexJsdoc.md","filePath":"indexJsdoc.md"}'),o={name:"indexJsdoc.md"};function i(s,e,c,l,h,p){return t(),r("div",null,[...e[0]||(e[0]=[n('

UI5 CLI API Reference

Support

Please follow our Contribution Guidelines on how to report an issue. Or chat with us in the #tooling channel of the OpenUI5 Community Slack

License

This project is licensed under the Apache Software License, Version 2.0 except as noted otherwise in the LICENSE file.

',5)])])}const f=a(o,[["render",i]]);export{u as __pageData,f as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/indexJsdoc.md.DfRJIwTb.lean.js b/packages/documentation/docs/.vitepress/dist/assets/indexJsdoc.md.DfRJIwTb.lean.js deleted file mode 100644 index 938803b179..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/indexJsdoc.md.DfRJIwTb.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as r,o as t,ae as n}from"./chunks/framework.CBTkueSR.js";const u=JSON.parse('{"title":"UI5 CLI API Reference","description":"","frontmatter":{},"headers":[],"relativePath":"indexJsdoc.md","filePath":"indexJsdoc.md"}'),o={name:"indexJsdoc.md"};function i(s,e,c,l,h,p){return t(),r("div",null,[...e[0]||(e[0]=[n("",5)])])}const f=a(o,[["render",i]]);export{u as __pageData,f as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 b/packages/documentation/docs/.vitepress/dist/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 deleted file mode 100644 index b6b603d596933f026dfecf98550bbe4d0876276b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43112 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 diff --git a/packages/documentation/docs/.vitepress/dist/assets/inter-italic-cyrillic.By2_1cv3.woff2 b/packages/documentation/docs/.vitepress/dist/assets/inter-italic-cyrillic.By2_1cv3.woff2 deleted file mode 100644 index def40a4f658cf8a9f7029c98931f5c9ff5a00910..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31300 zcmV(?K-a%_Pew8T0RR910D43K6951J0MIl50C~{>1ONa400000000000000000000 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 diff --git a/packages/documentation/docs/.vitepress/dist/assets/inter-italic-greek.DJ8dCoTZ.woff2 b/packages/documentation/docs/.vitepress/dist/assets/inter-italic-greek.DJ8dCoTZ.woff2 deleted file mode 100644 index a3c16ca40b2a8f454c34cfa91996ec99ae2e4aa0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32564 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 b6r&82^QQ+ZZ1?Zre-i}g|91_a`#}W>14e7b diff --git a/packages/documentation/docs/.vitepress/dist/assets/inter-italic-latin-ext.CN1xVJS-.woff2 b/packages/documentation/docs/.vitepress/dist/assets/inter-italic-latin-ext.CN1xVJS-.woff2 deleted file mode 100644 index 2210a899edaeb06655f7bc50e7f94444da140b94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120840 zcmV)DK*7IvPew8T0RR910oVut6951J1HHHa0oRcL1ONa400000000000000000000 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̍l;7$I!f#g9v^e>1P}fUKe#ag~o(lLI!lKh0Jb=5b zQrf0HcUfP#>CS4yi*@i6?FDcxpq@?2th5m9hU@P*?~!PjinRJrW|~@;L}u8m2K0E; zjiV}&()zAz4Be3v4VY{{B6Qm24quW>(g&r|HN#Xwy4?|<6jIymWiWDDxj`_qA1sD7 za%`*H*B)jXYtKpq^Qa2jx{0|W50_3v-wn(tO5btjQLbsmd3Ks!osd=tOGc^d`kIYS zCnZ!ZB}EU#TB%A7mKU9Dur7c#vOqwD%wZVcuhm0~br_cnPYuVDtOZ%np%ckaufFDC zbPG7|R*y)q7wo!pH`X<$ZR-nr%b4v%MH5n9G``_}lYy2Fsbdf7!H%2AZ$b6nXRPwV z8`N<$h9ObdV5KUZ*ot+?D@Aivf{WvbXIojFZMBus&$^h`UCb2mXf zm@_naJY^RRgD4g1E<6Jtn8CXfl_MFv=S`G>1dD0e<*4tVS?Ir!Ij&KMRsRI%KmLw? zQs1m>{zl}uMGxovwZGuQ@0#7N%huxGDw-n4;q$vhKKq2^Q-n!3%CkR#=+R)`7N@+O z^Pw*%qGvBb7D>qHA#hece5_Px+nB1qTlJSuT6pJPY(_X%+DS;e{};gflSj=9rEoUQ zhY>7A+A4+h+DLb!RMIQnz+JmC1*N6U(X2os0=U~X?Kk(v2r#qB_6LKuTrh>0Szzn6 zePu(__NMjvk$P}sy_B)|X!TBN=Kn_~bZUQ4HkQ&GEz zCmAt#qmB8(VZ?EK;>DL|Yq;7N3J+sxEs=k4;r=L3TBDBJ-W=P3C%9a3J~LzXx4T z=X7IxgL(cK&W2EhUW;)vkNLp!L6zGEB;0ZnLa_Y9%eE!iwk6c)hSKj8fmeAkOC>?% zi|4FcI_`f=Y|}1E6|z_Zz3O_IxNEMd z603JBhIPhLMg#DpWrx@4EY;?sp1) z1y}4^$qt#~rZ!p?ln7^p78k}bxZOl~HG;c=HVwY>g@04?r4r#qlx{3SC$AqFS7+CY zofa{(zysCuIJ02YQh#L^nV>R8anr|=a&&Myf)!tVkW^CXG+oK>N=R43>2O+bQDJ-< z{a}<*Wtn`&UO&G4O;$tuxnlN)b)IeA(WNqXr*unwX3!u~imE!Y`LYNwf*nS}br7BR zFAQ((4yRJg>`HKq6i$KJ242DcMG8v|A@N?#+GCc~}W@3~#C2tD<|V?tfs z#jM;FGu?Sec4>{e^iosPKQ62A2yD5aC6H!(r%v&?eYai5$kSh`{j;K@0?i;&iWG+r zR0$W1mrRk0Yb`kldPG?R{^LznYm%fCMuX9U3k%{{tkwgPLU<}XC0J9G2som;%UQW= zW@Q)mC`*i5&1Pfszb@GiXRp7fuL@1}$X>L1cf85d5kS-Yns5+USuoW&2n~7WU7h z&!{m8Y0XePjYE%9ge36~H@arw3j^`{OmUB{zDkm-MnZ-xCCH58o_Thmc1VO9L`p2M zcy)FL)}Q%l4k5D~Mun0>@`__w;&tjsThV13-Gcpq{IaSD_Nf!&85QV`*y%;~nAzKo zWB?LRTWl@e<#1k&|8#)D8*AheLlcO+iYyKl_~ybmuhuNKmUeq?N8=eoEfRWk436G1 zBxZnuD;S3s`alUk#W&ffxC+6CkwTPN(Zo1ih$zQ~z3EunzVxoNtl_khvtpw`RW!}z zA0T@RDG|9y0p{4f7#yRyMZ$=Q!7^H!#SCzy5@X-O7%1VT`2AU@h7$K@E29a04mBOi zrx?#Nl7pHOe`f ztZFG|;sjemweLoo_E^R3k6B%kej0fd9JDW8nhMH9p&RXcc2c6*;S)6gSO?T)wl(`*S^}j~;+UuHvGM%QKw7$0zm>}C8A``c zRRLsN#UU>e!7{xy*vYmoMPL8Zip$3O-VN|=epQbrk%*AC?02!Pp_SDGhrz{RE+ve4Ra(lbK}n8{*7F%M8{3wGjrbm)?0YnyX7TgQ>WB9aG_E{Na&j25%8hy=TOTgcrxf_cr0jq+ z9nI7=9x=v#Y1fHvX@77hq&%~l>;Xk|pDgMf4wB%h@+{o@n4`8ef#0{D{kd>q&NcV5 zTZwKir(I5mIFD^Xvd=S*xHNeDVAJvPpx2ZGgQ94pv&L-nD7|NML5wJ^fy3)W@GR5q zr!wT=Bkwoc>8;i&#VBS#>O2tNGitqSJMF8Wa%>VaG*ue{M!ou`tm#zb*EcLY4bL`D zek-f4x|QC3BIX&osdm!z_0?D3$>c{w$CEqiGmaxO?2POOOSR?YPih9X(MEI~>%n53 zKMJX+{^_1qHEOzQ=3YnT@jJ=y*T}hW$D`8hvzu#M_3?Y)%&bF*>d)CW2v}!U9jU$J zVlZ?5q~_E~=ildd%$~e?gRW;_vwt3iHUA0nN8fXrIY=3RyY>WN8P|T^F;j>!jGMFp zjQ%jzk`{5|kfq2{P|!Ba;)<#_j{EXE~t zi(SjXi=Ss6Jd2rB3apimlgp3?nDZ^V)y@Sid)Bg-HO@WyV0`agbYthG&y|1DTY!f0~TwbFvZW3(;t-yf7f`Q({S%IOv$x;E+Rr@OX7(s*%BqCu|PRbat}2!Hwsap%Q4 zNqV`?TT#}Zg1?`+%(Onn60BEsDcHFVYJR4;6_z`l=5DYLKzTauJa-Z^2jZ>N{;$s0 z6sV7L;Z}M1)d$x0<<|hp_88{mDYUMZlZfNxh7SI=FEW{4#OD*~Z+tdfu!2$^IWj7l zJzAPZ2DL=Y@g*9I*rx05ka|_Wo~wBc{xW7$l{3&qNTrn|l1QID(oW)w;QXUj6{_AY zJUyidPr!eM+v{^cz_QE$k)d&cmZOdnMDhZlVrFKc07vsZX4TWHtZJ5B>o5qN0Wv*j zVYUIQ_lcZYX~K4N^PPw9+<+H}6#=6~y!$vocl!qM)Zy1QQLn*!#e{h8Q=zp%J!UiM)zrV-4M_T**lz%)B|A#s2Iq@Q@b@@(P;d?nP)Ytt9XD2vkiDR#0 zTbAD&F1({`rN8KpKMQ`}D6qHkAba`I4v&!7d_S)nNa2({HdwC6ur8)v`QzW${M*R? zcjuMLZSlmUc)OxPv^_ETKwMc7dnP$^=i?H~J0+8Z%1Xkdq^kVp&7jKhXq}K&mEF2Y z0xsX7%KNvT5X*oHO#Mo9*i61`MpMcJ$!++|G8i3-_pivJQn;Y^w@%b$XL-}%4WSB@ zft7!AwkRz}c2%rAreQEsj$=oyU%dCxjZep|;^hx$|3dAL=~rispV-!*Dx$ZWCbvYD zr=>SeUKfE_&iNkuOhxn4=1hWpxX4~EurFD1y=mWNJbazrLU3ka9N=L}NFNf5hotG^ zVbjxxw`e$BDmpwQk`6?$Lqj>?5zWC4iwNh2hH=#l<4D&6zdl(kXAkz*SOPoDa2#os zd8zTBsl6TD8Xnth#-*-?fgdudC~YrKj4LPzi1QVCU?UvLK5vlamK9Z5Dv|kT45tCy z+ZIN*&MBTcDb7DSdmGpiTD_7c|G*wFOv|0!?11ro*)C2tbo|GO5Kc@cEU!xY?V_~q+pro@YE(x%2%)c{lgSCDvIHl4eT zLPA}UcywZV;gyWl^=3)rso&QW7;k(heb1(uyxc>#?s>Gei0Ri5NkgULkqQj8q z2FIbN)c`u&fT}XUd6ZZky@{PjO3q4bnzhl~YdthH(P)*!a>3(M^b$$jsp8!mcJ08; zydrZjHZ|9Rv>YuDqcRE;>eTWCX)3BJm0lcQQj;1(Bo{<=9*2_(@{Y#IdWRd4awtJB z=0JB1hAR~CR4B2yU_KsjCP2_lZ(J)}ucR-Jd2VAJE%FS;@B+(ZV`NLTiwTkJX_dub`EUc2^M6447>Oo4y==kjsQ zDT`a-b{%J{z%F4S#Ss&adz+yDDvZ{pQ)*=>o(dbXcrEo<`%GNmBkKn+gjiS zVHiTmG6;5Re`;{_0YPHl@l(bq zFV19@V&e+TapRVn{VeriyLJd-I+dJRcF3j>!4lVYklE$&xjZO-F+qs;PxT8Y$I4>) zz~SbJ-5s{o;pqC?b6`J2&=!}hnt)MiGz>W8bF*wX(MmX1S;nf0#b%5^iMd%=#P0TR zp$c0owQb0~FWG&WvkdP3C|pv`YU@leuEB;C8^bE#L&)<1yK*#XqMzik9=>(9Hr-W7R)n1KiOUH*^XVFMxA?p}C@Lw};2cS!1NB$-;K z&qvs|j+k%HRolo_#o%pR#~&SX?VArO?y^hR`P6yj2_AwA@!R1vv%@b9!nAD3aAr|? zY$p57(g%UWY|Ru<{9R<)%|CK~&;PRA8rT)I6o9oeHbwx3uKw0mHF{sRlX$n!G=u<` znYtd?m6`G{&wGI9kD;UM5YLhW@qcnW{;YgNMaetr+>(-`#nY^PE}%Amzz`J;UWN4) z03}qzHf>~B5_h*I&%FyIPVLIO+g_XKkn!x1hnizN*88Bj4gW&cuDp2$sNHsh8oVxg zdse&+EU!-U`YPTBk!{7fO@Rpd$DE=u7E{q5oKC=rxEO8_5V9+`rorn{HjknX>-{Gg zv0@oqY0F>nD*+JRefn(RWli^b7p%OK)|H3ldxb2+{n6pt(V|`4?h_l+8lKKMfY_bv zJm|wsvu)S%&}?V+_bE{#sUj;=`p)ZZ8t$p?;eQ>klGhinjS5eMDNkQ-y1`Czc1!kKr~`==JCC>KDrR=ihVC}gzdib^9LSH z+$~1`&jW~ne6oG5>S`tKYJ;QC@!Bu0f>YaOVIF_^P{YjMBC81xu0LZux(__3rzF^$ z{7?OB>%Q~-h?j>`(6iJ3tMkN8EIHus)W?W{(`O}3u>|M*7OO0b?;2*b#n`$La<+#r&#)N~hCP0^UtA3z~ZFmcb|0(i1srMg+~==XLZKksZD_ z-jH9AQ14G+w#6BkwQ&S?RoJcYCbHitc5YfrTn)1(j!dWx10VnWt`qBYLoh9$nSqba z`uRB_qlBoS3t68V{Zc^u2ag;ax;bwbo@Z2KKbIXl33eWlLluZgq56X0QdUD^(+ie zIGEGlA&-CKbE%=N^+!Fk8d8Wd}vtkKkfAoh|n_J z%3Zb6x{TkMc-ho6=uzw+wiBwR#}mT(jCz&&#>PL^^x}T7^ghd7`FZzQ!062h>A86L1om%lfysP>{72E});Pt9_P_fEOI)h5+vZObx0{6fjXnxi<dc^ zds(lXiQr=L8dQn*cl~spff;t5^>%(R0gVbQL_XTt`DdQbHj_OKvI^=;Mnpq0NyVUK zqH5a6P8C`n=t3(1R%1OXOEnDmosF&-iq##AQ8#ZO!-$cRQN(1$#Gq5Qk*;@Ln5(+E z@NIID!&!3~Owvg4w62?}j!*7QRJ4@5oFnU)c}=+j0P^;F#H;@EU%%61w^RGT5qG?nZpi$BXquZ&KJ3EZXPex>Fh`4S# zfb%i9bn`@+LN`z*)hhs~f|-1y^8ZF!z(Q&v@CIs7xxCJ zvc|z`Hf_sFhe}^Lwvx3=L&bGmXCQj<~|(+2MULCKKGnoTAf8I(mwZm~9_b-l2ONfSdT845W|jxu)# z#nrc)<}`6S%f~POMP*@4BC@JK;!WF&(DB%s!)&B;k{(M0SCI_&t|XJCE6GR80Hyvn)BEgShkx(Q2Uv1?b2VQ6=^5&8=6}hfhNp=;`rb+2azRpL zt2A%mLt~4nKZ$EV%>U=lYB>umATDG}A$JgrE+9d3gjTSStvBmc!?>%XumVnd)OnZ zybuogPLEb?d_}N&Hc_N)pBC;R2Bsuk!&wC>e}xc}pZgCGFMj0F_ikK(}Dzr?(BF8t{veo%uhz!rQZKOdm&)F8#c zD+Zq<1Q!jadrOp}nR2`R%Y3I4fssja7Ui3CR8UT-E!^iNV=YE~RCB{fi^iWK(KEq9 zFxqq!VCev$;Q#--Z-~~O0l8M|!|Zg&xgg zsr(VYOfhteM~P#|EPX)}N%%j=T^HKVFLR0%VS={o8@MjGk^Z2!bQ8wnL|t4V_{OYW z%UiHXhEd&w64=C}skEM@dV&|x7rnV>F#>`tmy}dRqX+;=Z`&*xAt_oPYjfHadciH> zD`9YiK2#WXgWJ3xgA$2q2s+(YP2#oKf`L*LpNJkzw-iy#_0d$@#0SxcOFj>lm`9qW z(I&p5tQ`?`yZ{^3%UKk?APW1saME7&CPpWF>gFPp zBy2pHJq3H)b}59O!c(L!6j1SqZ}U1Cf83wGZsdAokS0!>ylV3Ix_-mRjVQJ4#`&ABx%H>`bMY%T zM_Au9!gfuaKQ$Qqeeh;*=e8ZU&E0b$=gvKMy*rKNdd~H+>uW6=w-7gmd*nXd zzFv?}+bN z-^ac$^q%_P4oC~E3Th6<1jhy63;urpt^MDI>tfDki+KIILY&&)wJD)ww zzQz87W5wy3|CFI*!7{2WTV{}r$66(A%)Sb{>*8_csUZ?-Ej8;}!Hd=PALSOA%w^nzr?z?(Wf1>_c{U`Om8>|fe2EL)e zuxJc0VvRgwzR_gtHjbXzb>n^GGvl8fZMbY|Ha%`kYW#ojax=79-~453WLtYXru|e$ zZf9^Oxl`6z+1b;1vh!-^lg{6|_H?;)g?FWNWp%Z69jD(A4xZ{Z?@sBy+5IC&^$+6j znLjK&ul*T0Utbb>?KiJ|_4l7&|L`CEr#Juf`)}A~AN~8sH>WFv)Yi(>U;Oj!nyN#; zod2)CzFS*;>A&e~msOF;h^B**I}MdvHaHx1ZMb9gqBC2slpohd@}#jcWm8U0wFwxy zgRiLUBH|7-h{rhU&J$nlvxgfXI}sOe--Xy+fWe+%*0^|=28&bHMGe)5SD2b|Qo380 z9|ac^G0npXc)q^0(C`))v$yCE?@+&eOst=ONX3P1!JaSWn|mlg&eX=e8a{O|EhiYN z9RM{?B-B%f9jO-M#zTs(*B><)njv|Wny&b>AUn>?qPOY*-Rq-n7$M>sI@n9(JAEKh z{!1)newKGh2ey1Q*I@W|0SC~jPf`?n=f{t+l**j?Jv{Ki1J9D|4hhH4l4)Q=`v5K` zpON4via+xL4kJUz2Hay@1ft1kD3?^By{wy8mFly;<%QN}NX;G4Tnr;A({;R}<8G53 zhG|wP&j|=gsVaFUH#8%fLwb2X<$8FgV=WKFo%i}i7trNsJ@zMEpKQ9T&s0cMiJ(PI zevvJ?V`$0wfu+n8kU$arNFZ@kQF=Gd=Ct4n1QjYYvy(A~;1TdsECp9Y)~;#S5}9h|AxooVm<5@M*VSA9D(i#ISZb06T-^H z4zu&;FH6t4o^P*fUq-b^UU~*}4v<^&G}5xT@|ZKB=I8eY(lh0mB4T)WYKB4~PiZj` z2(oJR%{LixN+-o1e)6+@h;Gy8|D%s4RgQD`XYXQ@uEln-GchE5P8&v=&rBf`+r>u7 zVEZ%3{pI{f>vfZ3=y*FwAc;gtk3M!~CBJn!jys8mLgRq9iB!^qAb(*yiUL^n!Dno@ zSr?rzG)c=heO0SC@}8Tg&Q4`SsDjyP~h&imEMevM!wa4nT*TMRU{V;&>M*`$sCYnGgc6@=0+-m zQo_K8praNnm&VDsZ5md+r4EEQ_Wl`}X>IF=LGKzRrlCj%3#Pdf&Gj2%S+WbodgjNc1L-Dug&VwIQx8P044l$TPC&YoR?}<^|mfEz@ zmB5z1jH9COW^s4OBaaT`NxlUViU~%Txt_O}_zy^*t_WpFH%-og8ZKIbaiOG`Ze}I| zBu?)o%@9HFzid@J8{9J%j$qz9vV`T#Q?0j8fDyR!jF{#d%ho#iHSm&%a8BuI;eY5@ z{>a~i3E{^>Y4Pa!dbmbf#bPNFYXirLp56-tZbr@Y5r1Qr{*xJU?P&t+9pfJ+J>#y(YZ^}zU^u=_aEgf~M`h81 ziJ~C-J)G||VZhN3Q>->-{5={$fPe@D2!{*C{9XDs>vnO6aVrl#7c{_HrLye3GxvnT zTk_@VnTxNLOg{!1#Yyd7P2X|!7b9YN?@!LSgh0|38*d^o_0=4+{n#0aVkZjnUsf+1fPJ6K2~$ae`(!lVScuZYiNDKjZZnN?9nV4#5kvnqj@ zuLu4T-@@)TL2fJwSNm!tGNer?eCk}RTUK9h#qd$tf!#^C8{4>X*j~u%bQ2f65=6ocvs~N{>UVM5=hg@zVd5*aaWD@URw&}sAlyhwMeI*H zXH2d{7F|Xi#=gRC(_ywYgx#P!u2p`bRPrs_Z(XXR!}UJ9oDc7cuzqWC>!i@q$&GAd zO?Q1A114LtiO1IOGB)V!tI}9F$M2i*_|w5%KBT7$OYMhBdmw!kt#hcGyBBxsuEwP4$xXZ0k%oY+G}=z?Fl-dAg0`d8E6yYBbeVLYUoOm0f^ z5cyGgaqZv6#go6k{&glpy(rEKUX*?(rXLR`ROuk_jF)jg096e|8MXNu0@RG0>JRl< zd!GqdqFm39VP*Tu%YFCLQ|!c$}h`~rnSES zDh0JZbRSqzUn7CPYa>-~MFs+R33r}Q6!!+YFd}Dcx*{mTWWul1$ z3h1U$k5Ue93ASJu;uYNPkO zvm%K%)x{y`;NFVMsU^#r+HSs4D7OW?LE6VNC1RpX=daek2AH%-TV^7C^S#Y+Qv$zA zX-PN$*ZBJ(BUvn_lDX2kG?doG)Y6$j5=acWxjr;#oJaD1n;`q9{FHZF&)9I-2}wm@ z&#M#c*`>G&C8TjI(-a8{hI^ujfdYPGk+2+U8c#8-8q#zYss%Ewb9FQ&RM3SKQe90~ z`kqU1pz9{*hHje%)@2R+7bYqxcl0H}*i0}ZsR@n;@<3VCEPPM9v{d5Abf%~C?ryAY zY5C&AjP!|&2Kg%aeJjjo3LC6V#+i`p@W<4+`dyDfM|LZ3#qXHPhZ?TZw~r~7hnCPt zb@lJZ8aT2Vs)9KNq1=6Np?uyMc@(n@r7HGQ8wLrzw=zCw*$`7RiUNef$O}Rmb!*TG z6I;T0CTc>4slei?B9R^+d#q&J9*>J6i=u+4@&YLe5`dB3d?&SMIb2_lOhh9PARvGM zsoN8C)0i00U=hO3lnI6VN;XVjeZT(MLasLLYRy@xTQV0>N`lbk;CIoNluJO8=7c18~!oS9gZA8P=vIQu8TA|XC%kSwh?8FfV5az zmz(UJ)iZ*9PPe2ckq=fCY+~bNe67tYoie61>@fo$L&}mNLw;{^z<{>f zi;sUky*IkJWMkihVs0B$?3tu=ZYbXx^{V+)k|2J?-(wx~DDmkQ7A02jq#ZYZv#wJ! zjn3(RMgJm62F3vXS#24TI2Nd9f%dXnmhHfa$x=b+V`SR~V8v3u{xfsd z5+_-kkZM3Ze#9O}mFy1JT*v9Wp*%au7l^0h;V?mH{rCR^^3Ll%9-O)Spe(kwqqD4UJAe#nCw>`mg@HoRvv00*zTJB%bBbY>+vxZrd)`1WBkS#qWRbd{PpG{PmY=^iR& zSn?6(gSKq+`OBrX*XhU7`AOW zE2?EXt2C;OQf5a{5@k`WWUgpSZ)rivPb*9}oZ=nOe$2uvrp9awZ;w1sv1__F7Lxm9@WN^zR$WlS-Ro)}($KRAuynwbT3RmqSvAW7s zolx-D6k*6s_u}Ua2ZwsQph-TgxIJ*hWA-ynpYH?~AE`pw_b@Fm#ewuPT@{fU(My@q z$%oW53bg`r_@X;Zn%^2T?{;y|9kAB)y?K}FIcEoc{*WY5NTw>AE|rNPF1t?OPf>&` zdS-F)$HRhc%o9jmJbC>4ik)9z+wz06cX=MR-8wL0ea9X*l-AEZy@0Os-Z4^X(2dOZ zPaD)y#yeob35?A%1Ip@NHOAj9J$>3P20E4;i??r8Rs}jRJ|MLRe}|sPfGdWfD@)S= z9GWt3Z^43rLQn>lj24<=@Y{zKlpwJ9@#2Bo)NLlg#Wm;L|ES@zmS7%mD@o=&;&j{ZuGZBkP>4YKi>7k@MfbzxpX<4P@aWCxfewtCS&pUhoX!47D~gkC&P#f%bvfi6jCb6qWqbb5J?XtS_t%cRj#a3b zx_0NQEKHRm`7#l|&;NX(O@$Y>$9h?-%FG0BErNjalri7myA!c9IFp4==-mPTatFjN9Qs+k%afiNfwu+6tRMCtGcT z`N?(2K9j+z$Z_Me!I`)iKgO9@(Uv>;9lRlsOemaOD7nx2SD?T3_1jC+rW2D~THhdw z(KPD9PWh9w`4U5YG{2+)pPlJRObKjm`gF3r7>f|*b_8R~3xYzO#Vb0EkX zNRe_{5h_@O3M#DyqFneQs8*vU zg4Wts(WeW;2Mi4jjZMp1e=RW%0yhdl$NjB8zVuhykT1co?s80R-Te_)jv8gMjNFg`AA1PhWM7Jtv+TGv{+oC3ZYTGh!yo+SnV7Pg zm8d%BR#s<%h(Y~?yZhF2)^+-VX&61i4=!EJC}3Vwhc26xq?Vc7l{;?v84BU@Jm_B7 zdR~@&sA){l64I#YyMme-7=Ox(08KWD4aU-KNLLo!p&D{dlea-Y85Uy%hIc+sqBPQ_ z)qFh|HJmeh;RSYjLs8q36}Vd4;#~?!)k@=~nR)(>0az;YQv&7hdtu(*F@SA4jbaPWB6#~J%=c|~Pi6#48!V2^*VRm)Ee;nA>8`fG=p zwD!=8VID*bmqKJsJK9s)NXgaw*)~<*FwX=t?4&psy5m#pAu{M58zi#ouh&V7I@YJ0 z?1lL3t|rl+os0cY`HS{LWef_C{J70|ut+18lWYkXTaEEJJ&P(CzV+wy zmT?bTWt(K%#MVy#1YbDw3~q-BTirO=;a;#DZ`Rt+%sY7rHk#6$JXE&0n8-LcZ5vxQdaWA%#0=NGsOd_o5xeromK?Y2ar~bgIYH2og2Ixr*#8iD%YWep!A+1^Mc7CH8CIp)!<(Jg226|0V43iCF z_LJ&QeIy9tN;(-4b`aC4QP4DR;vmuM#>11LMO97V8qP8rla7JWFsg5_I2vnhWVdlS zXPuspb#UWTIjw6i)Mb`8=5QF7Qnbyv5V9)EDqjjP%JMDCnG|GAwmOWcBry>YkU_Jp z2VIQI4-}sHt&@RIT{3v@DnP@L^?``q8*XtUpFv-YB~AQ}pYMDE1Ed3dc|5>0!pVt; z_LmnrbdGFBujP?@P?wf{;L@;^jWQ&JAp#QIuVDDMSrb-CRBS=hC0kcPO)N#uVJl{~ zTfdLnTq@NpjfWxCTiOd=kC=a=m108#?Obe9z*oJ|gksKt0WfrwRY63e;0VSWxmlcpgsK zM8Evi8?CKAr%R*&JwU?0KNb|&zznbUS1*h3`ktw9H zUXibl=J>5yl82e8yvle)*iuq0TEw~+2|C;#XKWWJwg1b2ZX?Gpf!K2H#;Bkz!e~y$ zgJasB4ujuanl@cUJ74+ph0R+3jdM=uRd~tWT3{N-8}@@&kI%`IJ;sRW5rTO{l%hv% zF+_z(g-|B;V1z(uv{XT?d(Oi!FHY<#8)aOMpQmkUx1+lIjD<1V;f!dLBf1d*HcDXV zy6XM`?5;+auIh;g3?pm}LzNBA_-rkM+V8IKb#FYpcCM4PvHB(Q68sFmz-ojIgD3TY zL3AM&tI&lx%_w6^8HO!|^1vOalip3+GB^o6+nn<)!Pc|_k8(m5wa+@q-EI=(d0P(9 zu5=j-Z5Q5DtNww5bz^9n>Vf@eyY8*-;o;fw*ht+0YDIxTcfR$rAC*SqO6Jzs`q^Yg zz+t34dzL|ApjFgIqYY*G&1<$2ox@xW>LZDU!agb9KBp_qX3#Db0`6rA2PhQXu{$*j*1I)8 zv~C>yE>Z=KBP4Jo!Uy7{0g$7+3j-GNFkmc-MV#rjfql>MsArh5z99&xso8Mop3eJ< zRHEjf$}^Y9)!GgQ$Axuw8T|2IYE}S&6!L3@0d&n~UYPBWU#|$9x$nRSq%+pBIsv!G za~q#LOhw*o+>72Pm_nZKN~M@hr9SMcW2nc1McH)5$Aja=24V09`BVW`^1<4qBluL* z>BpE-Ot>;yw z&4=xH3D>-+m5cO2AQiZY2*vC-TxhX&}DKvefyzkaAcy3JvcBsJvvcYIWl(gXzwV={^6-( zV~bzgkcprhXK)eMz!u7Z3kWH*?TV6Z{*3X=aVI5m+_@gVfjU>m&XsRZrI_i&q{Cy} zk**dA>b9IBn(sSoZ&F_OY!{QoxpVu6-K`jPwL5FtzAu$~zKW8530w&nUocX*Eq)%$ z`+jOq2v7Bv_pHlJqG~}q&O;G2)*~XSQ0TVz?i!?Q(yA(R*xfeYluG<%^#mPJsF<%| z9ASuM4sS=RoVUXVryFjf+xn~wFv)t2$2kvHrsR7)ZD1+x%D~lG29)R_aIM?*F>wXC zKzGzq$!q5N#52fe`cU}zAOY~4P9Fpo{%qr;4~usQd4SeOPB+a2qlme7j-&Mz{>DRm zg>OWgV%L}P|4A}+S! z+gi%R)3poJbn|S-o;{Vpmffb)rS^%GESHvM7OhyT<%UMnl+(eHe~}&P8Cjape72g) zR~t1e8Z*E7FQwQ!o7~xJJ!tWf58qZQ*T^8ZRB~JC#c09Wb4;{BY%yDC%J5LtT!vUn z$NKv;6cfR1`-BUW!tP~K_?cakJ#eM0m`x`am|%r*AxCx5f|Cu8d|!X* ze;cECiZ#@M>~^mjRy3YW?Sz)0;gh9vtU~Wr@?s0Pmk7CF!V=RLt*I%Ry@`O;c8Pp@ck(1iudD- zmXJ@m`8bYJ2QAAhz-dwW5os21Nle~#buIgBXShrtAAgQLfAP{4LMV+k@ddVIv#3$$ zYWJaw*e+b*solki)NEE-eRJBB2M6baW#3t;ScnIeJ7I6{joV3^YaO>bUQKKcWm08 ztl(rc_my6)7hm$w4bpi)_pWn=RXe;PTpUHw8=a@R9AzfsxBUI;O?&<8fFGE`Glv() zDbLF;wvk{#<`ClXHvMf|b)iuXX@seI>>*`b9hn=B;4)er=e~CJLLsa?97KaSr0ilE zWNNlkUGvR$zABe&M+Y;YGf!63ykKZPCARI;oy5wm#Y+fMZ;0DKBXK&S&BQK&#((Yok1?N@~iG$F2{LLVh5 zcksem6qMYN^@fP+eu7bX{JtTRBoK%JET4D1B-Xwc^Y(g8GZ-_ZlDW9}b|tr!$VMjwXmcnc3n^`FR2_oggc4(ks}dyC31xb_+&Py4iF~zU6NAcs6rM z6gcJNviDDz{dPO^6xDa>!TO8?r{AuI(@pSdZx@%P=FAZ#*qU~MbWRs?$rXCfHlR(3 z#CxJ)XvF(_e_HELyv%}#1>c$F(5%8Xt8)`^Z=d>ja3Lf#gt}amU)r_HeLa~^RlDAw z_0{gW&hxUW%Mvt%r_0cv(kcj;IxS5eddmhNi^T9_FN(8r#Q{f|pm72ORhYv}6QhpS z^NMM8{3VsE2!0{TkkC6W@Nu)lCT9~Nz)!qmx1>moa{1PzNoHS&C~tOuUMF%pvot|y z@r^k(cyN%L@A3E%SkD}WUR)Ts<9I`sn(}v_E0tsDDqh?h)2M0TCwdJ2%YM7In);&8 z@;l`8vJ}}5Nqdq^PPLvZbFZPz^nXo$>8E&`_-^Q9T}xE#$(h``MkVqC6~k8#&gHLS zVNp0~@AbplO?pJ!j{WB>aGmZu%{YvLaW@jF0G~+)@%eMyI>rc@mbE}R*ZaaT;{pa! ztK(-6N7`*U{+Mz$2UR&E1P2q}cQ?(>2@Z$XCr+=J(2mn*3v&O2&F?Fese>{E&hYGm zE88vc?l{Ul;lwL7H&*P&?CF+Enu&Ff$J)K@3gOv0cK%?1BvAPg^)Thrg`|lBg<`ZI zF@&1KaF$mzh1N7C7@!4(L?203`ewNXyaMp(6ujC6p@ zVR!J%G=p3q=@Exl4GzLAXxSr{552%pPKk!JX88$6u~n>RbG4$LdCE6ktAw~-9Q8J5 z9bnFDoSV9ZR?l;B#*N)4$g97*-4w)r6?-nSbmK|*CHz4i3OZtA14^OeYEd4B z9WmojeA^`DAl;9iujA=v`jh`M1RuHj@yf(LBZnT@);sA()dsu$RyW-asmyFNm|x%e zQ;oP;VLL3_b^){5XYcACu)rlId1wXtNAjF>E^KDghu)5(L1KL>sDF3m#+#=MQa8_Z z*W4n8jtJ>eMfUjhkwm5zl%k81+%3h7n8C$Ap}lcoSw=p*^@(>9EqqRo$R+w(k*8bOJrS89-T52*6UEVEA|bsU9%Y=%%1C# za#Jym)mV#*unMau5_dFG8eFJXtF?wpm8wER$W$4l);4VDuU#rO8>MQ?1g5~Op{`6E zlroxCtX0e9x*)`VZFip=i}v_DL?`H}=d__6y-Oq~mI&@tesQF%yhV+_4q8kN`AIGAFp5`&CMh9( zeg;g*FiN+C&V_^hRmR1$)4MUWW6+Q-$rw`8@&YAM#dcfPZHEyBL9%d@#P6&G!N2Q- zeSvG4mj0&go?G8hlkH@V_}4}k5DIhH{gQPGEcE?6(7&$??eMcNrsH_GxTot{NJ>NJ zplz2ASs|rqk%%Us?sM_XTq`L_phLddeNot_m;LZ!t0ozxlrw277AnMUS5~DD2>U_3 zJ@)d}JmpI)-@Pr26$xpD7nJvaX@BY@ z=`#qY*L@@%?UV?SG6aCLvoiMjG;aShf^VPIqA7~(gBtzIzzee>m*$Q}vm4S{Ec^3w z&&H{cj85Llf=MIM(eM;Gz0}gS+8n=jO_>7EAALB}(N zGejB8e>&waQAPw3w$D$HvN)cD@!&5qfXTIUn09MN50~c$gL?LJtrLxRgbSfvvVH2!_Wt4}&Y+|h&azq;nxdBW>Qf7&})5^~{lQ-6?LFrB4 zhxjFK!i|0#%9vr#O$74;D2ch&6|?hLO|tQ4NcGZ-R{xZeO%9V!L z@-ToYPqN2F;oPeaST1%%e63u`>MUlqE>?>oI6Qe$$Yk#9@QuHnY*fnCCioZLs#I#F zp8hz^2Et>mlGB=1r*Xe`D3sT>0iTJ@|D104!X|9Rh zo+onVC>w%f=z}4N>u$C-f1 zrhl;)S4{vjV$egV0m(+A{aSk)*3aonYOun+Q%`sk3ep&g~tX@$3UD{;Rh>z#76_m)Mj7Mjb; z24&u+n-}l3CQF2Kil&Tmy}lj~>@+g7zH)i6x=Pj*MnpRh;g_g5vf{H%EIp6SUz^Z~weP(KqfOL}6v?ZweuW}Hioh`|3M z-=}+#itNLeA_c&j6MMlv6i`4P3Mi}&_srznY;ULHG#!lPG8MU2ZwX>s0(gMR*6_Aj z$Q8ks${TerTlJzWr&eWMAo(L050y-3bLB?q+vkVZylvrC;Qn#)?Sfo^z;24T^T1$T z)YA5pjB6aia`{vGO&A&AJ|i%^Ceh1Y%{RQ%%e&pJo7eBXf>(01n#2JR_E{roZ9!%70Q%6)>%=b2)Oy&q#@t~ohKt=>I zTl8g(|sF6QlrUST^P@VG5qh#sn)Ou5DQW0(h+2LJqo@ET$NdjceHcV zZS``2!d*Cc;HNtlZIAoovnK`c&+BsnZG2isw60pDskgR<ACf4E*~P2)aRZ!dI=_@Al&Xmsa3KYYsH>V(W}lm(H_N51ncs?92Zf ze*a`_5Y^kz0-01v6Nx=4SE##L?j#rl&C+Ly4L-+mAVrAU&7P$8FvDjvtz?-rbc;Xu zC`QD?^r|BGCj_0?_10W>D_6q}iON%P_OnYcw55uXegwKS;##0O3Rs)ZFO32K8$fUn zunw#78=L@wQ`dsgF(6VfMw{pFIU7O=huq+DS}D0z>Id%~sHhPdHkNm<*L|<{7gkgB zIEdYPKH!7;{ozUYJS0M54g0a5{!M;|)@hmJ1Y4;E-}^keB-ElxB?VAiM9Q%h7$bpC4jX6~7w+ z9U%oR10#fi6+z7*D#|A=BPA<$*e46oE!+DBH1tedOG~|cuwT54hMEz+f(XOu)V70J zi^*r64PV@sTKzb?raOa2k|wyY*Q{~DfU55uHeR+Ve;&!s7_Zkq-Sh2sZz*eh|F}Qq zNZEcIH)-j2ISu3GR_~+&$3ApS>M$KqR>(l!^^)EhF~wnN+x$0|Fk2RI&L^1$Tjgl3 zAt5*fZL@Tru=Gt=B&s`g4<%cAkMhx0vpvMs>}VjQ`- zi}e*v_9-I0C2ge>F@Gex(@51?vk`6s$K#VmO{OUnz>ktz`PjbI|3OcjER;*dYP0+u zufIuAc!T64C0$z5UD`JK_5f+>@RF7E;_0y0ZxDL03!4jO0rC4I< z#l<{WWVXurtK*8vxec*i%xBr{`LZCZin|T|4Nq^4ThA1$w1}wV&K!upY(+4)rT$75 z`gB%hvor0>Ql56t?-Vu#yWGan$z&(H zt=|*_qWROoty{g{S3*jBG!R0%X=9G4huQ^-{0exO9Z1hx5zgz z5Uz}@!#PdK6>(>7D{DKWSiFfdxT%w4!`Arb6J|cpYqdDL(g(KS^QA)r4+wg7Gc|5}icZNB2C~Mv&U1r3=&qG8>FMP2M&EA?6swxP$fie% zRaeaFs$a5`jG0vNYzexH9(`M%gN=+=T907m7Z3Ldw z@s0t#i3D^9y2FI6RAI=#wrUB4zpn)+@Kg;#2?ejKg?l(uL&b{$2S$MhxsIMub1_3U zukfOuVIK}1bW%pJ&oac!VI74rk#>noT(h?^9YUvz1;E`Y4sd1YP@psb&HyXG55P(= zuy{1mMODCu^U}SeYtJ{&lr*D?Zxpmilj$3oe0VgRzb}s$Fk^Vg0~!TB7av{8C_Xm^x=7@FsB_Ddlj@lw8ptZGB&XkgY- zxyQtQtj$>**o-~IBW~r*6Hhe!lOmhk4UPt;2BgS*&J#3}YcU}{R19o^sMK~z1!MQ4 z6@?m$-eB4tdmqN9MTUh@4RE@ivrr03!hVbbO(OkxgrjhjoU7u)=~#)2&Nw}C4{@zt zQZr9ev$9zM@B~@Mgu>3nqW>biaWIkFJnW#>e!RoQU&BnM@c&Thsq4cUj8V<)>E|b~ z8=Rj0#_m|1`5D1} z#0$L4)@>w_MhD`EuaJt2Mx(I%B8+Avn$D_(zer!`V&EaTUu~WD>hB zt_%4}B^z9J<|Ku_aA(=%`f{V<)I?Y<~s4;#+Z7E(eh!vN6BLRUo#oPFF z&yiD7HFuTv%+F?Ful^UO$BNm%)v@QA#%oroRP!gPyS}1<4h+Xh7zQE9x{E{R^HP<@ zx+@fna8AU2G!l7UlxwFP9dR>0Jz1UW4UP?P>b$j?P4PT2E6x+km{c2}r!JwbKp}_x z&~LZnZrtDT{Aq2{USmaQpP z^Q*c>rt=xd^7PuOHMTWb@eU={bl7u+gfXS zxpG67U}yy~2C5nu#i<=x9*%h#Jnzbny0fl_Y!~|ljr((ur_0H$+5f9~d^<6*IdYn} zi=bYIa5s$OBDTbAc#kyS5aq)~zrN~MrW=5Or~#*AyFH7M?QnCD`3+R%+; zAla(VT_v}P$=;?Ot{bfD_kyquMN=+kRMk$-IV{5ES!D0%sfrr!QQ!;qogKQDh!LXi zq($r3?ks+sBueTByG0M^?_y}f`{(DeWqs}fwC zmK7)2i0db?wOi-jnQV>j4#TSB@od|uHc_y8YbI6FM##ELrz!+1@pjtz?;n1{kZy?) zoKR3Pzj$VYUH!Vyj)2ieajV;$gILM;wQ{*od;}aNMmjf`ubflGhl^GAnP94HeZz}BusgOA~X9(dK5dNx~ zpTniFvcn!_Gw+whk?@Y@9IZXU?YIQ1sUcBNQ|cg-Rz;wPZzv|GwL##T>yq?)Jj9XY z6q;|S0wbI$VBE%O=)<+>Ltka2UKeytYRSh`P}(jO%jHs86ds}+YDu!CsQTWR4j4%y zcM!cb%lNpY_F9#xoOaO@RcQSz)!({Hqs5Qn`Td=YRt6bAg;ofNtvkg6=rpg`a5nf{_KmBsI+YWF2 zsr9w6?)F6{JbJJ=iQjd0t>Jcwz|A6+;!BC5|7ar43P?sm^i3Jn-)*G;iqqz`ZUI zoNyn(%dQ+OCXHZqpgTSi29E)sQF<}bg>U)Ur9NEEkAonkbw+mFArB!)^WrTmoBLDT z7VDDaId23evidFTeM<`+&u8*gs+OVW>Pk z%xC4#orO9kW1fL>f*ndeXj) zcQ4rO(VNG9-iGS}+9Sn7$(Yi}1NH%P`lw+vd&4me7vYj^y$Y^YiJPg+)>t`nIT5pB zIN=G9sNG`lQ2~E2Kt-5rK3@f3x{zfzqqjQmequt`zX!(+!A3*3Yvtbzj_YkZ&o?jz z^>D!D&Pw_MH)tMFdP-(Ucg6E3gfrcKDzYi2hrcWRPnE`YYw{`#`!xf zv5TIJdad_GKsZ{Pu)WC)t5VBz0E6cq)?E5`E-Bh?=*5xHU$QX9BIAuBB9HDbggj1G zm-BTC_AB6S*+JR134p%hlwA=eci#MT8i(|{e$+>z1@jnL6+BOV_ahC z2P8Cw8fl|vxOW_xMq|a|$P}zlu2iVf#4?3Q#^W-X6e1ZLpGd&R* zqg8IVZHvijqb+IN@f{>90yF^?sI3lVG8Jdq2Xm*A$$0Jtd-QfOmn*{20k>@qmJcY& zgP(Aa&ijYC_$Azr5{J77bN7L&JUW}y2s99@=94h{a{S8h;^YbfvnGAN!QSJZhIg+F zw9e_L_QmP5;K#(cBrZoAbGsgaf*IpJHs7()N)5OvD}iGL;RIqW`8Ce|n!oGrZ!fZ) zktcsp$xht&nbS{y!du54TRXDvVU%Ywj``111nGVr3H1hke|Q}r0|D$A+b6KXI5=Sp zvMjdLU-;Lolh8wz^Xr(+5+*`t9c17?^vnFr^gFK(}&I>U2tBS$7u$D3wbMcb;m8k@)0rtU1{ zh2}9QEx+ft%Pg^l0due=Z2TW9d18z8!$JKg>!fAX9vg4WWxptnqSLjL%CLHq~GhQz41gaXcl`L zjLB%kvx%zge*5fc+*MrP_WH!{!mosVtTHfM+C)zb{qWHH(#B7|`1;UdH>m9%U-=&- zJ8!r3xqm*QrF7fn|8Ov>m)xfRD_hYqD{r%J1W+qb#dZwAu@|>5j?7rF)g2$Yac4HzC zWtBhHJEON|H>|94naxmcTuJ=j@`otZ7LxHD&%#D+|M6XQm9rK44l{|Uxhr?yrW9}E z-_CzLJvMr&1*TyXJMPhv5@(S7ml^`PP{7F!Bji8RhM$q-dwjspZaE!rF#%LrKM~GXtBTu`yZ30?qcD> z(x;0zyPnKADLrZ6(PKLl2JTKI2_dazv0{|tJJT8xM48Y@rU~VYQw$M;u^r67#-uSU zL1s}(20g?h9L%JVg^x7SWsA$>l1dF*YZ!+ck9vml<^H%n?&sV!q0Mb9{aHPIjBW7V z1q(r5j-p@*2!e$96hpw|IXp(Il);3pM~s2UeT!l6Rn|z9Rab5X@6$x@W3d zWv`IFU&^54duYL2_GWiPAUKO#lF)DdTP+E{1D3NZsBhvnVCi6l&gH+DR+MYM;&-ZU zm9EarnZSP_3*Nr2=hBwCG`#A)`K*i!T)ZQ~-p|%Lc^557EY)D{6)MI!`s2f(Na(yj z|GckxQjO?Jz6W3Rx+52^dFB=d2s0aPi$@RZ`~Et6H(={LIhlv5<7B0a3+nc~aQC_c z%^BS!Y}bT?f4*L8ao_$oe#*z?_*w$~w&w_=X-bYUrDEnZ&2GD{^)@*FALTrG&gY?= z`flUUkGIGDd7l&<>`~SS0x-tZ-Q<)QXZ|Q+B4w=>nEHYkVefq75up&G$yBZ%V2qjq zjPg9gR}lqkymi@t2`PwR1jU#od#a|4HVQ;|EP3yvA{dj2#5%Uw7|r`RCzfOvfUr1& zAUZeT7W^4E;Cid_v~^%VAU8eQ50R_9LvMNvZFBT|rhwq|Xg{RbiS9vhdd$~{8%74n z$zbn)f1^1)2A&!lJy=I{dbA(H5DQeN$3Q;sazBgg^cYF%ykqTNbSJFAnz`3uJXaj) zf~p!v>0{Aj?N%Y_%xRY0A~d5BWyLtMoh*0C~4Gi1@tmSJD}ZafYg z2ML7F+nJJau{M>M3?tXJ4a=nvatcvM%aSXDF)xvuez4b!GbcJm zd@-la*jk*svClq(a%_Bm5a_v?|Ev)*d*0UeyjxY3n+Xf9$g=nTb!bh=#epU?YwPP$ z`sN);%K1CM%4pb8_c721t>A{#uMRq}hql`vgsJttr4SLnkDe7FNU3FTAKRc3Mi~(p zfHK9Zlp}{9`vL0YF@l07EYG4C&A|DX!(oV6s*@P(rlE!P7{a=qb<5>$C-GdyXwTIu zoX8UbEt~P#&d7P26V3}0LIdA*-yTCH%2_Qc2xp1;+$)>(7*!-^YonAgNee~uY8GOQ z)Ybd!;7-%mmjw{h|+K@k+y@iOu6_HlY#R+h~}_A8-EuF zB9lk#5uK5Bw3fY5B+b~r-mF}($pC>u?vvT0if&X-_@sJ2x0#Aa)(_XCo42%HG$erL z)5x704_w1S&nST*J6U*d8t?DUW6OM)Q4W^Ff`?oDm2pTg49ceM@LB9{Tw8F?-5fXG zP<3kP7LYSJfYzWlyr%w+uKlsai!2%m@wihnSY7-6EgMrikGPcVe9HYW7!v*pxD>xG zeWAaFCUO}IFEWlp7u)s|DUihO3X@jVx|n8>lk-n^laG|lhJmh2rNis>Ed=L0m0TBw zZYnntXnpQ_|6Q4XBQP&HMz5L)=7LGO5kDWi*lq5xJ8Wd{or zZ85x7;mWYqIf66N*0({Kr}ifK=;o(RM}}{!q(bcQQzl(n)DO9B_!&0c8J!w~JqI9F zeO`vB!4s|JVfy`B8HZl`EU`T@H}if!TnEQac5gm@s#;~vL{5OQUsKpDZdwl7GGIGd z`&IOzhSDkyUIvYd)F=IY+lOmOGQHg4_fYc`#aivYfFDPI3|R*DML@pt7zu0$*o#{} zb>-msw{Qr0O09V&&6(;MO+|}}133fV4$=;!HiXEr9b}p|51r|B>)0dwom&!1Xwhyl zPy+xi01F5_(waGgr2~ZaCxuKE!SpteCR$NQP#nr1Ato46l_seXlr+X`yl|%oa=&9h z_o~OGO72LrNj#pT8?&(r-I(2+^1Em~&Z41I9tdk0*F~1)VkH|#^96ANnoR4kr+|nH zVjTvuQ_6)vq@kVI6R@eO{FCnPj@JHBNYu;|N~Ow{$w{-Z7^Y`J<#ml*qzM3?6u5+;sbtLh0y zm(%EvDWvlqOdq-NL(ZJ&y4%X2j0fOC`Q06>*xo8!y$(Z9COq z^KI{_zxaY`wph(^_R8;rIHS_cLDSiUm80A&7GW{gVG+995I&zeO@b)yF4l7SqKgPc z6ZwY5JVp@i%O8%N)(eFN>v_*gji%xrm|)k}^Lcr|J5J{Za=FTvM`r6;v=8ZdX=_Wh zT_?KvlRH=Ydt*VI7cbIuu3^)M;zLU3`rriAel>RSIIrZ^bo6yEdXUcx?r9@;HypCk z`OKg|z*|<0ufJQ~WTF#vKJLyQ|4egWX*GKt0|hCGk#;O{(4ksyy9(|jUV*R6K=jKu z4-c0v+2PhVT{Gy)?&zbLPHp5?c{>v5Ll1!{{3)Vfr_0K9(fj*L8-sljL@3o%E=K%&{~xb8wDCgWKtH&15!K+lk(y zF&y)RCs%9BBmp{MUgd5IykwxDiPKw=0DFp5B%e8QK;};=Q3VJ>|^Alv)ZmyuHJVZQ-!NKiGJPgn>kc zaK^P`+Z*}3JS;kA3>qMN921a;)$wASDj%%2|6aSh%)!<ljn{bnDMLF3 z*+SEm_*^rjw@_!w zRVd|mv*~SSqR|pXp$yD9fE6EaV^|(Yu@j6D0%IT<0}zsx?BL#W=Vn1CPy$6LfX>ri zb;6rccMu=#b?6fh7Q1fWNeqfF5GL!(6(>`ST}zt~>4{6a8MYgONjQaLd4^c;+pK4; zRZ1JbFI#5=6e4QpS5~XcnFWBG45if$qX`upGz20X8oZ8HA=|oJI#`9RUn$?XeD)~s zIERX`VseA^-nx~`HGuN?pR;|5mIDV5{Yu!I0)wF`iQPUNHML+#4!HDo1Pf&WPIe{3jLnUk-3tNt7}pUdwsbmIjE5&X4T zj37~l1p+Moc(5MhJ2Z^|*5P-b;n}Gm?oXLLbh>Jj6$farU|$y3N6t$?_&bI?u)Ozj ztZcpc!>ey+H{-`>)H@S06!dHVZ?%n_*8fqj3=|pneBbN0pb6Y5h*m1X6bvwZKITQc zpOL}MxcXydf21`banzd~)M~`8$qvBOkNvr?GA<~=zczL=mmYV$GfZ>g5uHOV92Sa^ z5P%2n%&?kY{c{-NRDaYa6^)7TV6(wtQ?PJ%2Nx#J#Nv&SrrM?tzt$21U)*XvF?StJ z{W(6@`R_(hspE0iZnwcBiU-LfC?vq%p5Rfqh;Gm?rf9@0>_^}H@X6e5t2k#cRCz-3 zYM~O(g{kOzI>m)e*88~k;(}zTrcDv+Rkd6zB{N%qgWlfbD*uMTClC-Fu7V|vof2Lw z@?+}9wo-FZAI@rcqmjV=s772KkDD`deshYj2-Z(!q28TI^VdqZCLI1O_pv8bjlKU| zFK;PoJr8!YHH;0!cw(kMRt0Uc_q=8W=h$%#80h4wJGhaEl2I4J4>Pa^qcCE18)WWm zJt{Jy3KDU-W4UoxM5+a)YE3q=W15C$Am+N9L(^ILv$u|UwhHL%Cl?pv%5;zV!WkhL zGoFp6;Jri5-A$?55@|315bcsi^jgTukr$Z<>$;#P<)X0jAHAuO8y;>gpV-DEP+#PR zKg$Xort8m;GF9qZusK|y<8^47=~v~wM@{t0u)z}oq=D-kW$a|`^5VJ8AY<&=9~jHM z^XGh-E8~$D?PMR$zT8%X^DAY&nVH@@mB$7J+@|kWW?;MBG)I&801ZBbYN~hnP5ZC0 z!-|B{({b>L2q3wPlAdi29eVcF7Q1FwM~#I}Py~Z$hw(po9dAEwu^uw3>B?QAmHlx} z%Ie$k_s6Y3DbKf5C_(5nvR}k+6Jy((y}LrEmZ|hb1fmT(AoZRU>jD||s!LnRqVL4( zeNd|iiqqKx$)Jd(BAFRUvcz}{KhYH(vH_UPHHFs4hIeXAMk_I7kmvphn=T#{$YOXD zStCNwc^;gVoH5oLm+35Tbd~3Z2^ES^AWB;Ve$|sb!kOGtyV`85tv8z0FhFgE3*Pw@ zU%;*hWeT;Oc`VMVNc&@*~1B~3Wp0Kz#$mUAYm>T<#O|wU^h^ZLIDbr!?6~o zm=UR6Ym~u-Fu}2d@4`wo@X~xY_R{WO*P}9z^;n4^_zIu1$_dp}aQUZf1nw0vFq7Q* z7ll?n;UYJ!;phtuX%M00@IC+F;tm&b$TH)gha%l!7`w->@eAC8Ut=iWT7~)Lmqv$_ z%jW{Yj%|dyDyf=o=%#7eh{Q@rw5gt zOy&}4v$;Z%7?Z3>{;eRxYXbcG3!-5GTCfNAE)m@ZY}UJ|l1m*`HDD%iGt%=q8n&j$ z20k*|g^o+qpNzvG6(t70dZp`hu(;af9?Fz2JvTg_BPZp|>b73AqfG@q&ZRoO-5Rgg zYsQfC<4U!LPoL6$8dF3QoPN7C zZz?TkHPm`N12qFHMN7b2@@BeGyf?;4j;vQ&pPFgTRpSx+)=9W_b$o^r+|0IX!{hz` z^B9>XBn0zfAg|9LU%h7@y>bpQB^|w>DMmOv{uxUwhA^&N6eT%hax%4D+a$XK4Ghtb z-qvXC+8DF}PAQS5E?{5(W+w13d0NYVKhM+@LqXIdxr<|jjF`>TCggfMubC8$h#iTL zOb~(`r!|X)Z0dc4UQ=B*1A?^C&U01GVo8><;M^6q^fG#{Y|dJv_3SLP;4FGVXg)}6 zFA4Ep)|KjO;=a`BFgp15WTkbMf)>_lE$9Kz8<4V9o z7Ymi}#w~rP9MsJEh}s~8=UdrL+x2ZGTo_LZmore(F%q}+_>VG)SDHGQJOj7o7^6p@UekE|MTF~l!8^zgJOg?dX{gj~jUo(=SXU*x-Ig^16fSP-ix^KmHgJJ;|-Yj$)0_#X=`R^YPQK(MWD#R4%7@()t+r_j%itL*H^lB z2{s5YU1XwV5u6FU+-MC>GNCM1vPnS)Np;pN*tf1EJGC2m_>38FHsh5y1@<`O(q&?e z)yvGi+h5tP-eLNH{j>QwhNI`QX{_H@6qD_plq9?;5s3ss1(?xk{ARjDBD-dJn19A- zGCPd?3vVc-LbO7sDHfA|AQ`BRwSk`nUT*F1@>?M$v2=u?+Zs%b9VQdmIGYW3@SeO* zCldZX9z!#h$(ziwEhL`2Dc75$QY9Z5T)JmN@FnS?l}vM_sM5Ag-sa{x)ar1rEc6Ew z;iD9R;#TvU$1L4~gG$TyI0d^$a&jdGDpoF4NI425kPCACCfY+@g_Dagp z9kiBQ%ZFZ;^d~p*aas(c$r)YRSl;rAC0>>Xn!{c^zLUNjpn_BLQPa&F^zhZ#%tTy! z+XRAwnJ@e6v8uC}Y~}VW2lAT_9!Wp8aE@gjf^JW#R~&~$?w*F<&wJQ1S>XHR@|l~e z=}ykK+H%`pKxcKk-}LD2@*VKgtTdJ+x;!RM7pkwnBXl)e%%m*$pg#YyVcdH7G%#dA zkH(?7w;yWtoDPd~l+JAO(p*-TH>ZKH?dWQg=Z8XtlG!{GJ3FaxfumVT;!TU;P&8&> z6iJY@$Wv7i3=@XrSQZv|*{mXXd~9$L^O1zKd&R@F-V0H4{UwSHZEIe>9?+k+=|L$| zPZrqWY?vn2hPrFU7|==P2TE<29;n~jdiEd~*#H=D(7=GKiKkLB%{Bx@VYIrG$(%=G z2+?$0m@vSBkpsO~Q1d=JY!fMUHKYj(g^bIS3Kpcy7|cHsq+_GX)#?z7sp{&I0=(T$ z*jyDX#F2vuvw&VKU38@;iiO>+6dehN;sBUdg+I+tKAlyx_IX8gy60GVLTbOzdHrN1 zmz=gPNEDg^I1^wxweMG*zw`XC9((JPCN{rXXQAiUa7mEsfTEkAzt z?lUX1FNw~c1=16~(F<(H%Wa4&FN@W{<(@l-fdErLtiKQmW2xN$NvC==qj|ZsAdvK> zb5$MN2)M4G`HZ8eIIEMmcP5oq3c6B{?Fdd$uO-jH;Pe+hw1u=-Zr5s6rIsxei)nyJ z$@$4-lg^#ayR(hb%;|HXK0P4qj-TuZ$?T*ifP|B^D`JAnCp`dkI1iU$1J1*Fg7lC= zGE=FXrZ2|jU@_ySZh0(RVtFl*NLz{^8nLi$C6fs=tZ+OZ0vtOH_pg~5_%n<>7sMXc zw$qdGs<$*|?DfJ-?ipEhig!zOP4`@3k;Aj7U(ikCxS zy7)4IdxF^2wRFrlT6vx$5RZdYx`^+dxZn-9!hCjBO_!OUbmVh2b>l;+vO#kEUz^9Ss*BVz^p^}r5fYNes^9l1WOSg~< zLU)yg9wWp{%br{fMdB1%EQb1v!@{d9F>Sb+udL+V!`sG)JSLokgYg5{*yv0tYitI0 z7g6e_8$%PLeSPJ8s=86LU+2TD6)350mTt zgdIiH=^DVb7ke(>Mr{+bi#n}Wvq3PYH?Os!cKP{4o$mBaS`c~jyKNCbE@UHBpaTv! zG5xiQgWNHs1gf+Ti;)_HLgTBP>h{i(-@s(3-kNg+zn-zlsOB`M zQoqRt$w{}-UXxv^oxO+JTCxAvt=5kAj>9MKd_6lY9v$SfX2<*cdxnn8Opgstj1Bko z^^Z;*IX*i(39cMr`?pAh{O<>?3E5fC@T%q<8Y{we!s# z9W941J^BCeyOayp?vEv_Gc6bj15!U-V$8jn|F$~L9PYPgj4pUDn?x^s7T4HQLI2O+ zL|`Z8#!P6a5wU99mu75Ny4b}WKELXehHEmlA3D-{tFNmQmhTid-9~X~SA2MPy;pWMUKJDk4gt80zqvXOCPMoml$9 zt}&3Iubga^PNIjx7>&K-LIn8y`G3v&6Scb|VCTJ6qL_)j=6ct5nAVc6qAPmRrY7^@ z%t`#jGUK;_Zjy-7oh-`i{E3$cq+ z#*XCNd!$@}=Nxx;|1!~s%oTN>%kZQ^jK!Yb->|@C{CCzhNslrLbP>v##JOPnN&Ozh zlD=J++O0}uH=Efhf_51lQNCR8asMMmSuyj)>R0Q7B1?2qoV|4R{62Z}?SE&HIL2~C z>ofcM;^wtqL=(eZ!X`J`-S=meqe24y9Lw%J)c+0;aHK+4c+kK@{+av zB}a`bNIT=4Nyn7C^m^CyHn{NHnq1KY8J`nAW{7_I^@OR`5MFDJd`8v&)Qg?|CF6@9 z@KV;~GVb9lk-u}n&f<|wp|+KIV02IVZ_hRMh1NWX&{)=GIl`!_Q*Ef5I;aqIOCd4m zD~hHO*wsp0E06*VA;Gfm+|0X)gJcU#Q_ohKUUjxhZpR|k717a8s3x$|&R((HOsn^{l2ps>zDi$0f z!-Sw^d*)Z#F<>{OtEv9L~1btE<1lDz^RkW;!HL4B*3#&I9uxgjJYt>p^RE=i6 zl*^{`O(OC;has1Ry>*@#Gr_VW+;6;rEVNsaVkG{kLnRaqY2AP+?Y)AsKT^=qC~A4v zE_ZjURDIPOMy=k2MG6n2Avf3#b{Z5QniY72_MynZJw5d@7RT)D$#%c-_7B$HS=of6 zRmi!-1<>nuX-Jb=+A}Y2G%y((CSC7Tn5lF+71PvMGFNVBD#gHBy}T;|g$#OSV-VOfSB$5ne=ncbdneiQByHRr7^3Z*N}&7KsYN5NHgIp?v6mhh6KN=^h2dz zaK%jT4|}gAu=cGIcEjnQx5FtJ+^q)r4DPqpk28S07K~G4LK&a;AS7frz(_TDK{Fti*c|wD*Wkz?!}~T%>G*Nr)CGDN(JffbO=6zUvZrBeuc4l=P;Rh;nlBYL%9tk<8oRX*UoIa2{`RV4&>N&0b`6u$wN-8K=a?zr5b?8VN9E2-~HT47EJ=<&f zFuz|;Kz-IH^1z;PlB3>e>u9)l(ms#7OEkaa#cy3hX*^c+jPK3*?K5CIdm8bsq(5J8 zmy49saJk&leLSXS*WC4Na`}FbwXB)g`?C(2a($(V5Y}EBTFjU&#mOj!NP3UB^gGiO zV~AQ`xujZF2x0F*xzw_2>!QdF*NZ{x+G{v{KVVfhZBxw>gcmcAM&llTMP}3M7 z+?L;6rIYlD_@3p0IL_m)T+#L1)(6MQTaoHj{M8i^jPDQkvRr{F17mMRm- zW7JvnWsZa?=bQt|1dnOe`u+l4APEv67Q9LBCnQ8*6Ud4(sgg7+ZhUsLeaJ$=befuN z)hty!9mz`|g(BZqhEL}dEY-6YD z_9m@&+8#Zc?7<@v`CvHlB1v+U5H7R`tlC*L%U;G~GFs@pIqp7S1YI*MUz&Y?#%)Ig zCDX+;Be5S!K=At74u*JVjl*FmWbo(Dl=VN|XD-h;4>)7>h8VA)mD%>AVaaa4{l6FU z+$bfNHV6!n^5`_R9S)pYlW zsK#Ft+y2!Wg0G3&&YTM zkFuZK*)09|a@&i?a!*;cis`E>$FmpC8Ry|kQM8d$y+ltE*4k|d-IAU^c~mSHTfQyn zlppx6tF`U1^mZ!8=g{$;R=KHbrCh0PvLem8{oZQpvt2xklKniFzi;V%li8X?>V%9U+m_+MTS=6k8Ne=U0rsBR|KPd8P^bRV*$s!;#ZHX4m^<%?X;MyR=__U)GpQlM7QPeGgbb zsuIyTj&wU|_Y}(6AmMJ3OI#ziOs4N^!8ZYg{{&Lw2qPj;fCJN8^zGSjX}vkGmGyti z0s`u4Qz!K1cU^J9v$(`{Zr8!Pxax^aySVC!OtZM5tCuuXnYr(*H|>t>y$??1`LrSH zr0?@ygKZu%YPIR7IP^3)!{1_0bs!*201yJG5ej0~D#lEJU#bnTN3Wg9Zi679#v(u* zb`tx7SuYX>7Lj|lo_oD!WiMEnUBDP!03XDbqZ6+p-_i0X)sr)F{A|%n)~DnUY?spb zPivo&CVpIbK(wX(Wb$Jxr|)l4ewxXp6$a1*DgWUM{#+{@wZEi-v^e(+7_@dM;i~C@ z3Y=rlSwH%L^tr>7_U?teAs@5Oosb(0NCX1s;|I79SK<6zsgBT_S`R@jy;boTlepO* z|F8i&r;|G5e3KiW(~OS{e3LGw?bK4u4ckrg4A%aAktB?E;(g892>HB12EUX=QCB3n`I7fxhzx)QonNg{w~!ET z2gr_xPv7?TefS2v9wB_kkDS3qI!p6fBu9~N?j&Gq$SlUJLm#{Axh^Bfbh~nKs2(csa9r2?D&l(mge@vnmc_s zmJCADw4+Eqq$zUMu%zmm7YGyy`N*H6F@DjhUZeg-&opFk1D#?Dh_KPhbn5fi?xTAn z-K)#Q`$cR}iU(Afl!3gfxKZ!-foBGZ{oI>v5dTHg2N;8@VNZs@1Il&gg6ymKrTB9a zPP>e$H1mxNR8rdkJt4Bei&M!s6oxoRNRU8+T&gcJEpFN_1GyoPB?3Hveoh@y{S)3% zi(U_?Qr|Ds(4qX?%YP0osZGAxp{9&(iaI)#P`Mueyy^}g`7T1BI#YlqyQmtYME4yb1i1_g{Gc}F9jx{*fvA@H4Bu~7|ZN1THy#u1f8kcf=|0|rck9&piB z2^~~nBy4kCCnaSqy$1tdJxP^cYJH#a$M-M5t=#!f=Mp9<690a9yMZ#xQ%R*gj$$AL z#SvBG@u|T=B`8icIx=&ht^qxaSHOG`?0JN2qWy>Z?M?z4P*^nR*$o2-4wEt7Qj0ITfD95J=!vJtPkE_xt$78u18ZUzkgPWe33&WE-^%AOs9o z9nz9egc&e1rzYpvxv*O)<+It$HYC}h_lRYf#G_g=l%n=h0_W*#VoSxTdDuC5qVkX3 zRpt6|qGvOv#JhOhNC_{x7cfWm;`Y`T@6Nk+q{UQ z(a&%$S_KzwD$;#${J@v4=Ck?Te0pC#c0ep`wsQ5+W76K@Mm^olm%N?7pN4k?vx}_AObMJf$)0j1!khZqr}v z{C?t3H@?B}#2lvKA4*shI9%Lz?Q1u+*b}eSKU{abp>qQBzYc|m@E$GKR3M>7OHKKc zIZ%U(xPghkQ%c2xzqhC1kvgBSRn>k;W30`r7DDHpEUl*Ky(F3O#k8w&zGA-ZJ z8Q-TbYO#t3VH83NG!zL`M%#Ie<49XA9=REUB9VLu!uEV1^=|2nOM8ps9e|B+5J8A> zXx265-AAw+g_dGo5f7jiYhlt41(=-uekj<7x=At*oqwmQ&Wz+GQ4KqVbL-wQ0J~A& zhiCi8dw7PrNJ*AsS}OYnxg^U4dgS{LJd#dp1%Nq&1%#YheI z&}<{bJK7L+FJGI&Rq$UKM?Mk*9l8emiRsvUya#H%7Z=qI@bTZOjecCEzDh^eKVI#^ z$;kc6XCZV{^^FeOW>u##I6B#VqLFdhTRz-1oZcUKQV7b z(*&8i4F|R=^W!{`W{`}(*2hEsnv)kgz~J;G5qR^$e6IPwL2W!g!~OM#;Y1yY)B@K} zh63z_X6qNj=2{i`1e`yf2iOjX!h(N@|9HXtA8w?&lmb13eKkraQK)qa{unsV6ju}U zYhe5OzU9}FgJG*dLS{%MRqNbCfUPmImp zPe~>B*I+E30aXZS#XLo+;`BcatnWZUNpU2=vgA>Xl(Jqc3z@mI)OWvT4abTKrVs~B z%4kEfxo?9PKb$0=} zfB}do03{+jx#2PYsL|hetR|W+BbAb2U&R>?>wTs}@V*aOcK~iv&@5Cv*#nT(8-@2m zJOepRR((dL4@8nZXKmAW_?bVk_{KD?5ueq$QZ+s@&H9l0kT&IjKZR*2Zq4mJr}OO z*|qZ~&V%|{Y*Pw+X!3|)kTH756bDGLEvdbFu{YbEATP&T+AtBE+~wO zwOAys_&;lCsQUNr0uif4qy0mYe*6P1g6~G4lB5%Xi0evSpBm{n)(w#)8QgZw6~DFJ z0Kwfm#6PU~y+90^{Nzn3trb%qxW4C7P=QMJc}EaY#!6$_JRf2tj=^AT93~g)5HVk7 zo1`js6lxHrHZ3oAuF^8@N~{kAgM#jMXd%9{XO()QV{ge?QM-w~dGR~7?--LZbQa=e$DdvJvo!UR zrZP&~F#X#DkNwZ%o#8gi-wz!>zv@Y81FViXFJL6k0RsgNDy{O3y$o+@2wm}-L&Ob@-mN$34xFL86|G4mh`7b&EO40nS;`>TJmHKz1 zIaN#{_NC#bpb8#CPxS8~FCSA#L6N|)E zcj*5@pvtZL_tH;2F?tt4P!Xfsu97p0p}>Io2;z`%zLs%vp&Nyg$z&u5v&l7y=vQM= zh;B9%8ry8W_cQdlx?ukBPtSy=Ilr*K!*+M5Adf#+f#0GY$=+1sU~03WTM*LVDw&K? zLOB>D!U&uu1%7x#0?>{{ScG=8hm=ZdG1+zqb^S2J$Tnr|Y9e=fz6TKl`}Z2l)D^td z22)SAj@M37b7|wXO*BvK@_*;=3M}tyH}Zom@9S_&;pF4s5g3cu;ltsm87qZ{_Ri;18%Mx1b1 zc>T74=1GMEX#A45eDnQ>noeq`li{^|EW~+XvFNaGG)Kbpx5Uzknc$RC>0cyGTA0JofGy!r@(N7} z0%TmspRBDg-x^FZkZ|3nxej5UQJ-B)422>Pr!-{9bHj2-I#^%CU=q8exy1l2)4;|P znEnT3E@0*MME?6+D*B%%le_M3h8At!f7iZl>9PI;+dJg?(mut%pLkdAH#6_if2Ru& zvFA5xpFCQZ$9*t9TU+iQyW1V^BI(PqT^CfK!6K3-jlh}5xK$HiG=-rQjU!XW*b@@u zqRI=L0B}^=CB@7OJU?-)q=Zof4b802qc&kGL!dB8=8pHx;3JG4jSvjY6|Jy05MoVA zA_UE;n3pnjE4U{7NbAH6maK#=dd7aE8(Naa#xJ+Gw{>4)HnffM))&$Jg2>zt?(hO0 zuct7WE=N^OBb@B?n2yw2DNS&4b#V3}kkVwC0Bdx*`sp67q>PN>A|^v7Bm8|sYCN~N znm>D$t0$FGOjUq}t{V-nhF$(spgi#XoTOYLo7CLHB}_@d8c&s6DPn>W)u>uHIop|M zJ_~usYRTj&ninhHHQ`~BpebO;jR%BEPMFSE=7RAqihWkR1PY0kfDj2P=mQn-*}rZ+ zNUo8{^iOw>^?`cR0{mLU7O-vE`A6?S0V`<=*oPYSeG~u$4^UejnTzDtfB-LelAvU$ z{Jsi7**i*DrKmleqOE|@n1&CE=arf~Ui@YbAX3#U{m0Myx0GUxa9mYEMKZOA7cBH- zc|HXOLiF5ziD=7rB8VV@2$s4sOi7r_abd^<={3H=2A{vV?C+in-{^)n@C}*gPHYZ9 zDJBKAx)8?F2nNGa4fr8?S>$pXqNN)s2?L6Rg0tavNUxUW7bY*>75vix5F3}({H*n0 zUD#{)(<(YlOXqsSl!^@#g@)I}Ns+Ax>5q#&;$1M=bYKZsWdBa95f2#+8HPV~BkPh?LqQ7@)*R%_?eRLmO>p%d?=cJ+zvu@LoX zUKwCtz4w*)1%hc$(8h#u_nFZ;l?&5_hF23#RPpT_-g{;a4ZLc5I*`-ZJViy&nZ|rj zMJ7=lMPJ^z`V~U`Zaff&xG3zUu1Wh%_&%_WO?`i{|I*lQgAs$arIZSmbDnTyw;;`f z!pO??BLNFkMA?B<^Tx#Pdf*KuLoC0~?EX1aX|>9cr4^o!Uu{3S&fP9N%O0Hlu;Qln11C;oj|14+98XObG{YN<<-zqPOeOU zFSxNSgYr~!Gw_o=ukYE8XB&h-!Xe}ln)5&d+dJvfs`d}b1b(Kw3yOdXwB}11sw$w* z!a(?s2=p)lrw4w55}MJB5=#F7jAv3mwmoJpkTJFf8eZvIP7Y7&)(jzY<83((~EL z?b`QfrEFFzpZ-q!UHXF?q>)M>$>27c+d~o~LXdz-rG}Y;5h%m9fyFRSG4J~9)Qs(l z=CaFU%JrgBl{Fq`&Q$JrdnT~$jv(RTmUGz$Ig_|&6N}+uw;!HlbTaIB-=_4i*wWi6 zJmO-k!}Yir7w*zpgE2x&-7yv>d?oO5qE0GO(zi>e_msO>ZdaJ3!pkL*>Y9$Jt89Kx zI++Xw&yE@|R}a>(*tVSc`%}FP6M%kQp_7GbYmJ)x zIO_+WE&tVvl}?LBBHUdteCPEh31cs(EFFr#?i^CZj*V2`ga<7!3g!;qo_%OD0xol7 z)+)y?0rsD7w)677HqJI4^VO}nTaE8PYjEdSKwLcH4y6=|VQ0mGNDt919Luswjx`Ul4!_RojRS=Z=lqt&_e0+fJ;t# zuq7qn)6$wtmR1ncDhu9s2S)Vs-bei8R@M2F9Zw!ytOeiKviG)q2utIAK#YV-POtzQ zZ@SS7>$`md_^?}A44i%Wf9((>X0PN_ztg>F+20HO4?WK#8m&SeD>MtYu3fnt~GM> zV(+^n1~b2_`4nr?n{y?U^{Bk71@h!;&zwDZqICF)(bh9(6syggO& zA6h;B@-owvPG@#$S_m1YAp~j}RX+EUW=YMNpu$Diy*y)?LoUAj*hy8Z8Go|3{mMDb z@qu1?$6+qLsq|+AA_^6+hj4@YcR1&8Ch(XXhorB~0hX>v-;A7{i-^uCq8@D!fY5Mwcuiu%3_x zpQBAN2tvsR$F&$MSpMgLO8`)Y1ji~}8j|rfn>K#G_b0;y43cfjgg09YEl9CL3A71D zkWG2YIVqlaGqYgd3&=-vG0wfUB@DeKX#GHx^{L#~eZs=A015@-LGRQ&4e( zpoAh+5u;fO3$97i<2y`INJ-*IUXj4CW5GfP?e?_WqXQkQ6FSyEeU%P(c10m@e$>9w zyOI~6+YLFR)ymN-IZzzwEy|&TJ*E(2Nu^a3YN6%SL>mWyEo@>DrY>WXmeHt?VCQa+ zI75>?cyeNiF65M!w?B}Y7oKa!d-%M`iKQQ9Cqr+j#re|%D=Y{GB0GL^8SGt5j7BwoL~HKh_)D=-}qxj2hhwL9i#6<=8>CW!V@+HrH1b z#hfp}OOj6PacpYfz9y8+TaC`>T^!S2_pEBniV&NSvspf%f*-l0q8P<~H09iuD4*_1n@wI6k~m+x63PN#;hp^K|8LiVLlfXHWWqDBrwPc5I-Ox_2v& zc23x}t@+RDWzDjj>WfgNmdcfw3$qzLOnwGfhbC|a3~zlj>Z1-9{;#(7{JHv%o6m{x zPj|{wxgU8?zM-yarAio%eLvTGp89!g>nxWaNc}X=L#n;Du4_pMP_SxJYZ4X6)n2!Z z5z&&Mk+heI=YW6!?A4(LBeU$QE(u%A(mx9;tbF8EKAWGWa^M25;WK} zTPHIh))+u%5-5J}s24+#KADN4SlvMrLmK`Vf-5vdpfYAYLQThJ@eD$6ig+^$pSTSH zn7|5?Y7p& zhVIzhMe?wcCdtw4+`zRvjA(XVdBvbI;!G%_3;!(Msi_Tp4ca^n<J7BfM8RYS|rlOITKi26AtY= zo@)C5dWdiwVl&6^?~~iT;iVe>2zeK_xxI`-pIZh{04jc)^ zKm?>HWGx}^6DUeiG)XY9G=<_QLEbU&uCv`MO=(n6p+cR7KT;$~Q5AdPhAfFKkP*U= zGx77rv)6v4xfXbF~q-L-w}+$X6Bn7~4vS=4#0^g<{#8#nPIs)T?`;Ru`i!-zz3LmZfp#HKsnUFwaW@NZ7*$e-MTO1xgyP zVfiFVNcch-9|ai&BdJCZZpiOkFV>R3fR&xa0%Q(GpH?$d~ z;5x`QPik-w*_eU+BtyuwCq=5Ag}DYu12m7KcHEYkYA`gg`}AUnspisM9u^2=hAL~9 z&-@T3rS1+U1T1X&R(%7(%2oMw+@xdi<#~Ovzps1xHtv5dRLe&f=a!dG^cf7RPqL1r zhI?%>prAjM1y5c39iKODzFvd)=}T5ax)MruNzxWU5q`Z8w=?hC%5C}A=DJsL+;RLv zW24Iv@OjowES}MhX5$*TfBx9Tj^51XOv1w@9G!HXDW9z~JN5coV!auZT|2)0@TnUs z)i`6y3-e*uPf^#jlmDWzy}epxQN%IK{m8$}I#ItVLV4MP278P0wPw3fNak`q8bT6K z?Wyq)3m}CQO~`W3qmmW__BYqRMu;D?U%b!Yq?#}_49r)J#O84}*9f^%#lJ0onM{y! zn7%%ytvqw%5*9fy7(V5=KX~>!^hHIOzWPjG-`ZDTyOg*4r=P4dXLWEn4l+WE`V=A! zoj)DwVjnVux#Kfp7t<)@=DmE>?XllsIsC)@19O+iOOQ#M8iT}mf30|~?%SWjyFx+8 zB!ZhpZoHXjEz-zD81#I3PCk*_x4ET4MxA8HdDUGdU<4x1>lNe3MW&4q;+`K9hfoal zj)$zOXiB1}nI7TWE4;B-U^dQP{EUz^?y;dUcT5{h>D-1?stym1rF}RO59H&;Qd@{Z z$~YPL)QCuAwAK`I*+ctPbaf{gd1vjB7fz=*hHzeIU#wQzb7uw`+v?I*x>KY|GRC3P zLS7w?L9PYEQab4j)=q$L5usx?h&bY{M#n{9oMq03tRRd@l~!r-YzeJTMmbLqh>)q` z7{V80f}Csv?12oKpjjYATrZ*+VU5^hN$li%XOm0969I{aj8 z{yJPBBH#iU(bGUE%^KV+BU%%brmOX)sz@M9n#InIF>4K=hE8;%hFUA-Vy%?f*)0^> zlGqYtttIX5Y|V^KKeha&_+k&vCpj0HN?SviBe&A&c6fwbqgiRkNA~!>mkP$<`Q(~u zTG$LpZ{0rXyPJEuv#WdbLWuY4nF=;RH_5)2cEe*N7imRSaeRVza<=7%N}}-8$cTS3 zs4edy>pJug(UZC@A7sF_AQ}n<#Z~tkKwRo89Ox&x{K$&vDtw7mbCU5u9aIgwHRaUQ z$u~SR`E@00dZCPUA*!vOvoPs9DnCKP^6E%4F|<0@o3xJNaM(1tXAE14J8EpV-Znk1U69kcnqO!px0H|-=fWN$k`9bQyu+o0x^P1u z^uf#Mv-0}*qTcD{oFl6_etD^=H#XQBAueRjLvJY?n3q2e`ZPn*l8NV>GY(@~ZR&XkS?u)lrZQ!d`x8JgNT1^ss6#;63Q zuRb@uI_#iVFN|9(1W6)Vo!(OcXR^bG2Mnou@^zDDibs3MMyZcpeKNDp;fNydmN6`7 zV_2z4s3u3cRbQq4tG`OzA3R!cuYaNk{e*q87##}@tO)!jK|B4`b0X<13Pr9|X0oGz zCx^@Be5cPUbV>5>gmf~JE*NEtIaNyLNVV2ZRS!8Z!_lf-rCN^2hl9#c80#(XTEWM$ zF`N=(l=*^rA2PTr2jc*Zz+j){h>Mp)sAnRHT|;RG$vZ7&KSdgqEbn-`XF&?+u}aZt zGj-&;6>-cM)r$SfgGS){-k{z@W4&=hUs7d-khUm@Dgx)Tqf${VrG9APm@{%h@d*oPJK$sG z&U2}0F!ncQp#jC&q$2Tp>ko{%NKee&V%h@|rl=5r4_*Wi*y+5S&gYw4ItrOc{>dqv zpKP4YBQ2-^l3%XoHJ0HUd-?D7*At+?Vr7~6$(|h6V=jn%HGzS8K#8Iuo zvf5m(He*tdq;&|+KXIudYX@VJ7-_ztQfu(>3O?fV^IPSot;QJO%}TgtR!EWv2c22^ zpZzC8@Pu0Co>yPtuJ(i|6K5l}U?5=INpf>@J>JdsIXwgeawm^h*;XbI4V{FU1Jhx9 zQw=UASFer}gPlvByQ-|}6uZ8>RP=I$6dGJWjMwDSBT{joxey#6DyJY5XRMQEkgBY^ z8{c!IPLgy1WOM_eRLz*Y@NqE3ED}VSVn`cb+SZ;B%S2i*TM{4wqFFa-=yebAdVd;{ zv2!k+`hR8JL@MC_VNZK|)$QL}DK%F37U!BM2;Lwba)V*rp1BBMnEMI;2;--cL#QIF zH}qn1z&Aj@J)4SsS#5(>%$hsBlE0N6AL5w|LmLLxX32thmNCI87FQOn?Nd>oK{G7T zc1TUgd(q|7O2t`iPx@iMWgUr5E#X1%0J7TJQB;kzA2n+qi&L}qJ5y7$n{?4dx%Vhl zh+qhocx6dXMsBc&yl}j`(e^=x9S4`;j|~q;Qki6RW8cjdJS>-QO-%XC1+;i21q98G^8jF;W-YWhn@Kwm^tuK+0Qg%eLgk zp_!oXXe?$vghk@_rrVSb&@Osc1XfgWhuvKDV!4<1ZP>I-M3!+$J=Pj&tTaTp5PX&! z#)X72935ULT%o4kgruyAB$L3NYi4mwqrF08GABrzC1xGXEW(9Iqt>g@3I*FnWVp%O zv7@U-G)XResT8)nnFaanbS~czg#496s`wVbCR*ENOX(voNyVMy6!{Ga4josEE= zSTsG-yJhGi-fLI6R`@tWK6gr|!2cg9$x&W&tw@@S0Gc|mbgJ zB;~2!gM?H_Jw_yDi~y4FsbQr>UNbF)P-V_G#`+uvGKV&8JM=1~hyx-~@_lB${jPv^ zATo1L zl>@q}y#lx;D1a&TuF-|L*t&brgRV}5e{@{O)^yfYl(DqhFI2WhUvUeX#MBn-waFM- zkg3=khC<|R4h91#lovN%wpGut&US!wW2`dMaIvNTZNu=Yvq*7UX%u&kx&BSx>RZv7 z-l~e4nz}LMgs0RZ&YSN@y5S$(B@*SCR_ng-{DHWo4sh0=WsZfM7v=|Tv_^Arx}1o{ zGvod5GwQi~zB?Fjd)*v*NQcmEheFXNNgB2=EW+~Os=NbsI?JLu!3Y6tG94oNl!&{q zr-Z41JY!qg7@FbTOghK*(=6-mmd9ZbWGz4ajz_8=jF1XMt> zP)ERq&O2Bbb4@^9J%y)FndqlK{eLvbBxO;w+PxoKddp?jd0%=Fz{Ip;d{_2Afi%lM z+p7`>yjTI(x&~N|5tCebRvjHAn2o{4!`0Z%D*!4IAo6Q7iU|adB6@E;ri|5@sWYRS zVbsnem$xW?Ft?LQze-VbSsCogA?LdO6l%$7(TytwF#OY3J?;`H z)}#?_=y_C==wI z1M4k0-6TUPJ8f9oW!i<{Lqw&(NN%iX2SQjGRB1D~Q*n)i6)RZjfT_m>F~yRTMnvs( z$`S#)$E+$J3uYQyrj9$4LNUYcS!P>;tJ+^J z><-eTJ^TYDRz0F%kV(KiB z15b^Wte&fIL@8Y871>G)6#{0*lEs;98CUMXfyjWwY=~UnGHrXlHq;XAU1s^52<$Kt zM##9b5j!R&?}L%ef%GBp$#%F@DytN=*Nk&R7RpMx91EdLV6cz?tRqBmjjVAV&eDWO zd6{j(o_A8Q%vEkY_2Q;YmMZ;8*@h@80@xBEMFc#;)N=7&6E~5&BDeQf7BD1?N#py?t%SydM6q)c?cZddSG)LOiMVbOy5v-db9s$8=wKj_3PH{;ZLgf z)xj#K9|-O1K92()6y5E@0rYNtXG&_Ym9=t5B#lA@dK-crxW2NFEnJvd!YC+`sEi_0 z+PK*VTO{p$;ZGP(W={ebl47fQ&o0fDVS@6$l;hp7oUV`dG8#hLV&-7ZiwzV-0TGE3 zAqW!hiQd}va16C_@PA~&6S>Rz^oF1oe?IfI{XiT*QVe`NbF_UU^^L9GfVQri3CdBx zpwtP*Jij0bEwkGNI&6b-ZmXtRO=>t=NCt*9W~M5Rb%IbWQ^~|Q)dZ7`FUSPfe^Ff8 z)Y4K{dg>F_7(5h@m}Yq1n`UEzrr~VD)P2fiSPe)b!%!xt`}$M|M8b%I7?j;b7cH(^ z8^qjIzMa-M8p=6^mh2=c>a4Ajv)|$r~dctSSAcyAYI$M7n1T~re9aU?l z+yYPYUAlh_5V%WMu%Ku@@M^1;X!OeDV8efZ5wjc?^swA}`FH~$ILQda_Hu^8_1|CF z4ZwIuek6hI|KIdo(6fHs!sb^hP$T^k08}v>S=hh~^f=Xo>&n{P(V6kd`HhX0vsW+Q zyk57ovaofFFW|iRJ~}o%`6_H=F{;r?%ZW*7&^|=FnO#J7Uam#o534m=#z)|Bur-<* zj>>Y^yN(Qm8($@EL+N6{eEesbnYyeieLcr04WDzCb~`q0tg5QKzkR7{ zsEfbow%R;;fA`iHvi9QE_ABC@=~&*6 zrDb}wUXBLMNh6tT?Bb;qU8UtDqaGe*mn|D()am~DC4k#`G8_LTlG3Xtt#(}YAflrv zA#GOwaI5##-TQb1r+T-!x!L28K+v$^`?dac6uq9#6JyP{KqVw`9SBQzj5Fs=lw$IN>o! z#cs?|N0rgjO*}t^w^goNT-kcv8qBoeTRpQ)THx(n<~vrj;6=nhttiLMCnAC%Qelb+ zeaOpdmzL6)&bv*ExU4~ns>MGp(A(eF*T>B(6i+3R$rL&zl1?R&u=FSoPd~pP*Yey< zl~S1{RTS0HLDT<#Or@qU+00aq zNFd-bXbfs9BiyM>0f)_Iu`<9R^!rRZI?d!k^kM*|-5A6eMlg98J?Mhoxli`kdS?tH z`T$5@rKna{R|70~A%~$sW~GS6&8=oxuZFr#%4n#Kn@7qWi~_gx)WjA3=8x(lycR^|-=-|`*a0ph(cIFcJw-u9Nk>c1Ct=JYv0{=vsUhd@=PkqrHCT2c z(2yUMnGIZ`j=9-fB2uTn;d0ML8TWy_=oCwV$;<39)N{gy_^}cf3HCB~_Mxt4)xmg{wBO zO$agG#Wa$#dizrUudCf=#wxFCsH3qMNkdB{;>4JQw4FlB5YRzv#S;aI?78@YL}Fl^ zG{ct6C_))*G8L1UYd?1{x@Zy{7P1HhZo#R9 z6qj3>qfUvXNjNd%Rs}=Nhf$AHr>xO_Ogj^vzkCSnO*t6CsKP=_hKLr6rD-Qm&R040 z+S9SQpzsJCoW3Dj)K^l(2!fcZw;tsprfe16cm(O5jnZq{nj8zQu#7~V3JE(gL_!3k z9qn{~6I(soEDX<)mzI3>;$#_G{m{Z`O+y_$ieL2O0-k&}7sB*pWFtWu4K>J_3vk!+ zHj?7eK&#;%9VnlM$6#9Z70rIjP}hf1F)b4>zzomxHe^JM^D!$C=rRZ~!Z;vk&oP^z z7)Xc@n>$1l)>o{h1trEMs9n1h{n112$X)4rv>*3)Ud{RRfy#AaiZx%4M2AALeYH^K z`annRPD#t>ZJ96LQqmghKS0E7vN6VqPrulE-c!y{jU*^W8JB`!@?EFZ>g6mAw`gmi z>L8MfziOo>+3jiSsyNj39W|E4r^L>354q;C2VS^oY2ek(>~rw9{|0}qS(^fl3^D#Q zg}?rnn$nRipHMrY5k~-hSm*E8W~Q+N)*FG|!C3< zvb}ZHIc-MBPQl9nBpvK-Y02eHPfv^ze(6umnh0_r8_c$WaFbZHNhI%HaY-6jvK>mQ zkFIt-0K2t8)i`WR#|MT6h1uidqqadKPCik|xi=rreBsi^-T&y20zPkiK$>2ywn|Dx z2}ypYZXDd_`yuuOEqY#t;f8GxXv9jG&Sq!+N2;pmx@EMQJUGRceCDH4saVXJe0~=# z$(PGO_Muj{Kgg zx!nBAlIvX(ywX!cyCS8o2c`?66G`Tk%Bg%PCK6teY<9Ac@)(<>6GeVFYF%>*-c5W6 zS(Y;;hN6f;KEL*_pR*KE9yQH!5mQ6Hq3F9vIV5 zkD#~}JKDPI_HcW=k8vrn-DtPxkMlMx(4Zb?c7vKHvS=GN^|+0P1W`%$)pJ;OU-mNh zjgylNMr%8oIEL>BOuV_31$Lhu4ShF^-GsGUt~cd47Q%#df!q9JpR*RIgo}@RyN%;u zP>PiRqtM>+5zKp%D>}MfC}FV43d|W25A~v06h~4f8QS=<@|bCEdCZ*k6|3|6=9Ba& zKrz{Us-Bj+S@`~)N|w%n+c%5Drcafet0(aiBO$*iZ#{)bdftuPgSBiovI%Y&1qmIF zw`j$m6o>40TUzl^LHUm}A(fP#3xl?}b$RM#h{j1gYQzaszkU92tlZ(`FDKSot@(h@ z#vV(hn*Nx9rTpdTr;#HFyz~yG>2yUS)B$R&1YB@1Xg^-p-)aVkwT&E0_;`U+L01}CU8y6?C5tAstklvHt zFD8F+RuOFKH%=B>G*R^H@5m24yuTxjTr#@>{YR^`KG}Wx+8V|j(pDrBt?KAg|DO=K z{gt0cd_3jxdF3eyFoYy@+FcuN;sw-rf}2!C+Eu?oRbJx>I3Msh22^-&W#0e|56Ka$ zuo}&1wxq}pg;Cj_$CzsXch|^OgBQ|x`&}?FS3!-Th8SJ)V!G(cu3_; zMx=s1nTC-f$|lX1^1Tj*bgJiM!DldA>f{5r2VUMgm2T)JZYRXAOf57+-YKid)=;0L zlfHOXjxYTlac;pvhGu0&`gq*PCcqG#xdCKSfoPSYCkdV_n z?5jPO619)F3Ri-J>(|EOjFMxYy@@gCNEG!pv?c#`57yL_iG-nmBhQ z>aT)~@A{3ZGabi(zn9_-ewl0Ceb_s-hkH(N_bD26qLby$t3nJYc_R3ej3#R1N6{!k z3P+fbv!MU(W%il&ADQRpg@JQ4#VN-?);blFyJAb!EhVJ>rsA_*od)e6l9SzKPJuy`Z)w2Id|~@if+wQ zr#6}YeBbG}vtKWOHmk^;Um6|NDr#nK7oD4 zJxdEFFQ~!)OwO$#KG$oY|JV0te+#S_XYWGGQXb`h@=eM7*;&Ql&0b9r#BB89r|d^? zzvn2=g8GJG8OVXQmebsWFTgg=yadnQXbl9~;uvfTjOBo$gImxzZr#TKz2E!EhWZ}_ z^nrfv2h|JzX#FRj1czc9n;JEh51f9t=nIc5>=YOpGK(%ls?#CUt64xBCB+E7a zD2)3-Hm8PRaLT;S=9|^@4$%&g%6K+)t?`nxI%pP%@3L9HdU%0~bA20%FlTY{;8`{? zbx$s7$SL9;sW;@M$YUY+fzm?2ScKa#_c`k3_q-K{t_z3uVcrqlBL)-ZBy3Qs+71KpY@+2>x)*3J2OhMB? zq9x5J^>$|$8c%23&$FIy`$ltbv?osZyWNvNXOiqJ`9M4M_B@capH(B_oK=G7@2WL zP5$N)#iD)rp!8Ce(vu6wn4f>|wy0YM%AQk83QE?9p1SNUlYahDF*>@iQ)Jbt+XVe; zL{Dks;@Pn*7?NzPvBV5g;pC?I*K$dD zQ(-lMb~Jzed;L!=`B!}H`puUAV&9mT-47(rpb>#KrE#O*wX7d_P<4*v7?lcQM4(lO z^Hqs;Lnrn}HAF7$z4D3Jnf9tn3_64F`wV0(=zM;2@g3=C8rHZ2|y5qVnD{8Vd0bN0U;-T;ct{sWii;Wl( zaZlHINwF|^S8mP20Bsp~)x7$e=7vTvO>b|t^-e7l?HBs!!K0C}{3{v8-VXg8)dqbj z@I-kMfMc5_af{A67wYM=<@iH!x&J~{)3{s6`w(86r?Gg+j*y2(rr*e7p~TqHWtrSa z1!Sgx;ZCC*-L0Vf#+ne1PnM@s?SCR! z9}1O>vLL|SHNK5@mF>DvuC`1I+71W8=-9HCBlNb4*#F9MCpn{jMP3x6`p5#qJD3c? zl>`w^MRCe`vz$3)X-q`^*Nqd&Xr`ihHN1RtzE;UZ6VxfOaOwRZ$=KiUfw(gO*6&ZJ z@WT&3{O}KS4E4fc*d*;*0^clTv~Q&zoK1TB^i}YHz;~~M0NLF@&8L@Bexj~Ltq9F9 zXpJ%@G{RhB*MOQR_QZa{6}{)AvsK;N*&N$)9IF(OW!rGIV3`P+Xpoczs}TfzDKjll z9HnJ>mS8eA9ZbI9l>qCC=9X0stHJD>mp&T()Z_>4JJq_;%Awxp24DAH8+=*1u)2Mv zeBlayv-Mf@T<25OmnLyNiko=QJ41}bDNWzG9#Q{(eg-=l?vAfbYz~ZvdHYP>$$`;q zf0VEYjV>y13dvz`W0U1k?%6fo-c=PLIE^?vg|DH8m3O^OBO;pZL_3LPU_mn}0$4E2 z_dFib_5I=5E>{!G)8*L@Mzy^Ins7bM4wz@dLOCpQxDqyq3528+5y9A5Ef9(jMRQ0I zry4=Pmui%NG88Iil&J8?Xb2`&0#w|d^r9G!A{Bw;gOV&dD~yJU0g0j{iDD@N>qk&f z(G2f$K=XPxGeui9ge3;Dbk#7_Huz85z}#qX*_-Kk?Ohed#qX`O8KvtMyjV{^O?gG(auU`PgC(@zc3pcu+rm!P~ejtD3pZV}VvSJMq z=koc^hhLqA(jrs4Tx3JX)t+}000qZ5;Fg3zJFPU;9^MeUM+_SglzC=QO`Wa9N!*LCr8a>SOG^XS@MpC4>ryPhn`lDcIY~Qs;0pq$~urKcHV0PA^5I1t(HPc zFy@_DyJCWawuz^O8AGJTTquu#%-l63;MkHx6=OTacxgvOE~Od_HORVx_aQ~nSZohR zNUOo*GW&@D1m(v~3sLZIhZyL{ne45LrshK3%Z2 zj$zuB)gxz--fTQl_X3}gCF5jeEIBiL?$7vm?c*+*N8 zu~H{jCf>Xkn%aqx?hgieRHq zcG==uyNxzND+Bf8M-yxoxY|ljS!ABxlJw%1-Q?S2g`&Vo!AOr=AVr%Wgf)oPxMsKO z@K(I<>zelTni0RA*}9av_^)?JowfTyUyGn(H&R&d%OPmOQhD>euDG}&S7sfCq3WLB z3zM-0&I?^0L=ZWQ`CdRNb8xzT6h~3udGEx{hn+YXlCkFZ3wJsLS+FJ!!HUsg8e5Vq z%PArM796IOM$_40sx7#XLev0C^KN^Xfc%E4Axg6XL-Qiy@lq7W@+3)N#mR7@B#J!C zz7xhSD3Z)`OycR=Dn-#kdRUf(lm>DK+y)&fnh*-Z!%aKv>51%%@k}&) zDDr$`SCob4KwFNSX+h6c`%#nMZyJIJ1oQQg+B2m03Mi&}a?|^ThrnRRU7l@wMo%uU z5nx+02W%h|9sU4j*I_GP=K~0g8EE{n9t{Htb1#fT%!SI(`_B=CX}LC)J^O<|LBDN~J1mI>tl=$+U6(mCzp2J*6on&e>5w zk(-+uAd!ie{Y%zH@LV=@wAUJ%0itOH$T-1VI9*a7FWR(p-MBxlerTXgrw)rt)3(EB z!U+(mqsy32H~&k2N?6o(xwsZ?d9U}=RO94~O%3wL?Qrz=E=Plb)Gw~O(s!|V6R&JF zQh}&+G=$40GzTuG|}42`4MX=2eVXAg*> zK-9^;>ud!|dZ@rsK(pQxVY=SWKU24dVDV9!=;h4(Z)m3L<{%^eXxvnnIWhp?f(h-5 zy%)9q#aQp{jrU(lpuarw!E4hI@m+uB8`ST^z9RX*0S|>U;2eI^{aZ?@4$=YqB)8-CS>egFI*6w3)c#MqnSt9J+ zsu(3y=Jps_$?|1tBh)d|wC7=DnX%v0q4S>4Lswdotwn*x@@yN z#m*w9j|kObp|n!~Y4J+mWO65>wa0b2*KJiNWVTu&TF>+26qbh=dc>zQ!4SJ?3h-9Y z-x|FnS7_}OQgt6d@x#bJ{5#aI$1@6?pr*dxs2XjDhc?*ZZSyor@jQ$Ojs4~XRWOgu z8cX7(m?AA1xM#19uUpnFk-{S`Pt2#R&r|onOpLeLEH-$g~7uQU3)FV+;c4*pM)- zqrnt&`2N}X({Bu!BLPB3a^S~s7k5h-vxQg!?A%Uy4}6Rp1inWgCCHRP3RK5SAWn`V zI&0Vh7{l`%OCUqSoX9<{Koo{sdZTSfR~7w6v8!cg5R*f5eYLULZ$WxIbkT=VuZz{l ztVVnps>|>A8)Y?``q8xYG;V9ICG=Af1OFuSl(;`S+ld;rdUO9-BKqLG=jdUD8{Fv- zw9E6ZOoCpa^)u{Gp(zp1N|_$gBMLxI!O_LLiWz#Q5h1ha%dHPzU{&^Hq;`J=_kIEW zsBe3mUVnMZHOqV|a)ukn8?+H~8R`t-10I{t*)liXaH)q&9I?iiL@`~&SWOWrhC&q` z6dddp!vel_zQ2jeXBfB^Uf^1n4UBUoZ*7^fIi7ECJ$~0-@cG16I zT_Hee&&x3CpSF&v}>1~gEc0vhl^#)1gn4n zY5<((2VxtNa_3P3U5i3A8Tv77HWw{e2Z%t$#uDIG99#g0LuEDnK=IkL^^&fS=vk@z zY>3E__!w*vau4@#^hZlVfjahvxa;y#79sz#G3t(?=i(iD+H&1BU%RwF19L>+W|*w! zdI~h;&O2KPtbm)U)-4aDtCYdH@P6CpsJ>LqQ3cotzpYCl?fGgrdNApqUDsxN`Q8xT zog&*^jg33q!9z9u_*_4(ztdPK5C6hy+%!*n0@+F#@Qv@wNPgru=Gv&}H|6}p6usR$ zE$`{>cUxk;R`yRP1DaFDi@CBuQz<5>P#@;xaFEl z5=<+cdUkQ8MLB8)U%^j@t?4?XERG|VBK9zqQG9TWq0%_CiD@V(RS_|Y1)oaEri0*n zkF0hb6JyJ$ym7VQ{eLG32u?w6ZAKD_$f&136|pB){e^hzyWP!07%d_~_|&BN6&D&d zJq0ChAr!nU&7{O}tozBKxrMlx^hV zmyVK(R3_UV}Dp>zn9U=+rTsZ>*qqZqTu%pepHg+W#hLSJHu99xnI zW7DLicb`I>e=(E5vPmcEWy|ET|jyoDqP11(B1 z2||LoHNr@Uzo*k$zTWAJ8#PLw8?7p-s;+I{**Copk;ovsQuiJL3||*r^7c=qby>RW zF1hH!>h{nDH&v=iMKxYcYE_|A*3Q$!Q4I4IeBhn6e zN&vA3w1_~K#AVdlU4@M&Y8f1QO9p2 za?drjACz-7)0QNowP%tvB3U8TO*tST1tWzIr(A$y1c4G6o;v`v&2a+ZrKFz|P^ZMN z9)?@lCL>UiWF}HEm|QbW3PkT|rcUVZ+Vq5Qz+Q*4m4HZlR2z1K{dwxh+vE6_TA~l_iSFa*pHg=H z8vDfv-UpybEs#px8yTsDCED2{O7>hM81X`g;L4hI9L`i8_oLQp{PUm>casSuY+CU1 zIw)fRLU*T5-7Np#{$K#Z9X6|taE@Yj3`}|N^{l#af}!Jy*Ju_0)QDI#d|hc|?qa3h zdqX)T5a*VE+nZy=tyUTNcYpk^M`vR|S3Bo>9;sIpbAMd?FQ-pwNZ&o>ey2ADYDtr) z*4b1JNPgY=$mh3rrBdA8w-*zjQ!15)Y&ugY7E+01HkZBbWww;a-x9_t87~3=skbaj z$WR(%D??%hx{yqyk1tkktyY_w!3vYiBdOHIjC>&^Hp2aVDM_q|NEOu7eW6SRvb_V@K$RQQ$bxIvB&i}8 z_%srxN{AS#ZSp%avs1B&sfByF{B9<-#!1?@Cb0TNxh{)qnysYg6by|$qWUputw_;_ zkdeh=A$#03gGx?G;hWdf;^0l<=xXoultDC+5!@|F5to{&J-&sI(|Q={2Y8*Zc1wz} z4bXG^>h=_ojok#8!}EFe)|YABY-MwbUEe`f+F;ZZ;+)k!yC>L(lz{9QRNhIMl+>)? zY@wd+Op;^{h5PX+v9wSA7kMNVF+a2%~{mDf>cgHR8jfbAwQ&no6lx_PIUt z(F{Fv>B{98^ujghi{mLsy!v<(<|S!fzI^xje&b33ID_8BNG=fu<|LSE7o+YB&jUvB zA=te{00BS%RDb=U@z})WyKATc0O0cay%*BfZr}Xm+DF`0ZA<{-2?ziY@vj_)89IJL z$G&@LE(O#4J&1NleH0B2069+$UpDE>*CHFp~L>}1E)Un@t>*BR=bNmQVQ$A!k5awiX$0s4Lk@#0<>I& zqmqMwZive90at_(_VWnr#whNMrF|v}znyDYj%9dFDxMV*ylFN&ErX+;(bLusb}Pz{ zM^Vm^8z@z3E?~FMXlnE7Ba&D|WXj~q5|GsIs4u8od~2l(_vq68T?YXpc|m~o{ePw2b?Vjhi`v!kHcHqOsK~67lFjugLGiI>65NW5w?F@?Z97;dp>DcD!(Z~0X5-!v= zEO#;NPN1R7sY=uZ%E90+FTLsy=nYtnVXw#d*DOx;0^2$Oee7}R3duBQnS|`+-eo)E z8fM@$_FyKa;sVYg5)+YvYE{Y;u=+rhE z26kK+!5-iV^rsnFxq*@ONQ#MeA-fO**BX38mue%cgCR6}sg&O!LpvZP(rc`80jL9Y zU=5bRGLYu}fmgMd+GT?b769Z&{CrPuW`D6Omnirx#O}9CvG?fQ&7{gDYITV%91yaX zHtbHCMa=q)m*&SV9o~fWBYvN=o`y=rXo|?3X}?%%HnW0;4L}KCAc^C&%q=d0V z)@3k`yc&W5V(SGMPkwy|6Yw_-6Uk~FCK2eBFqy)>0j3b%kHJ)O`aP1iN}h!27{h`Y zxJEdrlbizU;u|Sg4|B96^|Q&HVJ4389L&NR7r|_dF#+b_9Y4AJT+Fc&BmM$B6bSEM zK8UpB$daw$NqSDeOYFc85hPGaN$36DG0r29Z-L~*XJ%HV?*|E`ZgYyaxg!W~fmi@x zP7kNmmv!bF8w_Sij_9msIPCT`J1SDkt2)5xOqrx&n$4`(qxbu!gI!y$VK+UserNE}dLUmda#AZ!A z!$u(S<&j1c2LrymA^)8pJlSL!C@KtGLW*2U91I8{Yzz-~Cmbu^n#nzYBT7h&qi|n9 jsLv1EY{}J$;l+`{8CF{AO(zc2Ot{(e+ARcoyhF~?l^_vY3PAmhJdH z{#SlBA};q1TvOPJoxyIS`ZVMyaD6KO9-*;Ma-o-WPtMayUVjP^Q^g$+RCkA7XY7`Z$*c#dq6e}v)qludGYFe|Wncht8zG11)~QWFkmpu`rcPiFDpF!8SPc+#rMoS z1p^Begn0Xt_9e+w^rKgxR6H-R9sK{h-{-zJG>B@xDv{H5BIjj5&GJg_l02{AK!I=!S#pFkJ{k@o7Hx=C2%%|RyY1}G zm5a8v|Nm>L-TQB*lL;@C_?JMq0NN6{$ofrq_GQilc#{&~#8sAUPi-{-xSo18lE~NC z8dY8Y`L%v^@61`d|6>>3g@>g_n-ISZc+*IUW`p=*;uoA1SCG%<2 zPwUiQGa*N;Y?<9X2-)`_N*rsej22XWCHck7RLg>CMNU&1Mn@|!jKGWx^O&psb(>Aa z4hFi`tJh~^wk2<&tkD&L!_eW=>(VvLwNFm@Dm0RAre9= z5h7U{gp3lRh#I0w4Md$LIL(?NrkDa}8q>f*Ab=JGi8}QfG@4=>2w*LAfU^KD1-K62 zPJo91o&)$0;5UGYfaV0WG@w0!au86?1A_>xMFiSgVFlHFG&gqgYz7 z;@t6-bN8O&%P?JBxpH(|+oN9Wc)SO|@!zk$dT;;~01!Q20|0&d{!x*D2WI}VHU6`O zKWt3+q11YT|6%b+;+dandr!N5nLVD^^ULDV)~?Sdj?iZR{+|DM`kxP;*Cqcod#p0? zuf-#gHMn#vmH4+KvGeacd$A*j9`D<~W#lU@JP!=5898!iZ+zCj_iwA-{o(OV?!AJ4 zd*fDdvF6Lh6Y~`xkGVA7^kdy=|G?oDr;`JRR-F0n4YTrWbm;Ia=kG7&d*`1m`?U1Z z_{FUGY5vUn?Jm!seZTGKSBJ#c3Hz4|O}FDqV`g;xI<9?Lz7ViueoioW!#~;CMtyk! z=~K&jA+DRJx9?H5iKSt7prXUexeGgXDc3IS-laS|$aiQ3dTZ~@TTeFsw(@rS4|vuc z6b%;M38KSSj+g9HbNQInHvWcZ-bVv6@4g>~d(@SGuV+4Fey`|L^X&Fr>Su3HIz1A8 z%^1S|!1+kDd+Yu#_io+0iTP`R#u|U&)s^-i0`6(&FKpGlL-$zA`{RUbYt`F_-5(^| z{<|@BtotdQ z-#Ag+Zmj93j9AGH)a6scv&OOBxZ5GiCcayDIWpz?Vya*NFKy;c6WaOt%EecF*cDFH zV14WX27(CodUQ>8TzmH`33N>yxjp;=BxvN7mF_<}ClnAsA6qf7^)`?u0sXMOHRV8u z06FCT)C*})+fWiilEFxV^Cp0A!yI5>s??uwjhI` z!QHynY7km)C!}dFhC#m&cw0ps8j?k83hBx~1~G!sl!^SU)cS?AK-EYPz;k&hz#Oxk z!j(#JmIiTkU_j&t4l0(}GFc;7>D|O}+PMMWJIgR_YgJZ+0K|CHhRfT0r7xh`F+~uT z0LzYh#}Z!Qe}_)O?OQs+B7??QgqV&6xt8-`HH`y(@5HL|smVzxLU7=Ua3ml#wL#%{ul{q41GK$R!jxPRCNnK6bETGo`#DqIm(CbG~&XhcHHgx8dE z_y-4MhOdupppWwGW(ok{MCgo8N|=_GSrwKxNe+)LFVoVZmRoc(0VcIfrY4`+%ttM< zVnv_qkfy?$*dtZJ-LyH40aVC(Zr|R7ZEa)_ub4KXf&u1!EuC?c$+rx0y(t0=ODy-l zFA7|go6lMuTuf^%N2uP_L0=6}Gu0e~*r>B_kn}XzD4m zt~MI8Ejumr+J-*>%4)G4ODr!?g8|+`Ab$P=-^7I052|vQdW4|T`c+Z1CDu?1i%be# zgc=6AVH_)3Zi*h|yjXo1_l8qofW3!$sen4AH~^I6;u2it4Os=eB3$Sh;c8ccrep{$ zJlvqUXeZnwyPZhq-hW6<#YNe?WsC^q~X|4uri8A8&h!+$IsT zU=gf>O|Z+#L*U#ktbZ;tSe^b*D2{fbNgyJT`EaI?2f$Mni7JGiO05GbdV3mt-eMHM zWnI@qGSs9d3&{{sKirdirsRyBEFQ1}33ud9 zwpS@hi^nbj(*z5obPTox0>F;|$|g4gD=wA*t!=FALk!$!QzHyIOx5>Wob<-{fcDCR z^9<&^;g{8|aLfe%1YPue;y+U5s;uNbNelOE4qdP%=2cGdu?ib%AB2~EcA z*6~KFDCM7mVp}f{t^E+xpcp07J;{%7jch+O#Y(wWc?85+9M1*i?-7?Rl(;4{TdW;YLP-BF)!vN)aei-$tDj%_<$(*6$wDnzxNM_4g%r|bc?km&_x&o zX8Q8(1lR-c5ujt__FtH+Kmm5+&tmO6jG^Qj^4_1;YfUG_!y z1N!GbQK4^t_5YN>aL;=?dDQ28>P@!hi$A(u2>}H$$C=S}tZFwHA z%DX(EdrksJ_r3U)n*brKG!G&W%lf50MNfar)YT=reGo8+-&Ss)3)t*LNsimx(TOn4 zFy5o}=zkADrl0eH`r>=U7{FXFQVr?B;Q-U20W1bP@~G-YWDA`56lstl=x;=ILL4wy zFUW`IFIpe441qTGqUDnNcbtS?sKqb5g=tDHmm2m2*?UotmdAUaEQ1@KFN+Oa%jji2}XVFwkj&xhA9O z+AaqLpe1Ns=b-6jG%n}1n^7zV?^e$&_E0TWGpjgoRn6?;!kFqg#T#ln)yyqEyjDH0 ztcI4kYUY;!&hsw_pvzjpRa;Z&dK{Cw#tT4Mj&74#o-6|)O?kj=XeKT&WzP=OWXI9| z-Y^$+szfAC+4P(lJi1i zrQ=*r9csIy(Lcz_Kx6t1W>FSm^bA#1(&N1Eq$mvKyE{bzIf_67sWH{}tEAE94$VXc z64#Mm=-mwd!*D74EX_6T%?^}5h875#&};1mbBJOjPUM;i1DZjQY+Yq9vK2YhDeuUU zRaI?Q2uZU_XuDaiF)Ku_{3xg~oc~zNrz@gkVN-)=Ui1lMXV*eIe`;KiAD<_!8clT4@!;L`F4_maAX2%H^eJ0oE< zc2lkC+LAk#I~t^dmx4E!uZ!HS|9ou6nz6$n1*xI1+jRJH?2G=e>w$#t8(zb}kIi#& zU~&C_b317Vx0gw;Xj%5|UjMrgwGZxCpvz=_&*rV&_gi~z#!tl^h4v^7Z_DY{VElU{G>IHULPx07v#YsP1m70QUYh2+4fcNIH9YwI@DeE zK$o*)xAvm!t)`m{rzU51g}MwW`$`HA88k7QZ1*)Pl_f*v1^XFQ42{i^CN;d(?7i`6 zG*bFs`uVZ{�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

l(X_I+GK&R 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 H00000K--!s diff --git a/packages/documentation/docs/.vitepress/dist/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 b/packages/documentation/docs/.vitepress/dist/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 deleted file mode 100644 index 36d67487dcf5fbe3dc6d0a6b01cf4d29dc997765..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16272 zcmV;BKX1TyPew8T0RR9106&lb6951J0Hgo_06!c61ONa400000000000000000000 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 G0RR9|PM1{x diff --git a/packages/documentation/docs/.vitepress/dist/assets/inter-roman-greek.BBVDIX6e.woff2 b/packages/documentation/docs/.vitepress/dist/assets/inter-roman-greek.BBVDIX6e.woff2 deleted file mode 100644 index 2bed1e85e8b20cb3903206a6cace251c52bdd8c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29920 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 diff --git a/packages/documentation/docs/.vitepress/dist/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 b/packages/documentation/docs/.vitepress/dist/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 deleted file mode 100644 index 9a8d1e2b5ef22b97801781478d477685dd6119f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110160 zcmV)XK&`)bPew8T0RR910j^L06951J1C_)80j=5q1ONa400000000000000000000 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 diff --git a/packages/documentation/docs/.vitepress/dist/assets/inter-roman-latin.Di8DUHzh.woff2 b/packages/documentation/docs/.vitepress/dist/assets/inter-roman-latin.Di8DUHzh.woff2 deleted file mode 100644 index 07d3c53aef14e7e3aec6b11684395f2833e0b3d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67792 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 IZR%D40KZ@npa1{> diff --git a/packages/documentation/docs/.vitepress/dist/assets/inter-roman-vietnamese.BjW4sHH5.woff2 b/packages/documentation/docs/.vitepress/dist/assets/inter-roman-vietnamese.BjW4sHH5.woff2 deleted file mode 100644 index 57bdc22ae88555c6217307e4064a642f83d642b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14072 zcmVAO(p)2Ot~kc$1B50Nnw2757D+W(R7}9d>^Oq`r3)m7348|N6ij zFx>n>s~H_Ou3P8b)q{2BWgpDNwqLFNeBZ0hIY`6wer{+fLp(!qp%^$Kk-F0GQJ9Av zJ_eeB=5JEFPRn4BCd?3MLj3IrjeU~)^Sqva?i<;SAc!CyHCMG;j2&tQVJBh7XcVF3 z8M|~W9jaq~-Kxf__UqVwKYy&zKPI04cfZelUUHK^GeS+t$?7^})m0$g&hjKM4lKY#3Utpmx_?)F zY1_}|R=!cz)K7Ig^=fwRab~HQuwJn>M*|*6kT^df;^>I`|8HvA{yXmj7=SAY7?Our z$=rioIRK8NLl1D*A=5c^cB?ak8EOy)3y@GiAiW?rfg6WQ1wfGihZ3lesZ2T2A;ck_ zpp12-Lx`1+yBI2WKI+}N=;X>rZRb$sqHQw#Kb${)>-4*eF7M$8hXcv@fh7`nFAQvv zMHZmVul8GIQEOuHRiuYch&1BOrHebz@Kh*~zJC+y2?W`pd?0qZ*e#I2k7=Tb2migl zpMUm*5Pc7(h!nFlh19?MFf-M>;I$&BDUG8;Xas^OhNk7#U)PqE6L7Cr$3$(Bgd83r zu5m;_a7L>CKQsW?2V)4shZqt;#4I5aE)X|<5P$0-8-+t6ML}c|A<0r93i*&i6_6^` zkQ()H4H_Uj?0}=ua0mjxf-uymRYzwB8Ui522cQSg17IJ3;{eVB7ynUv*dKuR0fq!pQiJ$hbOEI5t;W?hynwqp1p7IxAOHxy`(ropbxm6d^UxJxFvQtM zKmfpjXD*Ruyn1tJZtJ-7Fl+&mV|ZoPyx>Bc)rSUeZzr^z4?-IN5bNHYq3gt#@U96& zvx?QWW``*JS`Rw4~Wb)O$n_b8MICpD( z&X&AfuRdSg1i@ncwDmh*hLfk zAyI429Xh5}1>*yo(5$6hLw~rO`u2a%#rXf({i<}7*)f`aba?-mallN%!Lh?*x}(`# z&R@|RM#b*Jb4!bV)6Xp;ywKz2X!LJ;{xQ3E@i7aQ`sZwaJ@ZTS3S*U}eY;FdRnAFff1DS=KMh-UtiABRTqZry*A}#jOh`obVeI0-V>dp6l4EG8E$Bt{`OMt@aA_J4P588`Q8o%?=;%LRu z{N2z$+GFxtSzPB1I{3tR~rKIus$2Dw@sVjT0zN>%XIlo(08;plF zOEked((I-RqvkOcI5^0c{B5-;3N3zbYH$c}t$qn3BBRpOMTY#j%aH&GfvFavwG@_X znrd@Lvk~e~+AZ@@^{{4%liHiBMG~MJQ4@+0QpCg90vik;r_YIo7xt+|!Fxgx?3QWM z2n&L5iK>Hyt(@JGy0{{I9H+yBu+I?yH70nVnxy)mM-`;m{6_^vqm7R!hXmK6f>WxA zN;=4zZb1OIVXkmS7jSpI2q{m6LroqOv)yCnY3*qPeE%?|Rg9ROzV$cRIk+i*hSoV? zr_ws#8H{)YW}Ub5)tq)ug*JFSdX_uelk5GFuoBsU)lS0m>Gg91W{g!dX)5{Xd{~pm zN#D)&ERx)$m&=zvOraNeS$|nzyW!*x9e5--NL-@B{pAd2il*m|Psnk*dMfGWoD`5R zPqCBSI7}&!=D^2^m*GO(<%WmW&k2yRVan(kB-OEzM@Gp^Em|9`d}z73yMD$lvP@^? zVz`nD7?DL%3iuH}Aq~0xA{ZQ6QZdW}P_5xb0+*KT(BkvB3>R!b2$HsE!TpgKk_0>(gM<*m@b%>F{NPEla7p{-oa-c}Ew~T}QG9RJOTcF+)F7i+ zVN7g@1j8rB{a_>vSaU&e<3_-pCnhg`Rv8nAFrdYg@yMlOQBYu{pZ!o$9#=H<<||eP zr%CeHoJl-7*knM21Enp_wh&HCViQSNBNjKw$&D~#6j@kXsubgv2%seA$;Y+19RQNH zfGovsAh^f?07k47Y=^KZNd$-^8}Jlq4desB2um_StJ=A?Alk=5Xh*d7j~zcDlP_N{ zs{j_Wf#cSlNeVHJPLGL6ARuJaf z6oGG@JiSOfMnoj+IKb3!fvM*RQ_Bg4<_x0~kr(-qH~IAKOL>$}N>cT$rc$b)GSX0a zG{0MvaHCM<1rUy))hY!EK=ex%QUPQExC2l*dj@nd0EQ=;ep~zYt)y||_3L|%3{`*B zdXG}}(d4d?qR+$kcU!+`iO^Ml*FkW5e$jQk>DJQzX1lkgYe#$8wi#^amV>>EVrLKZ zEcj?dx=^uxN|o+;x8>i?M+ia+i~DxKr1K`9h_`OvZMNXZ{lJgY;Gc)1 zTd0e)XKrVP;O%g_oPsN#nOUEr5Tt6)6oQulSoo1cb3((wea+Ay1oAAY|Wuw8;;yW)#G^+~w?U;r>1HHajZ%v~V~ z1vf=%SG}nF%YcRpLkLF-#1M=r1WPEkARL=;ZNU>@6)C>W49OUYVJw!=Rwm+@if1N) zNFobzmQq+tN6BC#ldUYPWwVpRUM>fD94R?bai-=XpNC?eN_Z*dt&9&1U*-H%@K
u@jy1vKrGJ3u5oa=X5TLBi{O!0M@JY7>NfMdnb|)2FWSd2DQ4! zuuiVuO=v#>Zb5VZ1g3tp0^M1OX#Jx{SJjrVK10=WZs!C8LzQQgPnZavkY#-|n>dr~ z)tRI6%(TjJf@0>(R>DPvAJ@pDOhlieAwDsJMv(=A;2!4IadbO8szxoJ|pA&8iC9j`BsU)TL@MElPTub02Zt{W5TvU=2GF0YtkIMAaK zqn)1G(PL$6dk`@>s!5ZT9=GDuqZUrR_QkRR`4CtAA|`VdO)22k61m+ZqE*QIZO;($ zv-LdOb5rXT+_ZWS7b|gD{ZOPE zPaP@}MU*NIx|o{=to$m+B)0>~UHRoiPRfzS*+=POua|Ctgks!voA;HY;98m_`ZyCQ zt?18`KSoD`a_na@>C4vgtk;nmWhomOK>qqMTn&`i9NN#VX;}Pk?w|MA&Xm0>+nQOr z{j{j%WaHv{LXUs(-xtuf_thmWQy*62H-FW_7blmte-(IV-_M`P#wJe1uKLw+?c!qs zBr&5w7>Vz=_x#f@j-5aDO6S3x#oBm-aJ$RcYx3_xX5%tGJL^1tQT}~UcFtonSK5}^ z8yPcmk|%##`*MeWcBYZM&I?6<7dLDSA!T$I*`za?xj34fm?U=$;$}-nxlC)cT29qhfy#-9E?A=u+BGtkdDxpMM&0WR@@#`E-t&Cq z9Vgr4R4#L>jM?WQv;XK_`kwIx1AYb#W@AOv2m5& zVNs^T>s-{ktFCy;*Y$~8x5|&Ue0=Q?&ml3PZEe7ysw*bEA>_z#q%g}MmE9v{R(OJ= zq#HKI6gYy^tmn<0HTd;wwb+|IJ!MVdAqp$LW7)syE?*K#!ZP#`TZi&{io>TH8p6hU z3JQvQ%R(o#)nPL`D`1=1$#41_(eQ9R`N`fxX~P?On-kxBFIsg7Pb}AjTu3unw#&Bs>d?Vssxcx`AtUFbSDlLg#I7uj7k;vM zt96EWM5XEP(6{#2`|h$`9(3DFzmCl7eth%pir-1s1zA-){7?64SOs5r6X2|yc`mDM z$9gboe`@mozSK2=&e^M5sTf&?Vml2KO3^8~0^jV~B5w zWqg(|%LBt|?3!kB%D2a-XnuX+GKiA?IdfQSj*8K5Z4F74e<<6sLRz=Vnwq0Qc;%agK7X4BSv%V#YEPrr2+JmV1_*9LG zZj9B3ru5P4j6SxIU*@o}^G#mZ@W~h5&9;w^sUG9KH9ps8&z|h@`&+i3zMcNdl$f%f znRz-i2mPB-Exp-udwa!wUPPr3!H)b@XpbMPz$qhpSU7Dis}UOA@Ij%?GG|ZB+HA zH?p5DxVizkN;A_2Bhu|6-BN2bWS&~nmvqOmhK3z$=sIoK zt#<)(#JFi|!)3B3m!qrjPDdlaBuF`et{)**Tr2oz7~C*x8+jn{_FxYneiwN&7UMw~{w8Fa^hmD)@WAhJEO!_}$f<`|&@N|JQ#D-~N9=0Bf{oA}A*&f;9>eLdPJ!4A>sU|c7)K%-A7E_0=F$zj1oJbY0ym&xC z38^A$%6AkQvtC`1ZWdXTs#MTPqmthzRhpjG@JeHQ83|zUv0>wq>-hUw8TiK zv=)=yv~Is^(&F#qlM|Msz<_>xphM_0z#f%s={2@ zjraFzF|24CWD|)nl{3O1hZXhPJu;O>fJSZ&SxW$$C?^2)smy4o?SXUyho(B)vm_~% zHB>6yBU7nb>h4sVNj4dqk{eu&Zm-{@lpR(*OI}lHojNqBf?3YLl@pO@IES9)D=kd- z9;52jNCwC~wFm*gkN~YZ!G<0GgA}89n2*@o0QIxlGrYG_`Zz9GNfY&$|cry!YbwG<$t}mwOA< z?3p}0MPl>W_t~v%_mo7(#$V0T{CfVMX~WY&unSef)dDSiC~OsuPLB@$KO;8emPy$y z*9tBbJS=!e{zE<_C$(;Et>I;cPijBc-DJE@|FM3%zE{6wuo%h>mkS>izGv8II?eQE z(}dY#?ls31MJZR#6WuF%P5Ie!vH3&hZ(IJb9JVZ^xzkP)-zFZllGY6CgBGne%66IM zW_z*ym-PE2U5*;Z0q0Y$Lf4r#_W;xa(0U;uAZ3mop8}qu570039w71`C>-=3P0$4% z2?Ap(nn>7oJPsFa<%vcTA=)YemT)-0i|PL7Y=8KE_U$NYkxSKT@@?AhhaYSWLVU!- zAEB`^2*!gBiB0$!U0qKEQ2c{C5f6Gx_p7IGXxI@9T{M%=D|E&gfzUxmmBO;EfvL`k zilj@Dm^;-ip|eM-HX;UB$ z#&8mMdkcKjB@r>L0FRZ0QiVs-Y>)!aKIJh!^8uc4R`MyH zukH7)m9c5 zU^@Put*ngzf4V|;jSJq%Lr#VhWd5CQeY&)`h93xAUX$^ZSF~s=Dobvng@xs~|P5Ni(4a=fer{SVbudET6Wn#$yMLmrJBvArU0Z5Z2z-bC$ zx=al$KWqpe>w`@=Lrc*fRkHK52PdELJ@`Xg%AWM2@6M`&W};~h4N6n3nula9wJ_)h zK{F@&_S$3qXbUmHa)u|*Q*`$8=o|TWji0mnqCA#^?yBAb`bepJbg{cBoZTngw)Bgy z2ztk`U9hN*9E2eo;OxFF>4>P1OXFw=^De$!zFeJ`CDtvAk=!cT0tasty#RW5;vatm zqI!3p4q^{}fdFSiBWeIVG*_Yl9LU2(gy51LWQmG(JuVN&5Qf!4bNH^XnVd9NkWhVCwo+(aflN*wWG?$DqsUQ0OSMe>V?hsEoar%4*9b{Rgoh&sus-o-S=J6xq(q za%J%b=ybZ2PNaIrP8$+(Su(2qep#PfDC#a1BxvEv>;~Bdq;(?E5@5cniAPHiG>LL? z9x#SS)Zma*W#*cSw9*7@Bv*+b5UM+8<*BeqH?`|n|E0$t04Gf_EG+6}GNwR7!|I_i zwiCk>upluAnuqdv7MQ%-`*AupwURPG<84#P+A%*9JNa{vsx$KK)J;apEC^GB z4$;!8M6i>@UfMJK-K@HP;ljil zEl}O2=4QOqRvec4Q9_$Y_;@rsq34%yy68ATNq0A$xITGbFD!*;3k9aCMWDLq@fPz! zdS~I80T+0r0gt!G^OMOFeqe5cvb?p0S0p?1NZqhN+6BG`Y#d}mwdH;M8?L=UE>K zJC9R=f3|!?a?`fmFU5hX*2q6oDT)S05LpIjFk6^SiZOSP%WhTlGD|Dj)4_KP#EtVd zpNN65!!TC93fKB9z8gmipxtm*Niy{0-Um2rLw=m z*k|Wua11B&92)X^*w{rgf)&K_4XSLA;nZkTB?Z zfEK{#i9F+Rba-Ca?~!`urtvX&+mXKw!=LgEd;;=}bes1Vi2QTYRhw#&ClPfOP5NZ#Ib(q^N)~dzA@Ykc0zr`EWNuRyC2d=lU zoF3CKH#pcZG0k$`KZN3!!(Z?<`?`Ctsm|My*I5UTDNv|VSZHOZdpL?4l*(XFN9pvw z;cT!ACRVDdXi1y~VQK^Ww+D)fZ_@(~(Z5nOF05p~^l-V#3koW;Tyyy42(4|)S_&-u za!v(H!h+NZ?!4N-J!|M$dTk&5FT#RHnYw32UHvG@VE))y!oy)fFshmUD9sqPb>6_) zu>E)x58)X+gonyiUr*MhhtgeD(*>d_o*`&Pux;%4)#VX%4AU`iyi^iRN&RdhsSlfN zt4b4Hg43F@EVjt{T17o%SrQdGm$k{ouF+Dpfgbu#EuK9yKhQI!QZZ$59G2Xs;Z|)! zc23KYUpY|DGXZoFyyU@&xcV6Twq$D%TOp-Q0)KzcDD%s{U<{yG;w`&c6|8cUflX}M#U|G(9QnRb@SZf;tN8SLLd5(-NMF= z)0ajcHTMR=G2ME4{A7sG!Z50k%(abLPHPglp+CC$Se|`7aq-g2 zqxdkcE%%!!YO2+|{`vq-^v%{dPUHxxHRU_EpruMp6_P@mbq;Bro~Cxa92-EU-W;`a z!_s7*s&jI(a%>bu7*;AW<)u)y(Kl#$paweHnM!FP6G|;b6;rxbb{Y!)^}^NV7K)oj z?66DI$<~LEk~9Bu6N`m|z1gyg>NHTL*GsHIC6i**+r3TmiwZrt%QBrcmnZw`D5X%x zG@JE0K}geEKQo(XLT}Uxv}{O&YT6lzm>58fOI91LxVA>YIx*y|@g{8DK52KaX*8;Y zP`SkOF|&{9raU0^JRmQ3hlU+Z@c^7YeI&FD_rn7(1f9oqFwgDq9rb$!xh?Pz4@*t|ACDzfs(Cl#KpAX|Hf@?pLXE z$N07+lyW92wY8!$nt7)eJ88O%Tg;jIyeB>V?YBjW$2!-SSGsKiVmKfFW4C&K0sPWj zR)9I#z2M+C`&)!Jm$)N%;o{1t<1=SgiJ`53-xz(f7>3r)_CpLt~n3^85%>3F;xLZnzW#<9)Rj7#iv)k|<(ShQDj?0CLA4~|?0 zsb!iINBUuHiL}C+lU7_@@#_YMbSGv=9SaL9DvF9SsxJyMvN+vpT6I`>-!@WE5MU7k zq9%^{F>Dyff>4@E@I1DJnG}T)iFujFEK8GQxS$lR-DEW*dOS|2IrkKqvDs__6h%)` z+6^=fWwbEMkOq$ZbjrojjEul2>QQ#K$KxcHkcu_znC)i$y8XG*K_5C?tcAH^7u-|4 z21F~^pzOH3bT9_K#9_Ns+Xa65w$#-J^%PvY#tllzRs>}chxj?rIdmzVP3PL2nZFBX zjhbYXL%CjP4W`qPKr}-V7e;SPFQnpOKNh|PL(+Ds$PS-NNxXda+6%|gG}{#NLWFR8 z1ma@CG8Nh4x}15!kS0{^lwim@~cmJNZJJ*@n*lJOz!2FFD=O~W6)iv?fTO&U# zt`CKFF4q3jGFh#S?m2rtjuTvW^Usk`5)L{D!<LYYtu}0_>-5Xb&9vJyvNIeOMVc!wKg*Tr&0m)7 za1j#@;|Ui;V{U;h9JbbTT7t#cY%tUpD*So5Z@L5CWn84=J{3%AW08y_EBGSs2A|z9 z=@HoFX^^+;p-6f>10N0Flwt)Fv9@+M_-eSvuaxfQW$Ntf%ViE(;LFMFFqxY+f>#zA zVdT#FJQQ76XD}Dm`Cy&+NsoWAf#M~Y7f7%7lTYBG9dLgO&Z6mo96+Y|=9!dbMFH>J z^~fr;cm~?N0&c7Li|t|XqES6|=%5%3uB|g^pe3DlXwSYfyg3mxw9kP2;Pfi`ZyKlK zugTu7{x<~)y1ft0zoe$6>qpcOxr7=@t|tdr#**pi%`u1RdujiTdAKo`X4rzv((t{s zRWiIqXHwdbq1C#FnBL~q+6F16R8>wJq7Xs`V?d$ON1nkQ%4sgtgXL^UySCeme*s0~ zRvM0o8_b5du5lW8;o{6Yo%xqlOUZO4j-J}tVq{BQAZO+A`O0&%7)xGn>wh~))zuXI zQ2(;?L*NMG%A0IFAN=@joFoXOE|V%63|2#bXwR40sp&t1)ap&d#i?%lrBdi`Hggjq zauAJXXfQw}c|xb4NzAQ@mX&1CFB&n`hMFo-W16zDDMZ$6=}bRY7}4Dw#|Wf?b=K4<%+6sIqTr%64+bS!8Ve z!mdBbnZ*4HtVLS!Y|Zs%Buo*A@49qg&S=vL|lW;4BuZlGc8 z5KL*_6W?Gb71dQf;cz~0RjnD!u`rv%vJm_+Nw4{Rm{?_RJa@7eR9#6K4V6BJqwv&> z2pcWTvM^_!$6Y)st7-U3GG#R(WsmQYbirHk(ic93zE}2P?bs*%_zJ1sd*FN9;IMpCcRLaPADizA0Z1<1>Dd1ob^P?1c4}p~pjT z#IrE;N#=1|xhkadEA30>*n^EAp|h!T#5;HsKjK}yeY$EA(KO6e%HWwyWjvcD$?QBh zrPIF;(&>0S3BO7QB&a%!rW#*79`ncJ(MSx7neKm(9}9{myaCKrKh@b=YIRue68~KM zJBerKpNIAwkv z+1IWh*OTdXrdzGD_J<$A?P0ySc?CtwR<10DYGGan(-chvqa zV{CTC3w%t!QV$)WA!jv8;6n|3@RgOXXZ8@R7$C?jp0$lc(rHDp;FN;6f_3##u&>|B z9a#OdZ7&|C5YLoiUx63)N#LEaiK;VNd(ie^LAXbx0-pP$m)Ul%TT36gbhQN^ z6vsnG9>{D*g}dPF$kg4{=sLgOa(BWN-nDLo%L)y+Uq2>kQ+{;9oxyNgHR}pzqbHCQFb zg>@^n2TPj+2`5;UK*ZC8$RI zmW*#Ev7sf1$8arnYTvbqc}r-QGpyE((_rtNr&ZQrNx+HqpR( zf(Z^b8S<=`3{U(~k1y;A-{_&b=a87&TagaIDai|ANrd~QF<|c-0&Ap3^1z;??T1-J z0IB9bp?v8j@LKY0p6fis|GH!P_#y6fihOMC$VKufr+A&wT&J-bocmm^OFEm2B`~%`XZ>eyPTnPiRvq3^JQr$!82@eN&fw5Q zV`gTgFt#&T=}Q@giD$NWU!gM65sM4oJB*V#56zLa-@kuq?43rPhi;klYp-|o4-Nh4 zr=R)w3D2i}T{Lz;9X`%!Ad>U#g5Ny1f z!0}fZnmsy}5?Y4OUG&rRbnxu8`C7w|rK|JDZRztIF>B_uj3k(Hi^37%B;qly@Qlq_ zpz+hw9$C*At7iQ)J@-A!;?0I1Oa8AMg}*b10?7&QaJzF%+7He7{0eL$J;#2aF2@C) zB`!u^71@~T*NVDTmgOcYct-C&+?v=@2Jc1f2HX1pkohVC%TmwR65 zLk)%?O%CfdYNvqt-+u|w_JER1&Mfxk+Vqv)<;x@gdbvUC-KeRVHbeE!UYgu1J7qYl zz`MB^!uZUL%uKh#o#{W3tQ>x-TCI_y$(bk_kIQhT;Ai}(s^EvVBdRgK6s|N2ezVsR70yEM_fJr5=v-4zdfet#+K^eMdIW{pg!iQHt@6TuPLWv|i{}=M5 z$rX6SiUVI;H-5H>xn_8yL@AA<7)Ih;F;-!&sDK}oGElBJxC~!wZ&frXDrbYT~>)WD8-yB(_!A((5ITXQO1ca@slI}&S zifED~Ko|2Q`8Cst6F82L_S4m>Ry~CeU6HI|kbrQ62;%$-vEqCw950(Uo2^Co@EV}T*7G_kfEK-Jv z@$_uJHFNWwY&IG-DT>u#uo83Av%8bn*!f}ijXS1AWwbUJ#0`j|n-X&=(L(KMqi~8u zC?M|v$%``2QsnmSQP8|?^Wl&|Au2PslJMzIrmI;VCuyy#fZ47 zAt^n#ygUeQ6W|PWP3q;Xc3DnyI-O~K2R5?yy-Ix~^7~ zqm2_HA8ss2Epkz4a1~A&AOMJ#aS#wm(;A9lC>+BHA|PzoFg-o%Y^tT1*|}RS%X(vI(YY zwriWFU9Gdqs~mEmJBffYYNRYJQCd{Z6(R{p2IOOIM^~K9lOHpNQA zz-nNQ6L&)cbqfr_othniThlYMdVMpPygR&$)?#c_!cq(5OxsJ}z?{ZQper$2ljF2dnHi)PwXF6@7hnhgNHKdCYo$8~AZyHil^fJV(SJj?O7A9HxAsEjlpS zi@YG+nE7PCz|)c-ezKkqj*U94{@;OVlB5&!5ky^jtyJQxBMX(tL*XdL0?`d2G=9sh zG0kL9JKbr2hoa5x+|4q4o3r{=UBco}S*gTyXwqtgh6fpFc*eIcr-R&M3%e@%7Z1)2|lY!Q5KktYL@e z=)OGo#dSK7@)MImvom|el&Et!a?9%!Snqc8(_V$jyi1I(PdGB}idsP=a$RFuPJVTD zFjSv}|Ishpot=`Io4PeH@UPgpr{`$OOGs63>mlUQ$R|(o$ZYU70z#OO|h&d4nvxG zWN8B*LbxV>b_lmj&f30d>NTo|Dy>ynD(yiggq6i|fa7^i{)sFvF0U%{)tn-W2oDL1 z-U3_^o|_hVR?d|y4@h3C|H?Hsc0PK*OVceae8z3!Sn}mgSVi-xU@^8t;;a%@%e^d_ zT&oC#GmHUb=8b9cV#`R-wyU(5icL2@H!Wj_;f~CHBDz&whc%CY-)Xly8LAG3Imlo~kotVvCA^NekDho4cMMw^ zE~fe}wNdqtXQGxZrx>s)Y85{C8c#e&lQ!!rS=Tf})%B;BpvZtU*`!iSGu`Tp&a}2I zX*1uNO_>C5PQ+}E9E)F{1*&<INMJYZ;cXhp8S_UU+qM2G+*?)Ra8RJ)n)KJ1` z5c*%z(({|n+PBUXZ=2!pqopGx9f@IBELCJm(4z?)r3fi!4DDVrF*D<`^rbV$hmH-M zIWv6i@`Z~(p3;+p=&-Sxkz$vXaO8@O8~JlKU;!}+H|POF`L|}v8q!bTCU;eqZCOsO zZ~3r_=0dhe;IqEIojd!wyL*NW0PeOun-CN;J@a*Jk<}^B?^r7uJSRl`AF04eJHacb zr{|Qd_P{!qi<|PwrSwaqHEnz`06?cmx4y85|*F%rYk z(1RgEE6q8Lz(0<|2^>wc8m&ZYQK?l=(Ne1I|6_yIa-3zysT-HC|5P_;*T(1c(*2X2 ze(=Vy$bgeG($X?&Y6^;5tQovEHqTJU0CcMSm9X492EhGw}sydCrw7iy*hO|1FQ{vOnX=SO%s#P#@1_FQ>I96>opG)mT z0x;&g-?05V04f8w-GMp&KcR#86-(46&zh;z0|u+tXJUAAbz2?p+qoJ=a9R8K^mnji zVnc^^(1!-jXJw+W1{RfeS|ZGtcHAuAkgWLkEV0t|wYo$y!7q^_7wOA^g?aez>n1 zevka7k)rDhg?HpdfBa-nTy#r7Luga;SYflUu8-HY&^~Dpzv)lY;l4KU?^VtM0632W zc-ice_>rzIkO4FRP(VJEqN+fdOsj8RQu!#&HK?}_&=5#(t#~Rh=cV+2RJ6mPh7AC5 z;0aUB4QT_%n4&VF|X)mffExfImF#z zmDY(QFR%4}t9lOk9&nVkD@W?|PadLqZhkVYND1YaIRrp-- zizzp}Vpq>(cbwuS_@9HIZtsc|D5OR4;l-OjO419|G9^OaSh#HmuQn3__U4^%zn z3zgSqZxa>eaxJTKUNVOv6Uo z`X5fo9Yr~HBKacaY3`IbR;|aks-P`>O1VkOG_I>{NTDuSv`m+}h$cZj>CC@RMLedAtNKe_txQ}ii6@>>mJd?Ca++0|y0RHN9eQpvSJW5EsC|Cvl}f(r qg8F^wNJLW9HXag++f*3l>qLgABq|+GP_C@lsDY~<*Z+^97XScAUqWF3 diff --git a/packages/documentation/docs/.vitepress/dist/assets/style.DSaPWSqg.css b/packages/documentation/docs/.vitepress/dist/assets/style.DSaPWSqg.css deleted file mode 100644 index d2fd92870d..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/style.DSaPWSqg.css +++ /dev/null @@ -1 +0,0 @@ -@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:100 900;src:url(/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c88,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:100 900;src:url(/assets/inter-roman-cyrillic.C5lxZ8CY.woff2) format("woff2");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:100 900;src:url(/assets/inter-roman-greek-ext.CqjqNYQ-.woff2) format("woff2");unicode-range:u+1f??}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:100 900;src:url(/assets/inter-roman-greek.BBVDIX6e.woff2) format("woff2");unicode-range:u+0370-0377,u+037a-037f,u+0384-038a,u+038c,u+038e-03a1,u+03a3-03ff}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:100 900;src:url(/assets/inter-roman-vietnamese.BjW4sHH5.woff2) format("woff2");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:100 900;src:url(/assets/inter-roman-latin-ext.4ZJIpNVo.woff2) format("woff2");unicode-range:u+0100-02af,u+0304,u+0308,u+0329,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:100 900;src:url(/assets/inter-roman-latin.Di8DUHzh.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Inter;font-style:italic;font-weight:100 900;src:url(/assets/inter-italic-cyrillic-ext.r48I6akx.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c88,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-display:swap;font-family:Inter;font-style:italic;font-weight:100 900;src:url(/assets/inter-italic-cyrillic.By2_1cv3.woff2) format("woff2");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-display:swap;font-family:Inter;font-style:italic;font-weight:100 900;src:url(/assets/inter-italic-greek-ext.1u6EdAuj.woff2) format("woff2");unicode-range:u+1f??}@font-face{font-display:swap;font-family:Inter;font-style:italic;font-weight:100 900;src:url(/assets/inter-italic-greek.DJ8dCoTZ.woff2) format("woff2");unicode-range:u+0370-0377,u+037a-037f,u+0384-038a,u+038c,u+038e-03a1,u+03a3-03ff}@font-face{font-display:swap;font-family:Inter;font-style:italic;font-weight:100 900;src:url(/assets/inter-italic-vietnamese.BSbpV94h.woff2) format("woff2");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-display:swap;font-family:Inter;font-style:italic;font-weight:100 900;src:url(/assets/inter-italic-latin-ext.CN1xVJS-.woff2) format("woff2");unicode-range:u+0100-02af,u+0304,u+0308,u+0329,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-display:swap;font-family:Inter;font-style:italic;font-weight:100 900;src:url(/assets/inter-italic-latin.C2AdPX0b.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:Punctuation SC;font-weight:400;src:local("PingFang SC Regular"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:u+201c,u+201d,u+2018,u+2019,u+2e3a,u+2014,u+2013,u+2026,u+00b7,u+007e,u+002f}@font-face{font-family:Punctuation SC;font-weight:500;src:local("PingFang SC Medium"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:u+201c,u+201d,u+2018,u+2019,u+2e3a,u+2014,u+2013,u+2026,u+00b7,u+007e,u+002f}@font-face{font-family:Punctuation SC;font-weight:600;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:u+201c,u+201d,u+2018,u+2019,u+2e3a,u+2014,u+2013,u+2026,u+00b7,u+007e,u+002f}@font-face{font-family:Punctuation SC;font-weight:700;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:u+201c,u+201d,u+2018,u+2019,u+2e3a,u+2014,u+2013,u+2026,u+00b7,u+007e,u+002f}:root{--vp-c-white:#fff;--vp-c-black:#000;--vp-c-neutral:var(--vp-c-black);--vp-c-neutral-inverse:var(--vp-c-white)}.dark{--vp-c-neutral:var(--vp-c-white);--vp-c-neutral-inverse:var(--vp-c-black)}:root{--vp-c-gray-1:#dddde3;--vp-c-gray-2:#e4e4e9;--vp-c-gray-3:#ebebef;--vp-c-gray-soft:rgba(142,150,170,.14);--vp-c-indigo-1:#3451b2;--vp-c-indigo-2:#3a5ccc;--vp-c-indigo-3:#5672cd;--vp-c-indigo-soft:rgba(100,108,255,.14);--vp-c-purple-1:#6f42c1;--vp-c-purple-2:#7e4cc9;--vp-c-purple-3:#8e5cd9;--vp-c-purple-soft:rgba(159,122,234,.14);--vp-c-green-1:#18794e;--vp-c-green-2:#299764;--vp-c-green-3:#30a46c;--vp-c-green-soft:rgba(16,185,129,.14);--vp-c-yellow-1:#915930;--vp-c-yellow-2:#946300;--vp-c-yellow-3:#9f6a00;--vp-c-yellow-soft:rgba(234,179,8,.14);--vp-c-red-1:#b8272c;--vp-c-red-2:#d5393e;--vp-c-red-3:#e0575b;--vp-c-red-soft:rgba(244,63,94,.14);--vp-c-sponsor:#db2777}.dark{--vp-c-gray-1:#515c67;--vp-c-gray-2:#414853;--vp-c-gray-3:#32363f;--vp-c-gray-soft:rgba(101,117,133,.16);--vp-c-indigo-1:#a8b1ff;--vp-c-indigo-2:#5c73e7;--vp-c-indigo-3:#3e63dd;--vp-c-indigo-soft:rgba(100,108,255,.16);--vp-c-purple-1:#c8abfa;--vp-c-purple-2:#a879e6;--vp-c-purple-3:#8e5cd9;--vp-c-purple-soft:rgba(159,122,234,.16);--vp-c-green-1:#3dd68c;--vp-c-green-2:#30a46c;--vp-c-green-3:#298459;--vp-c-green-soft:rgba(16,185,129,.16);--vp-c-yellow-1:#f9b44e;--vp-c-yellow-2:#da8b17;--vp-c-yellow-3:#a46a0a;--vp-c-yellow-soft:rgba(234,179,8,.16);--vp-c-red-1:#f66f81;--vp-c-red-2:#f14158;--vp-c-red-3:#b62a3c;--vp-c-red-soft:rgba(244,63,94,.16)}:root{--vp-c-bg:#fff;--vp-c-bg-alt:#f6f6f7;--vp-c-bg-elv:#fff;--vp-c-bg-soft:#f6f6f7}.dark{--vp-c-bg:#1b1b1f;--vp-c-bg-alt:#161618;--vp-c-bg-elv:#202127;--vp-c-bg-soft:#202127}:root{--vp-c-border:#c2c2c4;--vp-c-divider:#e2e2e3;--vp-c-gutter:#e2e2e3}.dark{--vp-c-border:#3c3f44;--vp-c-divider:#2e2e32;--vp-c-gutter:#000}:root{--vp-c-text-1:#3c3c43;--vp-c-text-2:#67676c;--vp-c-text-3:#929295}.dark{--vp-c-text-1:#dfdfd6;--vp-c-text-2:#98989f;--vp-c-text-3:#6a6a71}:root{--vp-c-default-1:var(--vp-c-gray-1);--vp-c-default-2:var(--vp-c-gray-2);--vp-c-default-3:var(--vp-c-gray-3);--vp-c-default-soft:var(--vp-c-gray-soft);--vp-c-brand-1:var(--vp-c-indigo-1);--vp-c-brand-2:var(--vp-c-indigo-2);--vp-c-brand-3:var(--vp-c-indigo-3);--vp-c-brand-soft:var(--vp-c-indigo-soft);--vp-c-brand:var(--vp-c-brand-1);--vp-c-tip-1:var(--vp-c-brand-1);--vp-c-tip-2:var(--vp-c-brand-2);--vp-c-tip-3:var(--vp-c-brand-3);--vp-c-tip-soft:var(--vp-c-brand-soft);--vp-c-note-1:var(--vp-c-brand-1);--vp-c-note-2:var(--vp-c-brand-2);--vp-c-note-3:var(--vp-c-brand-3);--vp-c-note-soft:var(--vp-c-brand-soft);--vp-c-success-1:var(--vp-c-green-1);--vp-c-success-2:var(--vp-c-green-2);--vp-c-success-3:var(--vp-c-green-3);--vp-c-success-soft:var(--vp-c-green-soft);--vp-c-important-1:var(--vp-c-purple-1);--vp-c-important-2:var(--vp-c-purple-2);--vp-c-important-3:var(--vp-c-purple-3);--vp-c-important-soft:var(--vp-c-purple-soft);--vp-c-warning-1:var(--vp-c-yellow-1);--vp-c-warning-2:var(--vp-c-yellow-2);--vp-c-warning-3:var(--vp-c-yellow-3);--vp-c-warning-soft:var(--vp-c-yellow-soft);--vp-c-danger-1:var(--vp-c-red-1);--vp-c-danger-2:var(--vp-c-red-2);--vp-c-danger-3:var(--vp-c-red-3);--vp-c-danger-soft:var(--vp-c-red-soft);--vp-c-caution-1:var(--vp-c-red-1);--vp-c-caution-2:var(--vp-c-red-2);--vp-c-caution-3:var(--vp-c-red-3);--vp-c-caution-soft:var(--vp-c-red-soft);--vp-font-family-base:"Inter",ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--vp-font-family-mono:ui-monospace,"Menlo","Monaco","Consolas","Liberation Mono","Courier New",monospace;font-optical-sizing:auto}:root:where(:lang(zh)){--vp-font-family-base:"Punctuation SC","Inter",ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}:root{--vp-shadow-1:0 1px 2px rgba(0,0,0,.04),0 1px 2px rgba(0,0,0,.06);--vp-shadow-2:0 3px 12px rgba(0,0,0,.07),0 1px 4px rgba(0,0,0,.07);--vp-shadow-3:0 12px 32px rgba(0,0,0,.1),0 2px 6px rgba(0,0,0,.08);--vp-shadow-4:0 14px 44px rgba(0,0,0,.12),0 3px 9px rgba(0,0,0,.12);--vp-shadow-5:0 18px 56px rgba(0,0,0,.16),0 4px 12px rgba(0,0,0,.16);--vp-z-index-footer:10;--vp-z-index-local-nav:20;--vp-z-index-nav:30;--vp-z-index-layout-top:40;--vp-z-index-backdrop:50;--vp-z-index-sidebar:60}@media (min-width:960px){:root{--vp-z-index-sidebar:25}}:root{--vp-layout-max-width:1440px;--vp-header-anchor-symbol:"#";--vp-code-line-height:1.7;--vp-code-font-size:.875em;--vp-code-color:var(--vp-c-brand-1);--vp-code-link-color:var(--vp-c-brand-1);--vp-code-link-hover-color:var(--vp-c-brand-2);--vp-code-bg:var(--vp-c-default-soft);--vp-code-block-color:var(--vp-c-text-2);--vp-code-block-bg:var(--vp-c-bg-alt);--vp-code-block-divider-color:var(--vp-c-gutter);--vp-code-lang-color:var(--vp-c-text-3);--vp-code-line-highlight-color:var(--vp-c-default-soft);--vp-code-line-number-color:var(--vp-c-text-3);--vp-code-line-diff-add-color:var(--vp-c-success-soft);--vp-code-line-diff-add-symbol-color:var(--vp-c-success-1);--vp-code-line-diff-remove-color:var(--vp-c-danger-soft);--vp-code-line-diff-remove-symbol-color:var(--vp-c-danger-1);--vp-code-line-warning-color:var(--vp-c-warning-soft);--vp-code-line-error-color:var(--vp-c-danger-soft);--vp-code-copy-code-border-color:var(--vp-c-divider);--vp-code-copy-code-bg:var(--vp-c-bg-soft);--vp-code-copy-code-hover-border-color:var(--vp-c-divider);--vp-code-copy-code-hover-bg:var(--vp-c-bg);--vp-code-copy-code-active-text:var(--vp-c-text-2);--vp-code-copy-copied-text-content:"Copied";--vp-code-tab-divider:var(--vp-code-block-divider-color);--vp-code-tab-text-color:var(--vp-c-text-2);--vp-code-tab-bg:var(--vp-code-block-bg);--vp-code-tab-hover-text-color:var(--vp-c-text-1);--vp-code-tab-active-text-color:var(--vp-c-text-1);--vp-code-tab-active-bar-color:var(--vp-c-brand-1)}:lang(es),:lang(pt){--vp-code-copy-copied-text-content:"Copiado"}:lang(fa){--vp-code-copy-copied-text-content:"کپی شد"}:lang(ko){--vp-code-copy-copied-text-content:"복사됨"}:lang(ru){--vp-code-copy-copied-text-content:"Скопировано"}:lang(zh){--vp-code-copy-copied-text-content:"已复制"}:root{--vp-button-brand-border:transparent;--vp-button-brand-text:var(--vp-c-white);--vp-button-brand-bg:var(--vp-c-brand-3);--vp-button-brand-hover-border:transparent;--vp-button-brand-hover-text:var(--vp-c-white);--vp-button-brand-hover-bg:var(--vp-c-brand-2);--vp-button-brand-active-border:transparent;--vp-button-brand-active-text:var(--vp-c-white);--vp-button-brand-active-bg:var(--vp-c-brand-1);--vp-button-alt-border:transparent;--vp-button-alt-text:var(--vp-c-text-1);--vp-button-alt-bg:var(--vp-c-default-3);--vp-button-alt-hover-border:transparent;--vp-button-alt-hover-text:var(--vp-c-text-1);--vp-button-alt-hover-bg:var(--vp-c-default-2);--vp-button-alt-active-border:transparent;--vp-button-alt-active-text:var(--vp-c-text-1);--vp-button-alt-active-bg:var(--vp-c-default-1);--vp-button-sponsor-border:var(--vp-c-text-2);--vp-button-sponsor-text:var(--vp-c-text-2);--vp-button-sponsor-bg:transparent;--vp-button-sponsor-hover-border:var(--vp-c-sponsor);--vp-button-sponsor-hover-text:var(--vp-c-sponsor);--vp-button-sponsor-hover-bg:transparent;--vp-button-sponsor-active-border:var(--vp-c-sponsor);--vp-button-sponsor-active-text:var(--vp-c-sponsor);--vp-button-sponsor-active-bg:transparent;--vp-custom-block-font-size:14px;--vp-custom-block-code-font-size:13px;--vp-custom-block-info-border:transparent;--vp-custom-block-info-text:var(--vp-c-text-1);--vp-custom-block-info-bg:var(--vp-c-default-soft);--vp-custom-block-info-code-bg:var(--vp-c-default-soft);--vp-custom-block-note-border:transparent;--vp-custom-block-note-text:var(--vp-c-text-1);--vp-custom-block-note-bg:var(--vp-c-default-soft);--vp-custom-block-note-code-bg:var(--vp-c-default-soft);--vp-custom-block-tip-border:transparent;--vp-custom-block-tip-text:var(--vp-c-text-1);--vp-custom-block-tip-bg:var(--vp-c-tip-soft);--vp-custom-block-tip-code-bg:var(--vp-c-tip-soft);--vp-custom-block-important-border:transparent;--vp-custom-block-important-text:var(--vp-c-text-1);--vp-custom-block-important-bg:var(--vp-c-important-soft);--vp-custom-block-important-code-bg:var(--vp-c-important-soft);--vp-custom-block-warning-border:transparent;--vp-custom-block-warning-text:var(--vp-c-text-1);--vp-custom-block-warning-bg:var(--vp-c-warning-soft);--vp-custom-block-warning-code-bg:var(--vp-c-warning-soft);--vp-custom-block-danger-border:transparent;--vp-custom-block-danger-text:var(--vp-c-text-1);--vp-custom-block-danger-bg:var(--vp-c-danger-soft);--vp-custom-block-danger-code-bg:var(--vp-c-danger-soft);--vp-custom-block-caution-border:transparent;--vp-custom-block-caution-text:var(--vp-c-text-1);--vp-custom-block-caution-bg:var(--vp-c-caution-soft);--vp-custom-block-caution-code-bg:var(--vp-c-caution-soft);--vp-custom-block-details-border:var(--vp-custom-block-info-border);--vp-custom-block-details-text:var(--vp-custom-block-info-text);--vp-custom-block-details-bg:var(--vp-custom-block-info-bg);--vp-custom-block-details-code-bg:var(--vp-custom-block-info-code-bg);--vp-input-border-color:var(--vp-c-border);--vp-input-bg-color:var(--vp-c-bg-alt);--vp-input-switch-bg-color:var(--vp-c-default-soft);--vp-nav-height:64px;--vp-nav-bg-color:var(--vp-c-bg);--vp-nav-screen-bg-color:var(--vp-c-bg);--vp-nav-logo-height:24px}.hide-nav{--vp-nav-height:0px}.hide-nav .VPSidebar{--vp-nav-height:22px}:root{--vp-local-nav-bg-color:var(--vp-c-bg);--vp-sidebar-width:272px;--vp-sidebar-bg-color:var(--vp-c-bg-alt);--vp-backdrop-bg-color:rgba(0,0,0,.6);--vp-home-hero-name-color:var(--vp-c-brand-1);--vp-home-hero-name-background:transparent;--vp-home-hero-image-background-image:none;--vp-home-hero-image-filter:none;--vp-badge-info-border:transparent;--vp-badge-info-text:var(--vp-c-text-2);--vp-badge-info-bg:var(--vp-c-default-soft);--vp-badge-tip-border:transparent;--vp-badge-tip-text:var(--vp-c-tip-1);--vp-badge-tip-bg:var(--vp-c-tip-soft);--vp-badge-warning-border:transparent;--vp-badge-warning-text:var(--vp-c-warning-1);--vp-badge-warning-bg:var(--vp-c-warning-soft);--vp-badge-danger-border:transparent;--vp-badge-danger-text:var(--vp-c-danger-1);--vp-badge-danger-bg:var(--vp-c-danger-soft);--vp-carbon-ads-text-color:var(--vp-c-text-1);--vp-carbon-ads-poweredby-color:var(--vp-c-text-2);--vp-carbon-ads-bg-color:var(--vp-c-bg-soft);--vp-carbon-ads-hover-text-color:var(--vp-c-brand-1);--vp-carbon-ads-hover-poweredby-color:var(--vp-c-text-1);--vp-local-search-bg:var(--vp-c-bg);--vp-local-search-result-bg:var(--vp-c-bg);--vp-local-search-result-border:var(--vp-c-divider);--vp-local-search-result-selected-bg:var(--vp-c-bg);--vp-local-search-result-selected-border:var(--vp-c-brand-1);--vp-local-search-highlight-bg:var(--vp-c-brand-1);--vp-local-search-highlight-text:var(--vp-c-neutral-inverse)}@media (prefers-reduced-motion:reduce){*,:after,:before{animation-delay:-1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important;background-attachment:scroll!important;scroll-behavior:auto!important;transition-delay:0s!important;transition-duration:0s!important}}*,:after,:before{box-sizing:border-box}html{font-size:16px;line-height:1.4;-webkit-text-size-adjust:100%}html.dark{color-scheme:dark}body{background-color:var(--vp-c-bg);color:var(--vp-c-text-1);font-family:var(--vp-font-family-base);font-size:16px;font-synthesis:style;font-weight:400;line-height:24px;margin:0;min-height:100vh;min-width:320px;text-rendering:optimizeLegibility;width:100%;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{display:block}h1,h2,h3,h4,h5,h6{font-size:16px;font-weight:400;line-height:24px;margin:0}p{margin:0}b,strong{font-weight:600}[role=button],a,area,button,input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;padding:0}blockquote,ol,ul{margin:0}code,kbd,pre,samp{font-family:var(--vp-font-family-mono)}audio,canvas,embed,iframe,img,object,svg,video{display:block}figure{margin:0}img,video{height:auto;max-width:100%}button,input,optgroup,select,textarea{border:0;color:inherit;line-height:inherit;padding:0}button{background-color:transparent;background-image:none;font-family:inherit;padding:0}[role=button]:enabled,button:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,select:focus,textarea:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input::-moz-placeholder,textarea::-moz-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-inner-spin-button,input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}mjx-container{overflow-x:auto}mjx-container>svg{display:inline-block;margin:auto}.vp-icon,[class*=" vpi-"],[class^=vpi-]{height:1em;width:1em}.vp-icon.bg,[class*=" vpi-"].bg,[class^=vpi-].bg{background-color:transparent;background-size:100% 100%}.vp-icon:not(.bg),[class*=" vpi-"]:not(.bg),[class^=vpi-]:not(.bg){background-color:currentColor;color:inherit;-webkit-mask:var(--icon) no-repeat;mask:var(--icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%}.vpi-align-left{--icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M21 6H3m12 6H3m14 6H3'/%3E%3C/svg%3E")}.vpi-arrow-down,.vpi-arrow-left,.vpi-arrow-right,.vpi-arrow-up{--icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14m-7-7 7 7-7 7'/%3E%3C/svg%3E")}.vpi-chevron-down,.vpi-chevron-left,.vpi-chevron-right,.vpi-chevron-up{--icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E")}.vpi-arrow-down,.vpi-chevron-down{transform:rotate(90deg)}.vpi-arrow-left,.vpi-chevron-left{transform:rotate(180deg)}.vpi-arrow-up,.vpi-chevron-up{transform:rotate(-90deg)}.vpi-square-pen{--icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'/%3E%3Cpath d='M18.375 2.625a2.121 2.121 0 1 1 3 3L12 15l-4 1 1-4Z'/%3E%3C/svg%3E")}.vpi-plus{--icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14m-7-7v14'/%3E%3C/svg%3E")}.vpi-sun{--icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2m0 16v2M4.93 4.93l1.41 1.41m11.32 11.32 1.41 1.41M2 12h2m16 0h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41'/%3E%3C/svg%3E")}.vpi-moon{--icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9'/%3E%3C/svg%3E")}.vpi-more-horizontal{--icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='1'/%3E%3Ccircle cx='19' cy='12' r='1'/%3E%3Ccircle cx='5' cy='12' r='1'/%3E%3C/svg%3E")}.vpi-languages{--icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m5 8 6 6m-7 0 6-6 2-3M2 5h12M7 2h1m14 20-5-10-5 10m2-4h6'/%3E%3C/svg%3E")}.vpi-heart{--icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z'/%3E%3C/svg%3E")}.vpi-search{--icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E")}.vpi-layout-list{--icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='7' height='7' x='3' y='3' rx='1'/%3E%3Crect width='7' height='7' x='3' y='14' rx='1'/%3E%3Cpath d='M14 4h7m-7 5h7m-7 6h7m-7 5h7'/%3E%3C/svg%3E")}.vpi-delete{--icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 5H9l-7 7 7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-2 4-6 6m0-6 6 6'/%3E%3C/svg%3E")}.vpi-corner-down-left{--icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 10-5 5 5 5'/%3E%3Cpath d='M20 4v7a4 4 0 0 1-4 4H4'/%3E%3C/svg%3E")}:root{--vp-icon-copy:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3C/svg%3E");--vp-icon-copied:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3Cpath d='m9 14 2 2 4-4'/%3E%3C/svg%3E")}.visually-hidden{height:1px;position:absolute;white-space:nowrap;width:1px;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;color:var(--vp-c-text-2);font-size:var(--vp-custom-block-font-size);line-height:24px;padding:16px 16px 8px}.custom-block.info{background-color:var(--vp-custom-block-info-bg);border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text)}.custom-block.info a,.custom-block.info code{color:var(--vp-c-brand-1)}.custom-block.info a:hover,.custom-block.info a:hover>code{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.note{background-color:var(--vp-custom-block-note-bg);border-color:var(--vp-custom-block-note-border);color:var(--vp-custom-block-note-text)}.custom-block.note a,.custom-block.note code{color:var(--vp-c-brand-1)}.custom-block.note a:hover,.custom-block.note a:hover>code{color:var(--vp-c-brand-2)}.custom-block.note code{background-color:var(--vp-custom-block-note-code-bg)}.custom-block.tip{background-color:var(--vp-custom-block-tip-bg);border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text)}.custom-block.tip a,.custom-block.tip code{color:var(--vp-c-tip-1)}.custom-block.tip a:hover,.custom-block.tip a:hover>code{color:var(--vp-c-tip-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.important{background-color:var(--vp-custom-block-important-bg);border-color:var(--vp-custom-block-important-border);color:var(--vp-custom-block-important-text)}.custom-block.important a,.custom-block.important code{color:var(--vp-c-important-1)}.custom-block.important a:hover,.custom-block.important a:hover>code{color:var(--vp-c-important-2)}.custom-block.important code{background-color:var(--vp-custom-block-important-code-bg)}.custom-block.warning{background-color:var(--vp-custom-block-warning-bg);border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text)}.custom-block.warning a,.custom-block.warning code{color:var(--vp-c-warning-1)}.custom-block.warning a:hover,.custom-block.warning a:hover>code{color:var(--vp-c-warning-2)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{background-color:var(--vp-custom-block-danger-bg);border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text)}.custom-block.danger a,.custom-block.danger code{color:var(--vp-c-danger-1)}.custom-block.danger a:hover,.custom-block.danger a:hover>code{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.caution{background-color:var(--vp-custom-block-caution-bg);border-color:var(--vp-custom-block-caution-border);color:var(--vp-custom-block-caution-text)}.custom-block.caution a,.custom-block.caution code{color:var(--vp-c-caution-1)}.custom-block.caution a:hover,.custom-block.caution a:hover>code{color:var(--vp-c-caution-2)}.custom-block.caution code{background-color:var(--vp-custom-block-caution-code-bg)}.custom-block.details{background-color:var(--vp-custom-block-details-bg);border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text)}.custom-block.details a{color:var(--vp-c-brand-1)}.custom-block.details a:hover,.custom-block.details a:hover>code{color:var(--vp-c-brand-2)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{cursor:pointer;font-weight:700;margin:0 0 8px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px;transition:opacity .25s}.custom-block a:hover{opacity:.75}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.custom-block.custom-block blockquote>p,.custom-block.custom-block th{color:inherit;font-size:var(--vp-custom-block-font-size)}.dark .vp-code span{color:var(--shiki-dark,inherit)}html:not(.dark) .vp-code span{color:var(--shiki-light,inherit)}.vp-code-group{margin-top:16px}.vp-code-group .tabs{background-color:var(--vp-code-tab-bg);box-shadow:inset 0 -1px var(--vp-code-tab-divider);display:flex;margin-left:-24px;margin-right:-24px;overflow-x:auto;overflow-y:hidden;padding:0 12px;position:relative}@media (min-width:640px){.vp-code-group .tabs{border-radius:8px 8px 0 0;margin-left:0;margin-right:0}}.vp-code-group .tabs input{opacity:0;pointer-events:none;position:fixed}.vp-code-group .tabs label{border-bottom:1px solid transparent;color:var(--vp-code-tab-text-color);cursor:pointer;display:inline-block;font-size:14px;font-weight:500;line-height:48px;padding:0 12px;position:relative;transition:color .25s;white-space:nowrap}.vp-code-group .tabs label:after{background-color:transparent;border-radius:2px;bottom:-1px;content:"";height:2px;left:8px;position:absolute;right:8px;transition:background-color .25s;z-index:1}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-block,.vp-code-group div[class*=language-]{border-top-left-radius:0!important;border-top-right-radius:0!important;display:none;margin-top:0!important}.vp-block.active,.vp-code-group div[class*=language-].active{display:block}.vp-block{padding:20px 24px}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{font-weight:600;outline:none;position:relative}.vp-doc h1{font-size:28px;letter-spacing:-.02em;line-height:40px}.vp-doc h2{border-top:1px solid var(--vp-c-divider);font-size:24px;letter-spacing:-.02em;line-height:32px;margin:48px 0 16px;padding-top:24px}.vp-doc h3{font-size:20px;letter-spacing:-.01em;line-height:28px;margin:32px 0 0}.vp-doc h4{font-size:18px;letter-spacing:-.01em;line-height:24px;margin:24px 0 0}.vp-doc .header-anchor{font-weight:500;left:0;margin-left:-.87em;opacity:0;position:absolute;text-decoration:none;top:0;transition:color .25s,opacity .25s;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1 .header-anchor:focus,.vp-doc h1:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h6 .header-anchor:focus,.vp-doc h6:hover .header-anchor{opacity:1}@media (min-width:768px){.vp-doc h1{font-size:32px;letter-spacing:-.02em;line-height:40px}}.vp-doc h2 .header-anchor{top:24px}.vp-doc p,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{border-left:2px solid var(--vp-c-divider);color:var(--vp-c-text-2);margin:16px 0;padding-left:16px;transition:border-color .5s}.vp-doc blockquote>p{font-size:16px;margin:0;transition:color .5s}.vp-doc a{color:var(--vp-c-brand-1);font-weight:500;text-decoration:underline;text-underline-offset:2px;transition:color .25s,opacity .25s}.vp-doc a:hover{color:var(--vp-c-brand-2)}.vp-doc strong{font-weight:600}.vp-doc ol,.vp-doc ul{margin:16px 0;padding-left:1.25rem}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{border-collapse:collapse;display:block;margin:20px 0;overflow-x:auto}.vp-doc tr{background-color:var(--vp-c-bg);border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc td,.vp-doc th{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{background-color:var(--vp-c-bg-soft);color:var(--vp-c-text-2);font-weight:600;text-align:left}.vp-doc td,.vp-doc th{font-size:14px}.vp-doc hr{border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block,.vp-doc hr{margin:16px 0}.vp-doc .custom-block p{line-height:24px;margin:8px 0}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block div[class*=language-]{border-radius:8px;margin:8px 0}.vp-doc .custom-block div[class*=language-] code{background-color:transparent;font-weight:400}.vp-doc .custom-block .vp-code-group .tabs{border-radius:8px 8px 0 0;margin:0}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{color:var(--vp-code-color);font-size:var(--vp-code-font-size)}.vp-doc :not(pre)>code{background-color:var(--vp-code-bg);border-radius:4px;padding:3px 6px;transition:color .25s,background-color .5s}.vp-doc a>code{color:var(--vp-code-link-color)}.vp-doc a:hover>code{color:var(--vp-code-link-hover-color)}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code,.vp-doc h4>code{font-size:.9em}.vp-block,.vp-doc div[class*=language-]{background-color:var(--vp-code-block-bg);margin:16px -24px;overflow-x:auto;position:relative;transition:background-color .5s}@media (min-width:640px){.vp-block,.vp-doc div[class*=language-]{border-radius:8px;margin:16px 0}}@media (max-width:639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-],.vp-doc div[class*=language-]+div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] code,.vp-doc [class*=language-] pre{direction:ltr;text-align:left;white-space:pre;word-break:normal;word-spacing:normal;word-wrap:normal;-webkit-hyphens:none;hyphens:none;-moz-tab-size:4;-o-tab-size:4;tab-size:4}.vp-doc [class*=language-] pre{background:transparent;margin:0;overflow-x:auto;padding:20px 0;position:relative;z-index:1}.vp-doc [class*=language-] code{color:var(--vp-code-block-color);display:block;font-size:var(--vp-code-font-size);line-height:var(--vp-code-line-height);min-width:100%;padding:0 24px;transition:color .5s;width:-moz-fit-content;width:fit-content}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);display:inline-block;margin:0 -24px;padding:0 24px;transition:background-color .5s;width:calc(100% + 48px)}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{display:inline-block;margin:0 -24px;padding:0 24px;transition:background-color .5s;width:calc(100% + 48px)}.vp-doc [class*=language-] code .diff:before{left:10px;position:absolute}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{color:var(--vp-code-line-diff-remove-symbol-color);content:"-"}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{color:var(--vp-code-line-diff-add-symbol-color);content:"+"}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{border-right:1px solid var(--vp-code-block-divider-color);bottom:0;color:var(--vp-code-line-number-color);font-family:var(--vp-font-family-mono);font-size:var(--vp-code-font-size);left:0;line-height:var(--vp-code-line-height);padding-top:20px;position:absolute;text-align:center;top:0;transition:border-color .5s,color .5s;width:32px;z-index:3}.vp-doc [class*=language-]>button.copy{background-color:var(--vp-code-copy-code-bg);background-image:var(--vp-icon-copy);background-position:50%;background-repeat:no-repeat;background-size:20px;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;cursor:pointer;direction:ltr;height:40px;opacity:0;position:absolute;right:12px;top:12px;transition:border-color .25s,background-color .25s,opacity .25s;width:40px;z-index:3}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover{background-color:var(--vp-code-copy-code-hover-bg);border-color:var(--vp-code-copy-code-hover-border-color)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied);border-radius:0 4px 4px 0}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{align-items:center;background-color:var(--vp-code-copy-code-hover-bg);border:1px solid var(--vp-code-copy-code-hover-border-color);border-radius:4px 0 0 4px;border-right:0;color:var(--vp-code-copy-code-active-text);content:var(--vp-code-copy-copied-text-content);display:flex;font-size:12px;font-weight:500;height:40px;justify-content:center;padding:0 10px;position:relative;text-align:center;top:-1px;transform:translate(calc(-100% - 1px));white-space:nowrap;width:-moz-fit-content;width:fit-content}.vp-doc [class*=language-]>span.lang{color:var(--vp-code-lang-color);font-size:12px;font-weight:500;position:absolute;right:8px;top:2px;transition:color .4s,opacity .4s;-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:2}.vp-doc [class*=language-]:hover>button.copy+span.lang,.vp-doc [class*=language-]>button.copy:focus+span.lang{opacity:0}.vp-doc .VPTeamMembers{margin-top:24px}.vp-doc .VPTeamMembers.small.count-1 .container{margin:0!important;max-width:calc(50% - 12px)!important}.vp-doc .VPTeamMembers.small.count-2 .container,.vp-doc .VPTeamMembers.small.count-3 .container{max-width:100%!important}.vp-doc .VPTeamMembers.medium.count-1 .container{margin:0!important;max-width:calc(50% - 12px)!important}:is(.vp-external-link-icon,.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(:is(.no-icon,svg a,:has(img,svg))):after{background:currentColor;color:var(--vp-c-text-3);display:inline-block;flex-shrink:0;height:11px;margin-left:4px;margin-top:-1px;width:11px;--icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0z'/%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5z'/%3E%3C/svg%3E");-webkit-mask-image:var(--icon);mask-image:var(--icon)}.vp-external-link-icon:after{content:""}.external-link-icon-enabled :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(:is(.no-icon,svg a,:has(img,svg))):after{color:currentColor;content:""}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{background-color:var(--vp-c-bg-soft);color:var(--vp-c-text-2);font-weight:600;letter-spacing:1px!important;line-height:24px;margin:0 0 4px!important;text-align:center;width:100%}.vp-sponsor.normal .vp-sponsor-tier{font-size:14px;padding:13px 0 11px}.vp-sponsor.aside .vp-sponsor-tier{font-size:12px;padding:9px 0 7px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-height:22px;max-width:64px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-height:24px;max-width:96px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-height:24px;max-width:96px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-height:36px;max-width:120px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-height:56px;max-width:192px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc(50% - 2px)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc(33.33333% - 2.66667px)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc(25% - 3px)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc(20% - 3.2px)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc(16.66667% - 3.33333px)}.vp-sponsor-grid-item{background-color:var(--vp-c-bg-soft);flex-shrink:0;transition:background-color .25s;width:100%}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-default-soft)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{align-items:center;display:flex;justify-content:center;width:100%}.vp-sponsor-grid-image{filter:grayscale(1);max-width:100%;transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge{border:1px solid transparent;border-radius:12px;display:inline-block;font-size:12px;font-weight:500;line-height:22px;margin-left:2px;padding:0 10px;transform:translateY(-2px)}.VPBadge.small{font-size:10px;line-height:18px;padding:0 6px;transform:translateY(-8px)}.VPDocFooter .VPBadge{display:none}.vp-doc h1>.VPBadge{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge{vertical-align:middle}.vp-doc h4>.VPBadge,.vp-doc h5>.VPBadge,.vp-doc h6>.VPBadge{line-height:18px;vertical-align:middle}.VPBadge.info{background-color:var(--vp-badge-info-bg);border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text)}.VPBadge.tip{background-color:var(--vp-badge-tip-bg);border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text)}.VPBadge.warning{background-color:var(--vp-badge-warning-bg);border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text)}.VPBadge.danger{background-color:var(--vp-badge-danger-bg);border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text)}.VPBackdrop[data-v-c79a1216]{background:var(--vp-backdrop-bg-color);bottom:0;left:0;position:fixed;right:0;top:0;transition:opacity .5s;z-index:var(--vp-z-index-backdrop)}.VPBackdrop.fade-enter-from[data-v-c79a1216],.VPBackdrop.fade-leave-to[data-v-c79a1216]{opacity:0}.VPBackdrop.fade-leave-active[data-v-c79a1216]{transition-duration:.25s}@media (min-width:1280px){.VPBackdrop[data-v-c79a1216]{display:none}}.NotFound[data-v-d6be1790]{padding:64px 24px 96px;text-align:center}@media (min-width:768px){.NotFound[data-v-d6be1790]{padding:96px 32px 168px}}.code[data-v-d6be1790]{font-size:64px;font-weight:600;line-height:64px}.title[data-v-d6be1790]{font-size:20px;font-weight:700;letter-spacing:2px;line-height:20px;padding-top:12px}.divider[data-v-d6be1790]{background-color:var(--vp-c-divider);height:1px;margin:24px auto 18px;width:64px}.quote[data-v-d6be1790]{color:var(--vp-c-text-2);font-size:14px;font-weight:500;margin:0 auto;max-width:256px}.action[data-v-d6be1790]{padding-top:20px}.link[data-v-d6be1790]{border:1px solid var(--vp-c-brand-1);border-radius:16px;color:var(--vp-c-brand-1);display:inline-block;font-size:14px;font-weight:500;padding:3px 16px;transition:border-color .25s,color .25s}.link[data-v-d6be1790]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-b933a997]{position:relative;z-index:1}.nested[data-v-b933a997]{padding-left:16px;padding-right:16px}.outline-link[data-v-b933a997]{color:var(--vp-c-text-2);display:block;font-size:14px;font-weight:400;line-height:32px;overflow:hidden;text-overflow:ellipsis;transition:color .5s;white-space:nowrap}.outline-link.active[data-v-b933a997],.outline-link[data-v-b933a997]:hover{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-b933a997]{padding-left:13px}.VPDocAsideOutline[data-v-a5bbad30]{display:none}.VPDocAsideOutline.has-outline[data-v-a5bbad30]{display:block}.content[data-v-a5bbad30]{border-left:1px solid var(--vp-c-divider);font-size:13px;font-weight:500;padding-left:16px;position:relative}.outline-marker[data-v-a5bbad30]{background-color:var(--vp-c-brand-1);border-radius:2px;height:18px;left:-1px;opacity:0;position:absolute;top:32px;transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s;width:2px;z-index:0}.outline-title[data-v-a5bbad30]{font-size:14px;font-weight:600;line-height:32px}.VPDocAside[data-v-3f215769]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-3f215769]{flex-grow:1}.VPDocAside[data-v-3f215769] .spacer+.VPDocAsideCarbonAds,.VPDocAside[data-v-3f215769] .spacer+.VPDocAsideSponsors{margin-top:24px}.VPDocAside[data-v-3f215769] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-e98dd255]{color:var(--vp-c-text-2);font-size:14px;font-weight:500;line-height:24px}@media (min-width:640px){.VPLastUpdated[data-v-e98dd255]{font-size:14px;font-weight:500;line-height:32px}}.VPDocFooter[data-v-e257564d]{margin-top:64px}.edit-info[data-v-e257564d]{padding-bottom:18px}@media (min-width:640px){.edit-info[data-v-e257564d]{align-items:center;display:flex;justify-content:space-between;padding-bottom:14px}}.edit-link-button[data-v-e257564d]{align-items:center;border:0;color:var(--vp-c-brand-1);display:flex;font-size:14px;font-weight:500;line-height:32px;transition:color .25s}.edit-link-button[data-v-e257564d]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-e257564d]{margin-right:8px}.prev-next[data-v-e257564d]{border-top:1px solid var(--vp-c-divider);display:grid;padding-top:24px;grid-row-gap:8px}@media (min-width:640px){.prev-next[data-v-e257564d]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-e257564d]{border:1px solid var(--vp-c-divider);border-radius:8px;display:block;height:100%;padding:11px 16px 13px;transition:border-color .25s;width:100%}.pager-link[data-v-e257564d]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-e257564d]{margin-left:auto;text-align:right}.desc[data-v-e257564d]{color:var(--vp-c-text-2);font-size:12px}.desc[data-v-e257564d],.title[data-v-e257564d]{display:block;font-weight:500;line-height:20px}.title[data-v-e257564d]{color:var(--vp-c-brand-1);font-size:14px;transition:color .25s}.VPDoc[data-v-39a288b8]{padding:32px 24px 96px;width:100%}@media (min-width:768px){.VPDoc[data-v-39a288b8]{padding:48px 32px 128px}}@media (min-width:960px){.VPDoc[data-v-39a288b8]{padding:48px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-39a288b8]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-39a288b8]{max-width:752px}}@media (min-width:1280px){.VPDoc .container[data-v-39a288b8]{display:flex;justify-content:center}.VPDoc .aside[data-v-39a288b8]{display:block}}@media (min-width:1440px){.VPDoc:not(.has-sidebar) .content[data-v-39a288b8]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-39a288b8]{max-width:1104px}}.container[data-v-39a288b8]{margin:0 auto;width:100%}.aside[data-v-39a288b8]{display:none;flex-grow:1;max-width:256px;order:2;padding-left:32px;position:relative;width:100%}.left-aside[data-v-39a288b8]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-39a288b8]{height:100vh;overflow-x:hidden;overflow-y:auto;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 48px);position:fixed;scrollbar-width:none;top:0;width:224px}.aside-container[data-v-39a288b8]::-webkit-scrollbar{display:none}.aside-curtain[data-v-39a288b8]{background:linear-gradient(transparent,var(--vp-c-bg) 70%);bottom:0;height:32px;position:fixed;width:224px;z-index:10}.aside-content[data-v-39a288b8]{display:flex;flex-direction:column;min-height:calc(100vh - var(--vp-nav-height) - var(--vp-layout-top-height, 0px) - 48px);padding-bottom:32px}.content[data-v-39a288b8]{margin:0 auto;position:relative;width:100%}@media (min-width:960px){.content[data-v-39a288b8]{padding:0 32px 128px}}@media (min-width:1280px){.content[data-v-39a288b8]{margin:0;min-width:640px;order:1}}.content-container[data-v-39a288b8]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-39a288b8]{max-width:688px}.VPButton[data-v-fa7799d5]{border:1px solid transparent;display:inline-block;font-weight:600;text-align:center;transition:color .25s,border-color .25s,background-color .25s;white-space:nowrap}.VPButton[data-v-fa7799d5]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-fa7799d5]{border-radius:20px;font-size:14px;line-height:38px;padding:0 20px}.VPButton.big[data-v-fa7799d5]{border-radius:24px;font-size:16px;line-height:46px;padding:0 24px}.VPButton.brand[data-v-fa7799d5]{background-color:var(--vp-button-brand-bg);border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text)}.VPButton.brand[data-v-fa7799d5]:hover{background-color:var(--vp-button-brand-hover-bg);border-color:var(--vp-button-brand-hover-border);color:var(--vp-button-brand-hover-text)}.VPButton.brand[data-v-fa7799d5]:active{background-color:var(--vp-button-brand-active-bg);border-color:var(--vp-button-brand-active-border);color:var(--vp-button-brand-active-text)}.VPButton.alt[data-v-fa7799d5]{background-color:var(--vp-button-alt-bg);border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text)}.VPButton.alt[data-v-fa7799d5]:hover{background-color:var(--vp-button-alt-hover-bg);border-color:var(--vp-button-alt-hover-border);color:var(--vp-button-alt-hover-text)}.VPButton.alt[data-v-fa7799d5]:active{background-color:var(--vp-button-alt-active-bg);border-color:var(--vp-button-alt-active-border);color:var(--vp-button-alt-active-text)}.VPButton.sponsor[data-v-fa7799d5]{background-color:var(--vp-button-sponsor-bg);border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text)}.VPButton.sponsor[data-v-fa7799d5]:hover{background-color:var(--vp-button-sponsor-hover-bg);border-color:var(--vp-button-sponsor-hover-border);color:var(--vp-button-sponsor-hover-text)}.VPButton.sponsor[data-v-fa7799d5]:active{background-color:var(--vp-button-sponsor-active-bg);border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text)}.dark .VPImage.light[data-v-8426fc1a],html:not(.dark) .VPImage.dark[data-v-8426fc1a]{display:none}.VPHero[data-v-4f9c455b]{margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px))*-1);padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px) 24px 48px}@media (min-width:640px){.VPHero[data-v-4f9c455b]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width:960px){.VPHero[data-v-4f9c455b]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-4f9c455b]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width:960px){.container[data-v-4f9c455b]{flex-direction:row}}.main[data-v-4f9c455b]{flex-grow:1;flex-shrink:0;order:2;position:relative;z-index:10}.VPHero.has-image .container[data-v-4f9c455b]{text-align:center}@media (min-width:960px){.VPHero.has-image .container[data-v-4f9c455b]{text-align:left}.main[data-v-4f9c455b]{order:1;width:66.66667%}.VPHero.has-image .main[data-v-4f9c455b]{max-width:592px}}.heading[data-v-4f9c455b]{display:flex;flex-direction:column}.name[data-v-4f9c455b],.text[data-v-4f9c455b]{font-size:32px;font-weight:700;letter-spacing:-.4px;line-height:40px;max-width:392px;white-space:pre-wrap;width:-moz-fit-content;width:fit-content}.VPHero.has-image .name[data-v-4f9c455b],.VPHero.has-image .text[data-v-4f9c455b]{margin:0 auto}.name[data-v-4f9c455b]{color:var(--vp-home-hero-name-color)}.clip[data-v-4f9c455b]{background:var(--vp-home-hero-name-background);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:var(--vp-home-hero-name-color)}@media (min-width:640px){.name[data-v-4f9c455b],.text[data-v-4f9c455b]{font-size:48px;line-height:56px;max-width:576px}}@media (min-width:960px){.name[data-v-4f9c455b],.text[data-v-4f9c455b]{font-size:56px;line-height:64px}.VPHero.has-image .name[data-v-4f9c455b],.VPHero.has-image .text[data-v-4f9c455b]{margin:0}}.tagline[data-v-4f9c455b]{color:var(--vp-c-text-2);font-size:18px;font-weight:500;line-height:28px;max-width:392px;padding-top:8px;white-space:pre-wrap}.VPHero.has-image .tagline[data-v-4f9c455b]{margin:0 auto}@media (min-width:640px){.tagline[data-v-4f9c455b]{font-size:20px;line-height:32px;max-width:576px;padding-top:12px}}@media (min-width:960px){.tagline[data-v-4f9c455b]{font-size:24px;line-height:36px}.VPHero.has-image .tagline[data-v-4f9c455b]{margin:0}}.actions[data-v-4f9c455b]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-4f9c455b]{justify-content:center}@media (min-width:640px){.actions[data-v-4f9c455b]{padding-top:32px}}@media (min-width:960px){.VPHero.has-image .actions[data-v-4f9c455b]{justify-content:flex-start}}.action[data-v-4f9c455b]{flex-shrink:0;padding:6px}.image[data-v-4f9c455b]{margin:-76px -24px -48px;order:1}@media (min-width:640px){.image[data-v-4f9c455b]{margin:-108px -24px -48px}}@media (min-width:960px){.image[data-v-4f9c455b]{flex-grow:1;margin:0;min-height:100%;order:2}}.image-container[data-v-4f9c455b]{height:320px;margin:0 auto;position:relative;width:320px}@media (min-width:640px){.image-container[data-v-4f9c455b]{height:392px;width:392px}}@media (min-width:960px){.image-container[data-v-4f9c455b]{align-items:center;display:flex;height:100%;justify-content:center;transform:translate(-32px,-32px);width:100%}}.image-bg[data-v-4f9c455b]{background-image:var(--vp-home-hero-image-background-image);border-radius:50%;filter:var(--vp-home-hero-image-filter);height:192px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:192px}@media (min-width:640px){.image-bg[data-v-4f9c455b]{height:256px;width:256px}}@media (min-width:960px){.image-bg[data-v-4f9c455b]{height:320px;width:320px}}[data-v-4f9c455b] .image-src{left:50%;max-height:192px;max-width:192px;position:absolute;top:50%;transform:translate(-50%,-50%)}@media (min-width:640px){[data-v-4f9c455b] .image-src{max-height:256px;max-width:256px}}@media (min-width:960px){[data-v-4f9c455b] .image-src{max-height:320px;max-width:320px}}.VPFeature[data-v-a3976bdc]{background-color:var(--vp-c-bg-soft);border:1px solid var(--vp-c-bg-soft);border-radius:12px;display:block;height:100%;transition:border-color .25s,background-color .25s}.VPFeature.link[data-v-a3976bdc]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-a3976bdc]{display:flex;flex-direction:column;height:100%;padding:24px}.box[data-v-a3976bdc]>.VPImage{margin-bottom:20px}.icon[data-v-a3976bdc]{align-items:center;background-color:var(--vp-c-default-soft);border-radius:6px;display:flex;font-size:24px;height:48px;justify-content:center;margin-bottom:20px;transition:background-color .25s;width:48px}.title[data-v-a3976bdc]{font-size:16px;font-weight:600}.details[data-v-a3976bdc],.title[data-v-a3976bdc]{line-height:24px}.details[data-v-a3976bdc]{color:var(--vp-c-text-2);flex-grow:1;font-size:14px;font-weight:500}.details[data-v-a3976bdc],.link-text[data-v-a3976bdc]{padding-top:8px}.link-text-value[data-v-a3976bdc]{align-items:center;color:var(--vp-c-brand-1);display:flex;font-size:14px;font-weight:500}.link-text-icon[data-v-a3976bdc]{margin-left:6px}.VPFeatures[data-v-a6181336]{padding:0 24px;position:relative}@media (min-width:640px){.VPFeatures[data-v-a6181336]{padding:0 48px}}@media (min-width:960px){.VPFeatures[data-v-a6181336]{padding:0 64px}}.container[data-v-a6181336]{margin:0 auto;max-width:1152px}.items[data-v-a6181336]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-a6181336]{padding:8px;width:100%}@media (min-width:640px){.item.grid-2[data-v-a6181336],.item.grid-4[data-v-a6181336],.item.grid-6[data-v-a6181336]{width:50%}}@media (min-width:768px){.item.grid-2[data-v-a6181336],.item.grid-4[data-v-a6181336]{width:50%}.item.grid-3[data-v-a6181336],.item.grid-6[data-v-a6181336]{width:33.33333%}}@media (min-width:960px){.item.grid-4[data-v-a6181336]{width:25%}}.container[data-v-8e2d4988]{margin:auto;max-width:1280px;padding:0 24px;width:100%}@media (min-width:640px){.container[data-v-8e2d4988]{padding:0 48px}}@media (min-width:960px){.container[data-v-8e2d4988]{padding:0 64px;width:100%}}.vp-doc[data-v-8e2d4988] .VPHomeSponsors,.vp-doc[data-v-8e2d4988] .VPTeamPage{margin-left:var(--vp-offset, calc(50% - 50vw) );margin-right:var(--vp-offset, calc(50% - 50vw) )}.vp-doc[data-v-8e2d4988] .VPHomeSponsors h2{border-top:none;letter-spacing:normal}.vp-doc[data-v-8e2d4988] .VPHomeSponsors a,.vp-doc[data-v-8e2d4988] .VPTeamPage a{text-decoration:none}.VPHome[data-v-8b561e3d]{margin-bottom:96px}@media (min-width:768px){.VPHome[data-v-8b561e3d]{margin-bottom:128px}}.VPContent[data-v-1428d186]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height,0) auto 0;width:100%}.VPContent.is-home[data-v-1428d186]{max-width:100%;width:100%}.VPContent.has-sidebar[data-v-1428d186]{margin:0}@media (min-width:960px){.VPContent[data-v-1428d186]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-1428d186]{margin:var(--vp-layout-top-height,0) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width:1440px){.VPContent.has-sidebar[data-v-1428d186]{padding-left:calc((100vw - var(--vp-layout-max-width))/2 + var(--vp-sidebar-width));padding-right:calc((100vw - var(--vp-layout-max-width))/2)}}.VPFooter[data-v-e315a0ad]{background-color:var(--vp-c-bg);border-top:1px solid var(--vp-c-gutter);padding:32px 24px;position:relative;z-index:var(--vp-z-index-footer)}.VPFooter.has-sidebar[data-v-e315a0ad]{display:none}.VPFooter[data-v-e315a0ad] a{text-decoration-line:underline;text-underline-offset:2px;transition:color .25s}.VPFooter[data-v-e315a0ad] a:hover{color:var(--vp-c-text-1)}@media (min-width:768px){.VPFooter[data-v-e315a0ad]{padding:32px}}.container[data-v-e315a0ad]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.copyright[data-v-e315a0ad],.message[data-v-e315a0ad]{color:var(--vp-c-text-2);font-size:14px;font-weight:500;line-height:24px}.VPLocalNavOutlineDropdown[data-v-8a42e2b4]{padding:12px 20px 11px}@media (min-width:960px){.VPLocalNavOutlineDropdown[data-v-8a42e2b4]{padding:12px 36px 11px}}.VPLocalNavOutlineDropdown button[data-v-8a42e2b4]{color:var(--vp-c-text-2);display:block;font-size:12px;font-weight:500;line-height:24px;position:relative;transition:color .5s}.VPLocalNavOutlineDropdown button[data-v-8a42e2b4]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-8a42e2b4]{color:var(--vp-c-text-1)}.icon[data-v-8a42e2b4]{display:inline-block;font-size:14px;margin-left:2px;transform:rotate(0);transition:transform .25s;vertical-align:middle}@media (min-width:960px){.VPLocalNavOutlineDropdown button[data-v-8a42e2b4]{font-size:14px}.icon[data-v-8a42e2b4]{font-size:16px}}.open>.icon[data-v-8a42e2b4]{transform:rotate(90deg)}.items[data-v-8a42e2b4]{background-color:var(--vp-c-gutter);border:1px solid var(--vp-c-border);border-radius:8px;box-shadow:var(--vp-shadow-3);display:grid;gap:1px;left:16px;max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;position:absolute;right:16px;top:40px}@media (min-width:960px){.items[data-v-8a42e2b4]{left:calc(var(--vp-sidebar-width) + 32px);right:auto;width:320px}}.header[data-v-8a42e2b4]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-8a42e2b4]{color:var(--vp-c-brand-1);display:block;font-size:14px;font-weight:500;line-height:48px;padding:0 16px}.outline[data-v-8a42e2b4]{background-color:var(--vp-c-bg-soft);padding:8px 0}.flyout-enter-active[data-v-8a42e2b4]{transition:all .2s ease-out}.flyout-leave-active[data-v-8a42e2b4]{transition:all .15s ease-in}.flyout-enter-from[data-v-8a42e2b4],.flyout-leave-to[data-v-8a42e2b4]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-a6f0e41e]{background-color:var(--vp-local-nav-bg-color);border-bottom:1px solid var(--vp-c-gutter);left:0;padding-top:var(--vp-layout-top-height,0);position:sticky;top:0;width:100%;z-index:var(--vp-z-index-local-nav)}.VPLocalNav.fixed[data-v-a6f0e41e]{position:fixed}@media (min-width:960px){.VPLocalNav[data-v-a6f0e41e]{top:var(--vp-nav-height)}.VPLocalNav.has-sidebar[data-v-a6f0e41e]{padding-left:var(--vp-sidebar-width)}.VPLocalNav.empty[data-v-a6f0e41e]{display:none}}@media (min-width:1280px){.VPLocalNav[data-v-a6f0e41e]{display:none}}@media (min-width:1440px){.VPLocalNav.has-sidebar[data-v-a6f0e41e]{padding-left:calc((100vw - var(--vp-layout-max-width))/2 + var(--vp-sidebar-width))}}.container[data-v-a6f0e41e]{justify-content:space-between}.container[data-v-a6f0e41e],.menu[data-v-a6f0e41e]{align-items:center;display:flex}.menu[data-v-a6f0e41e]{color:var(--vp-c-text-2);font-size:12px;font-weight:500;line-height:24px;padding:12px 24px 11px;transition:color .5s}.menu[data-v-a6f0e41e]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width:768px){.menu[data-v-a6f0e41e]{padding:0 32px}}@media (min-width:960px){.menu[data-v-a6f0e41e]{display:none}}.menu-icon[data-v-a6f0e41e]{font-size:14px;margin-right:8px}.VPOutlineDropdown[data-v-a6f0e41e]{padding:12px 24px 11px}@media (min-width:768px){.VPOutlineDropdown[data-v-a6f0e41e]{padding:12px 32px 11px}}.VPSwitch[data-v-1d5665e3]{background-color:var(--vp-input-switch-bg-color);border:1px solid var(--vp-input-border-color);border-radius:11px;display:block;flex-shrink:0;height:22px;position:relative;transition:border-color .25s!important;width:40px}.VPSwitch[data-v-1d5665e3]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-1d5665e3]{background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);left:1px;position:absolute;top:1px;transition:transform .25s!important}.check[data-v-1d5665e3],.icon[data-v-1d5665e3]{border-radius:50%;height:18px;width:18px}.icon[data-v-1d5665e3]{display:block;overflow:hidden;position:relative}.icon[data-v-1d5665e3] [class^=vpi-]{color:var(--vp-c-text-2);height:12px;left:3px;position:absolute;top:3px;width:12px}.dark .icon[data-v-1d5665e3] [class^=vpi-]{color:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-5337faa4]{opacity:1}.dark .sun[data-v-5337faa4],.moon[data-v-5337faa4]{opacity:0}.dark .moon[data-v-5337faa4]{opacity:1}.dark .VPSwitchAppearance[data-v-5337faa4] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-6c893767]{display:none}@media (min-width:1280px){.VPNavBarAppearance[data-v-6c893767]{align-items:center;display:flex}}.VPMenuGroup+.VPMenuLink[data-v-35975db6]{border-top:1px solid var(--vp-c-divider);margin:12px -12px 0;padding:12px 12px 0}.link[data-v-35975db6]{border-radius:6px;color:var(--vp-c-text-1);display:block;font-size:14px;font-weight:500;line-height:32px;padding:0 12px;transition:background-color .25s,color .25s;white-space:nowrap}.link[data-v-35975db6]:hover{background-color:var(--vp-c-default-soft)}.link.active[data-v-35975db6],.link[data-v-35975db6]:hover{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-69e747b5]{border-top:1px solid var(--vp-c-divider);margin:12px -12px 0;padding:12px 12px 0}.VPMenuGroup[data-v-69e747b5]:first-child{border-top:0;margin-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-69e747b5]{border-top:1px solid var(--vp-c-divider);margin-top:12px}.title[data-v-69e747b5]{color:var(--vp-c-text-2);font-size:14px;font-weight:600;line-height:32px;padding:0 12px;transition:color .25s;white-space:nowrap}.VPMenu[data-v-b98bc113]{background-color:var(--vp-c-bg-elv);border:1px solid var(--vp-c-divider);border-radius:12px;box-shadow:var(--vp-shadow-3);max-height:calc(100vh - var(--vp-nav-height));min-width:128px;overflow-y:auto;padding:12px;transition:background-color .5s}.VPMenu[data-v-b98bc113] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-b98bc113] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-b98bc113] .group:last-child{padding-bottom:0}.VPMenu[data-v-b98bc113] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-b98bc113] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-b98bc113] .label{color:var(--vp-c-text-2);flex-grow:1;font-size:12px;font-weight:500;line-height:28px;transition:color .5s}.VPMenu[data-v-b98bc113] .action{padding-left:24px}.VPFlyout[data-v-cf11d7a2]{position:relative}.VPFlyout[data-v-cf11d7a2]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-cf11d7a2]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-cf11d7a2]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-cf11d7a2]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-cf11d7a2]{color:var(--vp-c-brand-2)}.button[aria-expanded=false]+.menu[data-v-cf11d7a2]{opacity:0;transform:translateY(0);visibility:hidden}.VPFlyout:hover .menu[data-v-cf11d7a2],.button[aria-expanded=true]+.menu[data-v-cf11d7a2]{opacity:1;transform:translateY(0);visibility:visible}.button[data-v-cf11d7a2]{height:var(--vp-nav-height);padding:0 12px;transition:color .5s}.button[data-v-cf11d7a2],.text[data-v-cf11d7a2]{align-items:center;color:var(--vp-c-text-1);display:flex}.text[data-v-cf11d7a2]{font-size:14px;font-weight:500;line-height:var(--vp-nav-height);transition:color .25s}.option-icon[data-v-cf11d7a2]{font-size:16px;margin-right:0}.text-icon[data-v-cf11d7a2]{font-size:14px;margin-left:4px}.icon[data-v-cf11d7a2]{font-size:20px;transition:fill .25s}.menu[data-v-cf11d7a2]{opacity:0;position:absolute;right:0;top:calc(var(--vp-nav-height)/2 + 20px);transition:opacity .25s,visibility .25s,transform .25s;visibility:hidden}.VPSocialLink[data-v-bd121fe5]{align-items:center;color:var(--vp-c-text-2);display:flex;height:36px;justify-content:center;transition:color .5s;width:36px}.VPSocialLink[data-v-bd121fe5]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-bd121fe5]>[class^=vpi-social-],.VPSocialLink[data-v-bd121fe5]>svg{fill:currentColor;height:20px;width:20px}.VPSocialLinks[data-v-7bc22406]{display:flex;justify-content:center}.VPNavBarExtra[data-v-bb2aa2f0]{display:none;margin-right:-12px}@media (min-width:768px){.VPNavBarExtra[data-v-bb2aa2f0]{display:block}}@media (min-width:1280px){.VPNavBarExtra[data-v-bb2aa2f0]{display:none}}.trans-title[data-v-bb2aa2f0]{color:var(--vp-c-text-1);font-size:14px;font-weight:700;line-height:32px;padding:0 24px 0 12px}.item.appearance[data-v-bb2aa2f0],.item.social-links[data-v-bb2aa2f0]{align-items:center;display:flex;padding:0 12px}.item.appearance[data-v-bb2aa2f0]{min-width:176px}.appearance-action[data-v-bb2aa2f0]{margin-right:-2px}.social-links-list[data-v-bb2aa2f0]{margin:-4px -8px}.VPNavBarHamburger[data-v-e5dd9c1c]{align-items:center;display:flex;height:var(--vp-nav-height);justify-content:center;width:48px}@media (min-width:768px){.VPNavBarHamburger[data-v-e5dd9c1c]{display:none}}.container[data-v-e5dd9c1c]{height:14px;overflow:hidden;position:relative;width:16px}.VPNavBarHamburger:hover .top[data-v-e5dd9c1c]{left:0;top:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-e5dd9c1c]{left:0;top:6px;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-e5dd9c1c]{left:0;top:12px;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-e5dd9c1c]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-e5dd9c1c]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-e5dd9c1c]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .bottom[data-v-e5dd9c1c],.VPNavBarHamburger.active:hover .middle[data-v-e5dd9c1c],.VPNavBarHamburger.active:hover .top[data-v-e5dd9c1c]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.bottom[data-v-e5dd9c1c],.middle[data-v-e5dd9c1c],.top[data-v-e5dd9c1c]{background-color:var(--vp-c-text-1);height:2px;position:absolute;transition:top .25s,background-color .5s,transform .25s;width:16px}.top[data-v-e5dd9c1c]{left:0;top:0;transform:translate(0)}.middle[data-v-e5dd9c1c]{left:0;top:6px;transform:translate(8px)}.bottom[data-v-e5dd9c1c]{left:0;top:12px;transform:translate(4px)}.VPNavBarMenuLink[data-v-e56f3d57]{align-items:center;color:var(--vp-c-text-1);display:flex;font-size:14px;font-weight:500;line-height:var(--vp-nav-height);padding:0 12px;transition:color .25s}.VPNavBarMenuLink.active[data-v-e56f3d57],.VPNavBarMenuLink[data-v-e56f3d57]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-dc692963]{display:none}@media (min-width:768px){.VPNavBarMenu[data-v-dc692963]{display:flex}}/*! @docsearch/css 3.8.2 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 1px 0 rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 1px 1px 0 #0304094d;--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border:0;border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 2px;position:relative;top:-1px;width:20px}.DocSearch-Button-Key--pressed{box-shadow:var(--docsearch-key-pressed-shadow);transform:translate3d(0,1px,0)}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::-moz-placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border:0;border-radius:2px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;width:20px}.DocSearch-VisuallyHiddenForAccessibility{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}[class*=DocSearch]{--docsearch-primary-color:var(--vp-c-brand-1);--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-text-color:var(--vp-c-text-1);--docsearch-muted-color:var(--vp-c-text-2);--docsearch-searchbox-shadow:none;--docsearch-searchbox-background:transparent;--docsearch-searchbox-focus-background:transparent;--docsearch-key-gradient:transparent;--docsearch-key-shadow:none;--docsearch-modal-background:var(--vp-c-bg-soft);--docsearch-footer-background:var(--vp-c-bg)}.dark [class*=DocSearch]{--docsearch-modal-shadow:none;--docsearch-footer-shadow:none;--docsearch-logo-color:var(--vp-c-text-2);--docsearch-hit-background:var(--vp-c-default-soft);--docsearch-hit-color:var(--vp-c-text-2);--docsearch-hit-shadow:none}.DocSearch-Button{align-items:center;display:flex;height:55px;justify-content:center;margin:0;padding:0;transition:border-color .25s;width:48px}.DocSearch-Button,.DocSearch-Button:hover{background:transparent}.DocSearch-Button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.DocSearch-Button-Key--pressed{box-shadow:none;transform:none}.DocSearch-Button:focus:not(:focus-visible){outline:none!important}@media (min-width:768px){.DocSearch-Button{background-color:var(--vp-c-bg-alt);border:1px solid transparent;border-radius:8px;height:40px;justify-content:flex-start;padding:0 10px 0 12px;width:100%}.DocSearch-Button:hover{background:var(--vp-c-bg-alt);border-color:var(--vp-c-brand-1)}}.DocSearch-Button .DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Button .DocSearch-Search-Icon{color:var(--vp-c-text-1);fill:currentColor;height:16px;position:relative;transition:color .5s;width:16px}.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--vp-c-text-1)}@media (min-width:768px){.DocSearch-Button .DocSearch-Search-Icon{color:var(--vp-c-text-2);height:14px;margin-right:8px;top:1px;width:14px}}.DocSearch-Button .DocSearch-Button-Placeholder{color:var(--vp-c-text-2);display:none;font-size:13px;font-weight:500;margin-top:2px;padding:0 16px 0 0;transition:color .5s}.DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--vp-c-text-1)}@media (min-width:768px){.DocSearch-Button .DocSearch-Button-Placeholder{display:inline-block}}.DocSearch-Button .DocSearch-Button-Keys{direction:ltr;display:none;min-width:auto}@media (min-width:768px){.DocSearch-Button .DocSearch-Button-Keys{align-items:center;display:flex}}.DocSearch-Button .DocSearch-Button-Key{border:1px solid var(--vp-c-divider);border-radius:4px 0 0 4px;border-right:none;display:block;font-family:var(--vp-font-family-base);font-size:12px;font-weight:500;height:22px;line-height:22px;margin:2px 0 0;min-width:0;padding-left:6px;transition:color .5s,border-color .5s;width:auto}.DocSearch-Button .DocSearch-Button-Key+.DocSearch-Button-Key{border-left:none;border-radius:0 4px 4px 0;border-right:1px solid var(--vp-c-divider);padding-left:2px;padding-right:6px}.DocSearch-Button .DocSearch-Button-Key:first-child{font-size:0!important}.DocSearch-Button .DocSearch-Button-Key:first-child:after{color:var(--docsearch-muted-color);content:"Ctrl";font-size:12px;letter-spacing:normal}.mac .DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"⌘"}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.DocSearch-Search-Icon{--icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' stroke-width='1.6' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m14.386 14.386 4.088 4.088zA7.533 7.533 0 1 1 3.733 3.733a7.533 7.533 0 0 1 10.653 10.653'/%3E%3C/svg%3E")}.VPNavBarSearch{align-items:center;display:flex}@media (min-width:768px){.VPNavBarSearch{flex-grow:1;padding-left:24px}}@media (min-width:960px){.VPNavBarSearch{padding-left:32px}}.dark .DocSearch-Footer{border-top:1px solid var(--vp-c-divider)}.DocSearch-Form{background-color:var(--vp-c-white);border:1px solid var(--vp-c-brand-1)}.dark .DocSearch-Form{background-color:var(--vp-c-default-soft)}.DocSearch-Screen-Icon>svg{margin:auto}.VPNavBarSocialLinks[data-v-0394ad82]{display:none}@media (min-width:1280px){.VPNavBarSocialLinks[data-v-0394ad82]{align-items:center;display:flex}}.title[data-v-1168a8e4]{align-items:center;border-bottom:1px solid transparent;color:var(--vp-c-text-1);display:flex;font-size:16px;font-weight:600;height:var(--vp-nav-height);transition:opacity .25s;width:100%}@media (min-width:960px){.title[data-v-1168a8e4]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-1168a8e4]{border-bottom-color:var(--vp-c-divider)}}[data-v-1168a8e4] .logo{height:var(--vp-nav-logo-height);margin-right:8px}.VPNavBarTranslations[data-v-88af2de4]{display:none}@media (min-width:1280px){.VPNavBarTranslations[data-v-88af2de4]{align-items:center;display:flex}}.title[data-v-88af2de4]{color:var(--vp-c-text-1);font-size:14px;font-weight:700;line-height:32px;padding:0 24px 0 12px}.VPNavBar[data-v-6aa21345]{height:var(--vp-nav-height);pointer-events:none;position:relative;transition:background-color .25s;white-space:nowrap}.VPNavBar.screen-open[data-v-6aa21345]{border-bottom:1px solid var(--vp-c-divider);transition:none}.VPNavBar.screen-open[data-v-6aa21345],.VPNavBar[data-v-6aa21345]:not(.home){background-color:var(--vp-nav-bg-color)}@media (min-width:960px){.VPNavBar[data-v-6aa21345]:not(.home){background-color:transparent}.VPNavBar[data-v-6aa21345]:not(.has-sidebar):not(.home.top){background-color:var(--vp-nav-bg-color)}}.wrapper[data-v-6aa21345]{padding:0 8px 0 24px}@media (min-width:768px){.wrapper[data-v-6aa21345]{padding:0 32px}}@media (min-width:960px){.VPNavBar.has-sidebar .wrapper[data-v-6aa21345]{padding:0}}.container[data-v-6aa21345]{display:flex;height:var(--vp-nav-height);justify-content:space-between;margin:0 auto;max-width:calc(var(--vp-layout-max-width) - 64px)}.container[data-v-6aa21345],.container>.content[data-v-6aa21345],.container>.title[data-v-6aa21345]{pointer-events:none}.container[data-v-6aa21345] *{pointer-events:auto}@media (min-width:960px){.VPNavBar.has-sidebar .container[data-v-6aa21345]{max-width:100%}}.title[data-v-6aa21345]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width:960px){.VPNavBar.has-sidebar .title[data-v-6aa21345]{background-color:transparent;height:var(--vp-nav-height);left:0;padding:0 32px;position:absolute;top:0;width:var(--vp-sidebar-width);z-index:2}}@media (min-width:1440px){.VPNavBar.has-sidebar .title[data-v-6aa21345]{padding-left:max(32px,calc(50% - var(--vp-layout-max-width)/2 + 32px));width:calc(50% - var(--vp-layout-max-width)/2 + var(--vp-sidebar-width))}}.content[data-v-6aa21345]{flex-grow:1}@media (min-width:960px){.VPNavBar.has-sidebar .content[data-v-6aa21345]{padding-left:var(--vp-sidebar-width);padding-right:32px;position:relative;z-index:1}}@media (min-width:1440px){.VPNavBar.has-sidebar .content[data-v-6aa21345]{padding-left:calc((100vw - var(--vp-layout-max-width))/2 + var(--vp-sidebar-width));padding-right:calc((100vw - var(--vp-layout-max-width))/2 + 32px)}}.content-body[data-v-6aa21345]{align-items:center;display:flex;height:var(--vp-nav-height);justify-content:flex-end;transition:background-color .5s}@media (min-width:960px){.VPNavBar:not(.home.top) .content-body[data-v-6aa21345]{background-color:var(--vp-nav-bg-color);position:relative}.VPNavBar:not(.has-sidebar):not(.home.top) .content-body[data-v-6aa21345]{background-color:transparent}}@media (max-width:767px){.content-body[data-v-6aa21345]{-moz-column-gap:.5rem;column-gap:.5rem}}.appearance+.social-links[data-v-6aa21345]:before,.menu+.appearance[data-v-6aa21345]:before,.menu+.social-links[data-v-6aa21345]:before,.menu+.translations[data-v-6aa21345]:before,.translations+.appearance[data-v-6aa21345]:before{background-color:var(--vp-c-divider);content:"";height:24px;margin-left:8px;margin-right:8px;width:1px}.menu+.appearance[data-v-6aa21345]:before,.translations+.appearance[data-v-6aa21345]:before{margin-right:16px}.appearance+.social-links[data-v-6aa21345]:before{margin-left:16px}.social-links[data-v-6aa21345]{margin-right:-8px}.divider[data-v-6aa21345]{height:1px;width:100%}@media (min-width:960px){.VPNavBar.has-sidebar .divider[data-v-6aa21345]{padding-left:var(--vp-sidebar-width)}}@media (min-width:1440px){.VPNavBar.has-sidebar .divider[data-v-6aa21345]{padding-left:calc((100vw - var(--vp-layout-max-width))/2 + var(--vp-sidebar-width))}}.divider-line[data-v-6aa21345]{height:1px;transition:background-color .5s;width:100%}.VPNavBar:not(.home) .divider-line[data-v-6aa21345]{background-color:var(--vp-c-gutter)}@media (min-width:960px){.VPNavBar:not(.has-sidebar):not(.home.top) .divider[data-v-6aa21345],.VPNavBar:not(.home.top) .divider-line[data-v-6aa21345]{background-color:var(--vp-c-gutter)}}.VPNavScreenAppearance[data-v-b44890b2]{align-items:center;background-color:var(--vp-c-bg-soft);border-radius:8px;display:flex;justify-content:space-between;padding:12px 14px 12px 16px}.text[data-v-b44890b2]{color:var(--vp-c-text-2);font-size:12px;font-weight:500;line-height:24px}.VPNavScreenMenuLink[data-v-df37e6dd]{border-bottom:1px solid var(--vp-c-divider);color:var(--vp-c-text-1);display:block;font-size:14px;font-weight:500;line-height:24px;padding:12px 0 11px;transition:border-color .25s,color .25s}.VPNavScreenMenuLink[data-v-df37e6dd]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-3e9c20e4]{color:var(--vp-c-text-1);display:block;font-size:14px;font-weight:400;line-height:32px;margin-left:12px;transition:color .25s}.VPNavScreenMenuGroupLink[data-v-3e9c20e4]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-8133b170]{display:block}.title[data-v-8133b170]{color:var(--vp-c-text-2);font-size:13px;font-weight:700;line-height:32px;transition:color .25s}.VPNavScreenMenuGroup[data-v-b9ab8c58]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-b9ab8c58]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-b9ab8c58]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-b9ab8c58]{height:auto;padding-bottom:10px}.VPNavScreenMenuGroup.open .button[data-v-b9ab8c58]{color:var(--vp-c-brand-1);padding-bottom:6px}.VPNavScreenMenuGroup.open .button-icon[data-v-b9ab8c58]{transform:rotate(45deg)}.button[data-v-b9ab8c58]{align-items:center;color:var(--vp-c-text-1);display:flex;font-size:14px;font-weight:500;justify-content:space-between;line-height:24px;padding:12px 4px 11px 0;transition:color .25s;width:100%}.button[data-v-b9ab8c58]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-b9ab8c58]{transition:transform .25s}.group[data-v-b9ab8c58]:first-child{padding-top:0}.group+.group[data-v-b9ab8c58],.group+.item[data-v-b9ab8c58]{padding-top:4px}.VPNavScreenTranslations[data-v-858fe1a4]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-858fe1a4]{height:auto}.title[data-v-858fe1a4]{align-items:center;color:var(--vp-c-text-1);display:flex;font-size:14px;font-weight:500}.icon[data-v-858fe1a4]{font-size:16px}.icon.lang[data-v-858fe1a4]{margin-right:8px}.icon.chevron[data-v-858fe1a4]{margin-left:4px}.list[data-v-858fe1a4]{padding:4px 0 0 24px}.link[data-v-858fe1a4]{color:var(--vp-c-text-1);font-size:13px;line-height:32px}.VPNavScreen[data-v-f2779853]{background-color:var(--vp-nav-screen-bg-color);bottom:0;left:0;overflow-y:auto;padding:0 32px;pointer-events:auto;position:fixed;right:0;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px));transition:background-color .25s;width:100%}.VPNavScreen.fade-enter-active[data-v-f2779853],.VPNavScreen.fade-leave-active[data-v-f2779853]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-f2779853],.VPNavScreen.fade-leave-active .container[data-v-f2779853]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-f2779853],.VPNavScreen.fade-leave-to[data-v-f2779853]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-f2779853],.VPNavScreen.fade-leave-to .container[data-v-f2779853]{transform:translateY(-8px)}@media (min-width:768px){.VPNavScreen[data-v-f2779853]{display:none}}.container[data-v-f2779853]{margin:0 auto;max-width:288px;padding:24px 0 96px}.menu+.appearance[data-v-f2779853],.menu+.translations[data-v-f2779853],.translations+.appearance[data-v-f2779853]{margin-top:24px}.appearance+.social-links[data-v-f2779853],.menu+.social-links[data-v-f2779853]{margin-top:16px}.VPNav[data-v-ae24b3ad]{left:0;pointer-events:none;position:relative;top:var(--vp-layout-top-height,0);transition:background-color .5s;width:100%;z-index:var(--vp-z-index-nav)}@media (min-width:960px){.VPNav[data-v-ae24b3ad]{position:fixed}}.VPSidebarItem.level-0[data-v-b3fd67f8]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-b3fd67f8]{padding-bottom:10px}.item[data-v-b3fd67f8]{display:flex;position:relative;width:100%}.VPSidebarItem.collapsible>.item[data-v-b3fd67f8]{cursor:pointer}.indicator[data-v-b3fd67f8]{border-radius:2px;bottom:6px;left:-17px;position:absolute;top:6px;transition:background-color .25s;width:2px}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-b3fd67f8],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-b3fd67f8],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-b3fd67f8],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-b3fd67f8]{background-color:var(--vp-c-brand-1)}.link[data-v-b3fd67f8]{align-items:center;display:flex;flex-grow:1}.text[data-v-b3fd67f8]{flex-grow:1;font-size:14px;line-height:24px;padding:4px 0;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-b3fd67f8]{color:var(--vp-c-text-1);font-weight:700}.VPSidebarItem.level-1 .text[data-v-b3fd67f8],.VPSidebarItem.level-2 .text[data-v-b3fd67f8],.VPSidebarItem.level-3 .text[data-v-b3fd67f8],.VPSidebarItem.level-4 .text[data-v-b3fd67f8],.VPSidebarItem.level-5 .text[data-v-b3fd67f8]{color:var(--vp-c-text-2);font-weight:500}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-b3fd67f8],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-b3fd67f8],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-b3fd67f8],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-b3fd67f8],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-b3fd67f8],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-b3fd67f8]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-b3fd67f8],.VPSidebarItem.level-0.has-active>.item>.text[data-v-b3fd67f8],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-b3fd67f8],.VPSidebarItem.level-1.has-active>.item>.text[data-v-b3fd67f8],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-b3fd67f8],.VPSidebarItem.level-2.has-active>.item>.text[data-v-b3fd67f8],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-b3fd67f8],.VPSidebarItem.level-3.has-active>.item>.text[data-v-b3fd67f8],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-b3fd67f8],.VPSidebarItem.level-4.has-active>.item>.text[data-v-b3fd67f8],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-b3fd67f8],.VPSidebarItem.level-5.has-active>.item>.text[data-v-b3fd67f8]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-b3fd67f8],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-b3fd67f8],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-b3fd67f8],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-b3fd67f8],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-b3fd67f8],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-b3fd67f8]{color:var(--vp-c-brand-1)}.caret[data-v-b3fd67f8]{align-items:center;color:var(--vp-c-text-3);cursor:pointer;display:flex;flex-shrink:0;height:32px;justify-content:center;margin-right:-7px;transition:color .25s;width:32px}.item:hover .caret[data-v-b3fd67f8]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-b3fd67f8]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-b3fd67f8]{font-size:18px;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-b3fd67f8]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-b3fd67f8],.VPSidebarItem.level-2 .items[data-v-b3fd67f8],.VPSidebarItem.level-3 .items[data-v-b3fd67f8],.VPSidebarItem.level-4 .items[data-v-b3fd67f8],.VPSidebarItem.level-5 .items[data-v-b3fd67f8]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-b3fd67f8]{display:none}.no-transition[data-v-c40bc020] .caret-icon{transition:none}.group+.group[data-v-c40bc020]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width:960px){.group[data-v-c40bc020]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSidebar[data-v-319d5ca6]{background-color:var(--vp-sidebar-bg-color);bottom:0;box-shadow:var(--vp-c-shadow-3);left:0;max-width:320px;opacity:0;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;padding:32px 32px 96px;position:fixed;top:var(--vp-layout-top-height,0);transform:translate(-100%);transition:opacity .5s,transform .25s ease;width:calc(100vw - 64px);z-index:var(--vp-z-index-sidebar)}.VPSidebar.open[data-v-319d5ca6]{opacity:1;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1);visibility:visible}.dark .VPSidebar[data-v-319d5ca6]{box-shadow:var(--vp-shadow-1)}@media (min-width:960px){.VPSidebar[data-v-319d5ca6]{background-color:var(--vp-sidebar-bg-color);box-shadow:none;max-width:100%;opacity:1;padding-top:var(--vp-nav-height);transform:translate(0);visibility:visible;width:var(--vp-sidebar-width)}}@media (min-width:1440px){.VPSidebar[data-v-319d5ca6]{padding-left:max(32px,calc(50% - var(--vp-layout-max-width)/2 + 32px));width:calc(50% - var(--vp-layout-max-width)/2 + var(--vp-sidebar-width))}}@media (min-width:960px){.curtain[data-v-319d5ca6]{background-color:var(--vp-sidebar-bg-color);height:var(--vp-nav-height);left:0;margin-left:-32px;margin-right:-32px;margin-top:calc(var(--vp-nav-height)*-1);position:sticky;top:-64px;z-index:1}}.nav[data-v-319d5ca6]{outline:0}.VPSkipLink[data-v-0b0ada53]{background-color:var(--vp-c-bg);border-radius:8px;box-shadow:var(--vp-shadow-3);color:var(--vp-c-brand-1);font-size:12px;font-weight:700;left:8px;padding:8px 16px;text-decoration:none;top:8px;z-index:999}.VPSkipLink[data-v-0b0ada53]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width:1280px){.VPSkipLink[data-v-0b0ada53]{left:16px;top:14px}}.Layout[data-v-5d98c3a5]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-3d121b4a]{border-top:1px solid var(--vp-c-gutter);margin:96px 0;padding-top:88px!important}@media (min-width:768px){.VPHomeSponsors[data-v-3d121b4a]{margin:128px 0}}.VPHomeSponsors[data-v-3d121b4a]{padding:0 24px}@media (min-width:768px){.VPHomeSponsors[data-v-3d121b4a]{padding:0 48px}}@media (min-width:960px){.VPHomeSponsors[data-v-3d121b4a]{padding:0 64px}}.container[data-v-3d121b4a]{margin:0 auto;max-width:1152px}.love[data-v-3d121b4a]{color:var(--vp-c-text-3);font-size:28px;margin:0 auto;width:-moz-fit-content;width:fit-content}.icon[data-v-3d121b4a]{display:inline-block}.message[data-v-3d121b4a]{color:var(--vp-c-text-2);font-size:16px;font-weight:500;line-height:24px;margin:0 auto;max-width:320px;padding-top:10px;text-align:center}.sponsors[data-v-3d121b4a]{padding-top:32px}.action[data-v-3d121b4a]{padding-top:40px;text-align:center}.VPTeamMembersItem[data-v-f3fa364a]{border-radius:12px;display:flex;flex-direction:column;gap:2px;height:100%;overflow:hidden;width:100%}.VPTeamMembersItem.small .profile[data-v-f3fa364a]{padding:32px}.VPTeamMembersItem.small .data[data-v-f3fa364a]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-f3fa364a]{height:64px;width:64px}.VPTeamMembersItem.small .name[data-v-f3fa364a]{font-size:16px;line-height:24px}.VPTeamMembersItem.small .affiliation[data-v-f3fa364a]{font-size:14px;line-height:20px;padding-top:4px}.VPTeamMembersItem.small .desc[data-v-f3fa364a]{font-size:14px;line-height:20px;padding-top:12px}.VPTeamMembersItem.small .links[data-v-f3fa364a]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-f3fa364a]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-f3fa364a]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-f3fa364a]{height:96px;width:96px}.VPTeamMembersItem.medium .name[data-v-f3fa364a]{font-size:20px;letter-spacing:.15px;line-height:28px}.VPTeamMembersItem.medium .affiliation[data-v-f3fa364a]{font-size:16px;padding-top:4px}.VPTeamMembersItem.medium .desc[data-v-f3fa364a]{font-size:16px;max-width:288px;padding-top:16px}.VPTeamMembersItem.medium .links[data-v-f3fa364a]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-f3fa364a]{background-color:var(--vp-c-bg-soft);flex-grow:1}.data[data-v-f3fa364a]{text-align:center}.avatar[data-v-f3fa364a]{border-radius:50%;box-shadow:var(--vp-shadow-3);flex-shrink:0;margin:0 auto;position:relative}.avatar-img[data-v-f3fa364a]{border-radius:50%;bottom:0;left:0;-o-object-fit:cover;object-fit:cover;position:absolute;right:0;top:0}.name[data-v-f3fa364a]{font-weight:600;margin:0}.affiliation[data-v-f3fa364a]{font-weight:500;margin:0}.affiliation[data-v-f3fa364a],.org.link[data-v-f3fa364a]{color:var(--vp-c-text-2)}.org.link[data-v-f3fa364a]{transition:color .25s}.org.link[data-v-f3fa364a]:hover{color:var(--vp-c-brand-1)}.desc[data-v-f3fa364a]{margin:0 auto}.desc[data-v-f3fa364a] a{color:var(--vp-c-brand-1);font-weight:500;text-decoration-style:dotted;transition:color .25s}.links[data-v-f3fa364a]{height:56px}.links[data-v-f3fa364a],.sp-link[data-v-f3fa364a]{display:flex;justify-content:center}.sp-link[data-v-f3fa364a]{align-items:center;background-color:var(--vp-c-bg-soft);color:var(--vp-c-sponsor);font-size:14px;font-weight:500;padding:16px;text-align:center;transition:color .25s,background-color .25s}.sp .sp-link.link[data-v-f3fa364a]:focus,.sp .sp-link.link[data-v-f3fa364a]:hover{background-color:var(--vp-c-sponsor);color:var(--vp-c-white);outline:none}.sp-icon[data-v-f3fa364a]{font-size:16px;margin-right:8px}.VPTeamMembers.small .container[data-v-6cb0dbc4]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-6cb0dbc4]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-6cb0dbc4]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-6cb0dbc4]{max-width:876px}.VPTeamMembers.medium .container[data-v-6cb0dbc4]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width:375px){.VPTeamMembers.medium .container[data-v-6cb0dbc4]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-6cb0dbc4]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-6cb0dbc4]{max-width:760px}.container[data-v-6cb0dbc4]{display:grid;gap:24px;margin:0 auto;max-width:1152px}.VPTeamPage[data-v-7c57f839]{margin:96px 0}@media (min-width:768px){.VPTeamPage[data-v-7c57f839]{margin:128px 0}}.VPHome .VPTeamPageTitle[data-v-7c57f839-s]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPTeamMembers+.VPTeamPageSection[data-v-7c57f839-s],.VPTeamPageSection+.VPTeamPageSection[data-v-7c57f839-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-7c57f839-s]{margin-top:24px}@media (min-width:768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-7c57f839-s]{margin-top:16px}.VPTeamMembers+.VPTeamPageSection[data-v-7c57f839-s],.VPTeamPageSection+.VPTeamPageSection[data-v-7c57f839-s]{margin-top:96px}}.VPTeamMembers[data-v-7c57f839-s]{padding:0 24px}@media (min-width:768px){.VPTeamMembers[data-v-7c57f839-s]{padding:0 48px}}@media (min-width:960px){.VPTeamMembers[data-v-7c57f839-s]{padding:0 64px}}.VPTeamPageSection[data-v-b1a88750]{padding:0 32px}@media (min-width:768px){.VPTeamPageSection[data-v-b1a88750]{padding:0 48px}}@media (min-width:960px){.VPTeamPageSection[data-v-b1a88750]{padding:0 64px}}.title[data-v-b1a88750]{color:var(--vp-c-text-2);margin:0 auto;max-width:1152px;position:relative;text-align:center}.title-line[data-v-b1a88750]{background-color:var(--vp-c-divider);height:1px;left:0;position:absolute;top:16px;width:100%}.title-text[data-v-b1a88750]{background-color:var(--vp-c-bg);display:inline-block;font-size:20px;font-weight:500;letter-spacing:0;line-height:32px;padding:0 24px;position:relative}.lead[data-v-b1a88750]{color:var(--vp-c-text-2);font-size:16px;font-weight:500;line-height:24px;margin:0 auto;max-width:480px;padding-top:12px;text-align:center}.members[data-v-b1a88750]{padding-top:40px}.VPTeamPageTitle[data-v-bf2cbdac]{padding:48px 32px;text-align:center}@media (min-width:768px){.VPTeamPageTitle[data-v-bf2cbdac]{padding:64px 48px 48px}}@media (min-width:960px){.VPTeamPageTitle[data-v-bf2cbdac]{padding:80px 64px 48px}}.title[data-v-bf2cbdac]{font-size:36px;font-weight:500;letter-spacing:0;line-height:44px}@media (min-width:768px){.title[data-v-bf2cbdac]{font-size:48px;letter-spacing:-.5px;line-height:56px}}.lead[data-v-bf2cbdac]{color:var(--vp-c-text-2);font-size:16px;font-weight:500;line-height:24px;margin:0 auto;max-width:512px;padding-top:12px}@media (min-width:768px){.lead[data-v-bf2cbdac]{font-size:20px;letter-spacing:.15px;line-height:28px;max-width:592px}} diff --git a/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v1.md.DyHoZFsd.js b/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v1.md.DyHoZFsd.js deleted file mode 100644 index 9788b58c2c..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v1.md.DyHoZFsd.js +++ /dev/null @@ -1,4 +0,0 @@ -import{_ as e,c as t,o as i,ae as s}from"./chunks/framework.CBTkueSR.js";const u=JSON.parse('{"title":"Migrate to v1","description":"","frontmatter":{},"headers":[],"relativePath":"updates/migrate-v1.md","filePath":"updates/migrate-v1.md"}'),l={name:"updates/migrate-v1.md"};function n(o,a,r,p,h,d){return i(),t("div",null,[...a[0]||(a[0]=[s(`

v1.0.0 is the first stable release of the UI5 CLI. There are only a few notable changes to the 0.x alpha version.

Breaking changes

ui5-builder: Add transformation of apps index.html in self-contained build (SAP/ui5-builder#137)

When running a self-contained build on an application project, the index.html will be transformed by adopting the UI5 bootstrap script tag to load the custom bundle file instead.

ui5-project: normalizer: Rename optional parameter "translator" (SAP/ui5-project#96)

Renamed parameter "translator" of functions generateDependencyTree and generateProjectTree to "translatorName"

ui5-fs: Remove top-level access to adapters (SAP/ui5-fs#69)

Adapters "AbstractAdapter", "FileSystem" and "Memory" used to be accessible via the top-level export of index.js
Example:

js
require("@ui5/project").FileSystem

This is no longer possible. Adapters are now grouped in the top-level object "adapters" and can be accessed from there
Example:

js
require("@ui5/project").adapters.FileSystem

How to upgrade

Global installation

To upgrade your global installation, just run the installation command again, which will upgrade to the latest version.

npm install --global @ui5/cli

Note: Your local CLI installation will still be preferred, so you need to make sure to upgrade it as well (see Local vs. Global installation).

Local installation

To upgrade the CLI installation within a project you need to run the following command.

npm install @ui5/cli@^1

ui5.yaml

specVersion: "1.0"

We have introduced the specification version 1.0. New features will only be available for projects with specVersion 1.0 or newer.
The specVersion 0.1 will be compatible with the UI5 CLI v1.0.0, but we still recommend to adopt your projects.

yaml
specVersion: "1.0"
-metadata:
-  name: <project-name>
-type: <project-type>
`,24)])])}const g=e(l,[["render",n]]);export{u as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v1.md.DyHoZFsd.lean.js b/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v1.md.DyHoZFsd.lean.js deleted file mode 100644 index d401d925da..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v1.md.DyHoZFsd.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,c as t,o as i,ae as s}from"./chunks/framework.CBTkueSR.js";const u=JSON.parse('{"title":"Migrate to v1","description":"","frontmatter":{},"headers":[],"relativePath":"updates/migrate-v1.md","filePath":"updates/migrate-v1.md"}'),l={name:"updates/migrate-v1.md"};function n(o,a,r,p,h,d){return i(),t("div",null,[...a[0]||(a[0]=[s("",24)])])}const g=e(l,[["render",n]]);export{u as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v2.md.CL9i7ISl.js b/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v2.md.CL9i7ISl.js deleted file mode 100644 index 00dec63b86..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v2.md.CL9i7ISl.js +++ /dev/null @@ -1,4 +0,0 @@ -import{_ as a,c as t,o as i,ae as s}from"./chunks/framework.CBTkueSR.js";const u=JSON.parse('{"title":"Migrate to v2","description":"","frontmatter":{},"headers":[],"relativePath":"updates/migrate-v2.md","filePath":"updates/migrate-v2.md"}'),o={name:"updates/migrate-v2.md"};function r(l,e,n,p,c,d){return i(),t("div",null,[...e[0]||(e[0]=[s(`

Migrate to v2

v2.0.0 of the UI5 CLI was released on April 1, 2020. As a major feature, it introduces the easy consumption of SAPUI5 libraries in UI5 projects.

Breaking changes

All UI5 CLI Modules: Require Node.js >= 10

Support for older Node.js releases has been dropped.

UI5 Builder: Make namespace mandatory for application and library projects (SAP/ui5-builder#430)

The UI5 CLI must be able to determine an application- or library project's namespace. Otherwise an error is thrown.

Ideally the namespace should be defined in the sap.app/id field of the manifest.json

In case of libraries, additional fallbacks are in place:

  1. The name attribute defined in the .library file
  2. The path of the library.js file

UI5 Builder: LibraryFormatter: Ignore manifest.json of nested apps (SAP/ui5-builder#392)

If a library contains both a manifest.json and a .library file, they must be located in the same directory. Otherwise the manifest.json is ignored. In cases where the manifest.json is located at a higher level or in a different directory at the same level as the .library file, an exception is thrown.

UI5 Server: serveResources middleware: Expect *.properties files in UTF-8 by default (SAP/ui5-server#303)

For projects of types other than application or library, the UI5 Server now expects *.properties files to be UTF-8 encoded as opposed to ISO-8859-1 before.

Note: This change does not affect most projects as *.properties files are typically only located in applications or libraries, for which their project specific configuration is used.

UI5 FS: Remove deprecated parameter useNamespaces (SAP/ui5-fs#223)

Remove the deprecated parameter useNamespaces from method resourceFactory.createCollectionsForTree. Use the parameter getVirtualBasePathPrefix instead.

How to upgrade

Global installation

To upgrade your global installation, just run the installation command again, which will upgrade to the latest version.

npm install --global @ui5/cli

Note: Your local CLI installation will still be preferred, so you need to make sure to upgrade it as well (see Local vs. Global installation).

Local installation

To upgrade the CLI installation within a project, you need to run the following command:

npm install --save-dev @ui5/cli@^2

ui5.yaml

specVersion: "2.0"

We have introduced the specification version 2.0. New features will only be available for projects with specVersion 2.0 or newer.
Most projects defining specVersion 0.1 or 1.0 can still be used.

yaml
specVersion: "2.0"
-metadata:
-  name: <project-name>
-type: <project-type>
`,29)])])}const g=a(o,[["render",r]]);export{u as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v2.md.CL9i7ISl.lean.js b/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v2.md.CL9i7ISl.lean.js deleted file mode 100644 index e6db7ab78b..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v2.md.CL9i7ISl.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,c as t,o as i,ae as s}from"./chunks/framework.CBTkueSR.js";const u=JSON.parse('{"title":"Migrate to v2","description":"","frontmatter":{},"headers":[],"relativePath":"updates/migrate-v2.md","filePath":"updates/migrate-v2.md"}'),o={name:"updates/migrate-v2.md"};function r(l,e,n,p,c,d){return i(),t("div",null,[...e[0]||(e[0]=[s("",29)])])}const g=a(o,[["render",r]]);export{u as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v3.md.DII3bq7u.js b/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v3.md.DII3bq7u.js deleted file mode 100644 index ac9d50a077..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v3.md.DII3bq7u.js +++ /dev/null @@ -1,29 +0,0 @@ -import{_ as t,c as s,o as a,ae as i}from"./chunks/framework.CBTkueSR.js";const g=JSON.parse('{"title":"Migrate to v3","description":"","frontmatter":{},"headers":[],"relativePath":"updates/migrate-v3.md","filePath":"updates/migrate-v3.md"}'),n={name:"updates/migrate-v3.md"};function r(d,e,o,l,c,h){return a(),s("div",null,[...e[0]||(e[0]=[i(`

Migrate to v3

"Superseded"

UI5 CLI 3.0 has been superseded by version 4.0. See Migrate to v4.

Find the announcement blog post for version 3.0 here: SAP Community: UI5 CLI 3.0

Node.js and npm Version Support

This release requires Node.js versions v16.18.0, v18.12.0 or higher as well as npm v8 or higher. Support for older Node.js and npm releases has been dropped and will cause an error to be shown.

Specification Versions Support

Going forward, only projects with Specification Versions 2.0 and higher are supported.

In case a legacy specification version is detected, an automatic migration is attempted. This means your old projects might still work. Unless they have non-standard configuration in their ui5.yaml.

Changes for Projects

INFO

✅ Projects defining Specification Version 2.x are expected to be fully compatible with UI5 CLI v3

For projects defining the latest Specification Versions 3.0 and higher, some changes apply:

  • Breaking Change: The metadata.name property is now restricted to contain only certain characters and no uppercase letters. See Configuration: name for details

See also Configuration: Specification Version 3.0.

Changes for Extensions

INFO

✅ Custom Tasks and Custom Middleware defining Specification Version 2.x are expected to be fully compatible with UI5 CLI v3

For extensions defining the latest Specification Versions 3.0 and higher, some changes and improvements apply:

  • Breaking Change: Custom Tasks need to request access to dependency resources
    • By default, resources of dependencies can't be accessed. A custom task requiring such access needs to implement a callback function with the export name determineRequiredDependencies. In this function it can define the scope of dependency-access. Please refer to the Custom Task: Required Dependencies documentation for details
  • Breaking Change: The metadata.name property is now restricted to contain only certain characters and no uppercase letters. See Configuration: name for details
  • Features: Enhanced TaskUtil and MiddlewareUtil API

Changes to Dependency Configuration

INFO

✅ The ui5.dependencies package.json configuration becomes obsolete and is ignored in UI5 CLI v3.

Configuration like the following is not needed anymore:

\`dependencies\`, \`devDependencies\` and \`optionalDependencies\` are now [automatically analyzed](https://github.com/SAP/ui5-project/blob/ff04ae4aeeb7f7d889dffd0c0e3e8774dd708c79/lib/graph/providers/NodePackageDependencies.js#L104).
-If a dependency can be configured as a UI5 project or UI5 CLI extension, it is added to the graph and its \`dependencies\` are analyzed.
-

dependencies, devDependencies and optionalDependencies are now automatically analyzed. If a dependency can be configured as a UI5 project or UI5 Tooling extension, it is added to the graph and its dependencies are analyzed.

Note that devDependencies and optionalDependencies are ignored for all but the current root project. For projects that are intended to be consumed in other projects (for example libraries), this means that any required custom tasks must be added to dependencies. :::

Changes to Module API

The normalizer and projectTree modules have been removed. The builder API has been moved from @ui5/builder to @ui5/project.

The JSON based, internal representation of a project dependency tree has been replaced with a graph. This is the result of a major refactoring of @ui5/project which lead to a series of API changes.

Also the @ui5/server API has been changed. Instead of a tree, it now only accepts a graph instance as the first parameter.

Migrate Your Code

The UI5 CLI-related modules such as @ui5/builder, etc. have been transformed to ES Modules ("ESM"). Therefore, they no longer use a CommonJS export and cannot be included via require. If your code is in CommonJS format, it needs to use dynamic imports or be converted to ES Modules.

Old: @ui5/project v2

js
const {normalizer} = require("@ui5/project");
-const {builder} = require("@ui5/builder");
-
-const tree = await normalizer.generateProjectTree({cwd: "."});
-
-await builder.build({
-    tree,
-    destPath: "./dist",
-    buildDependencies: true,
-});

New: @ui5/project v3

js
import {graphFromPackageDependencies} from "@ui5/project/graph";
-
-let graph = await graphFromPackageDependencies({cwd: "."});
-
-await graph.build({
-    destPath: "./dist",
-    includedDependencies: ["*"], // Parameter "buildDependencies" has been removed
-});
js
// Since CommonJS does not suport top-level await, the code must be wrapped in an asynchronous function
-async function buildProject() {
-    const {graphFromPackageDependencies} = await import("@ui5/project/graph");
-
-    let graph = await graphFromPackageDependencies({cwd: "."});
-
-    await graph.build({
-        destPath: "./dist",
-        includedDependencies: ["*"], // Parameter "buildDependencies" has been removed
-    });
-}

Changes to @ui5/cli

  • The CLI option --translator has been removed. For static dependency resolution, use the new option --dependency-definition to provide a file with static dependency information.
  • The ui5 build dev command has been removed. Use ui5 build --exclude-task=* --include-task=replaceCopyright replaceVersion replaceBuildtime buildThemes instead.

JSDoc Processor Fails When JSDoc Reports an Error

The jsdocGenerator processor and the corresponding generateJsdoc task will now throw an error when JSDoc reports an error (exit code != 0). This will also fail the build when running ui5 build jsdoc.

Always Building Required Dependencies

If any of a project's build tasks requires access to resources of the project's dependencies, UI5 CLI v3 will now always build that dependency upfront.

This ensures that tasks always access processed resources and never the raw sources of a dependency. Resulting in better reproducibility of build results and resolving common issues.

Especially for projects of type library, where standard tasks like buildThemes always require dependency access, UI5 CLI will now always build all dependencies.

In the future, a caching mechanism should help and improve build times with this new behavior.

Info

The CLI flags -a and --all are still present and now an alias for --include-all-dependencies. This flag (along with --include-dependency* and --exclude-dependency*) mainly controls the build output. Use it to define whether dependency resources should be part of the build result.

Please also refer to the ui5 build documentation.

Removal of Standard Tasks and Processors

The following tasks have been removed:

  • createDebugFiles
  • generateManifestBundle
  • uglify

The following processors have been removed:

  • debugFileCreator
  • manifestBundler
  • resourceCopier
  • uglifier

Task Migration

UI5 CLI v2UI5 CLI v3Note
createDebugFiles uglifyminifyThe minify task is executed earlier, before the bundling process takes place. Any existing beforeTask or afterTask configuration of custom tasks might need to be adapted to cater for this change.
To adapt, you can use the generateResourcesJson task for subscription before or after the last standard task. By default, generateResourcesJson is disabled, but you can still subscribe to it, thereby ensuring that your custom tasks execute in the correct order.
generateVersionInfogenerateVersionInfoThe task is no longer executed by default for application projects. It can be re-enabled by using the --include-task parameter.
generateManifestBundleNoneThis task was only needed for the HTML5 repository in Cloud Foundry. Meanwhile, the HTML5 repository implemented its own mechanism, so the task is no longer needed

Updated list of standard tasks:

TaskType applicationType libraryType theme-library
escapeNonAsciiCharactersenabledenabled
replaceCopyrightenabledenabledenabled
replaceVersionenabledenabledenabled
replaceBuildtimeenabled
generateJsdocdisabled¹
executeJsdocSdkTransformationdisabled¹
ADDED: minifyenabledenabled
generateFlexChangesBundleenabledenabled
REMOVED: generateManifestBundledisableddisabled
generateLibraryManifestenabled
generateComponentPreloadenableddisabled²
generateLibraryPreloadenabled
generateStandaloneAppBundledisabled³
transformBootstrapHtmldisabled³
generateBundledisabled⁴disabled⁴
buildThemesenabledenabled
generateThemeDesignerResourcesdisabled⁵disabled⁵
REMOVED: createDebugFilesenabledenabled
REMOVED: uglifyenabledenabled
generateVersionInfodisabled
generateCachebusterInfodisabled
generateApiIndexdisabled¹
generateResourcesJsondisableddisableddisabled

Disabled tasks can be activated by certain build modes, the project configuration, or by using the --include-task CLI parameter. See footnotes where given


¹ Enabled in jsdoc build, which disables most of the other tasks
² Enabled for projects defining a component preload configuration
³ Enabled in self-contained build, which disables generateComponentPreload and generateLibraryPreload
⁴ Enabled for projects defining a bundle configuration
⁵ Can be enabled for framework projects via the includeTask option. For other projects, this task is skipped

Removal of Standard Middleware

The following middleware has been removed from the standard middlewares list:

  • connectUi5Proxy

Middleware Migration

UI5 CLI v2UI5 CLI v3Note
connectUi5ProxyNoneMore sophisticated proxy solutions for ui5-server are now available in the form of custom middleware extensions from the UI5-community. Make sure to refactor any custom middleware that attaches to beforeMiddleware or afterMiddleware of connectUi5Proxy to reference some other middleware.
`,59)])])}const k=t(n,[["render",r]]);export{g as __pageData,k as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v3.md.DII3bq7u.lean.js b/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v3.md.DII3bq7u.lean.js deleted file mode 100644 index 3919424694..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v3.md.DII3bq7u.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as t,c as s,o as a,ae as i}from"./chunks/framework.CBTkueSR.js";const g=JSON.parse('{"title":"Migrate to v3","description":"","frontmatter":{},"headers":[],"relativePath":"updates/migrate-v3.md","filePath":"updates/migrate-v3.md"}'),n={name:"updates/migrate-v3.md"};function r(d,e,o,l,c,h){return a(),s("div",null,[...e[0]||(e[0]=[i("",59)])])}const k=t(n,[["render",r]]);export{g as __pageData,k as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v4.md.DEFkbQjG.js b/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v4.md.DEFkbQjG.js deleted file mode 100644 index 026f2503bf..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v4.md.DEFkbQjG.js +++ /dev/null @@ -1,20 +0,0 @@ -import{_ as i,c as s,o as a,ae as o}from"./chunks/framework.CBTkueSR.js";const u=JSON.parse('{"title":"Migrate to v4","description":"","frontmatter":{},"headers":[],"relativePath":"updates/migrate-v4.md","filePath":"updates/migrate-v4.md"}'),t={name:"updates/migrate-v4.md"};function n(r,e,p,l,h,d){return a(),s("div",null,[...e[0]||(e[0]=[o(`

Migrate to v4

"New Release"

UI5 CLI 4.0 has been released on July 24, 2024 🎉

And find the announcement blog post here: SAP Community: UI5 CLI 4.0

UI5 2.x Compatibility

Also see the blog post SAP Community: Introducing OpenUI5 2.x

UI5 CLI 4.0 is required for building UI5 2.x projects. The UI5 2.x framework libraries define Specification Version 4.0 and therefore can't be built using older UI5 CLI versions.

For applications and libraries running with UI5 2.x, the use of Specification Version 4.0 is not enforced. It is highly recommended, however, since only then UI5 CLI will ensure UI5 2.x compatibility of the generated bundles.

Node.js and npm Version Support

This release requires Node.js version v20.11.0 and higher or v22.0.0 and higher (v21 is not supported) as well as npm v8 or higher. Support for older Node.js releases has been dropped; their use will cause an error.

Specification Versions Support

As with UI5 CLI 3.x, all projects with Specification Versions 2.0 and higher are supported.

If a legacy specification version is detected, an automatic migration is attempted. Old projects might therefore still work, unless they have a non-standard configuration in their ui5.yaml.

Changes for Projects

"No changes for Specification Versions 2.x and 3.x"

Projects defining Specification Version 2.x or 3.x are expected to be fully compatible with UI5 CLI v4

Changes for Specification Version 4.0

Projects defining Specification Version 2.x or 3.x are expected to be fully compatible with UI5 Tooling v4

The following does not apply to them. :::

For projects defining the latest Specification Version 4.0 or higher, the following changes apply:

  • Breaking Change: Bundling of JavaScript modules requiring "top level scope" as a string is terminated.

    In UI5 2.x, the feature of evaluating modules from a string is expected to be removed. Therefore, when using the latest Specification Version, UI5 CLI will omit affected module from the bundle and log an error message instead.

    For more details, see Builder: JavaScript Files Requiring Top Level Scope.

  • Breaking Change: New async option for the require sections of bundle definitions.

    This option defaults to true for Specification Version 4.0 and higher, which can influence the loading behavior of your project. Require sections are now expressed using sap.ui.require instead of sap.ui.requireSync. The latter is not available in UI5 2.x.

    Note that the same default applies for all standard bundles as well, like the component- or library preloads as well as self-contained bundles.

    See Configuration: bundleDefinition.sections for more on the new async option.

  • Breaking Change: Removal of the usePredefineCalls bundle option. UI5 CLI v4 will always use sap.ui.predefine calls in bundles, making this option obsolete.

    We do not expect any negative impact on projects due to this change, therefore it is active independently of the Specification Version. However, when upgrading to Specification Version 4.0 you might need to remove the property if you have it in your ui5.yaml configuration.

You can find a summary of the above at Configuration: Specification Version 4.0.

Migrate Your Code

When using the Node.js API of UI5 CLI, or when integrating it into other tools, the following changes might be relevant to you:

Changes to @ui5/cli

Occurrences of console.log in the code base are replaced with process.stderr. Аny scripts that capture the output from console.log need to be adjusted to rely on process.stderr.

Changes to @ui5/fs

Non-public DuplexCollection#byGlobSource API has been removed.

Changes to @ui5/builder

  • Bundling: The usePredefineCalls option has been removed. Bundling now enforces the use of sap.ui.predefine instead of function wrappers.

  • Task API: The namespace option has been renamed to projectNamespace. For more information, check the documentation for CustomTasks API

  • New Option: Added a new async option for builder.bundles.bundleDefinition.section.

Example

yaml
builder:
-   bundles:
-   - bundleDefinition:
-       name: "app.js"
-       sections:
-           - mode: require
-           filters:
-               - some/app/Component.js
-           resolve: true
-           sort: true
-           async: true

Changes to @ui5/project

Default Workspace Name: The default workspaceName is now "default" for API usage.

js
import {graphFromPackageDependencies} from "@ui5/project/graph";
-
-graphFromPackageDependencies({
-    /* workspaceName: "default" */
-});

Directory Naming: The ui5HomeDir has been renamed to ui5DataDir in APIs.

js
import Resolver from "@ui5/project/ui5Framework/Openui5Resolver";
-
-await Resolver.resolveVersion("1.120.15", {
-    ui5DataDir: "~/.ui5",
-    cwd: process.cwd()
-});
  • Dependencies: The @ui5/builder is now an optional dependency to the @ui5/project

Consumers of the Node.js API that make use of the ProjectGraph#build method need to declare a dependency to @ui5/builder in their respective package.json. The package manager should ensure that the version fulfills the range specified in the package.json of @ui5/project.

Troubleshooting

App Stops Working With UI5 1.71

This might be caused by a mismatch of your project's manifest version and your UI5 version.

UI5 CLI v4 enhances the manifest.json with information about the supportedLocales (also see Builder: Generation of Supported Locales). In UI5 1.71 this configuration is not supported and leads to an ambiguous error message TypeError: invalid input and a failure to process the manifest file.

UI5 CLI uses the manifest's _version property to decide whether the supportedLocales can be generated. For UI5 1.71, only versions up to 1.17.0 are supported. See UI5 Demo Kit: Descriptor for Applications, Components, and Libraries (manifest.json) for a mapping per manifest version.

To resolve this issue, adjust the manifest version according to the UI5 version you are using.

This issue was first raised here: UI5 CLI #988

`,42)])])}const g=i(t,[["render",n]]);export{u as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v4.md.DEFkbQjG.lean.js b/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v4.md.DEFkbQjG.lean.js deleted file mode 100644 index 21c9dad030..0000000000 --- a/packages/documentation/docs/.vitepress/dist/assets/updates_migrate-v4.md.DEFkbQjG.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as i,c as s,o as a,ae as o}from"./chunks/framework.CBTkueSR.js";const u=JSON.parse('{"title":"Migrate to v4","description":"","frontmatter":{},"headers":[],"relativePath":"updates/migrate-v4.md","filePath":"updates/migrate-v4.md"}'),t={name:"updates/migrate-v4.md"};function n(r,e,p,l,h,d){return a(),s("div",null,[...e[0]||(e[0]=[o("",42)])])}const g=i(t,[["render",n]]);export{u as __pageData,g as default}; diff --git a/packages/documentation/docs/.vitepress/dist/extensibility/CustomServerMiddleware.html b/packages/documentation/docs/.vitepress/dist/extensibility/CustomServerMiddleware.html deleted file mode 100644 index d2dfe0734f..0000000000 --- a/packages/documentation/docs/.vitepress/dist/extensibility/CustomServerMiddleware.html +++ /dev/null @@ -1,177 +0,0 @@ - - - - - - Custom UI5 Server Middleware | VitePress - - - - - - - - - - - - - - -
Skip to content

Custom UI5 Server Middleware

The UI5 Server Extensibility enables you to enhance the functionality of the UI5 Server. You may want to handle requests differently. For example add various headers to a response or parse data of a POST request in a specific way. For this you can plug custom middleware implementations into the internal express server of the UI5 Server module.

The UI5 community already created many custom middleware packages which you can integrate into your project. They are often prefixed by ui5-middleware- to make them easily searchable in the npm registry.

Please note that custom middleware packages from third parties can not only modify how your project is served but also execute arbitrary code on your system. In fact, this is the case for all npm packages you install. Always act with the according care and follow best practices.

Configuration

In a projects ui5.yaml file, you can define additional server middleware modules that will be executed when the request is received by the server. This configuration exclusively affects the server started in this project. Custom middleware configurations defined in any dependencies are ignored.

A middleware may be executed before or after any other middleware. This can either be a standard middleware or another custom middleware.

Example: Basic configuration

yaml
# In this example configuration, two custom tasks are defined: 'babel' and 'render-markdown-files'.
-specVersion: "4.0"
-type: application
-metadata:
-  name: my.application
-server:
-  customMiddleware:
-    - name: myCustomMiddleware
-      mountPath: /myapp
-      afterMiddleware: compression
-      configuration:
-        debug: true

In the above example the middleware compression is already included as a standard middleware by the UI5 Server. When serving the application my.application, the server will call the custom middleware myCustomMiddleware after compression.

There can be optional configuration parameters which are passed directly to the custom middleware implementation (see below).

An optional mountPath for which the middleware function is invoked can be provided. It will be passed to the app.use call (see express API reference).

Execution order

Note that middleware configurations are applied in the order they are defined. When referencing another custom middleware, it has to be defined before that reference.

Custom Middleware Extension

A custom middleware extension consists of a ui5.yaml and a custom middleware implementation. It can be a standalone module or part of an existing UI5 project.

Example: ui5.yaml

yaml
specVersion: "4.0"
-kind: extension
-type: server-middleware
-metadata:
-  name: markdownHandler
-middleware:
-  path: lib/middleware/markdownHandler.js

Custom middleware extensions can be standalone modules which are handled as dependencies.

Alternatively you can implement a custom middleware extension as part of your UI5 project. In that case, the configuration of the extension is part of your project configuration inside the ui5.yaml as shown below.

The UI5 Server will detect the custom middleware configuration of the project and use the middleware on startup.

Example: Custom Middleware Extension defined in UI5 project

yaml
# Project configuration for the above example
-specVersion: "4.0"
-kind: project
-type: application
-metadata:
-  name: my.application
-server:
-  customMiddleware:
-    - name: markdownHandler
-      beforeMiddleware: serveResources
----
-# Custom middleware extension as part of your project
-specVersion: "4.0"
-kind: extension
-type: server-middleware
-metadata:
-  name: markdownHandler
-middleware:
-  path: lib/middleware/markdownHandler.js

Custom Middleware Implementation

A custom middleware implementation needs to return a function with the following signature:

js
/**
- * Custom UI5 Server middleware API
- * 
- * @param {object} parameters Parameters
- * @param {@ui5/logger/Logger} parameters.log
- *      Logger instance for use in the custom middleware.
- *      This parameter is only provided to custom middleware
- *      extensions defining Specification Version 3.0 and later.
- * @param {@ui5/server.middleware.MiddlewareUtil} parameters.middlewareUtil
- *      Specification version-dependent interface to a
- *      MiddlewareUtil instance. See the corresponding API reference for details:
- *      https://sap.github.io/ui5-tooling/v4/api/@ui5_server_middleware_MiddlewareUtil.html
- * @param {object} parameters.options Options
- * @param {string} parameters.options.configuration
- *      Custom middleware configuration, as defined in the project's ui5.yaml
- * @param {string} parameters.options.middlewareName
- *      Name of the custom middleware.
- *      This parameter is only provided to custom middleware extensions
- *      defining Specification Version 3.0 and later
- * @param {object} parameters.resources Readers for accessing resources
- * @param {module:@ui5/fs.AbstractReader} parameters.resources.all
- *      Reader to access resources of the root project and its dependencies
- * @param {module:@ui5/fs.AbstractReader} parameters.resources.rootProject
- *      Reader to access resources of the root project
- * @param {module:@ui5/fs.AbstractReader} parameters.resources.dependencies
- *      Reader to access resources of the project's dependencies.
- * @returns {function} Middleware function to use
- */
-export default function({log, middlewareUtil, options, resources}) {
-    return async function (req, res, next) {
-        // [...]
-    }
-};
js
/**
- * Custom UI5 Server middleware API
- * 
- * @param {object} parameters Parameters
- * @param {@ui5/logger/Logger} parameters.log
- *      Logger instance for use in the custom middleware.
- *      This parameter is only provided to custom middleware
- *      extensions defining Specification Version 3.0 and later.
- * @param {@ui5/server.middleware.MiddlewareUtil} parameters.middlewareUtil
- *      Specification version-dependent interface to a
- *      MiddlewareUtil instance. See the corresponding API reference for details:
- *      https://sap.github.io/ui5-tooling/v4/api/@ui5_server_middleware_MiddlewareUtil.html
- * @param {object} parameters.options Options
- * @param {string} parameters.options.configuration
- *      Custom middleware configuration, as defined in the project's ui5.yaml
- * @param {string} parameters.options.middlewareName
- *      Name of the custom middleware.
- *      This parameter is only provided to custom middleware extensions
- *      defining Specification Version 3.0 and later
- * @param {object} parameters.resources Readers for accessing resources
- * @param {module:@ui5/fs.AbstractReader} parameters.resources.all
- *      Reader to access resources of the root project and its dependencies
- * @param {module:@ui5/fs.AbstractReader} parameters.resources.rootProject
- *      Reader to access resources of the root project
- * @param {module:@ui5/fs.AbstractReader} parameters.resources.dependencies
- *      Reader to access resources of the project's dependencies.
- * @returns {function} Middleware function to use
- */
-module.exports = function({log, middlewareUtil, options, resources}) {
-    return async function (req, res, next) {
-        // [...]
-    }
-};

Example: lib/middleware/markdownHandler.(m)js

js

-   
-import MarkdownIt from "markdown-it";export default async function({log, middlewareUtil, options, resources}) {
-    const md = new MarkdownIt();
-    return function (req, res, next) {
-        if (!req.path || !req.path.endsWith(".html")) {
-            // Do not handle non-HTML requests
-            next();
-            return;
-        }
-        // Try to read a corresponding markdown file
-        resources.rootProject.byPath(req.path.replace(".html", ".md")).then(async (resource) => {
-            if (!resource) {
-                // No file found, hand over to next middleware
-                next();
-                return;
-            }
-            log.info(`Rendering markdown for ${resource.getPath()}`);
-            const markdown = await resource.getBuffer();
-            // Generate HTML from markdown string
-            const html = md.render(markdown.toString());
-            res.type('.html');
-            res.end(html);
-        }).catch((err) => {
-            next(err);
-        });
-   }
- };
js
module.exports = async function({log, middlewareUtil, options, resources}) {
-    const MarkdownIt = require("markdown-it");
-    const md = new MarkdownIt();
-    return function (req, res, next) {
-        if (!req.path || !req.path.endsWith(".html")) {
-            // Do not handle non-HTML requests
-            next();
-            return;
-        }
-        // Try to read a corresponding markdown file
-        resources.rootProject.byPath(req.path.replace(".html", ".md")).then(async (resource) => {
-            if (!resource) {
-                // No file found, hand over to next middleware
-                next();
-                return;
-            }
-            log.info(`Rendering markdown for ${resource.getPath()}`);
-            const markdown = await resource.getBuffer();
-            // Generate HTML from markdown string
-            const html = md.render(markdown.toString());
-            res.type('.html');
-            res.end(html);
-        }).catch((err) => {
-            next(err);
-        });
-    }
-};

Helper Class MiddlewareUtil

Custom middleware defining Specification Version 2.0 or higher have access to an interface of a MiddlewareUtil instance.

In this case, a middlewareUtil object is provided as a part of the custom middleware's parameters. Depending on the specification version of the custom middleware, a set of helper functions is available to the implementation. The lowest required specification version for every function is listed in the MiddlewareUtil API reference.

Integration with karma-ui5

WARNING

The Karma project has been deprecated as of 2023

karma-ui5 is a plugin for the popular Karma test runner. Based on your configuration, it can fetch resources from a dedicated server or start an internal server using parts of UI5 Tooling.

In the latter case, any custom middleware configured in the default ui5.yaml of the project will be used automatically.

However, since Karma uses the connect framework, as opposed to UI5 Tooling's express, custom middleware might not always work as expected. Compared to connect, the express framework provides a more versatile API to middleware.

Therefore, if you plan to use custom middleware in an integrated scenario with karma-ui5, you must restrict the middleware to using the connect API only to ensure compatibility.

Alternatively, you can start a server with the usual ui5 serve command and configure the corresponding URL for use by karma-ui5.

- - - - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/extensibility/CustomTasks.html b/packages/documentation/docs/.vitepress/dist/extensibility/CustomTasks.html deleted file mode 100644 index af54675ca5..0000000000 --- a/packages/documentation/docs/.vitepress/dist/extensibility/CustomTasks.html +++ /dev/null @@ -1,331 +0,0 @@ - - - - - - Custom UI5 Builder Tasks | VitePress - - - - - - - - - - - - - - -
Skip to content

Custom UI5 Builder Tasks

The UI5 Build Extensibility enables you to enhance the build process of any UI5 project. In addition to the standard tasks, custom tasks can be created.

The UI5 community already created many custom tasks which you can integrate into your project. They are often prefixed by ui5-task- to make them easily searchable in the npm registry.

Please note that custom tasks from third parties can not only modify your project but also execute arbitrary code on your system. In fact, this is the case for all npm packages you install. Always act with the according care and follow best practices.

Configuration

You can configure your build process with additional build task. These custom tasks are defined in the project configuration.

To hook your custom tasks into the different build phases of a project, they need to reference other tasks to be executed before or after. This can be a standard task or another custom task. Standard tasks that are disabled, even though they are not executed, can still be referenced by custom tasks, which will be performed in their designated position.

In the below example, when building the library my.library the custom babel task will be executed before the standard task generateComponentPreload.
Another custom task called render-markdown-files is then executed immediately after the standard task minify.

Example: Basic configuration

yaml
# In this example configuration, two custom tasks are defined: 'babel' and 'render-markdown-files'.
-specVersion: "4.0"
-type: library
-metadata:
-  name: my.library
-builder:
-  customTasks:
-    - name: babel
-      beforeTask: generateComponentPreload
-    - name: render-markdown-files
-      afterTask: minify
-      configuration:
-        markdownStyle:
-            firstH1IsTitle: true

Example: Connect multiple custom tasks

You can also connect multiple custom tasks with each other. The order in the configuration is important in this case. You have to make sure that a task is defined before you reference it via beforeTask or afterTask.

yaml
# In this example, 'my-custom-task-2' gets executed after 'my-custom-task-1'.
-specVersion: "4.0"
-type: library
-metadata:
-  name: my.library
-builder:
-  customTasks:
-    - name: my-custom-task-1
-      beforeTask: generateComponentPreload
-    - name: my-custom-task-2
-      afterTask: my-custom-task-1

Custom Task Extension

A custom task extension consists of a ui5.yaml and a task implementation. It can be a standalone module or part of an existing UI5 project.

Example: ui5.yaml

yaml
specVersion: "4.0"
-kind: extension
-type: task
-metadata:
-  name: render-markdown-files
-task:
-  path: lib/tasks/renderMarkdownFiles.js

Task extensions can be standalone modules which are handled as dependencies.

Alternatively you can implement a task extension as part of your UI5 project. In that case, the configuration of the extension is part of your project configuration inside the ui5.yaml as shown below.

The task extension will then be automatically collected and processed during the processing of the project.

Example: Custom Task Extension defined in UI5 project

yaml
# Project configuration for the above example
-specVersion: "4.0"
-kind: project
-type: library
-metadata:
-  name: my.library
-builder:
-  customTasks:
-    - name: render-markdown-files
-      afterTask: minify
-      configuration:
-        markdownStyle:
-            firstH1IsTitle: true
----
-# Task extension as part of your project
-specVersion: "4.0"
-kind: extension
-type: task
-metadata:
-  name: render-markdown-files
-task:
-  path: lib/tasks/renderMarkdownFiles.js

Task Implementation

A custom task implementation needs to return a function with the following signature:

js
/**
- * Custom task API
- *
- * @param {object} parameters
- * 
- * @param {module:@ui5/fs.AbstractReader} parameters.dependencies
- *      Reader to access resources of the project's dependencies
- * @param {@ui5/logger/Logger} parameters.log
- *      Logger instance for use in the custom task.
- *      This parameter is only available to custom task extensions
- *      defining Specification Version 3.0 and later.
- * @param {object} parameters.options Options
- * @param {string} parameters.options.projectName
- *      Name of the project currently being built
- * @param {string} parameters.options.projectNamespace
- *      Namespace of the project currently being built
- * @param {string} parameters.options.configuration
- *      Custom task configuration, as defined in the project's ui5.yaml
- * @param {string} parameters.options.taskName
- *      Name of the custom task.
- *      This parameter is only provided to custom task extensions
- *      defining Specification Version 3.0 and later.
- * @param {@ui5/builder.tasks.TaskUtil} parameters.taskUtil
- *      Specification Version-dependent interface to a TaskUtil instance.
- *      See the corresponding API reference for details:
- *      https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html
- * @param {module:@ui5/fs.DuplexCollection} parameters.workspace
- *      Reader/Writer to access and modify resources of the
- *      project currently being built
- * @returns {Promise<undefined>}
- *      Promise resolving once the task has finished
- */
-export default async function({dependencies, log, options, taskUtil,workspace}) {
-    // [...]
-};
js
/**
- * Custom task API
- *
- * @param {object} parameters
- * 
- * @param {module:@ui5/fs.AbstractReader} parameters.dependencies
- *      Reader to access resources of the project's dependencies
- * @param {@ui5/logger/Logger} parameters.log
- *      Logger instance for use in the custom task.
- *      This parameter is only available to custom task extensions
- *      defining Specification Version 3.0 and later.
- * @param {object} parameters.options Options
- * @param {string} parameters.options.projectName
- *      Name of the project currently being built
- * @param {string} parameters.options.projectNamespace
- *      Namespace of the project currently being built
- * @param {string} parameters.options.configuration
- *      Custom task configuration, as defined in the project's ui5.yaml
- * @param {string} parameters.options.taskName
- *      Name of the custom task.
- *      This parameter is only provided to custom task extensions
- *      defining Specification Version 3.0 and later.
- * @param {@ui5/builder.tasks.TaskUtil} parameters.taskUtil
- *      Specification Version-dependent interface to a TaskUtil instance.
- *      See the corresponding API reference for details:
- *      https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html
- * @param {module:@ui5/fs.DuplexCollection} parameters.workspace
- *      Reader/Writer to access and modify resources of the
- *      project currently being built
- * @returns {Promise<undefined>}
- *      Promise resolving once the task has finished
- */
-module.exports = async function({dependencies, log, options, taskUtil,workspace}) {
-    // [...]
-};

Required Dependencies

Info

This functionality has been added with UI5 CLI v3.0.0

Custom tasks can export an optional callback function determineRequiredDependencies to control which dependency-resources are made available through the dependencies-reader that is provided to the task. By reducing the amount of required dependencies or by not requiring any, UI5 Tooling might be able to build a project faster.

Before executing a task, UI5 Tooling will ensure that all required dependencies have been built.

If this callback is not provided, UI5 Tooling will make an assumption as to whether the custom task requires access to any resources of dependencies based on the defined Specification Version of the custom task extension:

  • Specification Version 3.0 and later: If no callback is provided, UI5 Tooling assumes that no dependencies are required. In this case, the dependencies parameter will be omitted.
  • Specification Versions before 3.0: If no callback is provided, UI5 Tooling assumes that all dependencies are required.

For more details, see also RFC 0012 UI5 Tooling Extension API v3

js
/**
- * Callback function to define the list of required dependencies
- *
- * @param {object} parameters
- * @param {Set} parameters.availableDependencies
- *      Set containing the names of all direct dependencies of
- *      the project currently being built.
- * @param {function} parameters.getDependencies
- *      Identical to TaskUtil#getDependencies
- *         (see https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html).
- *      Creates a list of names of all direct dependencies
- *      of a given project.
- * @param {function} parameters.getProject
- *      Identical to TaskUtil#getProject
- *         (see https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html).
- *      Retrieves a Project-instance for a given project name.
- * @param {object} parameters.options
- *      Identical to the options given to the standard task function.
- * @returns {Promise<Set>}
- *      Promise resolving with a Set containing all dependencies
- *      that should be made available to the task.
- *      UI5 Tooling will ensure that those dependencies have been
- *      built before executing the task.
- */
-export async function determineRequiredDependencie({availableDependencies, getDependencies, getProject, options}) {
-    // "availableDependencies" could look like this: Set(3) { "sap.ui.core", "sap.m", "my.lib" }
-    // Reduce list of required dependencies: Do not require any UI5 framework projects
-    availableDependencies.forEach((depName) => {
-        if (getProject(depName).isFrameworkProject()) {
-            availableDependencies.delete(depName)
-        }
-    });
-    // => Only resources of project "my.lib" will be available to the task
-    return availableDependencies;
-}
js
/**
- * Callback function to define the list of required dependencies
- *
- * @param {object} parameters
- * @param {Set} parameters.availableDependencies
- *      Set containing the names of all direct dependencies of
- *      the project currently being built.
- * @param {function} parameters.getDependencies
- *      Identical to TaskUtil#getDependencies
- *         (see https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html).
- *      Creates a list of names of all direct dependencies
- *      of a given project.
- * @param {function} parameters.getProject
- *      Identical to TaskUtil#getProject
- *         (see https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html).
- *      Retrieves a Project-instance for a given project name.
- * @param {object} parameters.options
- *      Identical to the options given to the standard task function.
- * @returns {Promise<Set>}
- *      Promise resolving with a Set containing all dependencies
- *      that should be made available to the task.
- *      UI5 Tooling will ensure that those dependencies have been
- *      built before executing the task.
- */
-module.exports.determineRequiredDependencies = async functio({availableDependencies, getDependencies, getProject, options}) {
-    // "availableDependencies" could look like this: Set(3) { "sap.ui.core", "sap.m", "my.lib" }
-    // Reduce list of required dependencies: Do not require any UI5 framework projects
-    availableDependencies.forEach((depName) => {
-        if (getProject(depName).isFrameworkProject()) {
-            availableDependencies.delete(depName)
-        }
-    });
-    // => Only resources of project "my.lib" will be available to the task
-    return availableDependencies;
-}

Examples

The following code snippets show examples for custom task implementations.

Example: lib/tasks/renderMarkdownFiles.js

This example is making use of the resourceFactory TaskUtil API to create new resources based on the output of a third-party module for rendering Markdown files. The created resources are added to the build result by writing them into the provided workspace.

js
import path from "node:path";
-import renderMarkdown from "./renderMarkdown.js";
-/*
-* Render all .md (Markdown) files in the project to HTML
-*/
-export default async function({dependencies, log, options, taskUtil,workspace}) {
-    const {createResource} = taskUtil.resourceFactory;
-    const textResources = await workspace.byGlob("**/*.md");
-    await Promise.all(textResources.map(async (resource) => {
-        const markdownResourcePath = resource.getPath();
-        log.info(`Rendering markdown file ${markdownResourcePath}...`);
-        const htmlString = await renderMarkdown(await resource.getString(), options.configuration);
-        // Note: @ui5/fs virtual paths are always (on *all* platforms) POSIX. Therefore using path.posix here
-        const newResourceName = path.posix.basename(markdownResourcePath, ".md") + ".html";
-        const newResourcePath = path.posix.join(path.posix.dirname(markdownResourcePath), newResourceName);
-        const markdownResource = createResource({
-            path: newResourcePath,
-            string: htmlString
-        });
-        await workspace.write(markdownResource);
-    }));
-};
js
const path = require("node:path");
-const renderMarkdown = require("./renderMarkdown.js");
-/*
-* Render all .md (Markdown) files in the project to HTML
-*/
-module.exports = async function({dependencies, log, options, taskUtil,workspace}) {
-    const {createResource} = taskUtil.resourceFactory;
-    const textResources = await workspace.byGlob("**/*.md");
-    await Promise.all(textResources.map(async (resource) => {
-        const markdownResourcePath = resource.getPath();
-        log.info(`Rendering markdown file ${markdownResourcePath}...`);
-        const htmlString = await renderMarkdown(await resource.getString(), options.configuration);
-        // Note: @ui5/fs virtual paths are always (on *all* platforms) POSIX. Therefore using path.posix here
-        const newResourceName = path.posix.basename(markdownResourcePath, ".md") + ".html";
-        const newResourcePath = path.posix.join(path.posix.dirname(markdownResourcePath), newResourceName);
-        const markdownResource = createResource({
-            path: newResourcePath,
-            string: htmlString
-        });
-        await workspace.write(markdownResource);
-    }));
-};

WARNING

Depending on your project setup, UI5 Tooling tends to open many files simultaneously during a build. To prevent errors like EMFILE: too many open files, we urge custom task implementations to use the graceful-fs module as a drop-in replacement for the native fs module in case it is used.

Tasks should ideally use the reader/writer APIs provided by UI5 Tooling for working with project resources.

Example: lib/tasks/compileLicenseSummary.js

This example is making use of multiple TaskUtil APIs to retrieve additional information about the project currently being built (taskUtil.getProject()) and its direct dependencies (taskUtil.getDependencies()). Project configuration files like package.json can be accessed directly using project.getRootReader().

js
import path from "node:path";
-/*
-* Compile a list of all licenses of the project's dependencies
-* and write it to "dependency-license-summary.json"
-*/
-export default async function({dependencies, log, options, taskUtil,workspace}) {
-    const {createResource} = taskUtil.resourceFactory;
-    const licenses = new Map();
-    const projectsVisited = new Set();
-    async function processProject(project) {
-        return Promise.all(taskUtil.getDependencies().map(async (projectName) => {
-            if (projectsVisited.has(projectName)) {
-                return;
-            }
-            projectsVisited.add(projectName);
-            const project = taskUtil.getProject(projectName);
-            const pkgResource = await project.getRootReader().byPath("/package.json");
-            if (pkgResource) {
-                const pkg = JSON.parse(await pkgResource.getString())
-                // Add project to list of licenses
-                if (licenses.has(pkg.license)) {
-                    licenses.get(pkg.license).push(project.getName());
-                } else {
-                    // License not yet in map. Define it
-                    licenses.set(pkg.license, [project.getName()]);
-                }
-            } else {
-                log.info(`Could not find package.json file in project ${project.getName()}`);
-            }
-            return processProject(project);
-        }));
-    }
-    // Start processing dependencies of the root project
-    await processProject(taskUtil.getProject());
-    const summaryResource = createResource({
-        path: "/dependency-license-summary.json",
-        string: JSON.stringify(Object.fromEntries(licenses), null, "\t")
-    });
-    await workspace.write(summaryResource);
-};
js
const path = require("node:path");
-/*
-* Compile a list of all licenses of the project's dependencies
-* and write it to "dependency-license-summary.json"
-*/
-module.exports = async function({dependencies, log, options, taskUtil,workspace}) {
-    const {createResource} = taskUtil.resourceFactory;
-    const licenses = new Map();
-    const projectsVisited = new Set();
-    async function processProject(project) {
-        return Promise.all(taskUtil.getDependencies().map(async (projectName) => {
-            if (projectsVisited.has(projectName)) {
-                return;
-            }
-            projectsVisited.add(projectName);
-            const project = taskUtil.getProject(projectName);
-            const pkgResource = await project.getRootReader().byPath("/package.json");
-            if (pkgResource) {
-                const pkg = JSON.parse(await pkgResource.getString())
-                // Add project to list of licenses
-                if (licenses.has(pkg.license)) {
-                    licenses.get(pkg.license).push(project.getName());
-                } else {
-                    // License not yet in map. Define it
-                    licenses.set(pkg.license, [project.getName()]);
-                }
-            } else {
-                log.info(`Could not find package.json file in project ${project.getName()}`);
-            }
-            return processProject(project);
-        }));
-    }
-    // Start processing dependencies of the root project
-    await processProject(taskUtil.getProject());
-    const summaryResource = createResource({
-        path: "/dependency-license-summary.json",
-        string: JSON.stringify(Object.fromEntries(licenses), null, "\t")
-    });
-    await workspace.write(summaryResource);
-};

Helper Class TaskUtil

Custom tasks defining Specification Version 2.2 or higher have access to an interface of a TaskUtil instance.

In this case, a taskUtil object is provided as a part of the custom task's parameters. Depending on the specification version of the custom task, a set of helper functions is available to the implementation. The lowest required specification version for every function is listed in the TaskUtil API reference.

- - - - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/extensibility/ProjectShims.html b/packages/documentation/docs/.vitepress/dist/extensibility/ProjectShims.html deleted file mode 100644 index 86919f1d1d..0000000000 --- a/packages/documentation/docs/.vitepress/dist/extensibility/ProjectShims.html +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - VitePress - - - - - - - - - - - - - - -
Skip to content

Project Shims

A project shim extension can be used to define or extend a project configuration of a module. The most popular use case is probably to add UI5 project configuration to a third party module that otherwise could not be used with the UI5 CLI.

Also see RFC 0002 Project Shims.

Structure

yaml
specVersion: "4.0"
-kind: extension
-type: project-shim
-metadata:
-  name: <name of project shim extension>
-shims:
-  configurations:
-    <module name (id)>:
-      specVersion: "4.0"
-      type: <project type>
-      metadata:
-        name: <project name>
-    <module name (id)>:
-      specVersion: "4.0"
-      type: <project type>
-      metadata:
-        name: <project name>
-  dependencies:
-    <module name (id)>:
-      - <module name (id)>
-      - <module name (id)>
-      - <module name (id)>
-  collections:
-    <module name>:
-      modules:
-        <id>: <relative path>
-        <id>: <relative path>
-        <id>: <relative path>

"module name" refers to the name of the module as identified by the used translator. E.g. when using the npm translator, the name declared in the modules package.json is used here. In most cases, the module name also becomes the internal ID of the project.

Properties

configurations (optional)

Used to add configuration to any module.

Map of module names. The values represent the configuration that should be applied to the module.

Note: Configuration is applied to the module using Object.assign(). This means that existing configuration properties will be overwritten.

dependencies (optional)

Used to add dependencies to any module.

Map of module names. The value is an array of module names that this module depends on. Note that the other modules need to be part of the dependency tree of the root project (not as direct children, just somewhere).

collections (optional)

Used when a dependency contains multiple modules. Also referred to as a Monorepo.

Map of module names. The values are objects with collection-specific configuration:

  • modules: Map of project IDs and their relative file system paths inside the collection module. The project ID does not have to match the actual module name (as for instance defined in the modules package.json). UI5 Project will use it in place of a module name.

Example A:

An application "my-application" defines a npm dependency to lodash in its package.json and configures it by using a project-shim extension added to its ui5.yaml.

ui5.yaml

yaml
specVersion: "4.0"
-type: application
-metadata:
-  name: my.application
---- # Everything below this line could also be put into the ui5.yaml of a standalone extension module
-specVersion: "4.0"
-kind: extension
-type: project-shim
-metadata:
-  name: my.application.thirdparty
-shims:
-  configurations:
-    lodash: # name as defined in package.json
-      specVersion: "4.0"
-      type: module # Use module type
-      metadata:
-        name: lodash
-      resources:
-        configuration:
-          paths:
-            /resources/my/application/thirdparty/: "" # map root directory of lodash module

Example B:

An application "application.a" depends on a library "legacy.library.a" which does not contain a ui5.yaml or package.json yet (nor do its dependencies).

Structure of the legacy library directories (two repositories)
legacy-libs/
-    \_ src/
-        \_ library.a/
-            \_ src/
-            \_ test/
-        \_ library.b/
-            \_ src/
-            \_ test/
-legacy-library-x/
-    \_ src/
-    \_ test/
Dependencies between the legacy libraries
legacy.library.a depends on legacy.library.b
-legacy.library.a depends on legacy.library.x
-
-legacy.library.b depends on legacy.library.x
application.a

Directory structure

application-a/
-    \_ node_modules/
-        \_ legacy-libs/
-        \_ legacy-library-x/
-    \_ webapp/
-    \_ ui5.yaml
-    \_ package.json

package.json (extract)
napa can install git repositories that are lacking a package.json with npm. Within ui5-project, the npm translator already detects dependencies defined in the napa section of a package.json and tries to resolve them.

json
{
-    "scripts": {
-        "install": "napa"
-    },
-    "napa": {
-        "legacy-libs": "<git-repository-url>",
-        "legacy-library-x": "<git-repository-url>"
-    }
-}

ui5.yaml
The shim defined in the application configures the legacy libraries and defines their dependencies. This shim might as well be a standalone module that is added to the applications dependencies. That would be the typical reuse scenario for shims.

yaml
specVersion: "4.0"
-type: application
-metadata:
-  name: application.a
-----
-specVersion: "4.0"
-kind: extension
-type: project-shim
-metadata:
-  name: legacy-lib-shims
-shims:
-  configurations:
-    legacy-library-a:
-      specVersion: "4.0"
-      type: library
-      metadata:
-        name: legacy.library.a
-    legacy-library-b:
-      specVersion: "4.0"
-      type: library
-      metadata:
-        name: legacy.library.b
-    legacy-library-x:
-      specVersion: "4.0"
-      type: library
-      metadata:
-        name: legacy.library.x
-  dependencies:
-    legacy-library-a:
-      - legacy-library-b
-      - legacy-library-x
-    legacy-library-b:
-      - legacy-library-x
-  collections:
-    legacy-libs:
-      modules:
-        legacy-library-a: src/library.a
-        legacy-library-b: src/library.b
- - - - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/favicon.ico b/packages/documentation/docs/.vitepress/dist/favicon.ico deleted file mode 100644 index 8e7584c1ab040cc837a9883606af1a8aac373835..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/icons/logo/PlantUML.svg b/packages/documentation/docs/.vitepress/dist/icons/logo/PlantUML.svg deleted file mode 100644 index 96535d4553..0000000000 --- a/packages/documentation/docs/.vitepress/dist/icons/logo/PlantUML.svg +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/icons/logo/PostCSS.svg b/packages/documentation/docs/.vitepress/dist/icons/logo/PostCSS.svg deleted file mode 100644 index baf9b1e760..0000000000 --- a/packages/documentation/docs/.vitepress/dist/icons/logo/PostCSS.svg +++ /dev/null @@ -1 +0,0 @@ -postcss-logo-symbol diff --git a/packages/documentation/docs/.vitepress/dist/icons/logo/Rollup.svg b/packages/documentation/docs/.vitepress/dist/icons/logo/Rollup.svg deleted file mode 100644 index 20bb5dfe63..0000000000 --- a/packages/documentation/docs/.vitepress/dist/icons/logo/Rollup.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/icons/logo/TailwindCSS.svg b/packages/documentation/docs/.vitepress/dist/icons/logo/TailwindCSS.svg deleted file mode 100644 index e0e971530c..0000000000 --- a/packages/documentation/docs/.vitepress/dist/icons/logo/TailwindCSS.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/packages/documentation/docs/.vitepress/dist/icons/logo/TypeScript-wm.svg b/packages/documentation/docs/.vitepress/dist/icons/logo/TypeScript-wm.svg deleted file mode 100644 index 3c9fa5d366..0000000000 --- a/packages/documentation/docs/.vitepress/dist/icons/logo/TypeScript-wm.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/icons/logo/TypeScript.svg b/packages/documentation/docs/.vitepress/dist/icons/logo/TypeScript.svg deleted file mode 100644 index a46d53d49f..0000000000 --- a/packages/documentation/docs/.vitepress/dist/icons/logo/TypeScript.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/icons/logo/UI5.svg b/packages/documentation/docs/.vitepress/dist/icons/logo/UI5.svg deleted file mode 100644 index c54ff84762..0000000000 --- a/packages/documentation/docs/.vitepress/dist/icons/logo/UI5.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/packages/documentation/docs/.vitepress/dist/icons/logo/VitePress.svg b/packages/documentation/docs/.vitepress/dist/icons/logo/VitePress.svg deleted file mode 100644 index ed6438ade1..0000000000 --- a/packages/documentation/docs/.vitepress/dist/icons/logo/VitePress.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/icons/logo/Vitejs.svg b/packages/documentation/docs/.vitepress/dist/icons/logo/Vitejs.svg deleted file mode 100644 index de4aeddc12..0000000000 --- a/packages/documentation/docs/.vitepress/dist/icons/logo/Vitejs.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/packages/documentation/docs/.vitepress/dist/icons/logo/Vuejs.svg b/packages/documentation/docs/.vitepress/dist/icons/logo/Vuejs.svg deleted file mode 100644 index a6c05382d6..0000000000 --- a/packages/documentation/docs/.vitepress/dist/icons/logo/Vuejs.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/icons/logo/Web-Components.svg b/packages/documentation/docs/.vitepress/dist/icons/logo/Web-Components.svg deleted file mode 100644 index a1e3ce54c3..0000000000 --- a/packages/documentation/docs/.vitepress/dist/icons/logo/Web-Components.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/icons/logo/cssnano-wm-vertical.svg b/packages/documentation/docs/.vitepress/dist/icons/logo/cssnano-wm-vertical.svg deleted file mode 100644 index 8faebaf4da..0000000000 --- a/packages/documentation/docs/.vitepress/dist/icons/logo/cssnano-wm-vertical.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/icons/logo/cssnano-wm.svg b/packages/documentation/docs/.vitepress/dist/icons/logo/cssnano-wm.svg deleted file mode 100644 index e0a266aa49..0000000000 --- a/packages/documentation/docs/.vitepress/dist/icons/logo/cssnano-wm.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/icons/logo/cssnano.svg b/packages/documentation/docs/.vitepress/dist/icons/logo/cssnano.svg deleted file mode 100644 index 58bfe27f2d..0000000000 --- a/packages/documentation/docs/.vitepress/dist/icons/logo/cssnano.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - diff --git a/packages/documentation/docs/.vitepress/dist/icons/logo/markdown.svg b/packages/documentation/docs/.vitepress/dist/icons/logo/markdown.svg deleted file mode 100644 index efaefee739..0000000000 --- a/packages/documentation/docs/.vitepress/dist/icons/logo/markdown.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/icons/logo/powering-sap-btp.svg b/packages/documentation/docs/.vitepress/dist/icons/logo/powering-sap-btp.svg deleted file mode 100644 index 260b75880f..0000000000 --- a/packages/documentation/docs/.vitepress/dist/icons/logo/powering-sap-btp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/icons/ui5/B.svg b/packages/documentation/docs/.vitepress/dist/icons/ui5/B.svg deleted file mode 100644 index b5c1033309..0000000000 --- a/packages/documentation/docs/.vitepress/dist/icons/ui5/B.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/icons/ui5/B_OpenUI5_H.svg b/packages/documentation/docs/.vitepress/dist/icons/ui5/B_OpenUI5_H.svg deleted file mode 100644 index 0b66b01e83..0000000000 --- a/packages/documentation/docs/.vitepress/dist/icons/ui5/B_OpenUI5_H.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/icons/ui5/B_OpenUI5_V.svg b/packages/documentation/docs/.vitepress/dist/icons/ui5/B_OpenUI5_V.svg deleted file mode 100644 index 00be266e41..0000000000 --- a/packages/documentation/docs/.vitepress/dist/icons/ui5/B_OpenUI5_V.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/icons/ui5/B_UI5_H.svg b/packages/documentation/docs/.vitepress/dist/icons/ui5/B_UI5_H.svg deleted file mode 100644 index 690ee70443..0000000000 --- a/packages/documentation/docs/.vitepress/dist/icons/ui5/B_UI5_H.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/icons/ui5/B_UI5_V.svg b/packages/documentation/docs/.vitepress/dist/icons/ui5/B_UI5_V.svg deleted file mode 100644 index fd78b9bc78..0000000000 --- a/packages/documentation/docs/.vitepress/dist/icons/ui5/B_UI5_V.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/icons/ui5/O.svg b/packages/documentation/docs/.vitepress/dist/icons/ui5/O.svg deleted file mode 100644 index 122eacd4ab..0000000000 --- a/packages/documentation/docs/.vitepress/dist/icons/ui5/O.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/icons/ui5/O_OpenUI5_H.svg b/packages/documentation/docs/.vitepress/dist/icons/ui5/O_OpenUI5_H.svg deleted file mode 100644 index 633e548432..0000000000 --- a/packages/documentation/docs/.vitepress/dist/icons/ui5/O_OpenUI5_H.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/icons/ui5/O_OpenUI5_V.svg b/packages/documentation/docs/.vitepress/dist/icons/ui5/O_OpenUI5_V.svg deleted file mode 100644 index d272c1a348..0000000000 --- a/packages/documentation/docs/.vitepress/dist/icons/ui5/O_OpenUI5_V.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/icons/ui5/O_UI5_H.svg b/packages/documentation/docs/.vitepress/dist/icons/ui5/O_UI5_H.svg deleted file mode 100644 index b0659ccbbb..0000000000 --- a/packages/documentation/docs/.vitepress/dist/icons/ui5/O_UI5_H.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/icons/ui5/O_UI5_V.svg b/packages/documentation/docs/.vitepress/dist/icons/ui5/O_UI5_V.svg deleted file mode 100644 index 79304ca259..0000000000 --- a/packages/documentation/docs/.vitepress/dist/icons/ui5/O_UI5_V.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/icons/ui5/UI5.svg b/packages/documentation/docs/.vitepress/dist/icons/ui5/UI5.svg deleted file mode 100644 index c54ff84762..0000000000 --- a/packages/documentation/docs/.vitepress/dist/icons/ui5/UI5.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/packages/documentation/docs/.vitepress/dist/index.html b/packages/documentation/docs/.vitepress/dist/index.html deleted file mode 100644 index b54fcc1afe..0000000000 --- a/packages/documentation/docs/.vitepress/dist/index.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - UI5 CLI | VitePress - - - - - - - - - - - - - - -
Skip to content

UI5 CLI

Project Rename

UI5 Tooling has been renamed to UI5 CLI 🚨

Read the announcement blog post: SAP Community: Goodbye UI5 Tooling - Hello UI5 CLI!

New Release

UI5 CLI V4 is here 🎉

Read the announcement blog post: SAP Community: UI5 CLI 4.0

And checkout the Migrate to v4 documentation.

Get Started

Main Features

💻 UI5 CLI

Also see the UI5 CLI Documentation

sh
# Global
-npm install --global @ui5/cli
-
-# In your project
-npm install --save-dev @ui5/cli

⚙️ Project Setup

Configure your project for use with UI5 CLI.
Also see the Configuration Documentation

❯ ui5 init
-Wrote ui5.yaml:
-
-specVersion: "4.0"
-metadata:
-  name: my-app
-type: application

🚚 Dependency Management

UI5 framework dependencies are managed by UI5 CLI. All other dependencies are managed by your favorite node package manager.

❯ ui5 use SAPUI5@1.117.0
-Updated configuration written to ui5.yaml
-This project is now using SAPUI5 version 1.117.0
-
-❯ ui5 add sap.ui.core sap.m themelib_sap_fiori_3
-Updated configuration written to ui5.yaml
-Added framework libraries sap.ui.core sap.m themelib_sap_fiori_3 as dependencies

🏄 Development Server

Start a local development server to work on your project.
Also see the Server Documentation

❯ ui5 serve
-Server started
-URL: http://localhost:8080

🛠 Build for Production

Build an optimized version of your project.
Also see the Builder Documentation

bash
 ui5 build
-info graph:helpers:ui5Framework Using OpenUI5 version: 1.117.0
-info ProjectBuilder Preparing build for project my-app
-info ProjectBuilder   Target directory: ./dist
-info ProjectBuilder Cleaning target directory...
-info Project 1 of 1: Building application project my-app...
-info my-app Running task escapeNonAsciiCharacters...
-info my-app Running task replaceCopyright...
-info my-app Running task replaceVersion...
-info my-app Running task minify...
-info my-app Running task generateFlexChangesBundle...
-info my-app Running task generateComponentPreload...
-info ProjectBuilder Build succeeded in 296 ms
-info ProjectBuilder Executing cleanup tasks...

🧪 Node.js API

Most UI5 CLI modules provide JavaScript APIs for direct consumption in other Node.js projects. This allows you to rely on UI5 CLI for UI5-specific build functionality and project handling, while creating your own tools to perfectly match the needs of your project.

All available APIs are documented in the UI5 CLI API Reference.

js
import {graphFromPackageDependencies} from "@ui5/project/graph";
-
-async function buildApp(projectPath, destinationPath) {
-    const graph = await graphFromPackageDependencies({
-        cwd: projectPath
-    });
-    await graph.build({
-        destPath: destinationPath,
-        selfContained: true,
-        excludedTasks: ["transformBootstrapHtml"],
-        includedDependencies: ["*"]
-    });
-}
js
async function buildApp(projectPath, destinationPath) {
-    const {graphFromPackageDependencies} = 
-        await import("@ui5/project/graph");
-    const graph = await graphFromPackageDependencies({
-        cwd: projectPath
-    });
-    await graph.build({
-        destPath: destinationPath,
-        selfContained: true,
-        excludedTasks: ["transformBootstrapHtml"],
-        includedDependencies: ["*"]
-    });
-}
- - - - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/indexJsdoc.html b/packages/documentation/docs/.vitepress/dist/indexJsdoc.html deleted file mode 100644 index e003c5134d..0000000000 --- a/packages/documentation/docs/.vitepress/dist/indexJsdoc.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - UI5 CLI API Reference | VitePress - - - - - - - - - - - - - - -
Skip to content

UI5 CLI API Reference

Support

Please follow our Contribution Guidelines on how to report an issue. Or chat with us in the #tooling channel of the OpenUI5 Community Slack

License

This project is licensed under the Apache Software License, Version 2.0 except as noted otherwise in the LICENSE file.

- - - - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/learn-more.svg b/packages/documentation/docs/.vitepress/dist/learn-more.svg deleted file mode 100644 index 22a412cd6e..0000000000 --- a/packages/documentation/docs/.vitepress/dist/learn-more.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/packages/documentation/docs/.vitepress/dist/tailwind-css-vsc-color-completion.png b/packages/documentation/docs/.vitepress/dist/tailwind-css-vsc-color-completion.png deleted file mode 100644 index 889123407f2c11558d9eb9c58b047ff7bb48ffc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13680 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 z 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 diff --git a/packages/documentation/docs/.vitepress/dist/updates/migrate-v1.html b/packages/documentation/docs/.vitepress/dist/updates/migrate-v1.html deleted file mode 100644 index c5ac5f4bc3..0000000000 --- a/packages/documentation/docs/.vitepress/dist/updates/migrate-v1.html +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - Migrate to v1 | VitePress - - - - - - - - - - - - - - -
Skip to content

Migrate to v1

v1.0.0 is the first stable release of the UI5 CLI. There are only a few notable changes to the 0.x alpha version.

Breaking changes

ui5-builder: Add transformation of apps index.html in self-contained build (SAP/ui5-builder#137)

When running a self-contained build on an application project, the index.html will be transformed by adopting the UI5 bootstrap script tag to load the custom bundle file instead.

ui5-project: normalizer: Rename optional parameter "translator" (SAP/ui5-project#96)

Renamed parameter "translator" of functions generateDependencyTree and generateProjectTree to "translatorName"

ui5-fs: Remove top-level access to adapters (SAP/ui5-fs#69)

Adapters "AbstractAdapter", "FileSystem" and "Memory" used to be accessible via the top-level export of index.js
Example:

js
require("@ui5/project").FileSystem

This is no longer possible. Adapters are now grouped in the top-level object "adapters" and can be accessed from there
Example:

js
require("@ui5/project").adapters.FileSystem

How to upgrade

Global installation

To upgrade your global installation, just run the installation command again, which will upgrade to the latest version.

npm install --global @ui5/cli

Note: Your local CLI installation will still be preferred, so you need to make sure to upgrade it as well (see Local vs. Global installation).

Local installation

To upgrade the CLI installation within a project you need to run the following command.

npm install @ui5/cli@^1

ui5.yaml

specVersion: "1.0"

We have introduced the specification version 1.0. New features will only be available for projects with specVersion 1.0 or newer.
The specVersion 0.1 will be compatible with the UI5 CLI v1.0.0, but we still recommend to adopt your projects.

yaml
specVersion: "1.0"
-metadata:
-  name: <project-name>
-type: <project-type>
- - - - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/updates/migrate-v2.html b/packages/documentation/docs/.vitepress/dist/updates/migrate-v2.html deleted file mode 100644 index 1ca33e02a2..0000000000 --- a/packages/documentation/docs/.vitepress/dist/updates/migrate-v2.html +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - Migrate to v2 | VitePress - - - - - - - - - - - - - - -
Skip to content

Migrate to v2

v2.0.0 of the UI5 CLI was released on April 1, 2020. As a major feature, it introduces the easy consumption of SAPUI5 libraries in UI5 projects.

Breaking changes

All UI5 CLI Modules: Require Node.js >= 10

Support for older Node.js releases has been dropped.

UI5 Builder: Make namespace mandatory for application and library projects (SAP/ui5-builder#430)

The UI5 CLI must be able to determine an application- or library project's namespace. Otherwise an error is thrown.

Ideally the namespace should be defined in the sap.app/id field of the manifest.json

In case of libraries, additional fallbacks are in place:

  1. The name attribute defined in the .library file
  2. The path of the library.js file

UI5 Builder: LibraryFormatter: Ignore manifest.json of nested apps (SAP/ui5-builder#392)

If a library contains both a manifest.json and a .library file, they must be located in the same directory. Otherwise the manifest.json is ignored. In cases where the manifest.json is located at a higher level or in a different directory at the same level as the .library file, an exception is thrown.

UI5 Server: serveResources middleware: Expect *.properties files in UTF-8 by default (SAP/ui5-server#303)

For projects of types other than application or library, the UI5 Server now expects *.properties files to be UTF-8 encoded as opposed to ISO-8859-1 before.

Note: This change does not affect most projects as *.properties files are typically only located in applications or libraries, for which their project specific configuration is used.

UI5 FS: Remove deprecated parameter useNamespaces (SAP/ui5-fs#223)

Remove the deprecated parameter useNamespaces from method resourceFactory.createCollectionsForTree. Use the parameter getVirtualBasePathPrefix instead.

How to upgrade

Global installation

To upgrade your global installation, just run the installation command again, which will upgrade to the latest version.

npm install --global @ui5/cli

Note: Your local CLI installation will still be preferred, so you need to make sure to upgrade it as well (see Local vs. Global installation).

Local installation

To upgrade the CLI installation within a project, you need to run the following command:

npm install --save-dev @ui5/cli@^2

ui5.yaml

specVersion: "2.0"

We have introduced the specification version 2.0. New features will only be available for projects with specVersion 2.0 or newer.
Most projects defining specVersion 0.1 or 1.0 can still be used.

yaml
specVersion: "2.0"
-metadata:
-  name: <project-name>
-type: <project-type>
- - - - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/updates/migrate-v3.html b/packages/documentation/docs/.vitepress/dist/updates/migrate-v3.html deleted file mode 100644 index 11911d7abe..0000000000 --- a/packages/documentation/docs/.vitepress/dist/updates/migrate-v3.html +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - Migrate to v3 | VitePress - - - - - - - - - - - - - - -
Skip to content

Migrate to v3

"Superseded"

UI5 CLI 3.0 has been superseded by version 4.0. See Migrate to v4.

Find the announcement blog post for version 3.0 here: SAP Community: UI5 CLI 3.0

Node.js and npm Version Support

This release requires Node.js versions v16.18.0, v18.12.0 or higher as well as npm v8 or higher. Support for older Node.js and npm releases has been dropped and will cause an error to be shown.

Specification Versions Support

Going forward, only projects with Specification Versions 2.0 and higher are supported.

In case a legacy specification version is detected, an automatic migration is attempted. This means your old projects might still work. Unless they have non-standard configuration in their ui5.yaml.

Changes for Projects

INFO

✅ Projects defining Specification Version 2.x are expected to be fully compatible with UI5 CLI v3

For projects defining the latest Specification Versions 3.0 and higher, some changes apply:

  • Breaking Change: The metadata.name property is now restricted to contain only certain characters and no uppercase letters. See Configuration: name for details

See also Configuration: Specification Version 3.0.

Changes for Extensions

INFO

✅ Custom Tasks and Custom Middleware defining Specification Version 2.x are expected to be fully compatible with UI5 CLI v3

For extensions defining the latest Specification Versions 3.0 and higher, some changes and improvements apply:

  • Breaking Change: Custom Tasks need to request access to dependency resources
    • By default, resources of dependencies can't be accessed. A custom task requiring such access needs to implement a callback function with the export name determineRequiredDependencies. In this function it can define the scope of dependency-access. Please refer to the Custom Task: Required Dependencies documentation for details
  • Breaking Change: The metadata.name property is now restricted to contain only certain characters and no uppercase letters. See Configuration: name for details
  • Features: Enhanced TaskUtil and MiddlewareUtil API

Changes to Dependency Configuration

INFO

✅ The ui5.dependencies package.json configuration becomes obsolete and is ignored in UI5 CLI v3.

Configuration like the following is not needed anymore:

`dependencies`, `devDependencies` and `optionalDependencies` are now [automatically analyzed](https://github.com/SAP/ui5-project/blob/ff04ae4aeeb7f7d889dffd0c0e3e8774dd708c79/lib/graph/providers/NodePackageDependencies.js#L104).
-If a dependency can be configured as a UI5 project or UI5 CLI extension, it is added to the graph and its `dependencies` are analyzed.
-

dependencies, devDependencies and optionalDependencies are now automatically analyzed. If a dependency can be configured as a UI5 project or UI5 Tooling extension, it is added to the graph and its dependencies are analyzed.

Note that devDependencies and optionalDependencies are ignored for all but the current root project. For projects that are intended to be consumed in other projects (for example libraries), this means that any required custom tasks must be added to dependencies. :::

Changes to Module API

The normalizer and projectTree modules have been removed. The builder API has been moved from @ui5/builder to @ui5/project.

The JSON based, internal representation of a project dependency tree has been replaced with a graph. This is the result of a major refactoring of @ui5/project which lead to a series of API changes.

Also the @ui5/server API has been changed. Instead of a tree, it now only accepts a graph instance as the first parameter.

Migrate Your Code

The UI5 CLI-related modules such as @ui5/builder, etc. have been transformed to ES Modules ("ESM"). Therefore, they no longer use a CommonJS export and cannot be included via require. If your code is in CommonJS format, it needs to use dynamic imports or be converted to ES Modules.

Old: @ui5/project v2

js
const {normalizer} = require("@ui5/project");
-const {builder} = require("@ui5/builder");
-
-const tree = await normalizer.generateProjectTree({cwd: "."});
-
-await builder.build({
-    tree,
-    destPath: "./dist",
-    buildDependencies: true,
-});

New: @ui5/project v3

js
import {graphFromPackageDependencies} from "@ui5/project/graph";
-
-let graph = await graphFromPackageDependencies({cwd: "."});
-
-await graph.build({
-    destPath: "./dist",
-    includedDependencies: ["*"], // Parameter "buildDependencies" has been removed
-});
js
// Since CommonJS does not suport top-level await, the code must be wrapped in an asynchronous function
-async function buildProject() {
-    const {graphFromPackageDependencies} = await import("@ui5/project/graph");
-
-    let graph = await graphFromPackageDependencies({cwd: "."});
-
-    await graph.build({
-        destPath: "./dist",
-        includedDependencies: ["*"], // Parameter "buildDependencies" has been removed
-    });
-}

Changes to @ui5/cli

  • The CLI option --translator has been removed. For static dependency resolution, use the new option --dependency-definition to provide a file with static dependency information.
  • The ui5 build dev command has been removed. Use ui5 build --exclude-task=* --include-task=replaceCopyright replaceVersion replaceBuildtime buildThemes instead.

JSDoc Processor Fails When JSDoc Reports an Error

The jsdocGenerator processor and the corresponding generateJsdoc task will now throw an error when JSDoc reports an error (exit code != 0). This will also fail the build when running ui5 build jsdoc.

Always Building Required Dependencies

If any of a project's build tasks requires access to resources of the project's dependencies, UI5 CLI v3 will now always build that dependency upfront.

This ensures that tasks always access processed resources and never the raw sources of a dependency. Resulting in better reproducibility of build results and resolving common issues.

Especially for projects of type library, where standard tasks like buildThemes always require dependency access, UI5 CLI will now always build all dependencies.

In the future, a caching mechanism should help and improve build times with this new behavior.

Info

The CLI flags -a and --all are still present and now an alias for --include-all-dependencies. This flag (along with --include-dependency* and --exclude-dependency*) mainly controls the build output. Use it to define whether dependency resources should be part of the build result.

Please also refer to the ui5 build documentation.

Removal of Standard Tasks and Processors

The following tasks have been removed:

  • createDebugFiles
  • generateManifestBundle
  • uglify

The following processors have been removed:

  • debugFileCreator
  • manifestBundler
  • resourceCopier
  • uglifier

Task Migration

UI5 CLI v2UI5 CLI v3Note
createDebugFiles uglifyminifyThe minify task is executed earlier, before the bundling process takes place. Any existing beforeTask or afterTask configuration of custom tasks might need to be adapted to cater for this change.
To adapt, you can use the generateResourcesJson task for subscription before or after the last standard task. By default, generateResourcesJson is disabled, but you can still subscribe to it, thereby ensuring that your custom tasks execute in the correct order.
generateVersionInfogenerateVersionInfoThe task is no longer executed by default for application projects. It can be re-enabled by using the --include-task parameter.
generateManifestBundleNoneThis task was only needed for the HTML5 repository in Cloud Foundry. Meanwhile, the HTML5 repository implemented its own mechanism, so the task is no longer needed

Updated list of standard tasks:

TaskType applicationType libraryType theme-library
escapeNonAsciiCharactersenabledenabled
replaceCopyrightenabledenabledenabled
replaceVersionenabledenabledenabled
replaceBuildtimeenabled
generateJsdocdisabled¹
executeJsdocSdkTransformationdisabled¹
ADDED: minifyenabledenabled
generateFlexChangesBundleenabledenabled
REMOVED: generateManifestBundledisableddisabled
generateLibraryManifestenabled
generateComponentPreloadenableddisabled²
generateLibraryPreloadenabled
generateStandaloneAppBundledisabled³
transformBootstrapHtmldisabled³
generateBundledisabled⁴disabled⁴
buildThemesenabledenabled
generateThemeDesignerResourcesdisabled⁵disabled⁵
REMOVED: createDebugFilesenabledenabled
REMOVED: uglifyenabledenabled
generateVersionInfodisabled
generateCachebusterInfodisabled
generateApiIndexdisabled¹
generateResourcesJsondisableddisableddisabled

Disabled tasks can be activated by certain build modes, the project configuration, or by using the --include-task CLI parameter. See footnotes where given


¹ Enabled in jsdoc build, which disables most of the other tasks
² Enabled for projects defining a component preload configuration
³ Enabled in self-contained build, which disables generateComponentPreload and generateLibraryPreload
⁴ Enabled for projects defining a bundle configuration
⁵ Can be enabled for framework projects via the includeTask option. For other projects, this task is skipped

Removal of Standard Middleware

The following middleware has been removed from the standard middlewares list:

  • connectUi5Proxy

Middleware Migration

UI5 CLI v2UI5 CLI v3Note
connectUi5ProxyNoneMore sophisticated proxy solutions for ui5-server are now available in the form of custom middleware extensions from the UI5-community. Make sure to refactor any custom middleware that attaches to beforeMiddleware or afterMiddleware of connectUi5Proxy to reference some other middleware.
- - - - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/updates/migrate-v4.html b/packages/documentation/docs/.vitepress/dist/updates/migrate-v4.html deleted file mode 100644 index 4e84448496..0000000000 --- a/packages/documentation/docs/.vitepress/dist/updates/migrate-v4.html +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - Migrate to v4 | VitePress - - - - - - - - - - - - - - -
Skip to content

Migrate to v4

"New Release"

UI5 CLI 4.0 has been released on July 24, 2024 🎉

And find the announcement blog post here: SAP Community: UI5 CLI 4.0

UI5 2.x Compatibility

Also see the blog post SAP Community: Introducing OpenUI5 2.x

UI5 CLI 4.0 is required for building UI5 2.x projects. The UI5 2.x framework libraries define Specification Version 4.0 and therefore can't be built using older UI5 CLI versions.

For applications and libraries running with UI5 2.x, the use of Specification Version 4.0 is not enforced. It is highly recommended, however, since only then UI5 CLI will ensure UI5 2.x compatibility of the generated bundles.

Node.js and npm Version Support

This release requires Node.js version v20.11.0 and higher or v22.0.0 and higher (v21 is not supported) as well as npm v8 or higher. Support for older Node.js releases has been dropped; their use will cause an error.

Specification Versions Support

As with UI5 CLI 3.x, all projects with Specification Versions 2.0 and higher are supported.

If a legacy specification version is detected, an automatic migration is attempted. Old projects might therefore still work, unless they have a non-standard configuration in their ui5.yaml.

Changes for Projects

"No changes for Specification Versions 2.x and 3.x"

Projects defining Specification Version 2.x or 3.x are expected to be fully compatible with UI5 CLI v4

Changes for Specification Version 4.0

Projects defining Specification Version 2.x or 3.x are expected to be fully compatible with UI5 Tooling v4

The following does not apply to them. :::

For projects defining the latest Specification Version 4.0 or higher, the following changes apply:

  • Breaking Change: Bundling of JavaScript modules requiring "top level scope" as a string is terminated.

    In UI5 2.x, the feature of evaluating modules from a string is expected to be removed. Therefore, when using the latest Specification Version, UI5 CLI will omit affected module from the bundle and log an error message instead.

    For more details, see Builder: JavaScript Files Requiring Top Level Scope.

  • Breaking Change: New async option for the require sections of bundle definitions.

    This option defaults to true for Specification Version 4.0 and higher, which can influence the loading behavior of your project. Require sections are now expressed using sap.ui.require instead of sap.ui.requireSync. The latter is not available in UI5 2.x.

    Note that the same default applies for all standard bundles as well, like the component- or library preloads as well as self-contained bundles.

    See Configuration: bundleDefinition.sections for more on the new async option.

  • Breaking Change: Removal of the usePredefineCalls bundle option. UI5 CLI v4 will always use sap.ui.predefine calls in bundles, making this option obsolete.

    We do not expect any negative impact on projects due to this change, therefore it is active independently of the Specification Version. However, when upgrading to Specification Version 4.0 you might need to remove the property if you have it in your ui5.yaml configuration.

You can find a summary of the above at Configuration: Specification Version 4.0.

Migrate Your Code

When using the Node.js API of UI5 CLI, or when integrating it into other tools, the following changes might be relevant to you:

Changes to @ui5/cli

Occurrences of console.log in the code base are replaced with process.stderr. Аny scripts that capture the output from console.log need to be adjusted to rely on process.stderr.

Changes to @ui5/fs

Non-public DuplexCollection#byGlobSource API has been removed.

Changes to @ui5/builder

  • Bundling: The usePredefineCalls option has been removed. Bundling now enforces the use of sap.ui.predefine instead of function wrappers.

  • Task API: The namespace option has been renamed to projectNamespace. For more information, check the documentation for CustomTasks API

  • New Option: Added a new async option for builder.bundles.bundleDefinition.section.

Example

yaml
builder:
-   bundles:
-   - bundleDefinition:
-       name: "app.js"
-       sections:
-           - mode: require
-           filters:
-               - some/app/Component.js
-           resolve: true
-           sort: true
-           async: true

Changes to @ui5/project

Default Workspace Name: The default workspaceName is now "default" for API usage.

js
import {graphFromPackageDependencies} from "@ui5/project/graph";
-
-graphFromPackageDependencies({
-    /* workspaceName: "default" */
-});

Directory Naming: The ui5HomeDir has been renamed to ui5DataDir in APIs.

js
import Resolver from "@ui5/project/ui5Framework/Openui5Resolver";
-
-await Resolver.resolveVersion("1.120.15", {
-    ui5DataDir: "~/.ui5",
-    cwd: process.cwd()
-});
  • Dependencies: The @ui5/builder is now an optional dependency to the @ui5/project

Consumers of the Node.js API that make use of the ProjectGraph#build method need to declare a dependency to @ui5/builder in their respective package.json. The package manager should ensure that the version fulfills the range specified in the package.json of @ui5/project.

Troubleshooting

App Stops Working With UI5 1.71

This might be caused by a mismatch of your project's manifest version and your UI5 version.

UI5 CLI v4 enhances the manifest.json with information about the supportedLocales (also see Builder: Generation of Supported Locales). In UI5 1.71 this configuration is not supported and leads to an ambiguous error message TypeError: invalid input and a failure to process the manifest file.

UI5 CLI uses the manifest's _version property to decide whether the supportedLocales can be generated. For UI5 1.71, only versions up to 1.17.0 are supported. See UI5 Demo Kit: Descriptor for Applications, Components, and Libraries (manifest.json) for a mapping per manifest version.

To resolve this issue, adjust the manifest version according to the UI5 version you are using.

This issue was first raised here: UI5 CLI #988

- - - - \ No newline at end of file diff --git a/packages/documentation/docs/.vitepress/dist/vp-icons.css b/packages/documentation/docs/.vitepress/dist/vp-icons.css deleted file mode 100644 index e69de29bb2..0000000000 From 73a3950b51b4a5a6891545b6f7557100a44698e5 Mon Sep 17 00:00:00 2001 From: d3xter666 Date: Wed, 1 Oct 2025 14:19:25 +0300 Subject: [PATCH 07/10] refactor: Add gitignore --- .gitignore | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 403a839112..022de389d7 100644 --- a/.gitignore +++ b/.gitignore @@ -60,6 +60,10 @@ jsdocs/ site/ # Custom files -docs/pages/CLI.md -docs/CLI.md +# Documentation +packages/documentation/docs/CLI.md +packages/documentation/docs/.vitepress/dist +packages/documentation/docs/.vitepress/cache +packages/documentation/.vitepress/dist +packages/documentation/.vitepress/cache From ad3f14128c0d9e6144ba94f4b3a3927fd009bf3c Mon Sep 17 00:00:00 2001 From: d3xter666 Date: Wed, 1 Oct 2025 15:10:54 +0300 Subject: [PATCH 08/10] refactor: Keep the old structure --- .gitignore | 2 +- packages/documentation/.vitepress/config.ts | 40 +- packages/documentation/docs/CLI.md | 393 -------- packages/documentation/docs/ESSupport.md | 551 ----------- packages/documentation/docs/HomePage.md | 131 --- .../extensibility/CustomServerMiddleware.md | 255 ------ .../docs/extensibility/CustomTasks.md | 454 --------- .../docs/{ => pages}/Benchmarking.md | 7 +- .../documentation/docs/{ => pages}/Builder.md | 89 +- .../docs/{ => pages}/CodeAnalysis.md | 43 +- .../docs/{ => pages}/Configuration.md | 866 +++++++++--------- .../documentation/docs/pages/ESSupport.md | 580 ++++++++++++ .../documentation/docs/{ => pages}/FAQ.md | 4 +- .../docs/{ => pages}/FileSystem.md | 7 +- .../docs/{ => pages}/GettingStarted.md | 42 +- .../documentation/docs/pages/Guidelines.md | 60 ++ .../documentation/docs/{ => pages}/OpenUI5.md | 31 +- .../docs/{ => pages}/Overview.md | 29 +- .../documentation/docs/{ => pages}/Privacy.md | 0 .../documentation/docs/{ => pages}/Project.md | 37 +- .../documentation/docs/{ => pages}/SAPUI5.md | 37 +- .../documentation/docs/{ => pages}/Server.md | 21 +- .../docs/{ => pages}/Troubleshooting.md | 9 +- .../docs/{ => pages}/Workspace.md | 119 +-- .../extensibility/CustomServerMiddleware.md | 256 ++++++ .../docs/pages/extensibility/CustomTasks.md | 480 ++++++++++ .../{ => pages}/extensibility/ProjectShims.md | 28 +- .../documentation/docs/{ => pages}/index.md | 96 +- .../docs/{ => pages}/indexJsdoc.md | 2 +- .../documentation/docs/stylesheets/extra.css | 199 ++++ .../documentation/docs/updates/migrate-v1.md | 6 +- .../documentation/docs/updates/migrate-v2.md | 6 +- .../documentation/docs/updates/migrate-v3.md | 117 +-- .../documentation/docs/updates/migrate-v4.md | 70 +- scripts/generateCliDoc.js | 6 +- 35 files changed, 2486 insertions(+), 2587 deletions(-) delete mode 100644 packages/documentation/docs/CLI.md delete mode 100644 packages/documentation/docs/ESSupport.md delete mode 100644 packages/documentation/docs/HomePage.md delete mode 100644 packages/documentation/docs/extensibility/CustomServerMiddleware.md delete mode 100644 packages/documentation/docs/extensibility/CustomTasks.md rename packages/documentation/docs/{ => pages}/Benchmarking.md (98%) rename packages/documentation/docs/{ => pages}/Builder.md (82%) rename packages/documentation/docs/{ => pages}/CodeAnalysis.md (95%) rename packages/documentation/docs/{ => pages}/Configuration.md (69%) create mode 100644 packages/documentation/docs/pages/ESSupport.md rename packages/documentation/docs/{ => pages}/FAQ.md (94%) rename packages/documentation/docs/{ => pages}/FileSystem.md (90%) rename packages/documentation/docs/{ => pages}/GettingStarted.md (78%) create mode 100644 packages/documentation/docs/pages/Guidelines.md rename packages/documentation/docs/{ => pages}/OpenUI5.md (76%) rename packages/documentation/docs/{ => pages}/Overview.md (84%) rename packages/documentation/docs/{ => pages}/Privacy.md (100%) rename packages/documentation/docs/{ => pages}/Project.md (73%) rename packages/documentation/docs/{ => pages}/SAPUI5.md (72%) rename packages/documentation/docs/{ => pages}/Server.md (85%) rename packages/documentation/docs/{ => pages}/Troubleshooting.md (96%) rename packages/documentation/docs/{ => pages}/Workspace.md (80%) create mode 100644 packages/documentation/docs/pages/extensibility/CustomServerMiddleware.md create mode 100644 packages/documentation/docs/pages/extensibility/CustomTasks.md rename packages/documentation/docs/{ => pages}/extensibility/ProjectShims.md (93%) rename packages/documentation/docs/{ => pages}/index.md (59%) rename packages/documentation/docs/{ => pages}/indexJsdoc.md (52%) create mode 100644 packages/documentation/docs/stylesheets/extra.css diff --git a/.gitignore b/.gitignore index 022de389d7..fb5d1c7bae 100644 --- a/.gitignore +++ b/.gitignore @@ -61,7 +61,7 @@ site/ # Custom files # Documentation -packages/documentation/docs/CLI.md +packages/documentation/docs/pages/CLI.md packages/documentation/docs/.vitepress/dist packages/documentation/docs/.vitepress/cache packages/documentation/.vitepress/dist diff --git a/packages/documentation/.vitepress/config.ts b/packages/documentation/.vitepress/config.ts index 19f19e7872..97c9414a95 100644 --- a/packages/documentation/.vitepress/config.ts +++ b/packages/documentation/.vitepress/config.ts @@ -185,11 +185,11 @@ function guide() { { text: "Home", - link: "/HomePage", + link: "/pages/index", }, { text: "Getting Started", - link: "/GettingStarted", + link: "/pages/GettingStarted", }, ], @@ -198,7 +198,7 @@ function guide() { { text: "UI5 CLI", collapsed: true, - link: "/CLI", + link: "/pages/CLI", }, @@ -206,7 +206,7 @@ function guide() { text: "Configuration", collapsed: true, - link: "/Configuration", + link: "/pages/Configuration", }, { @@ -215,19 +215,19 @@ function guide() { items: [ { text: "Overview", - link: "/Overview", + link: "/pages/Overview", }, { text: "OpenUI5", - link: "/OpenUI5", + link: "/pages/OpenUI5", }, { text: "SAPUI5", - link: "/SAPUI5", + link: "/pages/SAPUI5", }, { text: "Workspace", - link: "/Workspace", + link: "/pages/Workspace", }, ], @@ -239,15 +239,15 @@ function guide() { items: [ { text: "Custom Tasks", - link: "/extensibility/CustomTasks", + link: "/pages/extensibility/CustomTasks", }, { text: "Custom Server Middleware", - link: "/extensibility/CustomServerMiddleware", + link: "/pages/extensibility/CustomServerMiddleware", }, { text: "Project Shims", - link: "/extensibility/ProjectShims", + link: "/pages/extensibility/ProjectShims", }, ], }, @@ -257,26 +257,26 @@ function guide() { items: [ { text: "Server", - link: "/Server", + link: "/pages/Server", }, { text: "Builder", - link: "/Builder", + link: "/pages/Builder", }, { text: "Project", - link: "/Project", + link: "/pages/Project", }, { text: "File System", - link: "/FileSystem", + link: "/pages/FileSystem", }, ], }, { text: "FAQ", collapsed: false, - link: "/FAQ", + link: "/pages/FAQ", }, { @@ -307,19 +307,19 @@ function guide() { items: [ { text: "Troubleshooting", - link: "/Troubleshooting", + link: "/pages/Troubleshooting", }, { text: "Benchmarking", - link: "/Benchmarking", + link: "/pages/Benchmarking", }, { text: "ECMAScript Support", - link: "/ESSupport", + link: "/pages/ESSupport", }, { text: "Code Analysis", - link: "/CodeAnalysis", + link: "/pages/CodeAnalysis", }, ], }, diff --git a/packages/documentation/docs/CLI.md b/packages/documentation/docs/CLI.md deleted file mode 100644 index dc542f9a38..0000000000 --- a/packages/documentation/docs/CLI.md +++ /dev/null @@ -1,393 +0,0 @@ -# UI5 CLI -## Requirements -- [Node.js](https://nodejs.org/) version v20.11.0 and higher or v22.0.0 and higher (v21 is not supported) -- [npm](https://www.npmjs.com/) version v8.0.0 or higher - -## Installation - -Install the CLI using the npm package manager: - -```sh -npm install --global @ui5/cli - -# Verify installation -ui5 --help -``` - -## Usage/Syntax - -` - ui5 [options] -` - -The CLI automatically checks for updates using [update-notifier](https://github.com/yeoman/update-notifier). While this is skipped in CI environments, you might also opt-out manually by following the steps described [here](https://github.com/yeoman/update-notifier/blob/-/readme.md#user-settings). - -## Common options - -These options you can use with each command. - -| Option | Description | Details | -| --- | --- | --- | -| -h, --help | Show help | [boolean] | -| -v, --version | Show version number | [boolean] | -| -c, --config | Path to project configuration file in YAML format | [string] | -| --dependency-definition | Path to a YAML file containing the project's dependency tree. This option will disable resolution of node package dependencies. | [string] | -| --workspace-config | Path to workspace configuration file in YAML format | [string] | -| -w, --workspace | Name of the workspace configuration to use | [string] [default: "default"] | -| --loglevel, --log-level | Set the logging level | [string] [choices: "silent", "error", "warn", "info", "perf", "verbose", "silly"] [default: "info"] | -| --verbose | Enable verbose logging. | [boolean] [default: false] | -| --perf | Enable performance measurements and related logging. | [boolean] [default: false] | -| --silent | Disable all log output. | [boolean] [default: false] | - -## Examples - -Execute command using a static dependency tree instead of resolving node package dependencies -``` -ui5 --dependency-definition /path/to/projectDependencies.yaml -``` -Execute command using a project configuration from custom path -``` -ui5 --config /path/to/ui5.yaml -``` -Execute command using the 'dolphin' workspace of a ui5-workspace.yaml -``` -ui5 --workspace dolphin -``` -Execute command with the maximum log output -``` -ui5 --log-level silly -``` - -## Commands - -### ui5 add - -**Description** - -Add SAPUI5/OpenUI5 framework libraries to the project configuration. - -**Usage** - -` -ui5 add [--development] [--optional] -` - - -**Options** - -| Option | Description | Details | -| --- | --- | --- | -| -D, --development, --dev | Add as development dependency | [boolean] [default: false] | -| -O, --optional | Add as optional dependency | [boolean] [default: false] | - -**Positionals** - -| Positional | Description | Details | -| --- | --- | --- | -| framework-libraries | Framework library names | [array] [required] [default: []] | - -**Examples** - -Add the framework libraries sap.ui.core and sap.m as dependencies -``` -ui5 add sap.ui.core sap.m -``` -Add the framework library sap.ui.support as development dependency -``` -ui5 add -D sap.ui.support -``` -Add the framework library themelib_sap_fiori_3 as optional dependency -``` -ui5 add --optional themelib_sap_fiori_3 -``` -### ui5 build - -**Description** - -Build project in current directory - -**Usage** - -` -ui5 build -` - -**Child Commands** - -| Command | Description | -| --- | --- | -| ui5 build jsdoc | Build JSDoc resources | -| ui5 build preload | (default) Build project and create preload bundles | -| ui5 build self-contained | Build project and create self-contained bundle. Recommended to be used in conjunction with --include-all-dependencies | - -**Options** - -| Option | Description | Details | -| --- | --- | --- | -| -a, --include-all-dependencies, --all | Include all dependencies in the build result. This is equivalent to '--include-dependency "*"' | [boolean] [default: false] | -| --include-dependency | A list of dependencies to be included in the build result. You can use the asterisk '*' as an alias for including all dependencies in the build result. The listed dependencies cannot be overruled by dependencies defined in 'exclude-dependency'. The provided name must match with the dependency name shown in 'ui5 ls --flat' | [array] | -| --include-dependency-regexp | A list of regular expressions defining dependencies to be included in the build result. This list is prioritized like 'include-dependency'. | [array] | -| --include-dependency-tree | A list of dependencies to be included in the build result. Transitive dependencies are implicitly included and do not need to be part of this list. These dependencies overrule the selection of 'exclude-dependency-tree' but can be overruled by 'exclude-dependency'. | [array] | -| --exclude-dependency | A list of dependencies to be excluded from the build result. The listed dependencies can be overruled by dependencies defined in 'include-dependency'. The provided name must match with the dependency name shown in 'ui5 ls --flat' | [array] | -| --exclude-dependency-regexp | A list of regular expressions defining dependencies to be excluded from the build result. This list is prioritized like 'exclude-dependency'. | [array] | -| --exclude-dependency-tree | A list of dependencies to be excluded from the build result. Transitive dependencies are implicitly included and do not need to be part of this list. | [array] | -| --dest | Path of build destination | [string] [default: "./dist"] | -| --clean-dest | If present, clean the destination directory before building | [boolean] [default: false] | -| --create-build-manifest | Store build metadata in a '.ui5' directory in the build destination, allowing reuse of the build result in other builds | [boolean] [default: false] | -| --include-task | A list of tasks to be added to the default execution set. This option takes precedence over any excludes. | [array] | -| --exclude-task | A list of tasks to be excluded from the default task execution set | [array] | -| --framework-version | Overrides the framework version defined by the project. Takes the same value as the version part of "ui5 use" | [string] | -| --cache-mode | Cache mode to use when consuming SNAPSHOT versions of framework dependencies. The 'Default' behavior is to invalidate the cache after 9 hours. 'Force' uses the cache only and does not create any requests. 'Off' invalidates any existing cache and updates from the repository | [string] [choices: "Default", "Force", "Off"] [default: "Default"] | -| --experimental-css-variables | Generate CSS variables (css-variables.css, css-variables.source.less) and skeleton (library-skeleton(-RTL).css) for all themes | [boolean] [default: false] | -| --output-style | Processes build results into a specific directory structure.
- Flat: Omits the project namespace and the "resources" directory.
- Namespace: Respects the project namespace and the "resources" directory, maintaining the original structure.
- Default: The default directory structure for every project type. For applications, this is identical to "Flat", and for libraries, it is "Namespace". Other types have a more distinct default output style. | [string] [choices: "Default", "Flat", "Namespace"] [default: "Default"] | - - -**Examples** - -Preload build for project without dependencies -``` -ui5 build -``` -Self-contained build for project -``` -ui5 build self-contained -``` -Build project but only apply the minify- and generateComponentPreload tasks -``` -ui5 build --exclude-task=* --include-task=minify generateComponentPreload -``` -Build project by applying all default tasks including the minify task and excluding the generateComponentPreload task -``` -ui5 build --include-task=minify --exclude-task=generateComponentPreload -``` -Preload build with experimental CSS variables artifacts -``` -ui5 build --experimental-css-variables -``` -### ui5 config - -**Description** - -Get and set UI5 CLI configuration options - -**Usage** - -` -ui5 config -` - -**Child Commands** - -| Command | Description | -| --- | --- | -| ui5 config set [value] | Set the value for a given configuration option. Clear an existing configuration by omitting the value | -| ui5 config get | Get the value for a given configuration option | -| ui5 config list | Display the current configuration | - - - -**Examples** - -Set a value for the ui5DataDir configuration -``` -ui5 config set ui5DataDir /path/to/.ui5 -``` -Unset the current value of the ui5DataDir configuration -``` -ui5 config set ui5DataDir -``` -### ui5 init - -**Description** - -Initialize the UI5 CLI configuration for an application or library project. - -**Usage** - -` -ui5 init -` - - - - -### ui5 remove - -**Description** - -Remove SAPUI5/OpenUI5 framework libraries from the project configuration. - -**Usage** - -` -ui5 remove -` - - - -**Positionals** - -| Positional | Description | Details | -| --- | --- | --- | -| framework-libraries | Framework library names | [array] [required] [default: []] | - -**Examples** - -Remove the framework libraries sap.ui.core and sap.m as dependencies -``` -ui5 remove sap.ui.core sap.m -``` -### ui5 serve - -**Description** - -Start a web server for the current project - -**Usage** - -` -ui5 serve -` - - -**Options** - -| Option | Description | Details | -| --- | --- | --- | -| -p, --port | Port to bind on (default for HTTP: 8080, HTTP/2: 8443) | [number] | -| -o, --open | Open web server root directory in default browser. Optionally, supplied relative path will be appended to the root URL | [string] | -| --h2 | Shortcut for enabling the HTTP/2 protocol for the web server | [boolean] [default: false] | -| --simple-index | Use a simplified view for the server directory listing | [boolean] [default: false] | -| --accept-remote-connections | Accept remote connections. By default the server only accepts connections from localhost | [boolean] [default: false] | -| --key | Path to the private key | [string] [default: "~/.ui5/server/server.key"] | -| --cert | Path to the certificate | [string] [default: "~/.ui5/server/server.crt"] | -| --sap-csp-policies | Always send content security policies 'sap-target-level-1' and 'sap-target-level-3' in report-only mode | [boolean] [default: false] | -| --serve-csp-reports | Collects and serves CSP reports upon request to '/.ui5/csp/csp-reports.json' | [boolean] [default: false] | -| --framework-version | Overrides the framework version defined by the project. Takes the same value as the version part of "ui5 use" | [string] | -| --cache-mode | Cache mode to use when consuming SNAPSHOT versions of framework dependencies. The 'Default' behavior is to invalidate the cache after 9 hours. 'Force' uses the cache only and does not create any requests. 'Off' invalidates any existing cache and updates from the repository | [string] [choices: "Default", "Force", "Off"] [default: "Default"] | - - -**Examples** - -Start a web server for the current project -``` -ui5 serve -``` -Enable the HTTP/2 protocol for the web server (requires SSL certificate) -``` -ui5 serve --h2 -``` -Use the project configuration from a custom path -``` -ui5 serve --config /path/to/ui5.yaml -``` -Use a static dependency definition file -``` -ui5 serve --dependency-definition /path/to/projectDependencies.yaml -``` -Listen to port 1337 and launch default browser with `http://localhost:1337/test/QUnit.html` -``` -ui5 serve --port 1337 --open tests/QUnit.html -``` -### ui5 tree - -**Description** - -Outputs the dependency tree of the current project to stdout. It takes all relevant parameters of ui5 build into account. - -**Usage** - -` -ui5 tree -` - - -**Options** - -| Option | Description | Details | -| --- | --- | --- | -| --flat | Output a flat list of all dependencies instead of a tree hierarchy | [boolean] [default: false] | -| --level | Limit the number of levels shown in the tree hierarchy | [number] | -| --framework-version | Overrides the framework version defined by the project. Takes the same value as the version part of "ui5 use" | [string] | -| --cache-mode | Cache mode to use when consuming SNAPSHOT versions of framework dependencies. The 'Default' behavior is to invalidate the cache after 9 hours. 'Force' uses the cache only and does not create any requests. 'Off' invalidates any existing cache and updates from the repository | [string] [choices: "Default", "Force", "Off"] [default: "Default"] | -| | | | - - -### ui5 use - -**Description** - -Initialize or update the project's framework configuration. - -**Usage** - -` -ui5 use -` - - - -**Positionals** - -| Positional | Description | Details | -| --- | --- | --- | -| framework-info | Framework name, version or both (name@version).
Name can be "SAPUI5" or "OpenUI5" (case-insensitive).
Version can be "latest" (default), a version or range according to the Semantic Versioning specification (https://semver.org/), or a tag available in the npm registry.
For SAP-internal usage the version can also be "latest-snapshot", a version or range ending with -SNAPSHOT, or a simplified range such as "1-SNAPSHOT", "1.x-SNAPSHOT" or "1.108-SNAPSHOT". | [string] [required] | - -**Examples** - -Use SAPUI5 in the latest available version -``` -ui5 use sapui5@latest -``` -Use OpenUI5 in the latest available 1.76 patch version -``` -ui5 use openui5@1.76 -``` -Use the latest available version of the configured framework -``` -ui5 use latest -``` -Use OpenUI5 in the latest available version -``` -ui5 use openui5 -``` -### ui5 versions - -**Description** - -Shows the versions of all UI5 CLI modules - -**Usage** - -` -ui5 versions -` - - - - - -## Local vs. Global Installation -In general, we recommend a global installation of the UI5 CLI (`npm install --global @ui5/cli`). - -However, it makes sense to add the UI5 CLI as a [devDependency](https://docs.npmjs.com/files/package.json#devdependencies) (`npm install --save-dev @ui5/cli`) to a project's `package.json`. This ensures that every developer working on the project uses the same version of the UI5 CLI and your continuous integration environments also uses this version. - -In case you have both, a local installation in one of your projects as well as a global installation, the UI5 CLI will always try to invoke the local installation. This is in part because [npm scripts](https://docs.npmjs.com/misc/scripts) defined in your `package.json` will also always invoke the local installation. - -This behavior can be disabled by setting the environment variable `UI5_CLI_NO_LOCAL`. - -**Example** -You have a project located in the directory `/my-application`. - -You have installed the UI5 CLI globally. In addition, the project's `package.json` defines a `devDependency` to `@ui5/cli` and a start script `"ui5 serve"`. This means there are at least two installations of `@ui5/cli` on your system. Their versions might not match. - -This table illustrates which of the two installations is used in different scenarios. Note how the UI5 CLI always tries to prefer the version installed in the project. - -| Current Working Directory | Command | Global UI5 CLI | Local UI5 CLI | -| ------------------------- | ------------------------------- | :-----------------------------: | :----------------------------: | -| `/` | `ui5 --version` | enabled | -| `/my-application` | `ui5 --version` | | enabled | -| `/my-application` | `ui5 serve` | | enabled | -| `/my-application` | `UI5_CLI_NO_LOCAL=X ui5 serve` | enabled | -| `/my-application` | `npm start` | | enabled | -| `/my-application` | `UI5_CLI_NO_LOCAL=X npm start` | | enabled | diff --git a/packages/documentation/docs/ESSupport.md b/packages/documentation/docs/ESSupport.md deleted file mode 100644 index cdf6c85677..0000000000 --- a/packages/documentation/docs/ESSupport.md +++ /dev/null @@ -1,551 +0,0 @@ - -# ECMAScript Support - -UI5 Tooling offers general support for `ES2023` ECMAScript features. While a `ui5 build` is executed, UI5 Tooling analyses a project's code. Depending on the project type, you have to consider some restrictions regarding the usage of certain ECMAScript syntax. - -| UI5 Tooling Version | Supported ECMAScript Version | Note | -|-------------------- |----------------------------- | ---- | -| v3.11+ | ECMAScript 2023 | | -| v3.0+ | ECMAScript 2022 | | -| v2.0+ | ECMAScript 2009/ES5 | Note that code up to ECMAScript 2020 can be parsed, however required code analysis might not work correctly for specific language features | - -The following section describes all restrictions grouped by the kind of ECMAScript language feature. To get more insights into the code analysing executed by UI5 Tooling check out [Code Analysis](./CodeAnalysis.md). - -## Language Features with Restrictions - -The following sections describe the restrictions grouped by the ECMAScript language feature. - -### JavaScript modules - -In general, UI5 Tooling only analyzes **JavaScript** files of type `script`. [JavaScript Modules](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules) are not analyzed. - -UI5 Tooling and the UI5 Runtime does not support the usage of `export` and `import` of JavaScript Modules. Therefore, `sap.ui.define` has to be used. - - -::: code-group -```javascript [Supported] -sap.ui.define([ - "ModuleA", - "ModuleB" -], function(ModuleA, ModuleB) { - return ModuleA.extend("ModuleC", {}); -}); -``` - -```javascript [Not Supported] {1,2,3} -import ModuleA from "ModuleA"; -import ModuleB from "ModuleB"; -export default class ModuleC extends ModuleA {}; -``` -::: -### Template Literal - -[Template Literals](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals) without an expressions can be used in all places where string literals can be used. However, since UI5 Tooling will attempt a static code analysis for certain calls to UI5 API, Template Literals with one or more expressions (e.g. `Hello ${planets[2]}`) can't be used in the scenarios described below. - -#### Template Literal in `sap.ui.define` or `sap.ui.require` - -Template Literals with one or more expressions inside a `sap.ui.define` or `sap.ui.require` call are not supported. - -::: code-group - -```javascript [Supported] -sap.ui.define([ - `ModuleA`, - `ModuleB` -], function(ModuleA, ModuleB) { -}); -``` -```javascript [Not Supported] {4} -const i = `B`; -sap.ui.define([ - `ModuleA`, - `Module${i}` -], function(ModuleA, ModuleB) { -}); -``` -::: -The same rule applies also for the usage of deprecated or no longer recommended APIs `jQuery.sap.declare`, `jQuery.sap.declare`, `define`, `require`, `require.predefine`, `sap.ui.predefine`, `sap.ui.requireSync` and `sap.ui.require.preload`. - -#### Template Literal in Smart Template Declaration - -When declaring a **Smart Template** using a **Template Literal** with one or more expressions in the name of the **Smart Template** is not supported. - -::: code-group -```javascript [Supported] -sap.ui.define([ - `sap/suite/ui/generic/template/lib/TemplateAssembler` -], function(TemplateAssembler) { - return TemplateAssembler.getTemplateComponent(getMethods, - `sap.suite.ui.generic.templates.Page.Component`, { - metadata: { - properties: { - templateName: { - type: `string`, - defaultValue: `sap.suite.ui.generic.templates.Page.view.Page` - } - }, - manifest: `json` - } - } - ); -}); -``` -```javascript [Not Supported] {6} -sap.ui.define([ - `sap/suite/ui/generic/template/lib/TemplateAssembler` -], function(TemplateAssembler) { - const name = `Component`; - return TemplateAssembler.getTemplateComponent(getMethods, - `sap.suite.ui.generic.templates.Page.${name}`, { - metadata: { - properties: { - templateName: { - type: `string`, - defaultValue: `sap.suite.ui.generic.templates.Page.view.Page` - } - }, - manifest: `json` - } - } - ); -}); -``` -::: -#### Template Literal in XMLComposite Declaration - -The **XMLComposite** control is deprecated since version UI5 1.88. Nevertheless UI5 Tooling will attempt to analyze the declaration of any such controls in a project. - -Declaring an **XMLComposite** control using a **Template Literal** with one or more expressions in the name, is not supported. - - -::: code-group - -```javascript [Supported] -sap.ui.define([ - `sap/ui/core/XMLComposite` -], function(XMLComposite) { - return XMLComposite.extend(`composites.MyComposite`, {} -}); -``` -```javascript [Not Supported] {5} -sap.ui.define([ - `sap/ui/core/XMLComposite` -], function(XMLComposite) { - const name = `MyComposite`; - return XMLComposite.extend(`composites.${name}`, {}); -}); -``` -::: -#### Template Literal in sap/ui/core/Core#initLibrary Call - -A library is typically initialized via an accompanying `library.js`. Within that file, the object which is supplied to the `sap/ui/core/Core#initLibrary` method, must not use a **Template Literal** with one or more expressions for the library name. - -::: code-group -```javascript [Supported] -sap.ui.getCore().initLibrary({ - name: `my.lib` -}); -``` -```javascript [Not Supported] {3} -const libraryName = `lib`; -sap.ui.getCore().initLibrary({ - name: `my.${libraryName}` -}); -``` -::: -#### Reserved Variable Names in a Template Literal - -While UI5 Tooling performs a build placeholders are replaced with a values offered by the build. For example `${version}` is replaced with the actual version defined in the package.json of the project. Therefore it is required to not use any **Template Literal** where any expression contains variable with following names: - -- `version` -- `project.version` -- `buildtime` -- `copyright` - -::: code-group - -```javascript [Supported] -const myVersion = `1.2`; -const transformedVersion `v${myVersion}` -``` -```javascript [Not Supported] {3} -const version = `1.2`; -const transformedVersion `v${version}` -``` -::: -UI5 Tooling searches for the exact match of `${version}`, so with adding whitespaces before and after the variable name `${ version }` UI5 Tooling won't replace this occurence. This can be enforced by the dedicated ESLint config [template-curly-spacing](https://eslint.org/docs/latest/rules/template-curly-spacing) with option `always`. - -### Spread Element - -A [Spread Element](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax) can be used in all places, except the following. - -#### Spread Element in `sap.ui.define` or `sap.ui.require` - -A **Spread Element** as a parameter in a `sap.ui.define` or `sap.ui.require` call is not supported. - -::: code-group - -```javascript [Supported] -sap.ui.define([ - "ModuleA", - "ModuleB" -], function(ModuleA, ModuleB) { -}); -``` - - -```javascript [Not Supported] {3} -const dependencies = ["ModuleA", "ModuleB"]; -sap.ui.define([ - ...dependencies -], function(ModuleA, ModuleB) { -}); -``` -::: -The same rule applies also for the usage of deprecated or no longer recommended APIs `jQuery.sap.declare`, `jQuery.sap.declare`, `define`, `require`, `require.predefine`, `sap.ui.predefine`, `sap.ui.requireSync` and `sap.ui.require.preload`. - -#### Spread Element in Smart Template Declaration - -When declaring a **Smart Template**, the usage of a **Spread Element** in the configuration is not supported. - -::: code-group - -```javascript [Supported] -sap.ui.define([ - "sap/suite/ui/generic/template/lib/TemplateAssembler" -], function(TemplateAssembler) { - return TemplateAssembler.getTemplateComponent(getMethods, - "sap.suite.ui.generic.templates.Page.Component", { - metadata: { - properties: { - templateName: { - type: "string", - defaultValue: "sap.suite.ui.generic.templates.Page.view.Page" - } - }, - manifest: "json" - } - } - ); -}); -``` - - -```javascript [Not Supported] {6} -sap.ui.define([ - "sap/suite/ui/generic/template/lib/TemplateAssembler" -], function(TemplateAssembler) { - const myTemplate = { - templateName: { - type: "string", - defaultValue: "sap.suite.ui.generic.templates.Page.view.Page" - } - }; - return TemplateAssembler.getTemplateComponent(getMethods, - "sap.suite.ui.generic.templates.Page.Component", { - metadata: { - properties: { - ...myTemplate - } - manifest: "json" - } - } - ); -}); -``` -::: - -#### Spread Element in XMLComposite Declaration - -The **XMLComposite** control is deprecated since version UI5 1.88. Nevertheless UI5 Tooling will attempt to analyze the declaration of any such controls in a project. - -When declaring an **XMLComposite**, the usage of a **Spread Element** in the configuration is not supported. - -::: code-group - -```javascript [Supported] -sap.ui.define([ - "sap/ui/core/XMLComposite" -], function(XMLComposite) { - return XMLComposite.extend("composites.MyComposite", { - fragment: "composites.custom.MyComposite" - } -}); -``` - - -```javascript [Not Supported] {5} -sap.ui.define([ - "sap/ui/core/XMLComposite" -], function(XMLComposite) { - const myXMLComposite = { - fragment: "composites.custom.MyComposite" - }; - return XMLComposite.extend(`composites.MyComposite`, { - ...myXMLComposite - }); -}); -``` -::: -#### Spread Element in sap/ui/core/Core#initLibrary Call - -A library is typically initialized via an accompanying `library.js`. Within that file, the object which is supplied to the `sap/ui/core/Core#initLibrary` method, must not use a **Spread Element**. - -::: code-group - -```javascript [Supported] -sap.ui.getCore().initLibrary({ - name: "my.lib" -}); -``` - - -```javascript [Not Supported] {5} -const mylib = { - name: "my.lib" -}; -sap.ui.getCore().initLibrary({ - ...mylib -}); -``` -::: - -### Object Expression - -An **Object Expression** can be used in all places except in following places. - -#### Object Expression in `sap.ui.define` or `sap.ui.require` - -An **Object Expression** as a parameter in a `sap.ui.define` or `sap.ui.require` call is not supported. - -::: code-group - -```javascript [Supported] -sap.ui.define([ - "Bar" -], function(Bar){ -}); -``` - - -```javascript [Not Supported] {3} -const dependency = "Bar"; -sap.ui.define([ - dependency -], function(Bar){ -}); -``` -::: - -The same rule applies also for the usage of deprecated or no longer recommended APIs `jQuery.sap.declare`, `jQuery.sap.declare`, `define`, `require`, `require.predefine`, `sap.ui.predefine`, `sap.ui.requireSync` and `sap.ui.require.preload`. - -#### Object Expression in Smart Template Declaration - -When declaring a **Smart Template**, the usage of an **Object Expression** in the configuration is not supported. - -::: code-group - -```javascript [Supported] -sap.ui.define([ - "sap/suite/ui/generic/template/lib/TemplateAssembler" -], function(TemplateAssembler) { - return TemplateAssembler.getTemplateComponent(getMethods, - "sap.suite.ui.generic.templates.Page.Component", { - metadata: { - properties: { - templateName: { - type: "string", - defaultValue: "sap.suite.ui.generic.templates.Page.view.Page" - } - }, - manifest: "json" - } - } - ); -}); -``` - - -```javascript [Not Supported] {9} -sap.ui.define([ - "sap/suite/ui/generic/template/lib/TemplateAssembler" -], function(TemplateAssembler) { - const key = "templateName" - return TemplateAssembler.getTemplateComponent(getMethods, - `sap.suite.ui.generic.templates.Page.${name}`, { - metadata: { - properties: { - [key]: { - type: "string", - defaultValue: "sap.suite.ui.generic.templates.Page.view.Page" - } - } - manifest: "json" - } - } - ); -}); -``` -::: -#### Object Expression in XMLComposite Declaration - -The **XMLComposite** control is deprecated since version UI5 1.88. Nevertheless UI5 Tooling will attempt to analyze the declaration of any such controls in a project. - -When declaring an **XMLComposite**, the usage of an **Object Expression** in the configuration is not supported. - -::: code-group - -```javascript [Supported] -sap.ui.define([ - "sap/ui/core/XMLComposite" -], function(XMLComposite) { - return XMLComposite.extend("composites.MyComposite", { - fragment: "composites.custom.MyComposite" - } -}); -``` - - -```javascript [Not Supported] {6} -sap.ui.define([ - "sap/ui/core/XMLComposite" -], function(XMLComposite) { - const key = "fragment"; - return XMLComposite.extend("composites.MyComposite", { - [key]: "composites.custom.MyComposite" - }); -}); -``` -::: -#### Object Expression in sap/ui/core/Core#initLibrary Call - -A library is typically initialized via an accompanying `library.js`. Within that file, the object which is supplied to the `sap/ui/core/Core#initLibrary` method, must not use an **Object Expression**. - -::: code-group - -```javascript [Supported] -sap.ui.getCore().initLibrary({ - name: "my.lib" -}); -``` - - - -```javascript [Not Supported] {3} -const key = "name"; -sap.ui.getCore().initLibrary({ - [key]: "my.lib" -}); -``` -::: -### Computed Property - -A **Computed Property** can be used in all places except in following places. - -#### Computed Property when using `extend` - -One or more **Computed Property** as a parameter in an UI5 Module `extend` call is not supported. - -::: code-group - -```javascript [Supported] -sap.ui.define([ - "Bar" -], function(Bar){ - return Bar.extend("my.Bar" {}); -}); -``` - -```javascript [Not Supported] -const name = "my"; -sap.ui.define([ - "Bar" -], function(Bar){ - return Bar.extend(name + ".Bar", {}); -}); -``` -::: - -#### Computed Properties in sap/ui/core/Core#initLibrary Call - -A library is typically initialized via an accompanying `library.js`. Within that file, the object which is supplied to the `sap/ui/core/Core#initLibrary` method, must not use an **Computed Property**. - -::: code-group - -```javascript [Supported] -sap.ui.getCore().initLibrary({ - name: "my.lib" -}); -``` - - -```javascript [Not Supported] {3} -const name = "my"; -sap.ui.getCore().initLibrary({ - name: name + ".lib" -}); -``` -::: - -### Class Declaration - -If you want to generate a JSDoc build of your project and using a **Class Declaration** the class declaration should not be returned directly. Declare the class and return the class in a separate statement. If not JSDoc treats the the class declaration as a return statement and does not recognize any JSDoc if such is provided right above the class declaration. - -::: code-group - -```javascript [Supported] -sap.ui.define([ - "Bar" -], function(Bar){ - /** - * JSDoc block here - */ - class Foo extends Bar { - make () {} - } - return Foo; -}); -``` - - -```javascript [Not Supported] {7} -sap.ui.define([ - "Bar" -], function(Bar){ - /** - * JSDoc block here - */ - return class Foo extends Bar { - make () {} - } -}); -``` -::: - -### Arrow Function Expression - -If you want to generate a JSDoc build of your project and use an **Arrow Function Expression** the JSDoc has to be written above the arrow function and not above the `sap.ui.define/sap.ui.require` command. - -::: code-group - -```javascript [Supported] -sap.ui.define([ - "Bar" -], -/** - * JSDoc block here - */ -(Bar) => Bar.extends("Foo", { -})); -``` - - -```javascript [Not Supported] {1,2,3} -/** - * JSDoc block here - */ -sap.ui.define([ - "Bar" -], (Bar) => Bar.extends("Foo", { -})); -``` diff --git a/packages/documentation/docs/HomePage.md b/packages/documentation/docs/HomePage.md deleted file mode 100644 index f42dc972fd..0000000000 --- a/packages/documentation/docs/HomePage.md +++ /dev/null @@ -1,131 +0,0 @@ - -# UI5 Tooling - -An open and modular toolchain to develop state-of-the-art applications based on the [UI5](https://ui5.sap.com) framework. - -::: tip 🚀 New Release -**UI5 Tooling V4 is here 🎉** - -Read the announcement blog post: **[SAP Community: UI5 Tooling 4.0](https://community.sap.com/t5/technology-blogs-by-sap/ui5-tooling-4-0/ba-p/13769578)** - -And checkout the **[Migrate to v4](./updates/migrate-v4.md)** documentation. -::: -[**Get Started**](./GettingStarted.md) - -## Main Features - -### 💻 UI5 CLI - -*Also see the [UI5 CLI Documentation](./CLI.md)* - -```sh -# Global -npm install --global @ui5/cli - -# In your project -npm install --save-dev @ui5/cli -``` - -#### ⚙️ Project Setup - -Configure your project for use with UI5 Tooling. -*Also see the [Configuration Documentation](./Configuration.md)* - -``` -❯ ui5 init -Wrote ui5.yaml: - -specVersion: "4.0" -metadata: - name: my-app -type: application -``` - -#### 🚚 Dependency Management - -UI5 framework dependencies are managed by the tooling. All other dependencies are managed by your favorite node package manager. - -``` -❯ ui5 use SAPUI5@1.117.0 -Updated configuration written to ui5.yaml -This project is now using SAPUI5 version 1.117.0 - -❯ ui5 add sap.ui.core sap.m themelib_sap_fiori_3 -Updated configuration written to ui5.yaml -Added framework libraries sap.ui.core sap.m themelib_sap_fiori_3 as dependencies -``` - -#### 🏄 Development Server - -Start a local development server to work on your project. -*Also see the [Server Documentation](./Server.md)* - -``` -❯ ui5 serve -Server started -URL: http://localhost:8080 -``` - -#### 🛠 Build for Production - -Build an optimized version of your project. -*Also see the [Builder Documentation](./Builder.md)* - -``` bash -❯ ui5 build -info graph:helpers:ui5Framework Using OpenUI5 version: 1.117.0 -info ProjectBuilder Preparing build for project my-app -info ProjectBuilder Target directory: ./dist -info ProjectBuilder Cleaning target directory... -info Project 1 of 1: ❯ Building application project my-app... -info my-app › Running task escapeNonAsciiCharacters... -info my-app › Running task replaceCopyright... -info my-app › Running task replaceVersion... -info my-app › Running task minify... -info my-app › Running task generateFlexChangesBundle... -info my-app › Running task generateComponentPreload... -info ProjectBuilder Build succeeded in 296 ms -info ProjectBuilder Executing cleanup tasks... -``` - -### 🧪 Node.js API - -Most UI5 Tooling modules provide JavaScript APIs for direct consumption in other Node.js projects. -This allows you to rely on UI5 Tooling for UI5-specific build functionality and project handling, while creating your own tools to perfectly match the needs of your project. - -All available APIs are documented in the [UI5 Tooling API Reference](https://sap.github.io/ui5-tooling/v4/api/index.html). - -::: code-group - - -```js [ESM] -import {graphFromPackageDependencies} from "@ui5/project/graph"; - -async function buildApp(projectPath, destinationPath) { - const graph = await graphFromPackageDependencies({ - cwd: projectPath - }); - await graph.build({ - destPath: destinationPath, - selfContained: true, - excludedTasks: ["transformBootstrapHtml"], - includedDependencies: ["*"] - }); -} -``` -```js [CommonJS] -async function buildApp(projectPath, destinationPath) { - const {graphFromPackageDependencies} = - await import("@ui5/project/graph"); - const graph = await graphFromPackageDependencies({ - cwd: projectPath - }); - await graph.build({ - destPath: destinationPath, - selfContained: true, - excludedTasks: ["transformBootstrapHtml"], - includedDependencies: ["*"] - }); -} -``` -::: \ No newline at end of file diff --git a/packages/documentation/docs/extensibility/CustomServerMiddleware.md b/packages/documentation/docs/extensibility/CustomServerMiddleware.md deleted file mode 100644 index 8c75238c55..0000000000 --- a/packages/documentation/docs/extensibility/CustomServerMiddleware.md +++ /dev/null @@ -1,255 +0,0 @@ -# Custom UI5 Server Middleware - -The UI5 Server Extensibility enables you to enhance the functionality of the UI5 Server. You may want to handle requests differently. For example add various headers to a response or parse data of a POST request in a specific way. For this you can plug custom middleware implementations into the internal [express](https://expressjs.com/) server of the UI5 Server module. - -The UI5 community already created many custom middleware packages which you can integrate into your project. They are often prefixed by `ui5-middleware-` to make them easily searchable in the [npm registry](https://www.npmjs.com/search?q=ui5-middleware-). - -Please note that custom middleware packages from third parties can not only modify how your project is served but also execute arbitrary code on your system. In fact, this is the case for all npm packages you install. Always act with the according care and follow best practices. - -## Configuration - -In a projects `ui5.yaml` file, you can define additional server middleware modules that will be executed when the request is received by the server. This configuration exclusively affects the server started in this project. Custom middleware configurations defined in any dependencies are ignored. - -A middleware may be executed before or after any other middleware. This can either be a [standard middleware](../Server.md#standard-middleware) or another custom middleware. - -### Example: Basic configuration - - -```yaml -# In this example configuration, two custom tasks are defined: 'babel' and 'render-markdown-files'. -specVersion: "4.0" -type: application -metadata: - name: my.application -server: - customMiddleware: - - name: myCustomMiddleware - mountPath: /myapp - afterMiddleware: compression - configuration: - debug: true -``` - -In the above example the middleware `compression` is already included as a standard middleware by the UI5 Server. When serving the application `my.application`, the server will call the custom middleware `myCustomMiddleware` after `compression`. - -There can be optional configuration parameters which are passed directly to the custom middleware implementation (see below). - -An optional mountPath for which the middleware function is invoked can be provided. It will be passed to the `app.use` call (see [express API reference](https://expressjs.com/en/4x/api.html#app.use)). - -### Execution order - -Note that middleware configurations are applied in the order they are defined. When referencing another custom middleware, it has to be defined *before* that reference. - -## Custom Middleware Extension - -A custom middleware extension consists of a `ui5.yaml` and a [custom middleware implementation](#custom-middleware-implementation). It can be a standalone module or part of an existing UI5 project. - -### Example: ui5.yaml - -```yaml -specVersion: "4.0" -kind: extension -type: server-middleware -metadata: - name: markdownHandler -middleware: - path: lib/middleware/markdownHandler.js -``` - -Custom middleware extensions can be **standalone modules** which are handled as dependencies. - -Alternatively you can implement a custom middleware extension as **part of your UI5 project**. -In that case, the configuration of the extension is part of your project configuration inside the `ui5.yaml` as shown below. - -The UI5 Server will detect the custom middleware configuration of the project and use the middleware on startup. - -### Example: Custom Middleware Extension defined in UI5 project - -```yaml -# Project configuration for the above example -specVersion: "4.0" -kind: project -type: application -metadata: - name: my.application -server: - customMiddleware: - - name: markdownHandler - beforeMiddleware: serveResources ---- -# Custom middleware extension as part of your project -specVersion: "4.0" -kind: extension -type: server-middleware -metadata: - name: markdownHandler -middleware: - path: lib/middleware/markdownHandler.js -``` - -## Custom Middleware Implementation - -A custom middleware implementation needs to return a function with the following signature: - -::: code-group - -```js [ESM] -/** - * Custom UI5 Server middleware API - * - * @param {object} parameters Parameters - * @param {@ui5/logger/Logger} parameters.log - * Logger instance for use in the custom middleware. - * This parameter is only provided to custom middleware - * extensions defining Specification Version 3.0 and later. - * @param {@ui5/server.middleware.MiddlewareUtil} parameters.middlewareUtil - * Specification version-dependent interface to a - * MiddlewareUtil instance. See the corresponding API reference for details: - * https://sap.github.io/ui5-tooling/v4/api/@ui5_server_middleware_MiddlewareUtil.html - * @param {object} parameters.options Options - * @param {string} parameters.options.configuration - * Custom middleware configuration, as defined in the project's ui5.yaml - * @param {string} parameters.options.middlewareName - * Name of the custom middleware. - * This parameter is only provided to custom middleware extensions - * defining Specification Version 3.0 and later - * @param {object} parameters.resources Readers for accessing resources - * @param {module:@ui5/fs.AbstractReader} parameters.resources.all - * Reader to access resources of the root project and its dependencies - * @param {module:@ui5/fs.AbstractReader} parameters.resources.rootProject - * Reader to access resources of the root project - * @param {module:@ui5/fs.AbstractReader} parameters.resources.dependencies - * Reader to access resources of the project's dependencies. - * @returns {function} Middleware function to use - */ -export default function({log, middlewareUtil, options, resources}) { - return async function (req, res, next) { - // [...] - } -}; -``` -```js [CommonJS] -/** - * Custom UI5 Server middleware API - * - * @param {object} parameters Parameters - * @param {@ui5/logger/Logger} parameters.log - * Logger instance for use in the custom middleware. - * This parameter is only provided to custom middleware - * extensions defining Specification Version 3.0 and later. - * @param {@ui5/server.middleware.MiddlewareUtil} parameters.middlewareUtil - * Specification version-dependent interface to a - * MiddlewareUtil instance. See the corresponding API reference for details: - * https://sap.github.io/ui5-tooling/v4/api/@ui5_server_middleware_MiddlewareUtil.html - * @param {object} parameters.options Options - * @param {string} parameters.options.configuration - * Custom middleware configuration, as defined in the project's ui5.yaml - * @param {string} parameters.options.middlewareName - * Name of the custom middleware. - * This parameter is only provided to custom middleware extensions - * defining Specification Version 3.0 and later - * @param {object} parameters.resources Readers for accessing resources - * @param {module:@ui5/fs.AbstractReader} parameters.resources.all - * Reader to access resources of the root project and its dependencies - * @param {module:@ui5/fs.AbstractReader} parameters.resources.rootProject - * Reader to access resources of the root project - * @param {module:@ui5/fs.AbstractReader} parameters.resources.dependencies - * Reader to access resources of the project's dependencies. - * @returns {function} Middleware function to use - */ -module.exports = function({log, middlewareUtil, options, resources}) { - return async function (req, res, next) { - // [...] - } -}; -``` -::: -### Example: lib/middleware/markdownHandler.(m)js - -::: code-group - -```js [ESM] - - -import MarkdownIt from "markdown-it";export default async function({log, middlewareUtil, options, resources}) { - const md = new MarkdownIt(); - return function (req, res, next) { - if (!req.path || !req.path.endsWith(".html")) { - // Do not handle non-HTML requests - next(); - return; - } - // Try to read a corresponding markdown file - resources.rootProject.byPath(req.path.replace(".html", ".md")).then(async (resource) => { - if (!resource) { - // No file found, hand over to next middleware - next(); - return; - } - log.info(`Rendering markdown for ${resource.getPath()}`); - const markdown = await resource.getBuffer(); - // Generate HTML from markdown string - const html = md.render(markdown.toString()); - res.type('.html'); - res.end(html); - }).catch((err) => { - next(err); - }); - } - }; -``` - - - - -```js [CommonJS] -module.exports = async function({log, middlewareUtil, options, resources}) { - const MarkdownIt = require("markdown-it"); - const md = new MarkdownIt(); - return function (req, res, next) { - if (!req.path || !req.path.endsWith(".html")) { - // Do not handle non-HTML requests - next(); - return; - } - // Try to read a corresponding markdown file - resources.rootProject.byPath(req.path.replace(".html", ".md")).then(async (resource) => { - if (!resource) { - // No file found, hand over to next middleware - next(); - return; - } - log.info(`Rendering markdown for ${resource.getPath()}`); - const markdown = await resource.getBuffer(); - // Generate HTML from markdown string - const html = md.render(markdown.toString()); - res.type('.html'); - res.end(html); - }).catch((err) => { - next(err); - }); - } -}; -``` -- [CommonJS example ](https://github.com/SAP/openui5-sample-app/tree/demo-server-middleware-extensibility-v3) -- [ESM example](https://github.com/SAP/openui5-sample-app/tree/demo-server-middleware-extensibility-v3-esm) -## Helper Class `MiddlewareUtil` - -Custom middleware defining [Specification Version](../Configuration.md#specification-versions) 2.0 or higher have access to an interface of a [MiddlewareUtil](https://sap.github.io/ui5-tooling/v4/api/@ui5_server_middleware_MiddlewareUtil.html) instance. - -In this case, a `middlewareUtil` object is provided as a part of the custom middleware's [parameters](#custom-middleware-implementation). Depending on the specification version of the custom middleware, a set of helper functions is available to the implementation. The lowest required specification version for every function is listed in the [MiddlewareUtil API reference](https://sap.github.io/ui5-tooling/v4/api/@ui5_server_middleware_MiddlewareUtil.html). - -## Integration with `karma-ui5` - -::: warning -The Karma project has been [deprecated](https://github.com/karma-runner/karma#karma-is-deprecated-and-is-not-accepting-new-features-or-general-bug-fixes) as of 2023 -::: -[`karma-ui5`](https://github.com/SAP/karma-ui5) is a plugin for the popular [Karma test runner](https://karma-runner.github.io/). Based on your [configuration](https://github.com/SAP/karma-ui5#url), it can fetch resources from a dedicated server or start an internal server using parts of UI5 Tooling. - -In the latter case, any custom middleware configured in the default `ui5.yaml` of the project will be used automatically. - -However, since Karma uses the [`connect`](https://github.com/senchalabs/connect) framework, as opposed to UI5 Tooling's [`express`](https://github.com/expressjs/express), custom middleware might not always work as expected. Compared to `connect`, the `express` framework provides a more versatile API to middleware. - -Therefore, if you plan to use custom middleware in an integrated scenario with `karma-ui5`, you must **restrict the middleware to using the [`connect`](https://github.com/senchalabs/connect) API only** to ensure compatibility. - -Alternatively, you can start a server with the usual `ui5 serve` command and [configure the corresponding URL](https://github.com/SAP/karma-ui5#url) for use by `karma-ui5`. diff --git a/packages/documentation/docs/extensibility/CustomTasks.md b/packages/documentation/docs/extensibility/CustomTasks.md deleted file mode 100644 index 31c6c33fbc..0000000000 --- a/packages/documentation/docs/extensibility/CustomTasks.md +++ /dev/null @@ -1,454 +0,0 @@ -# Custom UI5 Builder Tasks - -The UI5 Build Extensibility enables you to enhance the build process of any UI5 project. In addition to the [standard tasks](../Builder.md#standard-tasks), custom tasks can be created. - -The UI5 community already created many custom tasks which you can integrate into your project. They are often prefixed by `ui5-task-` to make them easily searchable in the [npm registry](https://www.npmjs.com/search?q=ui5-task-). - -Please note that custom tasks from third parties can not only modify your project but also execute arbitrary code on your system. In fact, this is the case for all npm packages you install. Always act with the according care and follow best practices. - -## Configuration - -You can configure your build process with additional build task. These custom tasks are defined in the project [configuration](../Configuration.md). - -To hook your custom tasks into the different build phases of a project, they need to reference other tasks to be executed before or after. This can be a [standard task](../Builder.md#standard-tasks) or another custom task. -Standard tasks that are disabled, even though they are not executed, can still be referenced by custom tasks, which will be performed in their designated position. - -In the below example, when building the library `my.library` the custom `babel` task will be executed before the standard task `generateComponentPreload`. -Another custom task called `render-markdown-files` is then executed immediately after the standard task `minify`. - -### Example: Basic configuration - -```yaml -# In this example configuration, two custom tasks are defined: 'babel' and 'render-markdown-files'. -specVersion: "4.0" -type: library -metadata: - name: my.library -builder: - customTasks: - - name: babel - beforeTask: generateComponentPreload - - name: render-markdown-files - afterTask: minify - configuration: - markdownStyle: - firstH1IsTitle: true -``` - -### Example: Connect multiple custom tasks - -You can also connect multiple custom tasks with each other. The order in the configuration is important in this case. You have to make sure that a task is defined *before* you reference it via `beforeTask` or `afterTask`. - -```yaml -# In this example, 'my-custom-task-2' gets executed after 'my-custom-task-1'. -specVersion: "4.0" -type: library -metadata: - name: my.library -builder: - customTasks: - - name: my-custom-task-1 - beforeTask: generateComponentPreload - - name: my-custom-task-2 - afterTask: my-custom-task-1 -``` - -## Custom Task Extension - -A custom task extension consists of a `ui5.yaml` and a [task implementation](#task-implementation). It can be a standalone module or part of an existing UI5 project. - -### Example: ui5.yaml - -```yaml -specVersion: "4.0" -kind: extension -type: task -metadata: - name: render-markdown-files -task: - path: lib/tasks/renderMarkdownFiles.js -``` - -Task extensions can be **standalone modules** which are handled as dependencies. - -Alternatively you can implement a task extension as **part of your UI5 project**. -In that case, the configuration of the extension is part of your project configuration inside the `ui5.yaml` as shown below. - -The task extension will then be automatically collected and processed during the processing of the project. - -### Example: Custom Task Extension defined in UI5 project - -```yaml -# Project configuration for the above example -specVersion: "4.0" -kind: project -type: library -metadata: - name: my.library -builder: - customTasks: - - name: render-markdown-files - afterTask: minify - configuration: - markdownStyle: - firstH1IsTitle: true ---- -# Task extension as part of your project -specVersion: "4.0" -kind: extension -type: task -metadata: - name: render-markdown-files -task: - path: lib/tasks/renderMarkdownFiles.js -``` - -## Task Implementation - -A custom task implementation needs to return a function with the following signature: - - -::: code-group -```js [ESM] -/** - * Custom task API - * - * @param {object} parameters - * - * @param {module:@ui5/fs.AbstractReader} parameters.dependencies - * Reader to access resources of the project's dependencies - * @param {@ui5/logger/Logger} parameters.log - * Logger instance for use in the custom task. - * This parameter is only available to custom task extensions - * defining Specification Version 3.0 and later. - * @param {object} parameters.options Options - * @param {string} parameters.options.projectName - * Name of the project currently being built - * @param {string} parameters.options.projectNamespace - * Namespace of the project currently being built - * @param {string} parameters.options.configuration - * Custom task configuration, as defined in the project's ui5.yaml - * @param {string} parameters.options.taskName - * Name of the custom task. - * This parameter is only provided to custom task extensions - * defining Specification Version 3.0 and later. - * @param {@ui5/builder.tasks.TaskUtil} parameters.taskUtil - * Specification Version-dependent interface to a TaskUtil instance. - * See the corresponding API reference for details: - * https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html - * @param {module:@ui5/fs.DuplexCollection} parameters.workspace - * Reader/Writer to access and modify resources of the - * project currently being built - * @returns {Promise} - * Promise resolving once the task has finished - */ -export default async function({dependencies, log, options, taskUtil,workspace}) { - // [...] -}; -``` - - - -```js [CommonJS] -/** - * Custom task API - * - * @param {object} parameters - * - * @param {module:@ui5/fs.AbstractReader} parameters.dependencies - * Reader to access resources of the project's dependencies - * @param {@ui5/logger/Logger} parameters.log - * Logger instance for use in the custom task. - * This parameter is only available to custom task extensions - * defining Specification Version 3.0 and later. - * @param {object} parameters.options Options - * @param {string} parameters.options.projectName - * Name of the project currently being built - * @param {string} parameters.options.projectNamespace - * Namespace of the project currently being built - * @param {string} parameters.options.configuration - * Custom task configuration, as defined in the project's ui5.yaml - * @param {string} parameters.options.taskName - * Name of the custom task. - * This parameter is only provided to custom task extensions - * defining Specification Version 3.0 and later. - * @param {@ui5/builder.tasks.TaskUtil} parameters.taskUtil - * Specification Version-dependent interface to a TaskUtil instance. - * See the corresponding API reference for details: - * https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html - * @param {module:@ui5/fs.DuplexCollection} parameters.workspace - * Reader/Writer to access and modify resources of the - * project currently being built - * @returns {Promise} - * Promise resolving once the task has finished - */ -module.exports = async function({dependencies, log, options, taskUtil,workspace}) { - // [...] -}; -``` -::: -### Required Dependencies - -::: tip Info -This functionality has been added with UI5 CLI [`v3.0.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.0.0) -::: -Custom tasks can export an optional callback function `determineRequiredDependencies` to control which dependency-resources are made available through the `dependencies`-reader that is provided to the task. By reducing the amount of required dependencies or by not requiring any, UI5 Tooling might be able to build a project faster. - -Before executing a task, UI5 Tooling will ensure that all required dependencies have been built. - -If this callback is not provided, UI5 Tooling will make an assumption as to whether the custom task requires access to any resources of dependencies based on the defined Specification Version of the custom task extension: - -* **Specification Version 3.0 and later:** If no callback is provided, UI5 Tooling assumes that no dependencies are required. In this case, the `dependencies` parameter will be omitted. -* **Specification Versions before 3.0:** If no callback is provided, UI5 Tooling assumes that all dependencies are required. - - -*For more details, see also [RFC 0012 UI5 Tooling Extension API v3](https://github.com/SAP/ui5-tooling/blob/rfc-ui5-tooling-extension-api-v3/rfcs/0012-UI5-Tooling-Extension-API-3.md#3-tasks-requiring-dependencies)* - - -::: code-group -```js [ESM] -/** - * Callback function to define the list of required dependencies - * - * @param {object} parameters - * @param {Set} parameters.availableDependencies - * Set containing the names of all direct dependencies of - * the project currently being built. - * @param {function} parameters.getDependencies - * Identical to TaskUtil#getDependencies - * (see https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html). - * Creates a list of names of all direct dependencies - * of a given project. - * @param {function} parameters.getProject - * Identical to TaskUtil#getProject - * (see https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html). - * Retrieves a Project-instance for a given project name. - * @param {object} parameters.options - * Identical to the options given to the standard task function. - * @returns {Promise} - * Promise resolving with a Set containing all dependencies - * that should be made available to the task. - * UI5 Tooling will ensure that those dependencies have been - * built before executing the task. - */ -export async function determineRequiredDependencie({availableDependencies, getDependencies, getProject, options}) { - // "availableDependencies" could look like this: Set(3) { "sap.ui.core", "sap.m", "my.lib" } - // Reduce list of required dependencies: Do not require any UI5 framework projects - availableDependencies.forEach((depName) => { - if (getProject(depName).isFrameworkProject()) { - availableDependencies.delete(depName) - } - }); - // => Only resources of project "my.lib" will be available to the task - return availableDependencies; -} -``` - -```js [CommonJS] -/** - * Callback function to define the list of required dependencies - * - * @param {object} parameters - * @param {Set} parameters.availableDependencies - * Set containing the names of all direct dependencies of - * the project currently being built. - * @param {function} parameters.getDependencies - * Identical to TaskUtil#getDependencies - * (see https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html). - * Creates a list of names of all direct dependencies - * of a given project. - * @param {function} parameters.getProject - * Identical to TaskUtil#getProject - * (see https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html). - * Retrieves a Project-instance for a given project name. - * @param {object} parameters.options - * Identical to the options given to the standard task function. - * @returns {Promise} - * Promise resolving with a Set containing all dependencies - * that should be made available to the task. - * UI5 Tooling will ensure that those dependencies have been - * built before executing the task. - */ -module.exports.determineRequiredDependencies = async functio({availableDependencies, getDependencies, getProject, options}) { - // "availableDependencies" could look like this: Set(3) { "sap.ui.core", "sap.m", "my.lib" } - // Reduce list of required dependencies: Do not require any UI5 framework projects - availableDependencies.forEach((depName) => { - if (getProject(depName).isFrameworkProject()) { - availableDependencies.delete(depName) - } - }); - // => Only resources of project "my.lib" will be available to the task - return availableDependencies; -} -``` -::: - -### Examples - -The following code snippets show examples for custom task implementations. - -### Example: lib/tasks/renderMarkdownFiles.js - -This example is making use of the `resourceFactory` [TaskUtil](https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html) -API to create new resources based on the output of a third-party module for rendering Markdown files. The created resources are added to the build -result by writing them into the provided `workspace`. - -::: code-group -```js [ESM] -import path from "node:path"; -import renderMarkdown from "./renderMarkdown.js"; -/* -* Render all .md (Markdown) files in the project to HTML -*/ -export default async function({dependencies, log, options, taskUtil,workspace}) { - const {createResource} = taskUtil.resourceFactory; - const textResources = await workspace.byGlob("**/*.md"); - await Promise.all(textResources.map(async (resource) => { - const markdownResourcePath = resource.getPath(); - log.info(`Rendering markdown file ${markdownResourcePath}...`); - const htmlString = await renderMarkdown(await resource.getString(), options.configuration); - // Note: @ui5/fs virtual paths are always (on *all* platforms) POSIX. Therefore using path.posix here - const newResourceName = path.posix.basename(markdownResourcePath, ".md") + ".html"; - const newResourcePath = path.posix.join(path.posix.dirname(markdownResourcePath), newResourceName); - const markdownResource = createResource({ - path: newResourcePath, - string: htmlString - }); - await workspace.write(markdownResource); - })); -}; -``` - -```js [CommonJS] -const path = require("node:path"); -const renderMarkdown = require("./renderMarkdown.js"); -/* -* Render all .md (Markdown) files in the project to HTML -*/ -module.exports = async function({dependencies, log, options, taskUtil,workspace}) { - const {createResource} = taskUtil.resourceFactory; - const textResources = await workspace.byGlob("**/*.md"); - await Promise.all(textResources.map(async (resource) => { - const markdownResourcePath = resource.getPath(); - log.info(`Rendering markdown file ${markdownResourcePath}...`); - const htmlString = await renderMarkdown(await resource.getString(), options.configuration); - // Note: @ui5/fs virtual paths are always (on *all* platforms) POSIX. Therefore using path.posix here - const newResourceName = path.posix.basename(markdownResourcePath, ".md") + ".html"; - const newResourcePath = path.posix.join(path.posix.dirname(markdownResourcePath), newResourceName); - const markdownResource = createResource({ - path: newResourcePath, - string: htmlString - }); - await workspace.write(markdownResource); - })); -}; -``` -::: - -::: warning -Depending on your project setup, UI5 Tooling tends to open many files simultaneously during a build. To prevent errors like `EMFILE: too many open files`, we urge custom task implementations to use the [graceful-fs](https://github.com/isaacs/node-graceful-fs#readme) module as a drop-in replacement for the native `fs` module in case it is used. - -Tasks should ideally use the reader/writer APIs provided by UI5 Tooling for working with project resources. -::: -### Example: lib/tasks/compileLicenseSummary.js - -This example is making use of multiple [TaskUtil](https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html) -APIs to retrieve additional information about the project currently being built (`taskUtil.getProject()`) and its direct dependencies -(`taskUtil.getDependencies()`). Project configuration files like `package.json` can be accessed directly using `project.getRootReader()`. - - -::: code-group -```js [ESM]" -import path from "node:path"; -/* -* Compile a list of all licenses of the project's dependencies -* and write it to "dependency-license-summary.json" -*/ -export default async function({dependencies, log, options, taskUtil,workspace}) { - const {createResource} = taskUtil.resourceFactory; - const licenses = new Map(); - const projectsVisited = new Set(); - async function processProject(project) { - return Promise.all(taskUtil.getDependencies().map(async (projectName) => { - if (projectsVisited.has(projectName)) { - return; - } - projectsVisited.add(projectName); - const project = taskUtil.getProject(projectName); - const pkgResource = await project.getRootReader().byPath("/package.json"); - if (pkgResource) { - const pkg = JSON.parse(await pkgResource.getString()) - // Add project to list of licenses - if (licenses.has(pkg.license)) { - licenses.get(pkg.license).push(project.getName()); - } else { - // License not yet in map. Define it - licenses.set(pkg.license, [project.getName()]); - } - } else { - log.info(`Could not find package.json file in project ${project.getName()}`); - } - return processProject(project); - })); - } - // Start processing dependencies of the root project - await processProject(taskUtil.getProject()); - const summaryResource = createResource({ - path: "/dependency-license-summary.json", - string: JSON.stringify(Object.fromEntries(licenses), null, "\t") - }); - await workspace.write(summaryResource); -}; -``` - - - -```js [CommonJS] -const path = require("node:path"); -/* -* Compile a list of all licenses of the project's dependencies -* and write it to "dependency-license-summary.json" -*/ -module.exports = async function({dependencies, log, options, taskUtil,workspace}) { - const {createResource} = taskUtil.resourceFactory; - const licenses = new Map(); - const projectsVisited = new Set(); - async function processProject(project) { - return Promise.all(taskUtil.getDependencies().map(async (projectName) => { - if (projectsVisited.has(projectName)) { - return; - } - projectsVisited.add(projectName); - const project = taskUtil.getProject(projectName); - const pkgResource = await project.getRootReader().byPath("/package.json"); - if (pkgResource) { - const pkg = JSON.parse(await pkgResource.getString()) - // Add project to list of licenses - if (licenses.has(pkg.license)) { - licenses.get(pkg.license).push(project.getName()); - } else { - // License not yet in map. Define it - licenses.set(pkg.license, [project.getName()]); - } - } else { - log.info(`Could not find package.json file in project ${project.getName()}`); - } - return processProject(project); - })); - } - // Start processing dependencies of the root project - await processProject(taskUtil.getProject()); - const summaryResource = createResource({ - path: "/dependency-license-summary.json", - string: JSON.stringify(Object.fromEntries(licenses), null, "\t") - }); - await workspace.write(summaryResource); -}; -``` - -::: -## Helper Class `TaskUtil` - -Custom tasks defining [Specification Version](../Configuration.md#specification-versions) 2.2 or higher have access to an interface of a [TaskUtil](https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html) instance. - -In this case, a `taskUtil` object is provided as a part of the custom task's [parameters](#task-implementation). Depending on the specification version of the custom task, a set of helper functions is available to the implementation. The lowest required specification version for every function is listed in the [TaskUtil API reference](https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_helpers_TaskUtil.html). diff --git a/packages/documentation/docs/Benchmarking.md b/packages/documentation/docs/pages/Benchmarking.md similarity index 98% rename from packages/documentation/docs/Benchmarking.md rename to packages/documentation/docs/pages/Benchmarking.md index 882bc9b468..236812f882 100644 --- a/packages/documentation/docs/Benchmarking.md +++ b/packages/documentation/docs/pages/Benchmarking.md @@ -67,7 +67,6 @@ The following is a walk-through on how to evaluate the performance impact of an UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs --version ``` On Windows: - ```sh set UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs --version ``` @@ -89,7 +88,6 @@ The following is a walk-through on how to evaluate the performance impact of an --export-markdown ./baseline.md ``` On Windows: - ```sh hyperfine --warmup 1 \ 'set UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs build' \ @@ -104,11 +102,11 @@ The following is a walk-through on how to evaluate the performance impact of an 1. Prepare your change 1. Switch to the branch that contains your change ```sh - (cd ../ui5-builder && git checkout my-change) + (cd ../pages/ui5-builder && git checkout my-change) ``` 1. If your change requires different npm dependencies, reinstall them ```sh - (cd ../ui5-builder && npm install) + (cd ../pages/ui5-builder && npm install) ``` 1. The link from UI5 CLI is still in place. However, if you have changes in **multiple** UI5 CLI modules, you might need to `npm link` those again @@ -120,7 +118,6 @@ The following is a walk-through on how to evaluate the performance impact of an --export-markdown ./my_change.md ``` On Windows: - ```sh hyperfine --warmup 1 \ 'set UI5_CLI_NO_LOCAL=X node /my/home/ui5-cli-benchmark/ui5-cli/bin/ui5.cjs build' \ diff --git a/packages/documentation/docs/Builder.md b/packages/documentation/docs/pages/Builder.md similarity index 82% rename from packages/documentation/docs/Builder.md rename to packages/documentation/docs/pages/Builder.md index 76586b80aa..e3dfdd0840 100644 --- a/packages/documentation/docs/Builder.md +++ b/packages/documentation/docs/pages/Builder.md @@ -4,16 +4,20 @@ The [UI5 Builder](https://github.com/SAP/ui5-builder) module takes care of build Based on a project's type, the UI5 Builder defines a series of build steps to execute; these are also called "tasks". -For every type there is a set of default tasks. You can disable single tasks using the `--exclude-task` [CLI parameter](./CLI.md#ui5-build), and you can include tasks using the `--include-task` parameter. +For every type there is a set of default tasks. You can disable single tasks using the `--exclude-task` [CLI parameter](./CLI#ui5-build), and you can include tasks using the `--include-task` parameter. -[**API Reference**](https://ui5.github.io/cli/v4/api/index.html) + ## Tasks Tasks are specific build steps to be executed during build phase. They are responsible for collecting resources which can be modified by a processor. A task configures one or more processors and supplies them with the collected resources. After the respective processor processed the resources, the task is able to continue with its workflow. -A project can add custom tasks to the build by using the [Custom Tasks Extensibility](./extensibility/CustomTasks.md). +A project can add custom tasks to the build by using the [Custom Tasks Extensibility](./extensibility/CustomTasks). ### Standard Tasks @@ -25,33 +29,33 @@ All available standard tasks are documented [in the API reference](https://ui5.g | replaceCopyright | *enabled* | *enabled* | *enabled* | | replaceVersion | *enabled* | *enabled* | *enabled* | | replaceBuildtime | | *enabled* | | -| generateJsdoc | | *disabled¹* | | -| executeJsdocSdkTransformation | | *disabled¹* | | +| generateJsdoc | | *disabled* ^1^ | | +| executeJsdocSdkTransformation | | *disabled* ^1^ | | | minify | *enabled* | *enabled* | | | generateFlexChangesBundle | *enabled* | *enabled* | | | generateLibraryManifest | | *enabled* | | | enhanceManifest | *enabled* | *enabled* | | -| generateComponentPreload | *enabled* | *disabled²* | | +| generateComponentPreload | *enabled* | *disabled* ^2^ | | | generateLibraryPreload | | *enabled* | | -| generateStandaloneAppBundle | *disabled³* | | | -| transformBootstrapHtml | *disabled³* | | | -| generateBundle | *disabled⁴* | *disabled⁴* | | +| generateStandaloneAppBundle | *disabled* ^3^ | | | +| transformBootstrapHtml | *disabled* ^3^ | | | +| generateBundle | *disabled* ^4^ | *disabled* ^4^ | | | buildThemes | | *enabled* | *enabled* | -| generateThemeDesignerResources | | *disabled⁵* | *disabled⁵* | -| generateVersionInfo | *disabled¹* | | | +| generateThemeDesignerResources | | *disabled* ^5^ | *disabled* ^5^ | +| generateVersionInfo | *disabled* ^1^ | | | | generateCachebusterInfo | *disabled* | | | -| generateApiIndex | *disabled¹ * | | | +| generateApiIndex | *disabled* ^1^ | | | | generateResourcesJson | *disabled* | *disabled* | *disabled* | -*Disabled tasks can be activated by certain build modes, the project configuration, or by using the `--include-task` [CLI parameter](./CLI.md#ui5-build). See footnotes where given* +*Disabled tasks can be activated by certain build modes, the project configuration, or by using the `--include-task` [CLI parameter](./CLI#ui5-build). See footnotes where given* --- -¹ Enabled in `jsdoc` build, which disables most of the other tasks -² Enabled for projects defining a [component preload configuration](./Configuration.md#component-preload-generation) -³ Enabled in `self-contained` build, which disables `generateComponentPreload` and `generateLibraryPreload` -⁴ Enabled for projects defining a [bundle configuration](./Configuration.md#custom-bundling) -⁵ Can be enabled for framework projects via the `includeTask` option. For other projects, this task is skipped +^1^ Enabled in `jsdoc` build, which disables most of the other tasks +^2^ Enabled for projects defining a [component preload configuration](./Configuration#component-preload-generation) +^3^ Enabled in `self-contained` build, which disables `generateComponentPreload` and `generateLibraryPreload` +^4^ Enabled for projects defining a [bundle configuration](./Configuration#custom-bundling) +^5^ Can be enabled for framework projects via the `includeTask` option. For other projects, this task is skipped ### minify @@ -65,26 +69,29 @@ Related to this, the bundling tasks will also incorporate the generated source m #### Input Source Maps -::: tip +::: info Info Support for input source maps has been added in UI5 CLI [`v3.7.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.7.0). + ::: For projects facilitating transpilation (such as TypeScript-based projects), it is commonly desired to debug in the browser using the original sources, e.g. TypeScript files. To make this work, the transpilation process first needs to create source maps and reference them in the generated JavaScript code. UI5 CLI's `minify` task will then find this reference and incorporate the source map into the minification process. In the end, the minified JavaScript resources will reference an updated source map, which reflects the transpilation as well as the minification. The browser can use this to map every statement back to the original TypeScript file, making debugging a breeze. -::: warning +::: warning Warning If a resource has been modified by another build task before `minify` is executed, any referenced source map will be ignored. This is to ensure the integrity of the source maps in the build result. It is possible that the modification of the resource content is not reflected in the associated source map, rendering it corrupted. A corrupt source map can make it impossible to properly analyze and debug a resource in the browser development tools. Standard tasks which may modify resources without updating the associated source maps currently include `replaceVersion`, `replaceCopyright` and `replaceBuildtime`. + ::: + Expand the block below to view a diagram illustrating the minification process and source map handling. -::: details Minification Activity Diagram -![minify Task Activity](./images/UI5_CLI/Task_Minify.svg) -::: +??? info "Minification Activity Diagram + ![minify Task Activity](../images/UI5_CLI/Task_Minify.svg) + ### Generation of Supported Locales @@ -115,7 +122,7 @@ In the `manifest.json` the `supportedLocales` property will be enhanced as follo "i18n": { "type": "sap.ui.model.resource.ResourceModel", "settings": { - "bundleName": "my.app.i18n.i18n" + "bundleName": "my.app.i18n.i18n } } } @@ -133,7 +140,7 @@ In the `manifest.json` the `supportedLocales` property will be enhanced as follo "de", "de_DE", "en", - "en_US" + "en_US ] } } @@ -157,7 +164,7 @@ UI5 CLI packages JavaScript files that require "top level scope" as a string, pr This ensures that the script works as expected, e.g. with regards to implicitly used globals. However, this `eval` runtime feature will be discontinued with UI5 2.x because of [security best practices](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval) and to comply with stricter CSP settings (i.e. [unsafe-eval](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src#unsafe_eval_expressions)). -If your project defines [Specification Version 4.0](./Configuration.md#specification-version-40) or higher, files requiring top level scope are no longer part of the created bundle and following error is logged by UI5 CLI: +If your project defines [Specification Version 4.0](./Configuration#specification-version-40) or higher, files requiring top level scope are no longer part of the created bundle and following error is logged by UI5 CLI: > Module myFancyModule requires top level scope and can only be embedded as a string (requires 'eval'), which is not supported with specVersion 4.0 and higher. If you see this error message, please adjust your code by applying one of the following options: @@ -167,17 +174,19 @@ If you see this error message, please adjust your code by applying one of the fo **Option 2**: Wrap the respective files manually in `sap.ui.define` modules as shown below: -> [!IMPORTANT] Example ->**Before**: ->```js ->const myFancyModule = {}; ->``` -> ->**After**: ->```js ->sap.ui.define([], () => { -> "use strict"; -> const myFancyModule = {}; -> return myFancyModule; ->}); ->``` +::: details Example +**Before**: +```js +const myFancyModule = {}; +``` + +**After**: +```js +sap.ui.define([], () => { + "use strict"; + const myFancyModule = {}; + return myFancyModule; +}); +``` + +::: \ No newline at end of file diff --git a/packages/documentation/docs/CodeAnalysis.md b/packages/documentation/docs/pages/CodeAnalysis.md similarity index 95% rename from packages/documentation/docs/CodeAnalysis.md rename to packages/documentation/docs/pages/CodeAnalysis.md index ccae6df0d5..5111e8792e 100644 --- a/packages/documentation/docs/CodeAnalysis.md +++ b/packages/documentation/docs/pages/CodeAnalysis.md @@ -88,26 +88,27 @@ The **XMLComposite** control is deprecated since version UI5 1.88. Nevertheless, The [XML Composite Analyzer](https://github.com/SAP/ui5-builder/blob/main/lib/lbt/analyzer/XMLCompositeAnalyzer.js) searches for the name of the configured fragment containing the **XMLComposite** control. -::: code-group -```javascript [Name of the XMLComposite is equal to fragment name] {4} -sap.ui.define([ - "sap/ui/core/XMLComposite" -], function(XMLComposite) { - return XMLComposite.extend("composites.MyComposite", {} -}); -``` - - -```javascript [Dedicated fragment name] {5} -sap.ui.define([ - "sap/ui/core/XMLComposite" -], function(XMLComposite) { - return XMLComposite.extend("composites.MyComposite", { - fragment: "composites.custom.MyComposite" - } -}); -``` -::: +#### Name of the XMLComposite is equal to fragment name + + ```javascript + sap.ui.define([ + "sap/ui/core/XMLComposite + ], function(XMLComposite) { + return XMLComposite.extend("composites.MyComposite", {} + }); + ``` + +#### Dedicated fragment name + + ```javascript + sap.ui.define([ + "sap/ui/core/XMLComposite + ], function(XMLComposite) { + return XMLComposite.extend("composites.MyComposite", { + fragment: "composites.custom.MyComposite + } + }); + ``` ## Library Initialization @@ -127,7 +128,7 @@ Note: Currently only the usage via the global `sap.ui.getCore().initLibrary` is The UI5 CLI offers a JSDoc build, which is enhanced by UI5-specific JSDoc features. -An UI5 SDK can be built locally. To get more insight into the local UI5 SDK build setup, have a look at our [Developer's Guide](https://github.com/SAP/openui5/blob/-/docs/developing.md#building-the-openui5-sdk-demo-kit). +An UI5 SDK can be built locally. To get more insight into the local UI5 SDK build setup, have a look at our [Developer's Guide](https://github.com/SAP/openui5/blob/-/docs/developing#building-the-openui5-sdk-demo-kit). Currently, the resources needed for a UI5 SDK build are stored in [openui5](https://github.com/SAP/openui5/tree/-/lib/jsdoc) and in [ui5-builder](https://github.com/SAP/ui5-builder/blob/main/lib/processors/jsdoc). This double maintenance is needed because these files are not part of the `sap.ui.core` library artefact, so building JSDoc for any library has no access to the needed resources. It's therefore necessary to have these resources also available in the *ui5-builder*. This might change in the future. diff --git a/packages/documentation/docs/Configuration.md b/packages/documentation/docs/pages/Configuration.md similarity index 69% rename from packages/documentation/docs/Configuration.md rename to packages/documentation/docs/pages/Configuration.md index 1bc51b9725..ebdd6afafe 100644 --- a/packages/documentation/docs/Configuration.md +++ b/packages/documentation/docs/pages/Configuration.md @@ -2,8 +2,9 @@ A projects UI5 CLI configuration is typically located in a [YAML](https://yaml.org/) file named `ui5.yaml`, located in the root directory. -::: info +::: info Info This document describes the configuration of UI5 CLI-based projects and extensions. It represents **[Specification Version 3.0](#specification-versions)**. + ::: ## Validation / IDE support @@ -11,62 +12,79 @@ This document describes the configuration of UI5 CLI-based projects and extensio Starting with [Specification Version 2.0](#specification-version-20) the configuration is validated according to a JSON schema. The current version of the schema can be found here: https://ui5.github.io/cli/schema/ui5.yaml.json -The schema is also part of the [JSON Schema Store Catalog](http://schemastore.org/json/) which is used by the [YAML Language Server](https://github.com/redhat-developer/yaml-language-server). See the list of [clients](https://github.com/redhat-developer/yaml-language-server/blob/main/README.md#clients) to find extensions for various IDEs and editors. +The schema is also part of the [JSON Schema Store Catalog](http://schemastore.org/json/) which is used by the [YAML Language Server](https://github.com/redhat-developer/yaml-language-server). +See the list of [clients](https://github.com/redhat-developer/yaml-language-server/blob/main/README#clients) to find extensions for various IDEs and editors. ## Example + ```yaml -specVersion: "4.0" +specVersion: "4.0 type: application|library|theme-library|module metadata: name: some.project.name ``` + ## General Configuration ### Specification Version and -Type -A project must define a specification version (`specVersion`), to which its configuration is compatible to. Also see [Specification Versions](/Configuration#specification-versions). +A project must define a specification version (`specVersion`), to which its configuration is compatible to. Also see [Specification Versions](#specification-versions). In addition, a project must define a `type`. This can be either `application`, `library`, `theme-library` (since Specification Version 1.1), or `module`. -The type defines the default path mappings and build tasks. See [UI5 Builder: Types](./Builder.md#types) for details. -> [!IMPORTANT] Example ->::: code-group -> -> ->```yaml [application] ->specVersion: "4.0" ->type: application ->``` ->```yaml [library] ->specVersion: "4.0" ->type: library ->``` ->```yaml [theme-library] ->specVersion: "4.0" ->type: theme-library ->``` ->```yaml [module] ->specVersion: "4.0" ->type: module ->``` ->::: +The type defines the default path mappings and build tasks. See [UI5 Builder: Types](./Builder#types) for details. + +::: details Example + +#### application + + ```yaml + specVersion: "4.0 + type: application + ``` + +#### library + + ```yaml + specVersion: "4.0 + type: library + ``` + +#### theme-library + + ```yaml + specVersion: "4.0 + type: theme-library + ``` + +#### module + + ```yaml + specVersion: "4.0 + type: module + ``` + +::: ### Kind The configuration may also contain a `kind` property. This is used to differentiate between projects and extensions. -This configuration defaults to `kind: project`, which means you typically only need to specify it for extensions like [Custom Tasks](./extensibility/CustomTasks.md#custom-task-extension). +This configuration defaults to `kind: project`, which means you typically only need to specify it for extensions like [Custom Tasks](./extensibility//CustomTasks#custom-task-extension). ### Metadata -> [!IMPORTANT] Example ->```yaml ->metadata: -> name: my.company.project -> copyright: |- -> My Project -> * (c) Copyright 2009-${currentYear} My Company -> * Licensed under the XYZ License, Version n - see LICENSE.txt. ->``` +::: details Example +```yaml +metadata: + name: my.company.project + copyright: |- + My Project + * (c) Copyright 2009-${currentYear} My Company + * Licensed under the XYZ License, Version n - see LICENSE.txt. +``` + +::: + #### name A project must have a `name`. @@ -105,78 +123,85 @@ Note that all configured paths must be written in POSIX (i.e. using only forward #### Available Path Mappings -::: info Applications -- webapp: Mapped to runtime path `/` (root) +#### Applications + - `webapp`: Mapped to runtime path `/` (root) -```yaml [Applications] + ```yaml + resources: + configuration: + paths: + webapp: webapp + ``` -resources: - configuration: - paths: - webapp: webapp -``` -::: +#### Libraries + - `src`: Mapped to runtime path `/resources` + - `test`: Mapped to runtime path `/test-resources` + ```yaml + resources: + configuration: + paths: + src: src + test: test + ``` +#### Modules + Modules can map any virtual paths to any physical path within the project. + However, it is recommended that modules include their namespace in the virtual path and use the `/resources` prefix (e.g. `/resources/my/library/module-xy/`) to avoid name clashes with other projects. + + ```yaml + resources: + configuration: + paths: + /resources/my/library/module-xy/: lib + /resources/my/library/module-xy-min/: dist + ``` + +::: details Example +For an application project with the following directory structure, you need the path mapping configuration given below: -:::info Libraries - - src: Mapped to runtime path `/resources` -- test: Mapped to runtime path `/test-resources` -```yaml [Libraries] -resources: - configuration: - paths: - src: src - test: test ``` -::: - -::: info Modules -Modules can map any virtual paths to any physical path within the project. -However, it is recommended that modules include their namespace in thevirtual -path and use the `/resources` prefix (e.g. `/resources/my/librarymodule-xy/`) -to avoid name clashes with other projects. - -```yaml [Modules] +my-app/ +\_ ui5.yaml +\_ lib/ + \_ js/ + \_ app/ +``` + +```yaml resources: configuration: paths: - /resources/my/library/module-xy/: lib - /resources/my/library/module-xy-min/: dist + webapp: lib/js/app ``` ::: +### Encoding of `*.properties` files + +::: info Info +This configuration is available since UI5 CLI [`v1.7.0`](https://github.com/SAP/ui5-cli/releases/tag/v1.7.0) +::: details Example +#### UTF-8 + ```yaml + resources: + configuration: + propertiesFileSourceEncoding: UTF-8 + ``` -> [!IMPORTANT] Example ->For an application project with the following directory structure, youneed the path mapping configuration given below: ->Directory Structure: ->```yaml [Directory Structure] ->my-app/ ->\_ ui5.yaml ->\_ lib/ // [!code focus] -> \_ js/ // [!code focus] -> \_ app/ // [!code focus] -> ->``` -> Path Mapping Configuration: ->```yaml [Path Mapping Configuration] ->resources: -> configuration: -> paths: -> webapp: lib/js/app // [!code focus] ->``` -> -### Encoding of `*.properties` files +#### ISO-8859-1 -> [!Tip] Info ->This configuration is available since UI5 CLI [`v1.7.0`](https://github.com/SAP/ui5-cli/releases/tag/v1.7.0) -> + ```yaml + resources: + configuration: + propertiesFileSourceEncoding: ISO-8859-1 + ``` +::: By default UI5 CLI expects different encodings for `*.properties` i18n files, depending on the project's specification version: @@ -187,14 +212,24 @@ Specification Version | Default `propertiesFileSourceEncoding` If your project uses a different encoding for `*.properties` files, you need to set the `propertiesFileSourceEncoding` configuration property. -UI5 CLI will read the corresponding files of the project in the given encoding. Any non-ASCII characters will be replaced with the respective Unicode escape sequences. This allows you to deploy the resulting files to any environment, independent of how it expects `*.properties` files to be encoded. Please refer to [RFC 7](https://github.com/UI5/cli/blob/main/rfcs/0007-properties-file-encoding.md) for details. +UI5 CLI will read the corresponding files of the project in the given encoding. Any non-ASCII characters will be replaced with the respective Unicode escape sequences. This allows you to deploy the resulting files to any environment, independent of how it expects `*.properties` files to be encoded. Please refer to [RFC 7](https://github.com/UI5/cli/blob/main/rfcs/0007-properties-file-encoding) for details. ## Custom Configuration -::: tip Info -This configuration is available since UI5 CLI [`v2.2.0`](https://githubcom/SAP/ui5-cli/releases/tag/v2.2.0) +::: info Info +This configuration is available since UI5 CLI [`v2.2.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.2.0) and applies only to projects defining [Specification Version](#specification-versions) 2.1 or higher. + +::: details Example +```yaml +customConfiguration: + myTool: + key: value + myOtherTool: + otherKey: otherValue +``` + ::: Custom configuration that is ignored by UI5 CLI. @@ -205,32 +240,34 @@ For third-party tools it is recommended to follow a namespace-like structure. ## Framework Configuration -::: tip Info -This configuration is available since UI5 CLI [`v2.0.0`](https://githubcom/SAP/ui5-cli/releases/tag/v2.0.0) -and applies only to projects defining [Specification Version(#specification-versions) +::: info Info +This configuration is available since UI5 CLI [`v2.0.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.0.0) +and applies only to projects defining [Specification Version](#specification-versions) 2.0 or higher. + ::: + Define your project's framework dependencies. ### Framework and Version In your project's framework configuration you must define whether you want to use the OpenUI5 or the SAPUI5 framework and which version: -::: code-group +#### OpenUI5 + ```yaml + framework: + name: OpenUI5 + version: 1.82.0 + ``` -```yaml [OpenUI5] -framework: - name: OpenUI5 - version: 1.82.0 -``` -```yaml [SAPUI5] -framework: - name: SAPUI5 - version: 1.82.0 -``` -::: +#### SAPUI5 + ```yaml + framework: + name: SAPUI5 + version: 1.82.0 + ``` -If you are not sure which framework is right for you, see our [documentation on the differences between OpenUI5 and SAPUI5](./FAQ.md##whats-the-difference-between-openui5-and-sapui5). +If you are not sure which framework is right for you, see our [documentation on the differences between OpenUI5 and SAPUI5](./FAQ##whats-the-difference-between-openui5-and-sapui5). You can find an overview of the available versions for each framework here: @@ -239,83 +276,85 @@ You can find an overview of the available versions for each framework here: - [**SAPUI5** Version Overview](http://ui5.sap.com/versionoverview.html) - *The lowest version supported by UI5 CLI is __1.76.0__* -::: tip Info -Projects that use the OpenUI5 framework cannot depend on projects thatuse the SAPUI5 framework. +::: info Info +Projects that use the OpenUI5 framework cannot depend on projects that use the SAPUI5 framework. + ::: ### Dependencies -> [!IMPORTANT] Example -> ->::: code-group -> -> ```yaml [application] -> specVersion: "4.0" -> type: application -> metadata: -> name: my.company.app -> framework: -> name: OpenUI5 -> version: 1.82.0 -> libraries: -> - name: sap.ui.core -> - name: sap.m -> - name: sap.ui.table -> - name: themelib_sap_fiori_3 -> ``` -> -> ```yaml [library] -> specVersion: "4.0" -> type: library -> metadata: -> name: my.company.library -> framework: -> name: SAPUI5 -> version: 1.82.0 -> libraries: -> - name: sap.ui.core -> - name: sap.m -> - name: themelib_sap_belize -> optional: true -> - name: themelib_sap_bluecrystal -> optional: true -> - name: themelib_sap_fiori_3 -> optional: true -> ``` -> ::: - -When building an application depending on this library as well as one of the theme libraries, only that theme is built for this library. + +::: details Example +#### application + ```yaml + specVersion: "4.0 + type: application + metadata: + name: my.company.app + framework: + name: OpenUI5 + version: 1.82.0 + libraries: + - name: sap.ui.core + - name: sap.m + - name: sap.ui.table + - name: themelib_sap_fiori_3 + ``` + +#### library + ```yaml + specVersion: "4.0 + type: library + metadata: + name: my.company.library + framework: + name: SAPUI5 + version: 1.82.0 + libraries: + - name: sap.ui.core + - name: sap.m + - name: themelib_sap_belize + optional: true + - name: themelib_sap_bluecrystal + optional: true + - name: themelib_sap_fiori_3 + optional: true + ``` + + When building an application depending on this library as well as one of the theme libraries, only that theme is built for this library. + +::: #### Runtime Dependencies All libraries required by your project must be listed in the `libraries` section of the framework configuration: -::: code-group -```yaml [OpenUI5] {4-7} -framework: - name: OpenUI5 - version: 1.82.0 - libraries: - - name: sap.ui.core - - name: sap.m - - name: sap.ui.table -``` - -```yaml [SAPUI5] {4-7} -framework: - name: SAPUI5 - version: 1.82.0 - libraries: - - name: sap.ui.core - - name: sap.m - - name: sap.ui.comp -``` -::: +#### OpenUI5 + ```yaml + framework: + name: OpenUI5 + version: 1.82.0 + libraries: + - name: sap.ui.core + - name: sap.m + - name: sap.ui.table + ``` + +#### SAPUI5 + ```yaml + framework: + name: SAPUI5 + version: 1.82.0 + libraries: + - name: sap.ui.core + - name: sap.m + - name: sap.ui.comp + ``` #### Development Dependencies Development dependencies are only installed if the project defining them is the current root project. They are typically only required during the development of the project. -```yaml {3} +```yaml libraries: - name: sap.ushell development: true @@ -327,7 +366,7 @@ Note that a development dependency cannot be optional and vice versa. Optional dependencies are installed either if the project defining them is the current root project or if the dependency is already part of the current dependency tree. A typical use case is libraries defining optional dependencies to all theme libraries they support. You can choose which theme library to use by the application that is consuming the library by declaring it as a non-optional dependency. -```yaml {3} +```yaml libraries: - name: themelib_sap_fiori_3 optional: true @@ -335,67 +374,68 @@ You can choose which theme library to use by the application that is consuming t ## Build Configuration ### Exclude Resources -> [!IMPORTANT] Example ->For projects of type `module`, this configuration is available since UI5CLI [`v3.5.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.5.0) ->and applies only to projects defining [Specification Version](#specification-versions) -> 3.1 or higher. ->:::code-group -> ->```yaml [application] ->builder: -> resources: -> excludes: -> # You can specify paths relative to the configured "webapp" directory -> - "index.html" -> # When defining absolute paths, make sure to specify the namespace plus the "/resources/" prefix -> - "/resources/my/project/namespace/test/**" ->``` -> ->```yaml [library or theme-library] ->builder: -> resources: -> excludes: -> # For libraries, all paths must be absolute, except for wildcards -> - "/resources/some/project/name/test_results/**" -> - "/test-resources/**" -> - "!/test-resources/some/project/name/demo-app/**" -> - "**/*.svg" ->``` -> -> -> ->```yaml [module] ->builder: -> resources: -> excludes: -> # For modules, all paths must be absolute, except for wildcards -> - "/resources/my/library/module-xy/min/**" -> - "!/resources/my/library/module-xy/min/module-xy-bundle.js" -> - "**/*.svg" ->``` -> + +::: details Example +#### application + ```yaml + builder: + resources: + excludes: + # You can specify paths relative to the configured "webapp" directory + - "index.html + # When defining absolute paths, make sure to specify the namespace plus the "/resources/" prefix + - "/resources/my/project/namespace/test/** + ``` + +#### library or theme-library + ```yaml + builder: + resources: + excludes: + # For libraries, all paths must be absolute, except for wildcards + - "/resources/some/project/name/test_results/** + - "/test-resources/** + - "!/test-resources/some/project/name/demo-app/** + - "**/*.svg + ``` + +#### module + !!! info + For projects of type `module`, this configuration is available since UI5 CLI [`v3.5.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.5.0) + and applies only to projects defining [Specification Version](#specification-versions) 3.1 or higher. + ```yaml + builder: + resources: + excludes: + # For modules, all paths must be absolute, except for wildcards + - "/resources/my/library/module-xy/min/** + - "!/resources/my/library/module-xy/min/module-xy-bundle.js + - "**/*.svg + ``` + +::: You can exclude a projects resources from the build process using a list of glob patterns. Matching resources will be ignored by the builder and all build tasks. Patterns are applied to the **virtual resource paths** (i.e. the UI5 runtime paths). Exclude patterns are always applied after any includes. ### Cachebuster -> [!IMPORTANT] Example -> ->::: code-group -> ->```yaml [time (default)] ->builder: -> cachebuster: -> signatureType: time ->``` -> ->```yaml [hash] ->builder: -> cachebuster: -> signatureType: hash ->``` -> + +::: details Example +#### time (default) + ```yaml + builder: + cachebuster: + signatureType: time + ``` +#### hash + ```yaml + builder: + cachebuster: + signatureType: hash + ``` + +::: By default, the generated cachebuster info file signatures are based on timestamps (`time`). In setups like CI environments, a mechanism based on file hashes (`hash`) might be more reliable. Also see [PR #241](https://github.com/SAP/ui5-builder/pull/241) for more details. @@ -411,61 +451,67 @@ There are two ways to define the set of components for which preload bundles sho #### paths -> [!IMPORTANT] Example ->```yaml ->builder: -> componentPreload: -> paths: -> - "my/awesome/app/**/Component.js" ->``` -> +::: details Example +```yaml +builder: + componentPreload: + paths: + - "my/awesome/app/**/Component.js +``` + +::: The `paths` option takes one or multiple patterns. For every matched file a separate `Component-preload.js` will be generated. Patterns are always applied relative to the project's virtual source directory `/resources/`. #### namespaces -> [!IMPORTANT] Example -> ->```yaml ->builder: -> componentPreload: -> namespaces: -> - "my/awesome/app" -> - "my/awesome/app/componentOne" -> - "my/awesome/app/componentTwo" -> ->``` +::: details Example +```yaml +builder: + componentPreload: + namespaces: + - "my/awesome/app + - "my/awesome/app/componentOne + - "my/awesome/app/componentTwo +``` + +::: + The `namespaces` option takes one or multiple component namespaces, which correspond to the directory structures. #### excludes -::: tip Info -This configuration is available since UI5 CLI [`v2.10.0`](https://githubcom/SAP/ui5-cli/releases/tag/v2.10.0) -and applies only to projects defining [Specification Version(#specification-versions) +::: info Info +This configuration is available since UI5 CLI [`v2.10.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.10.0) +and applies only to projects defining [Specification Version](#specification-versions) 2.3 or higher. + +::: details Example +#### Single Component + + ```yaml + builder: + componentPreload: + excludes: + - "my/awesome/app/localService/** + ``` + +#### Multiple Components + + ```yaml + builder: + componentPreload: + namespaces: + - "my/awesome/app + - "my/awesome/app/componentOne + - "my/awesome/app/componentTwo + excludes: + - "my/awesome/app/**/thirdparty/ + - "!my/awesome/app/componentTwo/thirdparty/NotExcluded.js + ``` + ::: -> [!IMPORTANT] Example ->::: code-group -> ->```yaml [Single Component] ->builder: -> componentPreload: -> excludes: -> - "my/awesome/app/localService/**" ->``` ->```yaml [Multiple Components] ->builder: -> componentPreload: -> namespaces: -> - "my/awesome/app" -> - "my/awesome/app/componentOne" -> - "my/awesome/app/componentTwo" -> excludes: -> - "my/awesome/app/**/thirdparty/" -> - "!my/awesome/app/componentTwo/thirdparty/NotExcluded.js" ->``` ->::: -> + List of modules declared as glob patterns (resource name patterns) that are excluded from the component preload bundles. Similarly to the use of a single `*` or double `**` asterisk, a pattern ending with a slash `/` denotes an arbitrary number of characters or folder names. Re-includes have to be marked with a leading exclamation mark `!`. The order of filters is relevant; a later inclusion overrides an earlier exclusion, and vice versa. Note that patterns are always applied relative to the project's virtual source directory `/resources/`. Re-includes must start with the namespace of the component they apply to. @@ -476,20 +522,20 @@ For projects of type `library` a `library-preload.js` bundle is generated by def #### excludes -::: tip Info +::: info Info This configuration is available since UI5 CLI [`v2.10.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.10.0) and applies only to projects defining [Specification Version](#specification-versions) 2.3 or higher. -::: -> [!IMPORTANT] Example ->```yaml ->builder: -> libraryPreload: -> excludes: -> - "my/lib/thirdparty/" -> - "!my/lib/thirdparty/NotExcluded.js" ->``` +::: details Example +```yaml +builder: + libraryPreload: + excludes: + - "my/lib/thirdparty/ + - "!my/lib/thirdparty/NotExcluded.js +``` +::: List of modules declared as glob patterns (resource name patterns) that are excluded from `library-preload.js` bundle. Similarly to the use of a single `*` or double `**` asterisk, a pattern ending with a slash `/` denotes an arbitrary number of characters or folder names. Re-includes have to be marked with a leading exclamation mark `!`. The order of filters is relevant; a later inclusion overrides an earlier exclusion, and vice versa. @@ -497,39 +543,41 @@ Note that patterns are always applied relative to the project's virtual source d ### Custom Tasks -> [!IMPORTANT] Example -> ->```yaml ->builder: -> customTasks: -> - name: custom-task-1 -> beforeTask: replaceCopyright -> configuration: -> some-key: some value -> - name: custom-task-2 -> afterTask: custom-task-1 -> configuration: -> color: blue ->``` - -You can define custom build tasks that will be executed for the project. Please refer to the [Custom Tasks Documentation](./extensibility/CustomTasks.md) for a detailed explanation and examples of the build extensibility. +::: details Example +```yaml +builder: + customTasks: + - name: custom-task-1 + beforeTask: replaceCopyright + configuration: + some-key: some value + - name: custom-task-2 + afterTask: custom-task-1 + configuration: + color: blue +``` + +::: + +You can define custom build tasks that will be executed for the project. Please refer to the [Custom Tasks Documentation](./extensibility/CustomTasks) for a detailed explanation and examples of the build extensibility. Each `customTasks` entry must define the `name` of the custom task as defined in its `metadata.name` property. -In addition, the execution order needs to be defined by referencing a [standard task](./Builder.md#tasks) or an already configured custom task using the `afterTask` or `beforeTask` property. +In addition, the execution order needs to be defined by referencing a [standard task](./Builder#tasks) or an already configured custom task using the `afterTask` or `beforeTask` property. Optionally, arbitrary `configuration` can be passed to the custom task. ### JSDoc -> [!IMPORTANT] Example -> ->```yaml ->builder: -> jsdoc: -> excludes: -> - "some/project/name/thirdparty/**" ->``` +::: details Example +```yaml +builder: + jsdoc: + excludes: + - "some/project/name/thirdparty/** +``` + +::: You can exclude the resources of a project from the JSDoc build process using a list of glob patterns. Matching resources will be ignored by the JSDoc build task. @@ -539,23 +587,24 @@ These excludes are applied *before* any general builder excludes that have been ### Include Dependencies -::: tip Info +::: info Info This configuration is available since UI5 CLI [`v2.12.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.12.0) and applies only to projects defining [Specification Version](#specification-versions) 2.5 or higher. -::: -> [!IMPORTANT] Example ->```yaml ->builder: -> settings: -> includeDependency: -> - shimmed.thirdparty.library -> includeDependencyRegExp: -> - ^com\.namespace -> includeDependencyTree: -> - sap.m ->``` +::: details Example +```yaml +builder: + settings: + includeDependency: + - shimmed.thirdparty.library + includeDependencyRegExp: + - ^com\.namespace + includeDependencyTree: + - sap.m +``` + +::: You can include certain dependencies into the build process using the `includeDependency` builder setting. By using `includeDependencyRegExp`, a regular expression can be used, for example to specify a namespace to dynamically select a group of dependencies that have to be included into the build result. By using `includeDependencyTree`, a selected dependency including all of its sub-dependencies is used. @@ -569,30 +618,33 @@ The project's `ui5.yaml` file can contain a list of modules declared as glob pat Note that patterns are always applied relative to the project's virtual source directory `/resources/`. -::: tip Info +::: info Info This configuration is available since UI5 CLI [`v2.14.0`](https://github.com/SAP/ui5-cli/releases/tag/v2.14.0) and applies only to projects defining [Specification Version](#specification-versions) 2.6 or higher. -::: -> [!IMPORTANT] Example ->```yaml ->builder: -> minification: -> excludes: -> - "my/lib/thirdparty/" -> - "!my/lib/thirdparty/NotExcluded.js" ->``` +::: details Example +```yaml +builder: + minification: + excludes: + - "my/lib/thirdparty/ + - "!my/lib/thirdparty/NotExcluded.js +``` + +::: ## Server Configuration -> [!IMPORTANT] Example ->```yaml ->server: -> settings: -> httpPort: 1337 -> httpsPort: 1443 ->``` +::: details Example +```yaml +server: + settings: + httpPort: 1337 + httpsPort: 1443 +``` + +::: By default, UI5 CLI will serve applications using Port `8080`. When running in HTTP/2 or HTTPS mode, Port `8443` will be used. @@ -604,30 +656,32 @@ The default and configured server ports can always be overwritten with the CLI p ## Extension Configuration -> [!IMPORTANT] Example ->```yaml ->specVersion: "4.0" ->type: application ->metadata: -> name: my.application ->--- ->specVersion: "4.0" ->kind: extension ->type: project-shim ->metadata: -> name: my.application.thirdparty ->shims: -> configurations: -> lodash: -> specVersion: "4.0" -> type: module -> metadata: -> name: lodash -> resources: -> configuration: -> paths: -> /resources/my/application/thirdparty/: "" ->``` +::: details Example +```yaml +specVersion: "4.0 +type: application +metadata: + name: my.application +--- +specVersion: "4.0 +kind: extension +type: project-shim +metadata: + name: my.application.thirdparty +shims: + configurations: + lodash: + specVersion: "4.0 + type: module + metadata: + name: lodash + resources: + configuration: + paths: + /resources/my/application/thirdparty/: " +``` + +::: Extensions configuration can be added to any projects `ui5.yaml`. For better readability, it should to be located *after* the projects configuration, separated by [three dashes](https://yaml.org/spec/1.2/spec.html#id2760395) "`---`". @@ -636,42 +690,43 @@ In cases where an extension shall be reused across multiple projects you can mak Extensions can be identified by the `kind: extension` configuration. Note that if no `kind` configuration is given, [`project`](#project-configuration) is assumed. ### Available Extensions +- [Custom Tasks](./extensibility/CustomTasks) +- [Custom Server Middleware](./extensibility/CustomServerMiddleware) +- [Project Shims](./extensibility/ProjectShims) -- [Custom Tasks](./extensibility/CustomTasks.md) +## Custom Bundling -- [Custom Server Middleware](./extensibility/CustomServerMiddleware.md) -- [Project Shims](./extensibility/ProjectShims.md) +::: details Example +```yaml +builder: + bundles: + - bundleDefinition: + name: "sap-ui-custom.js + sections: + - mode: raw + filters: + - ui5loader-autoconfig.js + resolve: true + sort: true + bundleOptions: + optimize: true + - bundleDefinition: + name: "app.js + sections: + - mode: preload + filters: + - some/app/Component.js + resolve: true + sort: true + - mode: provided + filters: + - ui5loader-autoconfig.js + resolve: true + bundleOptions: + optimize: true +``` -## Custom Bundling -> [!IMPORTANT] Example ->```yaml ->builder: -> bundles: -> - bundleDefinition: -> name: "sap-ui-custom.js" -> sections: -> - mode: raw -> filters: -> - ui5loader-autoconfig.js -> resolve: true -> sort: true -> bundleOptions: -> optimize: true -> - bundleDefinition: -> name: "app.js" -> sections: -> - mode: preload -> filters: -> - some/app/Component.js -> resolve: true -> sort: true -> - mode: provided -> filters: -> - ui5loader-autoconfig.js -> resolve: true -> bundleOptions: -> optimize: true ->``` +::: Custom bundles can be defined in the `ui5.yaml`. Within the `builder/bundles` configuration a list of `bundleDefinitions` can be described. @@ -682,11 +737,9 @@ Custom bundles can be defined in the `ui5.yaml`. Within the `builder/bundles` co A list of bundle definitions. A `bundleDefinition` contains of the following options: - `name`: The module bundle name - - `defaultFileTypes`: List of default file types which should be included in the bundle. Defaults to: `.js`, `.control.xml`, `.fragment.html`, `.fragment.json`, `.fragment.xml`, `.view.html`, `.view.json` and `.view.xml` - `sections`: A list of module bundle definition sections. Each section specifies an embedding technology (see [API-Reference](https://ui5.github.io/cli/v4/api/module-@ui5_builder_processors_bundlers_moduleBundler.html#~ModuleBundleDefinition)) and lists the resources that should be in- or excluded from the section. - `mode`: The embedding technology (e.g. provided, raw, preload, bundleInfo, depCache, require) - - `filters`: List of modules declared as glob patterns (resource name patterns) that are in- or excluded. Similarly to the use of a single `*` or double `**` asterisk, a pattern ending with a slash `/` denotes an arbitrary number of characters or folder names. Excludes have to be marked with a leading exclamation mark `!`. The order of filters is relevant; a later inclusion overrides an earlier exclusion, and vice versa. - `resolve`: Setting resolve to `true` will also include all (transitive) dependencies of the files - `resolveConditional`: Whether conditional dependencies of modules should be resolved and added to the module set for this section. By default set to `false` @@ -694,15 +747,14 @@ A list of bundle definitions. A `bundleDefinition` contains of the following opt - `renderer`: Whether renderers for controls should be added to the module set. By default set to `false` - `sort`: By default, modules are sorted by their dependencies. The sorting can be suppressed by setting the option to `false` - `async` (only available if `mode` equals `require`): Specifies whether the `require` section of the module should use an asynchronous API. When set to `true`, the modules are loaded using `sap.ui.require`. When set to `false`, modules are loaded using `sap.ui.requireSync`, which is not available in UI5 2.x. - - Projects defining [Specification Version](#/docs/Configuration#specification-versions) 4.0 and higher: Defaults to `true` - - Projects defining [Specification Version](#/docs/Configuration#specification-versions) lower than 4.0: Behaves like `false` but can't be configured + - Projects defining [Specification Version](#specification-versions) 4.0 and higher: Defaults to `true` + - Projects defining [Specification Version](#specification-versions) lower than 4.0: Behaves like `false` but can't be configured **bundleOptions** - `optimize`: If set to `true`, the module bundle gets minified - - - Projects defining [Specification Version](/Configuration##specification-versions) 3.0 and higher: Defaults to `true` - - Projects defining [Specification Version](#/docs/Configuration#specification-versions) lower than 3.0: Defaults to `false` + - Projects defining [Specification Version](#specification-versions) 3.0 and higher: Defaults to `true` + - Projects defining [Specification Version](#specification-versions) lower than 3.0: Defaults to `false` - `decorateBootstrapModule`: By default set to `false`. If set to `true`, the module will be decorated with an optimization marker - `addTryCatchRestartWrapper`: By default set to `false`. If set to `true`, bootable module bundles gets wrapped with a try/catch to filter "Restart" errors - `numberOfParts`: By default set to `1`. The number of parts into which a module bundle should be splitted @@ -712,7 +764,7 @@ A list of bundle definitions. A `bundleDefinition` contains of the following opt A project must define a specification version by setting the `specVersion` property. UI5 CLI uses this information to detect whether the currently installed version is compatible to a project's configuration. ```yaml -specVersion: "4.0" +specVersion: "4.0 [...] ``` @@ -750,13 +802,12 @@ Version | UI5 CLI Release **Breaking changes:** -- Removed bundle option [`usePredefineCalls`](/Configuration##properties). UI5 CLI v4.0.0 and above will always use predefine calls in bundles, making this option obsolete. - -- Adds new a new option `async` for `bundleDefinition`-section configuration, see [Configuration: `bundleDefinition.sections`](/Configuration##properties) for details. +- Removed bundle option [`usePredefineCalls`](#properties). UI5 CLI v4.0.0 and above will always use predefine calls in bundles, making this option obsolete. +- Adds new a new option `async` for `bundleDefinition`-section configuration, see [Configuration: `bundleDefinition.sections`](./Configuration#properties) for details. Specification Version 4.0 projects are supported by [UI5 CLI](https://github.com/SAP/ui5-cli) v4.0.0 and above. -Also see [Migrate to v4](/updates/migrate-v4.md#changes-for-projects) for details on these breaking changes. +Also see [Migrate to v4](../updates/migrate-v4#changes-for-projects) for details on these breaking changes. ### Specification Version 3.2 @@ -779,7 +830,6 @@ Specification Version 3.1 projects are supported by [UI5 CLI](https://github.com **Breaking changes:** - The `metadata.name` property is now restricted to contain only certain characters and no uppercase letters. See [`name`](#name) for details - - [bundleOptions](#custom-bundling) has been modified: * `debugMode` has been removed * `optimize` now always defaults to `true` [#685](https://github.com/SAP/ui5-builder/pull/685) @@ -824,7 +874,7 @@ Specification Version 2.3 projects are supported by [UI5 CLI](https://github.com **Features:** -- Custom task extensions can make use of the [`TaskUtil` Helper Class](./extensibility/CustomTasks.md#helper-class-taskutil) +- Custom task extensions can make use of the [`TaskUtil` Helper Class](./extensibility/CustomTasks#helper-class-taskutil) Specification Version 2.2 projects are supported by [UI5 CLI](https://github.com/SAP/ui5-cli) v2.4.0 and above. @@ -833,7 +883,7 @@ Specification Version 2.2 projects are supported by [UI5 CLI](https://github.com **Features:** - Adds support for the ["customConfiguration"](#custom-configuration) configuration -- Custom middleware extensions can make use of the [`MiddlewareUtil` Helper Class](./extensibility/CustomServerMiddleware.md#helper-class-middlewareutil) +- Custom middleware extensions can make use of the [`MiddlewareUtil` Helper Class](./extensibility/CustomServerMiddleware#helper-class-middlewareutil) Specification Version 2.1 projects are supported by [UI5 CLI](https://github.com/SAP/ui5-cli) v2.2.0 and above. diff --git a/packages/documentation/docs/pages/ESSupport.md b/packages/documentation/docs/pages/ESSupport.md new file mode 100644 index 0000000000..a85798e723 --- /dev/null +++ b/packages/documentation/docs/pages/ESSupport.md @@ -0,0 +1,580 @@ + +# ECMAScript Support + +UI5 CLI offers general support for `ES2023` ECMAScript features. While a `ui5 build` is executed, UI5 CLI analyses a project's code. Depending on the project type, you have to consider some restrictions regarding the usage of certain ECMAScript syntax. + +| UI5 CLI Version | Supported ECMAScript Version | Note | +|-------------------- |----------------------------- | ---- | +| v3.11+ | ECMAScript 2023 | | +| v3.0+ | ECMAScript 2022 | | +| v2.0+ | ECMAScript 2009/ES5 | Note that code up to ECMAScript 2020 can be parsed, however required code analysis might not work correctly for specific language features | + +The following section describes all restrictions grouped by the kind of ECMAScript language feature. To get more insights into the code analysing executed by UI5 CLI check out [Code Analysis](./CodeAnalysis). + +## Language Features with Restrictions + +The following sections describe the restrictions grouped by the ECMAScript language feature. + +### JavaScript modules + +In general, UI5 CLI only analyzes **JavaScript** files of type `script`. [JavaScript Modules](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules) are not analyzed. + +UI5 CLI and the UI5 Runtime does not support the usage of `export` and `import` of JavaScript Modules. Therefore, `sap.ui.define` has to be used. + +#### Supported + + ```javascript + sap.ui.define([ + "ModuleA", + "ModuleB + ], function(ModuleA, ModuleB) { + return ModuleA.extend("ModuleC", {}); + }); + ``` + +#### Not Supported + + ```javascript + import ModuleA from "ModuleA"; + import ModuleB from "ModuleB"; + export default class ModuleC extends ModuleA {}; + ``` + +### Template Literal + +[Template Literals](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals) without an expressions can be used in all places where string literals can be used. However, since UI5 CLI will attempt a static code analysis for certain calls to UI5 API, Template Literals with one or more expressions (e.g. `Hello ${planets[2]}`) can't be used in the scenarios described below. + +#### Template Literal in `sap.ui.define` or `sap.ui.require` + +Template Literals with one or more expressions inside a `sap.ui.define` or `sap.ui.require` call are not supported. + +#### Supported + + ```javascript + sap.ui.define([ + `ModuleA`, + `ModuleB` + ], function(ModuleA, ModuleB) { + }); + ``` + +#### Not Supported + + ```javascript + const i = `B`; + sap.ui.define([ + `ModuleA`, + `Module${i}` + ], function(ModuleA, ModuleB) { + }); + ``` + +The same rule applies also for the usage of deprecated or no longer recommended APIs `jQuery.sap.declare`, `jQuery.sap.declare`, `define`, `require`, `require.predefine`, `sap.ui.predefine`, `sap.ui.requireSync` and `sap.ui.require.preload`. + +#### Template Literal in Smart Template Declaration + +When declaring a **Smart Template** using a **Template Literal** with one or more expressions in the name of the **Smart Template** is not supported. + +#### Supported + + ```javascript + sap.ui.define([ + `sap/suite/ui/generic/template/lib/TemplateAssembler` + ], function(TemplateAssembler) { + return TemplateAssembler.getTemplateComponent(getMethods, + `sap.suite.ui.generic.templates.Page.Component`, { + metadata: { + properties: { + templateName: { + type: `string`, + defaultValue: `sap.suite.ui.generic.templates.Page.view.Page` + } + }, + manifest: `json` + } + } + ); + }); + ``` + +#### Not Supported + + ```javascript + sap.ui.define([ + `sap/suite/ui/generic/template/lib/TemplateAssembler` + ], function(TemplateAssembler) { + const name = `Component`; + return TemplateAssembler.getTemplateComponent(getMethods, + `sap.suite.ui.generic.templates.Page.${name}`, { + metadata: { + properties: { + templateName: { + type: `string`, + defaultValue: `sap.suite.ui.generic.templates.Page.view.Page` + } + }, + manifest: `json` + } + } + ); + }); + ``` + +#### Template Literal in XMLComposite Declaration + +The **XMLComposite** control is deprecated since version UI5 1.88. Nevertheless UI5 CLI will attempt to analyze the declaration of any such controls in a project. + +Declaring an **XMLComposite** control using a **Template Literal** with one or more expressions in the name, is not supported. + +#### Supported + + ```javascript + sap.ui.define([ + `sap/ui/core/XMLComposite` + ], function(XMLComposite) { + return XMLComposite.extend(`composites.MyComposite`, {} + }); + ``` + +#### Not Supported + + ```javascript + sap.ui.define([ + `sap/ui/core/XMLComposite` + ], function(XMLComposite) { + const name = `MyComposite`; + return XMLComposite.extend(`composites.${name}`, {}); + }); + ``` + +#### Template Literal in sap/ui/core/Core#initLibrary Call + +A library is typically initialized via an accompanying `library.js`. Within that file, the object which is supplied to the `sap/ui/core/Core#initLibrary` method, must not use a **Template Literal** with one or more expressions for the library name. + +#### Supported + + ```javascript + sap.ui.getCore().initLibrary({ + name: `my.lib` + }); + ``` + +#### Not Supported + + ```javascript + const libraryName = `lib`; + sap.ui.getCore().initLibrary({ + name: `my.${libraryName}` + }); + ``` + +#### Reserved Variable Names in a Template Literal + +While UI5 CLI performs a build placeholders are replaced with a values offered by the build. For example `${version}` is replaced with the actual version defined in the package.json of the project. Therefore it is required to not use any **Template Literal** where any expression contains variable with following names: + +- `version` +- `project.version` +- `buildtime` +- `copyright` + +#### Supported + + ```javascript + const myVersion = `1.2`; + const transformedVersion `v${myVersion}` + ``` + +#### Not Supported + + ```javascript + const version = `1.2`; + const transformedVersion `v${version}` + ``` + +UI5 CLI searches for the exact match of `${version}`, so with adding whitespaces before and after the variable name `${ version }` UI5 CLI won't replace this occurence. This can be enforced by the dedicated ESLint config [template-curly-spacing](https://eslint.org/docs/latest/rules/template-curly-spacing) with option `always`. + +### Spread Element + +A [Spread Element](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax) can be used in all places, except the following. + +#### Spread Element in `sap.ui.define` or `sap.ui.require` + +A **Spread Element** as a parameter in a `sap.ui.define` or `sap.ui.require` call is not supported. + +#### Supported + + ```javascript + sap.ui.define([ + "ModuleA", + "ModuleB + ], function(ModuleA, ModuleB) { + }); + ``` + +#### Not Supported + + ```javascript + const dependencies = ["ModuleA", "ModuleB"]; + sap.ui.define([ + ...dependencies + ], function(ModuleA, ModuleB) { + }); + ``` + +The same rule applies also for the usage of deprecated or no longer recommended APIs `jQuery.sap.declare`, `jQuery.sap.declare`, `define`, `require`, `require.predefine`, `sap.ui.predefine`, `sap.ui.requireSync` and `sap.ui.require.preload`. + +#### Spread Element in Smart Template Declaration + +When declaring a **Smart Template**, the usage of a **Spread Element** in the configuration is not supported. + +#### Supported + + ```javascript + sap.ui.define([ + "sap/suite/ui/generic/template/lib/TemplateAssembler + ], function(TemplateAssembler) { + return TemplateAssembler.getTemplateComponent(getMethods, + "sap.suite.ui.generic.templates.Page.Component", { + metadata: { + properties: { + templateName: { + type: "string", + defaultValue: "sap.suite.ui.generic.templates.Page.view.Page + } + }, + manifest: "json + } + } + ); + }); + ``` + +#### Not Supported + + ```javascript + sap.ui.define([ + "sap/suite/ui/generic/template/lib/TemplateAssembler + ], function(TemplateAssembler) { + const myTemplate = { + templateName: { + type: "string", + defaultValue: "sap.suite.ui.generic.templates.Page.view.Page + } + }; + return TemplateAssembler.getTemplateComponent(getMethods, + "sap.suite.ui.generic.templates.Page.Component", { + metadata: { + properties: { + ...myTemplate + } + manifest: "json + } + } + ); + }); + ``` + +#### Spread Element in XMLComposite Declaration + +The **XMLComposite** control is deprecated since version UI5 1.88. Nevertheless UI5 CLI will attempt to analyze the declaration of any such controls in a project. + +When declaring an **XMLComposite**, the usage of a **Spread Element** in the configuration is not supported. + +#### Supported + + ```javascript + sap.ui.define([ + "sap/ui/core/XMLComposite + ], function(XMLComposite) { + return XMLComposite.extend("composites.MyComposite", { + fragment: "composites.custom.MyComposite + } + }); + ``` + +#### Not Supported + + ```javascript + sap.ui.define([ + "sap/ui/core/XMLComposite + ], function(XMLComposite) { + const myXMLComposite = { + fragment: "composites.custom.MyComposite + }; + return XMLComposite.extend(`composites.MyComposite`, { + ...myXMLComposite + }); + }); + ``` + +#### Spread Element in sap/ui/core/Core#initLibrary Call + +A library is typically initialized via an accompanying `library.js`. Within that file, the object which is supplied to the `sap/ui/core/Core#initLibrary` method, must not use a **Spread Element**. + +#### Supported + + ```javascript + sap.ui.getCore().initLibrary({ + name: "my.lib + }); + ``` + +#### Not Supported + + ```javascript + const mylib = { + name: "my.lib + }; + sap.ui.getCore().initLibrary({ + ...mylib + }); + ``` + +### Object Expression + +An **Object Expression** can be used in all places except in following places. + +#### Object Expression in `sap.ui.define` or `sap.ui.require` + +An **Object Expression** as a parameter in a `sap.ui.define` or `sap.ui.require` call is not supported. + +#### Supported + + ```javascript + sap.ui.define([ + "Bar + ], function(Bar){ + }); + + ``` + +#### Not Supported + + ```javascript + const dependency = "Bar"; + sap.ui.define([ + dependency + ], function(Bar){ + }); + ``` + +The same rule applies also for the usage of deprecated or no longer recommended APIs `jQuery.sap.declare`, `jQuery.sap.declare`, `define`, `require`, `require.predefine`, `sap.ui.predefine`, `sap.ui.requireSync` and `sap.ui.require.preload`. + +#### Object Expression in Smart Template Declaration + +When declaring a **Smart Template**, the usage of an **Object Expression** in the configuration is not supported. + +#### Supported + + ```javascript + sap.ui.define([ + "sap/suite/ui/generic/template/lib/TemplateAssembler + ], function(TemplateAssembler) { + return TemplateAssembler.getTemplateComponent(getMethods, + "sap.suite.ui.generic.templates.Page.Component", { + metadata: { + properties: { + templateName: { + type: "string", + defaultValue: "sap.suite.ui.generic.templates.Page.view.Page + } + }, + manifest: "json + } + } + ); + }); + ``` + +#### Not Supported + + ```javascript + sap.ui.define([ + "sap/suite/ui/generic/template/lib/TemplateAssembler + ], function(TemplateAssembler) { + const key = "templateName + return TemplateAssembler.getTemplateComponent(getMethods, + `sap.suite.ui.generic.templates.Page.${name}`, { + metadata: { + properties: { + [key]: { + type: "string", + defaultValue: "sap.suite.ui.generic.templates.Page.view.Page + } + } + manifest: "json + } + } + ); + }); + ``` + +#### Object Expression in XMLComposite Declaration + +The **XMLComposite** control is deprecated since version UI5 1.88. Nevertheless UI5 CLI will attempt to analyze the declaration of any such controls in a project. + +When declaring an **XMLComposite**, the usage of an **Object Expression** in the configuration is not supported. + +#### Supported + + ```javascript + sap.ui.define([ + "sap/ui/core/XMLComposite + ], function(XMLComposite) { + return XMLComposite.extend("composites.MyComposite", { + fragment: "composites.custom.MyComposite + } + }); + ``` + +#### Not Supported + + ```javascript + sap.ui.define([ + "sap/ui/core/XMLComposite + ], function(XMLComposite) { + const key = "fragment"; + return XMLComposite.extend("composites.MyComposite", { + [key]: "composites.custom.MyComposite + }); + }); + ``` + +#### Object Expression in sap/ui/core/Core#initLibrary Call + +A library is typically initialized via an accompanying `library.js`. Within that file, the object which is supplied to the `sap/ui/core/Core#initLibrary` method, must not use an **Object Expression**. + +#### Supported + + ```javascript + sap.ui.getCore().initLibrary({ + name: "my.lib + }); + ``` + +#### Not Supported + + ```javascript + const key = "name"; + sap.ui.getCore().initLibrary({ + [key]: "my.lib + }); + ``` + +### Computed Property + +A **Computed Property** can be used in all places except in following places. + +#### Computed Property when using `extend` + +One or more **Computed Property** as a parameter in an UI5 Module `extend` call is not supported. + +#### Supported + + ```javascript + sap.ui.define([ + "Bar + ], function(Bar){ + return Bar.extend("my.Bar" {}); + }); + + ``` + +#### Not Supported + + ```javascript + const name = "my"; + sap.ui.define([ + "Bar + ], function(Bar){ + return Bar.extend(name + ".Bar", {}); + }); + ``` + +#### Computed Properties in sap/ui/core/Core#initLibrary Call + +A library is typically initialized via an accompanying `library.js`. Within that file, the object which is supplied to the `sap/ui/core/Core#initLibrary` method, must not use an **Computed Property**. + +#### Supported + + ```javascript + sap.ui.getCore().initLibrary({ + name: "my.lib + }); + ``` + +#### Not Supported + + ```javascript + const name = "my"; + sap.ui.getCore().initLibrary({ + name: name + ".lib + }); + ``` + +### Class Declaration + +If you want to generate a JSDoc build of your project and using a **Class Declaration** the class declaration should not be returned directly. Declare the class and return the class in a separate statement. If not JSDoc treats the the class declaration as a return statement and does not recognize any JSDoc if such is provided right above the class declaration. + +#### Supported + + ```javascript + sap.ui.define([ + "Bar + ], function(Bar){ + /** + * JSDoc block here + */ + class Foo extends Bar { + make () {} + } + + return Foo; + }); + ``` + +#### Not Supported + + ```javascript + sap.ui.define([ + "Bar + ], function(Bar){ + /** + * JSDoc block here + */ + return class Foo extends Bar { + make () {} + } + }); + ``` + +### Arrow Function Expression + +If you want to generate a JSDoc build of your project and use an **Arrow Function Expression** the JSDoc has to be written above the arrow function and not above the `sap.ui.define/sap.ui.require` command. + +#### Supported + + ```javascript + sap.ui.define([ + "Bar + ], + /** + * JSDoc block here + */ + (Bar) => Bar.extends("Foo", { + + })); + ``` + +#### Not Supported + + ```javascript + /** + * JSDoc block here + */ + sap.ui.define([ + "Bar + ], (Bar) => Bar.extends("Foo", { + + })); + ``` diff --git a/packages/documentation/docs/FAQ.md b/packages/documentation/docs/pages/FAQ.md similarity index 94% rename from packages/documentation/docs/FAQ.md rename to packages/documentation/docs/pages/FAQ.md index 97d4154214..0e87511488 100644 --- a/packages/documentation/docs/FAQ.md +++ b/packages/documentation/docs/pages/FAQ.md @@ -1,9 +1,9 @@ # FAQ ### How Can I Contribute? -Please check our [Contribution Guidelines](https://github.com/UI5/cli/blob/main/CONTRIBUTING.md). +Please check our [Contribution Guidelines](https://github.com/UI5/cli/blob/main/CONTRIBUTING). ### How Can I Obtain Support? -Please follow our [Contribution Guidelines](https://github.com/UI5/cli/blob/main/CONTRIBUTING.md#report-an-issue) on how to report an issue. +Please follow our [Contribution Guidelines](https://github.com/UI5/cli/blob/main/CONTRIBUTING#report-an-issue) on how to report an issue. ### What's the Difference Between OpenUI5 and SAPUI5? The open source project [OpenUI5](https://openui5.org/) provides most of the fundamental framework features. [SAPUI5](https://ui5.sap.com/) enhances this by providing **additional libraries** under a **different license**. diff --git a/packages/documentation/docs/FileSystem.md b/packages/documentation/docs/pages/FileSystem.md similarity index 90% rename from packages/documentation/docs/FileSystem.md rename to packages/documentation/docs/pages/FileSystem.md index d474547d19..fa4a2f4f4b 100644 --- a/packages/documentation/docs/FileSystem.md +++ b/packages/documentation/docs/pages/FileSystem.md @@ -2,7 +2,11 @@ The [UI5 FS](https://github.com/SAP/ui5-fs) provides a UI5-specific file system abstraction. -[**API Reference**](https://ui5.github.io/cli/v4/api/) + ## Overview @@ -27,7 +31,6 @@ The [File System Adapter](https://ui5.github.io/cli/v4/api/@ui5_fs_adapters_File Both adapters provide APIs to retrieve and persist [Resources](#resource), namely - to retrieve a single resource by its virtual path use `byPath()`, - - to retrieve many resources based on patterns use `byGlob()`, - to persist a single resource use `write()`. diff --git a/packages/documentation/docs/GettingStarted.md b/packages/documentation/docs/pages/GettingStarted.md similarity index 78% rename from packages/documentation/docs/GettingStarted.md rename to packages/documentation/docs/pages/GettingStarted.md index 4b31fb5320..203fe30ef9 100644 --- a/packages/documentation/docs/GettingStarted.md +++ b/packages/documentation/docs/pages/GettingStarted.md @@ -16,7 +16,7 @@ npm install --save-dev @ui5/cli ui5 --help ``` -The globally installed UI5 CLI will always try to invoke a locally installed version of the UI5 CLI (if present). This way you can use different versions of the UI5 CLI across your projects. Please see the [UI5 CLI documentation](./CLI.md#local-vs-global-installation) for details. +The globally installed UI5 CLI will always try to invoke a locally installed version of the UI5 CLI (if present). This way you can use different versions of the UI5 CLI across your projects. Please see the [UI5 CLI documentation](./CLI#local-vs-global-installation) for details. ## ⚡️ Quick Start: OpenUI5 Sample App Check out the [OpenUI5 Sample App](https://github.com/SAP/openui5-sample-app) featuring a full blown [How-to](https://github.com/SAP/openui5-sample-app/#openui5-sample-app) to play around with UI5 CLI! @@ -50,23 +50,21 @@ If your project is not set up for use with the UI5 CLI yet, follow these steps: 1. Define the framework you want to use + === "OpenUI5 + ```sh + ui5 use openui5@latest + ``` -::: code-group - - ``` sh [OpenUI5] - ui5 use openui5@latest - ``` + === "SAPUI5 - ```sh [SAPUI5] - ui5 use sapui5@latest - ``` - -::: + ```sh + ui5 use sapui5@latest + ``` - You can choose between the OpenUI5 and the SAPUI5 framework. + You can choose between the OpenUI5 and the SAPUI5 framework. - Don't know which one to choose? Check out our [documentation on the differences between OpenUI5 and SAPUI5](/FAQ.html#what-s-the-difference-between-openui5-and-sapui5). + Don't know which one to choose? Check out our [documentation on the differences between OpenUI5 and SAPUI5](./FAQ##whats-the-difference-between-openui5-and-sapui5). 1. Add required libraries ```sh @@ -83,19 +81,19 @@ If your project is not set up for use with the UI5 CLI yet, follow these steps: ui5 serve ``` -::: tip Tip -Use `ui5 serve` to start a local development server and `ui5 build --all` to produce an optimized, static version of your project, which you can then deploy to your production environment. + !!! tip + Use `ui5 serve` to start a local development server and `ui5 build --all` to produce an optimized, static version of your project, which you can then deploy to your production environment. + + Find more information here: -Find more information here: + - [Server](./Server) + - [Builder](./Builder) + - [CLI](./CLI) - - [Server](./Server.md) - - [Builder](./Builder.md) - - [CLI](./CLI.md) -::: 1. If you are using Git or similar version control, commit `package.json` and `ui5.yaml` to your repository. ```sh git add package.json ui5.yaml - git commit -m "Enable use with UI5 CLI" + git commit -m "Enable use with UI5 CLI ``` -**Hooray! You can now use UI5 CLI in your project!** 🎉 +**🎉 Hooray! You can now use UI5 CLI in your project! 🎉** diff --git a/packages/documentation/docs/pages/Guidelines.md b/packages/documentation/docs/pages/Guidelines.md new file mode 100644 index 0000000000..9739695c09 --- /dev/null +++ b/packages/documentation/docs/pages/Guidelines.md @@ -0,0 +1,60 @@ +# Development Conventions and Guidelines +## JavaScript Coding Guidelines +We enforce code style rules using [ESLint](https://eslint.org). Execute `npm run lint` to check your code for style issues. +You may also find an ESLint integration for your favorite IDE [here](https://eslint.org/docs/user-guide/integrations). + +## Testing +Unit testing is based on the [ava](https://github.com/avajs/ava) test-framework. You can run all tests using `npm test` (this is what our CI will do for all pull requests). + +During development, you might want to use `npm run unit` or `npm run unit-watch` (re-runs tests automatically after file changes) to quickly execute all unit tests and see whether your change just broke one of them. 😉 + +## Git Guidelines +### No Merge Commits +Please use [rebase instead of merge](https://www.atlassian.com/git/tutorials/merging-vs-rebasing) to update a branch to the latest main. This helps keeping a clean commit history in the project. + +### Commit Message Style +#### Commit Summary +The commit summary is the first line of the commit message. + +- It should be **50-70 characters** long. +- It must be **prefixed** by `[FIX]`, `[FEATURE]` or `[INTERNAL]` accordingly, followed by the name of the component or module which was the main subject of the change. + + Use `[FIX]` for bugfixes. + + Use `[FEATURE]` for new features / enhancements. + + Use `[BREAKING]` for breaking / incompatible changes. + _**Note:** The commit body of a breaking change should also include a paragraph starting with `BREAKING CHANGE:`. + This paragraph will be highlighted in the changelog._ + + Use `[DEPENDENCY]` for dependency updates that should be mentioned in the changelog. + + Use `[INTERNAL]` for all other changes (e.g. refactorings, documentation, etc.). These changes will not be listed in the changelog. + + Exceptions are changes created by automated processes like releases or dependency updates +- It must not contain `[` or `]` anywhere but in the prefix. +- It shall be written in **imperative present tense** (as recommended by [Git](https://git-scm.com/book/en/v2/Distributed-Git-Contributing-to-a-Project)) + + Examples: Instead of *"Adding tests for"* or *"I added tests for"* use *"Add tests for"* or *"Add feature xy"*. + +#### Commit Body +After the commit summary there should be an empty line followed by the commit body. + +- Describe the intention and reasoning of the change +- If a change fixes an issue reported on GitHub, add the following line to the commit message: + + `Fixes: #` (e.g. `Fixes: #42`) +- Breaking changes should include a paragraph starting with `BREAKING CHANGE:`. This paragraph will be highlighted in the changelog. + +#### Example +``` +[FIX] npm translator: Correct handling of devDependencies + +- devDevependencies should only be included in certain cases +- Was caused by a refactoring + +Fixes: #42 +Fixes: #45 +``` + +## Work on Release Branches +Major releases are typically prepared on dedicated branches like `next`. + +There are some things to be aware of when working on these branches. + +### Implementing Changes in Multiple Code Lines +While working on a new major release (e.g. `5.0.0`), any fixes or new features implemented on the **current** (main) code line (e.g. 4.x) should be cherry-picked as `[INTERNAL]` to the dedicated (pre-)release branch (typically `next`). This is to prevent changes declared as `[FEATURE]` or `[FIX]` from appearing in the changelog twice, which can be confusing since the new major version has not yet been released and should naturally contain any fixes or features released in any of the preceding releases. Listing them twice might confuse users. Note that our changelog is generated based on all tags of the repository, independent of the currently checked out branch (also see [git-chglog/issues/123](https://github.com/git-chglog/git-chglog/issues/123)). + +However, once a new major release becomes **current** (i.e. "main", not a pre-release), any changes applied to multiple code lines should be cherry picked with the original prefix, so that they appear for multiple versions in the changelog. diff --git a/packages/documentation/docs/OpenUI5.md b/packages/documentation/docs/pages/OpenUI5.md similarity index 76% rename from packages/documentation/docs/OpenUI5.md rename to packages/documentation/docs/pages/OpenUI5.md index 740d4c0e45..6458f1e766 100644 --- a/packages/documentation/docs/OpenUI5.md +++ b/packages/documentation/docs/pages/OpenUI5.md @@ -1,13 +1,14 @@ # Consuming OpenUI5 Libraries -OpenUI5 consumption with UI5 CLI is very similar to SAPUI5 consumption. Please refer to the documentation on [Consuming SAPUI5 Libraries](./SAPUI5.md) for a general description of how UI5 CLI can fetch and provide framework dependencies to your project. +OpenUI5 consumption with UI5 CLI is very similar to SAPUI5 consumption. Please refer to the documentation on [Consuming SAPUI5 Libraries](./SAPUI5) for a general description of how UI5 CLI can fetch and provide framework dependencies to your project. Note that projects using the SAPUI5 framework can depend on projects using the OpenUI5 framework. However, OpenUI5 projects can't depend on SAPUI5 projects. -Please also refer to our documentation on the [differences between OpenUI5 and SAPUI5](./FAQ.md#whats-the-difference-between-openui5-and-sapui5). +Please also refer to our documentation on the [differences between OpenUI5 and SAPUI5](./FAQ#whats-the-difference-between-openui5-and-sapui5). -::: info +::: info Info The minimum OpenUI5 version that can be consumed by UI5 CLI is **1.52.5** + ::: ## Configuration @@ -15,16 +16,18 @@ Your project's `ui5.yaml` provides a configuration section dedicated to framewor This configuration can be maintained by editing the file, or by using the UI5 CLI: -> [!IMPORTANT] Example ->Using the [UI5 CLI](./CLI.md): ->```sh ->ui5 use openui5@latest ->ui5 add sap.ui.core sap.m sap.ui.table themelib_sap_fiori_3 ->``` +::: details Example + Using the [UI5 CLI](./CLI): + ```sh + ui5 use openui5@latest + ui5 add sap.ui.core sap.m sap.ui.table themelib_sap_fiori_3 + ``` + +::: **Example ui5.yaml of an application** ```yaml -specVersion: "4.0" +specVersion: "4.0 type: application metadata: name: some.project.name @@ -40,7 +43,7 @@ framework: **Example ui5.yaml of a library** ```yaml -specVersion: "4.0" +specVersion: "4.0 type: library metadata: name: some.library @@ -57,9 +60,9 @@ framework: optional: true ``` -Please make sure that your project defines [Specification Version 2.0](./Configuration.md#specification-version-20) or higher. +Please make sure that your project defines [Specification Version 2.0](./Configuration#specification-version-20) or higher. -For details, please see the corresponding [framework configuration documentation](./Configuration.md#framework-configuration). +For details, please see the corresponding [framework configuration documentation](./Configuration#framework-configuration). ## Linking Framework Dependencies When working on UI5 applications or libraries that use OpenUI5, you can link a local OpenUI5 repository into that project. This allows you to make changes to the project itself as well as to the OpenUI5 libraries simultaneously and test them immediately. @@ -67,4 +70,4 @@ When working on UI5 applications or libraries that use OpenUI5, you can link a l A detailed step-by-step guide on how to achieve such a setup with the OpenUI5 Sample App can be found [here](https://github.com/SAP/openui5-sample-app#working-with-local-dependencies). ## OpenUI5 Framework Development -Please refer to the [OpenUI5 Framework Development Documentation](https://github.com/SAP/openui5/blob/-/docs/developing.md#developing-ui5). +Please refer to the [OpenUI5 Framework Development Documentation](https://github.com/SAP/openui5/blob/-/docs/developing#developing-ui5). diff --git a/packages/documentation/docs/Overview.md b/packages/documentation/docs/pages/Overview.md similarity index 84% rename from packages/documentation/docs/Overview.md rename to packages/documentation/docs/pages/Overview.md index d4fa35349d..b448cfd179 100644 --- a/packages/documentation/docs/Overview.md +++ b/packages/documentation/docs/pages/Overview.md @@ -9,11 +9,10 @@ UI5 CLI differentiates between "framework dependencies" and "project dependencie **Framework dependencies** are generally libraries and themes provided by the SAP frameworks "OpenUI5" and "SAPUI5". UI5 CLI will take care of downloading them and handling their versions for you. Please see the corresponding documentation on both options: -- [Working with **OpenUI5** Framework Dependencies](./OpenUI5.md) +* [Working with **OpenUI5** Framework Dependencies](./OpenUI5) +* [Working with **SAPUI5** Framework Dependencies](./SAPUI5) -- [Working with **SAPUI5** Framework Dependencies](./SAPUI5.md) - -**Project dependencies** are all other libraries, custom themes, UI5 CLI extensions or JavaScript modules your project depends on. In general these dependencies are maintained in the package.json of your project. See also: [FAQ: Why package.json? / Why npm?](./FAQ.md#why-packagejson-why-npm). +**Project dependencies** are all other libraries, custom themes, UI5 CLI extensions or JavaScript modules your project depends on. In general these dependencies are maintained in the package.json of your project. See also: [FAQ: Why package.json? / Why npm?](./FAQ#why-packagejson-why-npm). ## Linking Projects Would you like to work on an application project and one or more of its dependencies at the same time? We got you covered! @@ -21,7 +20,7 @@ Would you like to work on an application project and one or more of its dependen ### UI5 Workspaces The recommended approach for setting up a development environment where simultaneous work on multiple UI5 projects is required. -Head over to the [UI5 Workspaces](./Workspace.md) documentation for the details. Below is an example based on a simple scenario with an application and a reuse library project: +Head over to the [UI5 Workspaces](./Workspace) documentation for the details. Below is an example based on a simple scenario with an application and a reuse library project: **Example: Your Directory Structure** ``` @@ -42,20 +41,20 @@ In its `package.json`, `my-app` should already define a dependency to `my-reuse- In the `my-app` directory, create a new file named `ui5-workspace.yaml` with the following content: -```yaml " +```yaml specVersion: workspace/1.0 metadata: name: default dependencyManagement: resolutions: - - path: ../my-reuse-library + - path: ../pages/my-reuse-library ``` That's it! Start a server via `ui5 serve`, and you will see that any changes you make in `my-reuse-library` are immediately visible in `my-app`. ## Package Managers -By leaving dependency management up to the tool of your choice (see [FAQ: Why package.json? / Why npm?](./FAQ.md#why-packagejson-why-npm)) you have a variety of other options for linking dependencies into your project. +By leaving dependency management up to the tool of your choice (see [FAQ: Why package.json? / Why npm?](./FAQ#why-packagejson-why-npm)) you have a variety of other options for linking dependencies into your project. Here is an example using the [npm CLI](https://www.npmjs.com/get-npm) in Version 8, an application, and a reuse library project: @@ -95,18 +94,18 @@ That's it. You can check whether the linking worked by executing `ui5 tree` in t As an alternative to defining your project dependencies in the `package.json`, you can define a static dependency hierarchy for the project in a YAML file. This is typically only advised in special cases where none of the other concepts work. -To use such a file in UI5 CLI, provide a path to it using the [`--dependency-definition`](./CLI.md#common-options) parameter. Note that all `package.json` dependencies will be ignored (including UI5 CLI extensions), but UI5 framework dependencies defined in `ui5.yaml` will still be used. +To use such a file in UI5 CLI, provide a path to it using the [`--dependency-definition`](./CLI#common-options) parameter. Note that all `package.json` dependencies will be ignored (including UI5 CLI extensions), but UI5 framework dependencies defined in `ui5.yaml` will still be used. **Example: `projectDependencies.yaml`** ```yaml id: my.app -version: "local" -path: "." +version: "local +path: ". dependencies: - id: my.lib - version: "local" - path: "../my.lib" + version: "local + path: "../pages/my.lib ``` By placing this file in the root directory of the `my.app` application project, you can start a server with a local copy of the `my.lib` dependency, located in the same parent directory, using the command `ui5 serve --dependency-definition ./projectDependencies.yaml`. @@ -120,9 +119,9 @@ The UI5 CLI contains a web server to serve the project via HTTP/2 protocol. ui5 serve --h2 ``` -This requires an SSL certificate. You are guided through the automatic generation process. Also see the [UI5 Server documentation](./Server.md#ssl-certificates) +This requires an SSL certificate. You are guided through the automatic generation process. Also see the [UI5 Server documentation](./Server#ssl-certificates) ## Integration in Other Tools One of the key features of the UI5 CLI is its modularization. Single parts of UI5 CLI can easily be integrated in other `Node.js`-based tools and frameworks like [Grunt](https://gruntjs.com/) or [Gulp](https://gulpjs.com/). -All JavaScript APIs available for direct consumption are listed [here](https://ui5.github.io/cli/v4/api/index.html). However, for standard UI5 development, the [UI5 CLI](./CLI.md) should always be the first choice. +All JavaScript APIs available for direct consumption are listed [here](https://ui5.github.io/cli/v4/api/index.html). However, for standard UI5 development, the [UI5 CLI](./CLI) should always be the first choice. diff --git a/packages/documentation/docs/Privacy.md b/packages/documentation/docs/pages/Privacy.md similarity index 100% rename from packages/documentation/docs/Privacy.md rename to packages/documentation/docs/pages/Privacy.md diff --git a/packages/documentation/docs/Project.md b/packages/documentation/docs/pages/Project.md similarity index 73% rename from packages/documentation/docs/Project.md rename to packages/documentation/docs/pages/Project.md index b49127983a..76dc14c039 100644 --- a/packages/documentation/docs/Project.md +++ b/packages/documentation/docs/pages/Project.md @@ -1,11 +1,11 @@ # UI5 Project -The [UI5 Project](https://github.com/SAP/ui5-project) module provides functionality to build a UI5 project. Also see [Development Overview: Project Dependencies](./Overview.md#project-dependencies). +The [UI5 Project](https://github.com/SAP/ui5-project) module provides functionality to build a UI5 project. Also see [Development Overview: Project Dependencies](./Overview#project-dependencies). ## Types Types define how a project can be configured and how it is built. A type orchestrates a set of tasks and defines the order in which they get applied during build phase. Furthermore, it takes care of formatting and validating the project-specific configuration. -Also see [UI5 Project: Configuration](./Configuration.md#general-configuration) +Also see [UI5 Project: Configuration](./Configuration#general-configuration) ### application Projects of type `application` are typically the main or root project. In a projects dependency tree, there should only be one project of type `application`. If multiple are found, those further away from the root are ignored. @@ -15,14 +15,14 @@ The source directory of an application (typically named `webapp`) is mapped to t An applications source directory may or may not contain a `Component.js` file. If it does, it must also contain a `manifest.json` file. If there is a `Component.js` file, an optimized `Component-preload.js` file will be generated during the build. ### library -UI5 libraries are often referred to as reuse-, custom- or [control libraries](https://github.com/SAP/openui5/blob/-/docs/controllibraries.md). They are a key component in sharing code across multiple projects in UI5. +UI5 libraries are often referred to as reuse-, custom- or [control libraries](https://github.com/SAP/openui5/blob/-/docs/controllibraries). They are a key component in sharing code across multiple projects in UI5. A project of type `library` must have a source directory (typically named `src`). It may also feature a "test" directory. These directories are mapped to the virtual directories `/resources` for the sources and `/test-resources` for the test resources. These directories should contain a directory structure representing the namespace of the library (e.g. `src/my/first/library`) to prevent name clashes between the resources of different libraries. ### theme-library -*Available since [Specification Version](./Configuration.md#specification-versions) 1.1* +*Available since [Specification Version](./Configuration#specification-versions) 1.1* UI5 theme libraries provide theming resources for the controls of one or multiple libraries. @@ -43,28 +43,29 @@ In the table below you can find the available combinations of project type & out | Project Type / Requested Output Style | Resulting Style | |---|---| | **application** | | -| `Default` | Root project is written `Flat`-style. ¹ | +| `Default` | Root project is written `Flat`-style. ^1^ | | `Flat` | Same as `Default`. | -| `Namespace` | Root project is written `Namespace`-style (resources are prefixed with the project's namespace). ¹ | -||| +| `Namespace` | Root project is written `Namespace`-style (resources are prefixed with the project's namespace). ^1^ | | **library** | | -| `Default` | Root project is written `Namespace`-style. ¹ | -| `Flat` | Root project is written `Flat`-style (without its namespace, logging warnings for resources outside of it). ¹ | +| `Default` | Root project is written `Namespace`-style. ^1^ | +| `Flat` | Root project is written `Flat`-style (without its namespace, logging warnings for resources outside of it). ^1^ | | `Namespace` | Same as `Default`. | -||| | **theme-library** | | -| `Default` | Root project is written in the style of the sources (multiple namespaces). ¹ | -| `Flat` | **Unsupported** ² | -| `Namespace` | **Unsupported** ² | -||| +| `Default` | Root project is written in the style of the sources (multiple namespaces). ^1^ | +| `Flat` | **Unsupported** ^2^ | +| `Namespace` | **Unsupported** ^2^ | | **module** | | | `Default` | Root project is written with the [configured paths](https://ui5.github.io/cli/stable/pages/Configuration/#available-path-mappings). ^1^ | | `Flat` | **Unsupported** ^3^ | | `Namespace` | **Unsupported** ^3^ | -¹ The Output Style is only applied to the root project's output folder structure. Any dependencies included in the build would retain their `Default` output style. -² Theme libraries in most cases have more than one namespace. -³ Modules have explicit path mappings configured and no namespace concept. +^1^ The Output Style is only applied to the root project's output folder structure. Any dependencies included in the build would retain their `Default` output style. +^2^ Theme libraries in most cases have more than one namespace. +^3^ Modules have explicit path mappings configured and no namespace concept. -[**API Reference**](https://ui5.github.io/cli/v4/api/@ui5_project_build_ProjectBuilder.html) + diff --git a/packages/documentation/docs/SAPUI5.md b/packages/documentation/docs/pages/SAPUI5.md similarity index 72% rename from packages/documentation/docs/SAPUI5.md rename to packages/documentation/docs/pages/SAPUI5.md index a41caac79d..f55a3ef197 100644 --- a/packages/documentation/docs/SAPUI5.md +++ b/packages/documentation/docs/pages/SAPUI5.md @@ -1,15 +1,20 @@ # Consuming SAPUI5 Libraries +::: info Info +Make sure you have installed the UI5 CLI in Version 2.0 or later: `npm install --global @ui5/cli` - The minimum version of SAPUI5 that can be consumed by UI5 CLI as described below is **1.76.0.** - For lower versions, consider using the [CDN bootstrap](https://ui5.sap.com/#/topic/2d3eb2f322ea4a82983c1c62a33ec4ae) or a custom middleware like [ui5-middleware-simpleproxy](https://www.npmjs.com/package/ui5-middleware-simpleproxy). +The minimum version of SAPUI5 that can be consumed by UI5 CLI as described below is **1.76.0.** +For lower versions, consider using the [CDN bootstrap](https://ui5.sap.com/#/topic/2d3eb2f322ea4a82983c1c62a33ec4ae) or a custom middleware like [ui5-middleware-simpleproxy](https://www.npmjs.com/package/ui5-middleware-simpleproxy). + +::: ## Overview SAPUI5 libraries are hosted on the public npm registry at `registry.npmjs.org`. However, you should not install them using node package managers such as npm. Let UI5 CLI handle them instead by following this guide. -::: info +::: info Note For more background information also see the Blog Post ["UI5ers Buzz #49: The UI5 CLI and SAPUI5 – The Next Step"](https://blogs.sap.com/2020/04/01/ui5ers-buzz-49-the-ui5-tooling-and-sapui5-the-next-step/) + ::: ## Usage @@ -23,17 +28,19 @@ Your project's `ui5.yaml` provides a configuration section dedicated to framewor This configuration can be maintained by editing the file, or by using the UI5 CLI: -> [!IMPORTANT] ->**Using the [UI5 CLI](./CLI.md):** ->```sh ->ui5 use sapui5@latest ->ui5 add sap.ui.core sap.m sap.ui.comp themelib_sap_fiori_3 ->ui5 add -D sap.ushell ->``` +::: details Example + Using the [UI5 CLI](./CLI): + ```sh + ui5 use sapui5@latest + ui5 add sap.ui.core sap.m sap.ui.comp themelib_sap_fiori_3 + ui5 add -D sap.ushell + ``` + +::: **Example ui5.yaml of an application** ```yaml -specVersion: "4.0" +specVersion: "4.0 type: application metadata: name: some.project.name @@ -51,7 +58,7 @@ framework: **Example ui5.yaml of a library** ```yaml -specVersion: "4.0" +specVersion: "4.0 type: library metadata: name: some.library @@ -68,10 +75,10 @@ framework: optional: true ``` -Please make sure that your project defines [Specification Version 2.0](./Configuration.md#specification-version-20) or higher. +Please make sure that your project defines [Specification Version 2.0](./Configuration#specification-version-20) or higher. -For details please refer to the [framework configuration documentation](././Configuration.md#framework-configuratio). +For details please refer to the [framework configuration documentation](././Configuration#framework-configuratio). ## Differences Between OpenUI5 and SAPUI5 -Please refer to our documentation on the [differences between OpenUI5 and SAPUI5](./FAQ.md##whats-the-difference-between-openui5-and-sapui5) +Please refer to our documentation on the [differences between OpenUI5 and SAPUI5](./FAQ##whats-the-difference-between-openui5-and-sapui5) diff --git a/packages/documentation/docs/Server.md b/packages/documentation/docs/pages/Server.md similarity index 85% rename from packages/documentation/docs/Server.md rename to packages/documentation/docs/pages/Server.md index 138bb3f248..f998d80c9d 100644 --- a/packages/documentation/docs/Server.md +++ b/packages/documentation/docs/pages/Server.md @@ -1,14 +1,18 @@ # UI5 Server -The [UI5 Server](https://github.com/SAP/ui5-server) module can serve project's sources for development and testing purposes. +The [UI5 Server](https://github.com/SAP/ui5-server) module provides server capabilities for local development of UI5 projects. -[**API Reference**](https://ui5.github.io/cli/v4/api/module-@ui5_server.html) + -## Custom Server Middleware Extensibility +## Standard Middleware All available standard middleware are listed below in the order of their execution. -A project can also add custom middleware to the server by using the [Custom Server Middleware Extensibility](./extensibility/CustomServerMiddleware.md). +A project can also add custom middleware to the server by using the [Custom Server Middleware Extensibility](./extensibility/CustomServerMiddleware). | Middleware | Description | | ---- | ---- | @@ -48,8 +52,8 @@ This middleware resolves requests using the [ui5-fs](https://github.com/SAP/ui5- The following file content transformations are executed: -- Escaping non-ASCII characters in `.properties` translation files based on a project's [configuration](./Configuration.md#encoding-of-properties-files) -- Enhancing the `manifest.json` with supported locales determined by available `.properties` [translation files](./Builder.md#generation-of-supported-locales) +- Escaping non-ASCII characters in `.properties` translation files based on a project's [configuration](./Configuration#encoding-of-properties-files) +- Enhancing the `manifest.json` with supported locales determined by available `.properties` [translation files](./Builder#generation-of-supported-locales) ### testRunner Serves a static version of the UI5 QUnit TestRunner at `/test-resources/sap/ui/qunit/testrunner.html`. @@ -73,6 +77,7 @@ When starting the UI5 Server in HTTPS- or HTTP/2 mode, for example by using UI5 Follow the given instructions and enter your password to install the generated certificate as trusted. You can find the generated certificate and corresponding private key under `.ui5/server` in your user's home directory. -::: tip +::: tip Tip If Chrome unintentionally redirects an HTTP-URL to HTTPS, you need to delete the HSTS mapping in [chrome://net-internals/#hsts](chrome://net-internals/#hsts) by entering the domain name (e.g. localhost) and pressing "delete". -::: + +::: \ No newline at end of file diff --git a/packages/documentation/docs/Troubleshooting.md b/packages/documentation/docs/pages/Troubleshooting.md similarity index 96% rename from packages/documentation/docs/Troubleshooting.md rename to packages/documentation/docs/pages/Troubleshooting.md index aa5559d50d..64a7a9528a 100644 --- a/packages/documentation/docs/Troubleshooting.md +++ b/packages/documentation/docs/pages/Troubleshooting.md @@ -7,7 +7,7 @@ An HTTPS server or proxy that was previously running on a domain (e.g. `localhos You need to delete the HSTS mapping in [chrome://net-internals/#hsts](chrome://net-internals/#hsts) by entering the domain name (e.g. `localhost`) and pressing "delete". ## Issues Not Listed Here -Please follow our [Contribution Guidelines](https://github.com/UI5/cli/blob/main/CONTRIBUTING.md#report-an-issue) on how to report an issue. +Please follow our [Contribution Guidelines](https://github.com/UI5/cli/blob/main/CONTRIBUTING#report-an-issue) on how to report an issue. ## UI5 Project ### `~/.ui5` Taking too Much Disk Space @@ -50,8 +50,9 @@ UI5 + Karma: `cross-env UI5_LOG_LVL=verbose npm run karma` -::: warning +::: warning Warning The combination of the `UI5_LOG_LVL` environment variable with the `--log-level` CLI parameter might lead to unexpected results; they should be used interchangeably but not together. The CLI parameter takes precedence over the `UI5_LOG_LVL` environment variable. + ::: ### Changing UI5 CLI's Data Directory @@ -61,9 +62,11 @@ In some cases and environments this is not a convenient location and the user ne The path to it can either be provided via environment variable or permanently set in the configuration. -::: tip Info +::: info Info Paths are resolved relative to the current root project path (i.e. where the package.json is located). + ::: + #### Environment variable `UI5_DATA_DIR` Unix: diff --git a/packages/documentation/docs/Workspace.md b/packages/documentation/docs/pages/Workspace.md similarity index 80% rename from packages/documentation/docs/Workspace.md rename to packages/documentation/docs/pages/Workspace.md index 3f008c0a05..7620251325 100644 --- a/packages/documentation/docs/Workspace.md +++ b/packages/documentation/docs/pages/Workspace.md @@ -1,67 +1,70 @@ # UI5 Workspaces -> [!TIP] Info -> **UI5 Workspaces is a new feature available since UI5 CLI [`v3.0.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.0.0)** - - -> [!IMPORTANT] Example -**ui5-workspace.yaml** ->```yaml ->yaml title="ui5-workspace.yaml" ->specVersion: workspace/1.0 ->metadata: -> name: default ->dependencyManagement: -> resolutions: -> - path: ../heavy.library ->``` +::: info Info +**UI5 Workspaces is a new feature available since UI5 CLI [`v3.0.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.0.0)** + +::: details Example +```yaml +specVersion: workspace/1.0 +metadata: + name: default +dependencyManagement: + resolutions: + - path: ../pages/heavy.library +``` + +::: ## General Concept UI5 Workspaces can be used to create a personalized local development environment for a UI5 project. They allow to use UI5 dependencies from local directories without the need to use the link features of package managers like npm. "UI5 dependencies" generally refers to projects that have a `ui5.yaml`. Workspaces are typically configured in a `ui5-workspace.yaml` file, located next to the project's `ui5.yaml`. The file can contain one or many workspace configurations, each separated by [three dashes](https://yaml.org/spec/1.2.2/#22-structures). For example: -> [!IMPORTANT] Example -> **ui5-workspace.yaml** -> ```yaml ->specVersion: workspace/1.0 ->metadata: -> name: default ->dependencyManagement: -> resolutions: -> - path: ../heavy.library ->--- ->specVersion: workspace/1.0 ->metadata: -> name: extended ->dependencyManagement: -> resolutions: -> - path: ../heavy.library -> - path: ../light.library -> - path: ../test.library ->``` + +::: details Example +```yaml +specVersion: workspace/1.0 +metadata: + name: default +dependencyManagement: + resolutions: + - path: ../pages/heavy.library +--- +specVersion: workspace/1.0 +metadata: + name: extended +dependencyManagement: + resolutions: + - path: ../pages/heavy.library + - path: ../pages/light.library + - path: ../pages/test.library +``` + +::: If a workspace configuration named `default` exists, it will be used automatically; otherwise the workspace must be specified using the UI5 CLI parameter `--workspace`. Workspaces can only be used in the project that is currently being worked on, i.e. the current root project. Workspace configurations of dependencies are ignored. The workspace file, however, does not necessarily have to be located within the project. You can reference any workspace configuration file via the UI5 CLI parameter `--workspace-config`. -This concept has been discussed in an RFC: [RFC 0006 Local Dependency Resolution](https://github.com/UI5/cli/blob/main/rfcs/0006-local-dependency-resolution.md) +This concept has been discussed in an RFC: [RFC 0006 Local Dependency Resolution](https://github.com/UI5/cli/blob/main/rfcs/0006-local-dependency-resolution) ## Configuration A UI5 Workspace configuration must define a specification version (`specVersion`) compatible with its configuration. For more information, see [Workspace Specification Versions](#workspace-specification-versions). ```yaml -specVersion: "workspace/1.0" +specVersion: "workspace/1.0 ``` ### Metadata -> [!IMPORTANT] Example ->```yaml ->specVersion: workspace/1.0 ->metadata: -> name: dolphin ->``` +::: details Example +```yaml +specVersion: workspace/1.0 +metadata: + name: dolphin +``` + +::: #### name @@ -69,7 +72,7 @@ A workspace must have a `name`. This allows to easily switch between individual If a workspace is named `default`, **it will be used automatically**, unless a different workspace is selected using the `--workspace` CLI parameter. -The `name` property must satisfy the following conditions. They are identical to [project names](./Configuration.md#name): +The `name` property must satisfy the following conditions. They are identical to [project names](./Configuration#name): * Must be at least 3 characters long * Must be no longer than 80 characters @@ -85,25 +88,27 @@ The `name` property must satisfy the following conditions. They are identical to ## Dependency Management UI5 Workspace configurations allow to influence the dependency resolution when working with a UI5 project. -> [!IMPORTANT] Example -> ->```yaml ->specVersion: workspace/1.0 ->metadata: -> name: dolphin ->dependencyManagement: -> resolutions: -> - path: ../light.library -> - path: ../heavy.library -> - path: ../test.library ->``` + +::: details Example +```yaml +specVersion: workspace/1.0 +metadata: + name: dolphin +dependencyManagement: + resolutions: + - path: ../pages/light.library + - path: ../pages/heavy.library + - path: ../pages/test.library +``` + +::: ### Resolutions ```yaml dependencyManagement: resolutions: - - path: ../test.library + - path: ../pages/test.library ``` Resolution paths will be used by UI5 CLI to look for project dependencies. Any dependencies found via these paths will be used over the ones found with the regular dependency resolution mechanism. This includes UI5 CLI extensions. @@ -118,7 +123,7 @@ Note that this configuration only affects the resolution of dependencies which h A workspace configuration must define a Specification Version by setting the `specVersion` property. UI5 CLI uses this information to detect whether the currently installed version is compatible with a workspace's configuration. ```yaml -specVersion: "workspace/1.0" +specVersion: "workspace/1.0 [...] ``` diff --git a/packages/documentation/docs/pages/extensibility/CustomServerMiddleware.md b/packages/documentation/docs/pages/extensibility/CustomServerMiddleware.md new file mode 100644 index 0000000000..9a50c20267 --- /dev/null +++ b/packages/documentation/docs/pages/extensibility/CustomServerMiddleware.md @@ -0,0 +1,256 @@ +# Custom UI5 Server Middleware + +The UI5 Server Extensibility enables you to enhance the functionality of the UI5 Server. You may want to handle requests differently. For example add various headers to a response or parse data of a POST request in a specific way. For this you can plug custom middleware implementations into the internal [express](https://expressjs.com/) server of the UI5 Server module. + +The UI5 community already created many custom middleware packages which you can integrate into your project. They are often prefixed by `ui5-middleware-` to make them easily searchable in the [npm registry](https://www.npmjs.com/search?q=ui5-middleware-). + +Please note that custom middleware packages from third parties can not only modify how your project is served but also execute arbitrary code on your system. In fact, this is the case for all npm packages you install. Always act with the according care and follow best practices. + +## Configuration + +In a projects `ui5.yaml` file, you can define additional server middleware modules that will be executed when the request is received by the server. This configuration exclusively affects the server started in this project. Custom middleware configurations defined in any dependencies are ignored. + +A middleware may be executed before or after any other middleware. This can either be a [standard middleware](../Server#standard-middleware) or another custom middleware. + +### Example: Basic configuration + +```yaml +specVersion: "4.0 +type: application +metadata: + name: my.application +server: + customMiddleware: + - name: myCustomMiddleware + mountPath: /myapp + afterMiddleware: compression + configuration: + debug: true +``` + +In the above example the middleware `compression` is already included as a standard middleware by the UI5 Server. When serving the application `my.application`, the server will call the custom middleware `myCustomMiddleware` after `compression`. + +There can be optional configuration parameters which are passed directly to the custom middleware implementation (see below). + +An optional mountPath for which the middleware function is invoked can be provided. It will be passed to the `app.use` call (see [express API reference](https://expressjs.com/en/4x/api.html#app.use)). + +### Execution order + +Note that middleware configurations are applied in the order they are defined. When referencing another custom middleware, it has to be defined *before* that reference. + +## Custom Middleware Extension + +A custom middleware extension consists of a `ui5.yaml` and a [custom middleware implementation](#custom-middleware-implementation). It can be a standalone module or part of an existing UI5 project. + +### Example: ui5.yaml + +```yaml +specVersion: "4.0 +kind: extension +type: server-middleware +metadata: + name: markdownHandler +middleware: + path: lib/middleware/markdownHandler.js +``` + +Custom middleware extensions can be **standalone modules** which are handled as dependencies. + +Alternatively you can implement a custom middleware extension as **part of your UI5 project**. +In that case, the configuration of the extension is part of your project configuration inside the `ui5.yaml` as shown below. + +The UI5 Server will detect the custom middleware configuration of the project and use the middleware on startup. + +### Example: Custom Middleware Extension defined in UI5 project + +```yaml +# Project configuration for the above example +specVersion: "4.0 +kind: project +type: application +metadata: + name: my.application +server: + customMiddleware: + - name: markdownHandler + beforeMiddleware: serveResources +--- +# Custom middleware extension as part of your project +specVersion: "4.0 +kind: extension +type: server-middleware +metadata: + name: markdownHandler +middleware: + path: lib/middleware/markdownHandler.js +``` + +## Custom Middleware Implementation + +A custom middleware implementation needs to return a function with the following signature: + +#### ESM + + ```js linenums="1 + /** + * Custom UI5 Server middleware API + * + * @param {object} parameters Parameters + * @param {@ui5/logger/Logger} parameters.log + * Logger instance for use in the custom middleware. + * This parameter is only provided to custom middleware + * extensions defining Specification Version 3.0 and later. + * @param {@ui5/server.middleware.MiddlewareUtil} parameters.middlewareUtil + * Specification version-dependent interface to a + * MiddlewareUtil instance. See the corresponding API reference for details: + * https://ui5.github.io/cli/v4/api/@ui5_server_middleware_MiddlewareUtil.html + * @param {object} parameters.options Options + * @param {string} parameters.options.configuration + * Custom middleware configuration, as defined in the project's ui5.yaml + * @param {string} parameters.options.middlewareName + * Name of the custom middleware. + * This parameter is only provided to custom middleware extensions + * defining Specification Version 3.0 and later + * @param {object} parameters.resources Readers for accessing resources + * @param {module:@ui5/fs.AbstractReader} parameters.resources.all + * Reader to access resources of the root project and its dependencies + * @param {module:@ui5/fs.AbstractReader} parameters.resources.rootProject + * Reader to access resources of the root project + * @param {module:@ui5/fs.AbstractReader} parameters.resources.dependencies + * Reader to access resources of the project's dependencies. + * @returns {function} Middleware function to use + */ + export default function({log, middlewareUtil, options, resources}) { + return async function (req, res, next) { + // [...] + } + }; + ``` + +#### CommonJS + + ```js linenums="1 + /** + * Custom UI5 Server middleware API + * + * @param {object} parameters Parameters + * @param {@ui5/logger/Logger} parameters.log + * Logger instance for use in the custom middleware. + * This parameter is only provided to custom middleware + * extensions defining Specification Version 3.0 and later. + * @param {@ui5/server.middleware.MiddlewareUtil} parameters.middlewareUtil + * Specification version-dependent interface to a + * MiddlewareUtil instance. See the corresponding API reference for details: + * https://ui5.github.io/cli/v4/api/@ui5_server_middleware_MiddlewareUtil.html + * @param {object} parameters.options Options + * @param {string} parameters.options.configuration + * Custom middleware configuration, as defined in the project's ui5.yaml + * @param {string} parameters.options.middlewareName + * Name of the custom middleware. + * This parameter is only provided to custom middleware extensions + * defining Specification Version 3.0 and later + * @param {object} parameters.resources Readers for accessing resources + * @param {module:@ui5/fs.AbstractReader} parameters.resources.all + * Reader to access resources of the root project and its dependencies + * @param {module:@ui5/fs.AbstractReader} parameters.resources.rootProject + * Reader to access resources of the root project + * @param {module:@ui5/fs.AbstractReader} parameters.resources.dependencies + * Reader to access resources of the project's dependencies. + * @returns {function} Middleware function to use + */ + module.exports = function({log, middlewareUtil, options, resources}) { + return async function (req, res, next) { + // [...] + } + }; + ``` + +### Example: lib/middleware/markdownHandler.(m)js + +#### ESM + + ```js linenums="1 + import MarkdownIt from "markdown-it"; + + export default async function({log, middlewareUtil, options, resources}) { + const md = new MarkdownIt(); + return function (req, res, next) { + if (!req.path || !req.path.endsWith(".html")) { + // Do not handle non-HTML requests + next(); + return; + } + // Try to read a corresponding markdown file + resources.rootProject.byPath(req.path.replace(".html", ".md")).then(async (resource) => { + if (!resource) { + // No file found, hand over to next middleware + next(); + return; + } + log.info(`Rendering markdown for ${resource.getPath()}`); + const markdown = await resource.getBuffer(); + // Generate HTML from markdown string + const html = md.render(markdown.toString()); + res.type('.html'); + res.end(html); + }).catch((err) => { + next(err); + }); + } + }; + ``` + Live demo of the above example: [openui5-sample-app with custom middleware](https://github.com/SAP/openui5-sample-app/tree/demo-server-middleware-extensibility-v3-esm) + +#### CommonJS + + ```js linenums="1 + module.exports = async function({log, middlewareUtil, options, resources}) { + const MarkdownIt = require("markdown-it"); + const md = new MarkdownIt(); + return function (req, res, next) { + if (!req.path || !req.path.endsWith(".html")) { + // Do not handle non-HTML requests + next(); + return; + } + // Try to read a corresponding markdown file + resources.rootProject.byPath(req.path.replace(".html", ".md")).then(async (resource) => { + if (!resource) { + // No file found, hand over to next middleware + next(); + return; + } + log.info(`Rendering markdown for ${resource.getPath()}`); + const markdown = await resource.getBuffer(); + // Generate HTML from markdown string + const html = md.render(markdown.toString()); + res.type('.html'); + res.end(html); + }).catch((err) => { + next(err); + }); + } + }; + ``` + Live demo of the above example: [openui5-sample-app with custom middleware](https://github.com/SAP/openui5-sample-app/tree/demo-server-middleware-extensibility-v3) + +## Helper Class `MiddlewareUtil` + +Custom middleware defining [Specification Version](../Configuration#specification-versions) 2.0 or higher have access to an interface of a [MiddlewareUtil](https://ui5.github.io/cli/v4/api/@ui5_server_middleware_MiddlewareUtil.html) instance. + +In this case, a `middlewareUtil` object is provided as a part of the custom middleware's [parameters](#custom-middleware-implementation). Depending on the specification version of the custom middleware, a set of helper functions is available to the implementation. The lowest required specification version for every function is listed in the [MiddlewareUtil API reference](https://ui5.github.io/cli/v4/api/@ui5_server_middleware_MiddlewareUtil.html). + +## Integration with `karma-ui5` + +!!! Warning + The Karma project has been [deprecated](https://github.com/karma-runner/karma#karma-is-deprecated-and-is-not-accepting-new-features-or-general-bug-fixes) as of 2023 + +[`karma-ui5`](https://github.com/SAP/karma-ui5) is a plugin for the popular [Karma test runner](https://karma-runner.github.io/). Based on your [configuration](https://github.com/SAP/karma-ui5#url), it can fetch resources from a dedicated server or start an internal server using parts of UI5 CLI. + +In the latter case, any custom middleware configured in the default `ui5.yaml` of the project will be used automatically. + +However, since Karma uses the [`connect`](https://github.com/senchalabs/connect) framework, as opposed to UI5 CLI's [`express`](https://github.com/expressjs/express), custom middleware might not always work as expected. Compared to `connect`, the `express` framework provides a more versatile API to middleware. + +Therefore, if you plan to use custom middleware in an integrated scenario with `karma-ui5`, you must **restrict the middleware to using the [`connect`](https://github.com/senchalabs/connect) API only** to ensure compatibility. + +Alternatively, you can start a server with the usual `ui5 serve` command and [configure the corresponding URL](https://github.com/SAP/karma-ui5#url) for use by `karma-ui5`. diff --git a/packages/documentation/docs/pages/extensibility/CustomTasks.md b/packages/documentation/docs/pages/extensibility/CustomTasks.md new file mode 100644 index 0000000000..9f81222a19 --- /dev/null +++ b/packages/documentation/docs/pages/extensibility/CustomTasks.md @@ -0,0 +1,480 @@ +# Custom UI5 Builder Tasks + +The UI5 Build Extensibility enables you to enhance the build process of any UI5 project. In addition to the [standard tasks](../Builder#standard-tasks), custom tasks can be created. + +The UI5 community already created many custom tasks which you can integrate into your project. They are often prefixed by `ui5-task-` to make them easily searchable in the [npm registry](https://www.npmjs.com/search?q=ui5-task-). + +Please note that custom tasks from third parties can not only modify your project but also execute arbitrary code on your system. In fact, this is the case for all npm packages you install. Always act with the according care and follow best practices. + +## Configuration + +You can configure your build process with additional build task. These custom tasks are defined in the project [configuration](../Configuration). + +To hook your custom tasks into the different build phases of a project, they need to reference other tasks to be executed before or after. This can be a [standard task](../Builder#standard-tasks) or another custom task. +Standard tasks that are disabled, even though they are not executed, can still be referenced by custom tasks, which will be performed in their designated position. + +In the below example, when building the library `my.library` the custom `babel` task will be executed before the standard task `generateComponentPreload`. +Another custom task called `render-markdown-files` is then executed immediately after the standard task `minify`. + +### Example: Basic configuration + +```yaml +# In this example configuration, two custom tasks are defined: 'babel' and 'render-markdown-files'. +specVersion: "4.0 +type: library +metadata: + name: my.library +builder: + customTasks: + - name: babel + beforeTask: generateComponentPreload + - name: render-markdown-files + afterTask: minify + configuration: + markdownStyle: + firstH1IsTitle: true +``` + +### Example: Connect multiple custom tasks + +You can also connect multiple custom tasks with each other. The order in the configuration is important in this case. You have to make sure that a task is defined *before* you reference it via `beforeTask` or `afterTask`. + +```yaml +# In this example, 'my-custom-task-2' gets executed after 'my-custom-task-1'. +specVersion: "4.0 +type: library +metadata: + name: my.library +builder: + customTasks: + - name: my-custom-task-1 + beforeTask: generateComponentPreload + - name: my-custom-task-2 + afterTask: my-custom-task-1 +``` + +## Custom Task Extension + +A custom task extension consists of a `ui5.yaml` and a [task implementation](#task-implementation). It can be a standalone module or part of an existing UI5 project. + +### Example: ui5.yaml + +```yaml +specVersion: "4.0 +kind: extension +type: task +metadata: + name: render-markdown-files +task: + path: lib/tasks/renderMarkdownFiles.js +``` + +Task extensions can be **standalone modules** which are handled as dependencies. + +Alternatively you can implement a task extension as **part of your UI5 project**. +In that case, the configuration of the extension is part of your project configuration inside the `ui5.yaml` as shown below. + +The task extension will then be automatically collected and processed during the processing of the project. + +### Example: Custom Task Extension defined in UI5 project + +```yaml +# Project configuration for the above example +specVersion: "4.0 +kind: project +type: library +metadata: + name: my.library +builder: + customTasks: + - name: render-markdown-files + afterTask: minify + configuration: + markdownStyle: + firstH1IsTitle: true +--- +# Task extension as part of your project +specVersion: "4.0 +kind: extension +type: task +metadata: + name: render-markdown-files +task: + path: lib/tasks/renderMarkdownFiles.js +``` + +## Task Implementation + +A custom task implementation needs to return a function with the following signature: + +#### ESM + + ```js linenums="1 + /** + * Custom task API + * + * @param {object} parameters + * + * @param {module:@ui5/fs.AbstractReader} parameters.dependencies + * Reader to access resources of the project's dependencies + * @param {@ui5/logger/Logger} parameters.log + * Logger instance for use in the custom task. + * This parameter is only available to custom task extensions + * defining Specification Version 3.0 and later. + * @param {object} parameters.options Options + * @param {string} parameters.options.projectName + * Name of the project currently being built + * @param {string} parameters.options.projectNamespace + * Namespace of the project currently being built + * @param {string} parameters.options.configuration + * Custom task configuration, as defined in the project's ui5.yaml + * @param {string} parameters.options.taskName + * Name of the custom task. + * This parameter is only provided to custom task extensions + * defining Specification Version 3.0 and later. + * @param {@ui5/builder.tasks.TaskUtil} parameters.taskUtil + * Specification Version-dependent interface to a TaskUtil instance. + * See the corresponding API reference for details: + * https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html + * @param {module:@ui5/fs.DuplexCollection} parameters.workspace + * Reader/Writer to access and modify resources of the + * project currently being built + * @returns {Promise} + * Promise resolving once the task has finished + */ + export default async function({dependencies, log, options, taskUtil, workspace}) { + // [...] + }; + ``` + +#### CommonJS + + ```js linenums="1 + /** + * Custom task API + * + * @param {object} parameters + * + * @param {module:@ui5/fs.AbstractReader} parameters.dependencies + * Reader to access resources of the project's dependencies + * @param {@ui5/logger/Logger} parameters.log + * Logger instance for use in the custom task. + * This parameter is only available to custom task extensions + * defining Specification Version 3.0 and later. + * @param {object} parameters.options Options + * @param {string} parameters.options.projectName + * Name of the project currently being built + * @param {string} parameters.options.projectNamespace + * Namespace of the project currently being built + * @param {string} parameters.options.configuration + * Custom task configuration, as defined in the project's ui5.yaml + * @param {string} parameters.options.taskName + * Name of the custom task. + * This parameter is only provided to custom task extensions + * defining Specification Version 3.0 and later. + * @param {@ui5/builder.tasks.TaskUtil} parameters.taskUtil + * Specification Version-dependent interface to a TaskUtil instance. + * See the corresponding API reference for details: + * https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html + * @param {module:@ui5/fs.DuplexCollection} parameters.workspace + * Reader/Writer to access and modify resources of the + * project currently being built + * @returns {Promise} + * Promise resolving once the task has finished + */ + module.exports = async function({dependencies, log, options, taskUtil, workspace}) { + // [...] + }; + ``` + +### Required Dependencies + +::: info Info +This functionality has been added with UI5 CLI [`v3.0.0`](https://github.com/SAP/ui5-cli/releases/tag/v3.0.0) + +::: + +Custom tasks can export an optional callback function `determineRequiredDependencies` to control which dependency-resources are made available through the `dependencies`-reader that is provided to the task. By reducing the amount of required dependencies or by not requiring any, UI5 CLI might be able to build a project faster. + +Before executing a task, UI5 CLI will ensure that all required dependencies have been built. + +If this callback is not provided, UI5 CLI will make an assumption as to whether the custom task requires access to any resources of dependencies based on the defined Specification Version of the custom task extension: + +* **Specification Version 3.0 and later:** If no callback is provided, UI5 CLI assumes that no dependencies are required. In this case, the `dependencies` parameter will be omitted. +* **Specification Versions before 3.0:** If no callback is provided, UI5 CLI assumes that all dependencies are required. + + +*For more details, see also [RFC 0012 UI5 CLI Extension API v3](https://github.com/UI5/cli/blob/rfc-ui5-tooling-extension-api-v3/rfcs/0012-UI5-Tooling-Extension-API-3#3-tasks-requiring-dependencies)* + +#### ESM + + ```js linenums="1 + /** + * Callback function to define the list of required dependencies + * + * @param {object} parameters + * @param {Set} parameters.availableDependencies + * Set containing the names of all direct dependencies of + * the project currently being built. + * @param {function} parameters.getDependencies + * Identical to TaskUtil#getDependencies + * (see https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html). + * Creates a list of names of all direct dependencies + * of a given project. + * @param {function} parameters.getProject + * Identical to TaskUtil#getProject + * (see https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html). + * Retrieves a Project-instance for a given project name. + * @param {object} parameters.options + * Identical to the options given to the standard task function. + * @returns {Promise} + * Promise resolving with a Set containing all dependencies + * that should be made available to the task. + * UI5 CLI will ensure that those dependencies have been + * built before executing the task. + */ + export async function determineRequiredDependencies({availableDependencies, getDependencies, getProject, options}) { + // "availableDependencies" could look like this: Set(3) { "sap.ui.core", "sap.m", "my.lib" } + + // Reduce list of required dependencies: Do not require any UI5 framework projects + availableDependencies.forEach((depName) => { + if (getProject(depName).isFrameworkProject()) { + availableDependencies.delete(depName) + } + }); + // => Only resources of project "my.lib" will be available to the task + return availableDependencies; + } + ``` + +#### CommonJS + + ```js linenums="1 + /** + * Callback function to define the list of required dependencies + * + * @param {object} parameters + * @param {Set} parameters.availableDependencies + * Set containing the names of all direct dependencies of + * the project currently being built. + * @param {function} parameters.getDependencies + * Identical to TaskUtil#getDependencies + * (see https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html). + * Creates a list of names of all direct dependencies + * of a given project. + * @param {function} parameters.getProject + * Identical to TaskUtil#getProject + * (see https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html). + * Retrieves a Project-instance for a given project name. + * @param {object} parameters.options + * Identical to the options given to the standard task function. + * @returns {Promise} + * Promise resolving with a Set containing all dependencies + * that should be made available to the task. + * UI5 CLI will ensure that those dependencies have been + * built before executing the task. + */ + module.exports.determineRequiredDependencies = async function({availableDependencies, getDependencies, getProject, options}) { + // "availableDependencies" could look like this: Set(3) { "sap.ui.core", "sap.m", "my.lib" } + + // Reduce list of required dependencies: Do not require any UI5 framework projects + availableDependencies.forEach((depName) => { + if (getProject(depName).isFrameworkProject()) { + availableDependencies.delete(depName) + } + }); + // => Only resources of project "my.lib" will be available to the task + return availableDependencies; + } + ``` + +### Examples + +The following code snippets show examples for custom task implementations. + +### Example: lib/tasks/renderMarkdownFiles.js + +This example is making use of the `resourceFactory` [TaskUtil](https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html) +API to create new resources based on the output of a third-party module for rendering Markdown files. The created resources are added to the build +result by writing them into the provided `workspace`. + +#### ESM + + ```js linenums="1 + import path from "node:path"; + import renderMarkdown from "./renderMarkdown.js"; + + /* + * Render all .md (Markdown) files in the project to HTML + */ + export default async function({dependencies, log, options, taskUtil, workspace}) { + const {createResource} = taskUtil.resourceFactory; + const textResources = await workspace.byGlob("**/*.md"); + await Promise.all(textResources.map(async (resource) => { + const markdownResourcePath = resource.getPath(); + + log.info(`Rendering markdown file ${markdownResourcePath}...`); + const htmlString = await renderMarkdown(await resource.getString(), options.configuration); + + // Note: @ui5/fs virtual paths are always (on *all* platforms) POSIX. Therefore using path.posix here + const newResourceName = path.posix.basename(markdownResourcePath, ".md") + ".html"; + const newResourcePath = path.posix.join(path.posix.dirname(markdownResourcePath), newResourceName); + + const markdownResource = createResource({ + path: newResourcePath, + string: htmlString + }); + await workspace.write(markdownResource); + })); + }; + ``` + +#### CommonJS + + ```js linenums="1 + const path = require("node:path"); + const renderMarkdown = require("./renderMarkdown.js"); + + /* + * Render all .md (Markdown) files in the project to HTML + */ + module.exports = async function({dependencies, log, options, taskUtil, workspace}) { + const {createResource} = taskUtil.resourceFactory; + const textResources = await workspace.byGlob("**/*.md"); + await Promise.all(textResources.map(async (resource) => { + const markdownResourcePath = resource.getPath(); + + log.info(`Rendering markdown file ${markdownResourcePath}...`); + const htmlString = await renderMarkdown(await resource.getString(), options.configuration); + + // Note: @ui5/fs virtual paths are always (on *all* platforms) POSIX. Therefore using path.posix here + const newResourceName = path.posix.basename(markdownResourcePath, ".md") + ".html"; + const newResourcePath = path.posix.join(path.posix.dirname(markdownResourcePath), newResourceName); + + const markdownResource = createResource({ + path: newResourcePath, + string: htmlString + }); + await workspace.write(markdownResource); + })); + }; + ``` + +::: warning Warning +Depending on your project setup, UI5 CLI tends to open many files simultaneously during a build. To prevent errors like `EMFILE: too many open files`, we urge custom task implementations to use the [graceful-fs](https://github.com/isaacs/node-graceful-fs#readme) module as a drop-in replacement for the native `fs` module in case it is used. + +Tasks should ideally use the reader/writer APIs provided by UI5 CLI for working with project resources. + +::: + +### Example: lib/tasks/compileLicenseSummary.js + +This example is making use of multiple [TaskUtil](https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html) +APIs to retrieve additional information about the project currently being built (`taskUtil.getProject()`) and its direct dependencies +(`taskUtil.getDependencies()`). Project configuration files like `package.json` can be accessed directly using `project.getRootReader()`. + +#### ESM + + ```js linenums="1 + import path from "node:path"; + + /* + * Compile a list of all licenses of the project's dependencies + * and write it to "dependency-license-summary.json + */ + export default async function({dependencies, log, options, taskUtil, workspace}) { + const {createResource} = taskUtil.resourceFactory; + const licenses = new Map(); + const projectsVisited = new Set(); + + async function processProject(project) { + return Promise.all(taskUtil.getDependencies().map(async (projectName) => { + if (projectsVisited.has(projectName)) { + return; + } + projectsVisited.add(projectName); + const project = taskUtil.getProject(projectName); + const pkgResource = await project.getRootReader().byPath(../package.json"); + if (pkgResource) { + const pkg = JSON.parse(await pkgResource.getString()) + + // Add project to list of licenses + if (licenses.has(pkg.license)) { + licenses.get(pkg.license).push(project.getName()); + } else { + // License not yet in map. Define it + licenses.set(pkg.license, [project.getName()]); + } + + } else { + log.info(`Could not find package.json file in project ${project.getName()}`); + } + return processProject(project); + })); + } + // Start processing dependencies of the root project + await processProject(taskUtil.getProject()); + + const summaryResource = createResource({ + path: "/dependency-license-summary.json", + string: JSON.stringify(Object.fromEntries(licenses), null, "\t") + }); + await workspace.write(summaryResource); + }; + ``` + +#### CommonJS + + ```js linenums="1 + const path = require("node:path"); + + /* + * Compile a list of all licenses of the project's dependencies + * and write it to "dependency-license-summary.json + */ + module.exports = async function({dependencies, log, options, taskUtil, workspace}) { + const {createResource} = taskUtil.resourceFactory; + const licenses = new Map(); + const projectsVisited = new Set(); + + async function processProject(project) { + return Promise.all(taskUtil.getDependencies().map(async (projectName) => { + if (projectsVisited.has(projectName)) { + return; + } + projectsVisited.add(projectName); + const project = taskUtil.getProject(projectName); + const pkgResource = await project.getRootReader().byPath(../package.json"); + if (pkgResource) { + const pkg = JSON.parse(await pkgResource.getString()) + + // Add project to list of licenses + if (licenses.has(pkg.license)) { + licenses.get(pkg.license).push(project.getName()); + } else { + // License not yet in map. Define it + licenses.set(pkg.license, [project.getName()]); + } + + } else { + log.info(`Could not find package.json file in project ${project.getName()}`); + } + return processProject(project); + })); + } + // Start processing dependencies of the root project + await processProject(taskUtil.getProject()); + + const summaryResource = createResource({ + path: "/dependency-license-summary.json", + string: JSON.stringify(Object.fromEntries(licenses), null, "\t") + }); + await workspace.write(summaryResource); + }; + ``` + +## Helper Class `TaskUtil` + +Custom tasks defining [Specification Version](../Configuration#specification-versions) 2.2 or higher have access to an interface of a [TaskUtil](https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html) instance. + +In this case, a `taskUtil` object is provided as a part of the custom task's [parameters](#task-implementation). Depending on the specification version of the custom task, a set of helper functions is available to the implementation. The lowest required specification version for every function is listed in the [TaskUtil API reference](https://ui5.github.io/cli/v4/api/@ui5_project_build_helpers_TaskUtil.html). diff --git a/packages/documentation/docs/extensibility/ProjectShims.md b/packages/documentation/docs/pages/extensibility/ProjectShims.md similarity index 93% rename from packages/documentation/docs/extensibility/ProjectShims.md rename to packages/documentation/docs/pages/extensibility/ProjectShims.md index bdda5bd2cb..bd3b180bab 100644 --- a/packages/documentation/docs/extensibility/ProjectShims.md +++ b/packages/documentation/docs/pages/extensibility/ProjectShims.md @@ -1,11 +1,11 @@ ### Project Shims A project shim extension can be used to define or extend a project configuration of a module. The most popular use case is probably to add UI5 project configuration to a third party module that otherwise could not be used with the UI5 CLI. -Also see [RFC 0002 Project Shims](https://github.com/UI5/cli/blob/main/rfcs/0002-project-shims.md). +Also see [RFC 0002 Project Shims](https://github.com/UI5/cli/blob/main/rfcs/0002-project-shims). #### Structure ```yaml -specVersion: "4.0" +specVersion: "4.0 kind: extension type: project-shim metadata: @@ -13,12 +13,12 @@ metadata: shims: configurations: : - specVersion: "4.0" + specVersion: "4.0 type: metadata: name: : - specVersion: "4.0" + specVersion: "4.0 type: metadata: name: @@ -61,12 +61,12 @@ An application "my-application" defines a npm dependency to [lodash](https://lod **ui5.yaml** ```yaml -specVersion: "4.0" +specVersion: "4.0 type: application metadata: name: my.application --- # Everything below this line could also be put into the ui5.yaml of a standalone extension module -specVersion: "4.0" +specVersion: "4.0 kind: extension type: project-shim metadata: @@ -74,7 +74,7 @@ metadata: shims: configurations: lodash: # name as defined in package.json - specVersion: "4.0" + specVersion: "4.0 type: module # Use module type metadata: name: lodash @@ -128,11 +128,11 @@ application-a/ ```json { "scripts": { - "install": "napa" + "install": "napa }, "napa": { "legacy-libs": "", - "legacy-library-x": "" + "legacy-library-x": " } } @@ -142,12 +142,12 @@ application-a/ The shim defined in the application configures the legacy libraries and defines their dependencies. This shim might as well be a standalone module that is added to the applications dependencies. That would be the typical reuse scenario for shims. ```yaml -specVersion: "4.0" +specVersion: "4.0 type: application metadata: name: application.a ---- -specVersion: "4.0" +specVersion: "4.0 kind: extension type: project-shim metadata: @@ -155,17 +155,17 @@ metadata: shims: configurations: legacy-library-a: - specVersion: "4.0" + specVersion: "4.0 type: library metadata: name: legacy.library.a legacy-library-b: - specVersion: "4.0" + specVersion: "4.0 type: library metadata: name: legacy.library.b legacy-library-x: - specVersion: "4.0" + specVersion: "4.0 type: library metadata: name: legacy.library.x diff --git a/packages/documentation/docs/index.md b/packages/documentation/docs/pages/index.md similarity index 59% rename from packages/documentation/docs/index.md rename to packages/documentation/docs/pages/index.md index f2a5d7ff3c..4074abce8f 100644 --- a/packages/documentation/docs/index.md +++ b/packages/documentation/docs/pages/index.md @@ -1,10 +1,10 @@ ---- -layout: home ---- +![UI5 logo](../images/UI5_logo_wide.png) # UI5 CLI -::: info Project Rename +An open and modular toolchain to develop state-of-the-art applications based on the [UI5](https://ui5.sap.com) framework. + +::: warning Project Rename **UI5 Tooling has been renamed to UI5 CLI 🚨** Read the announcement blog post: **[SAP Community: Goodbye UI5 Tooling - Hello UI5 CLI!](https://community.sap.com/t5/technology-blog-posts-by-sap/goodbye-ui5-tooling-hello-ui5-cli/ba-p/14211769)** @@ -15,16 +15,20 @@ Read the announcement blog post: **[SAP Community: Goodbye UI5 Tooling - Hello U Read the announcement blog post: **[SAP Community: UI5 CLI 4.0](https://community.sap.com/t5/technology-blogs-by-sap/ui5-tooling-4-0/ba-p/13769578)** -And checkout the **[Migrate to v4](./updates/migrate-v4.md)** documentation. +And checkout the **[Migrate to v4](../updates/migrate-v4)** documentation. ::: -[**Get Started**](./GettingStarted.md) + ## Main Features ### 💻 UI5 CLI -*Also see the [UI5 CLI Documentation](/CLI.md)* +*Also see the [UI5 CLI Documentation](./CLI)* ```sh # Global @@ -37,13 +41,13 @@ npm install --save-dev @ui5/cli #### ⚙️ Project Setup Configure your project for use with UI5 CLI. -*Also see the [Configuration Documentation](/Configuration.md)* +*Also see the [Configuration Documentation](./Configuration)* ``` ❯ ui5 init Wrote ui5.yaml: -specVersion: "4.0" +specVersion: "4.0 metadata: name: my-app type: application @@ -66,7 +70,7 @@ Added framework libraries sap.ui.core sap.m themelib_sap_fiori_3 as dependencies #### 🏄 Development Server Start a local development server to work on your project. -*Also see the [Server Documentation](/Server.md)* +*Also see the [Server Documentation](./Server)* ``` ❯ ui5 serve @@ -77,7 +81,7 @@ URL: http://localhost:8080 #### 🛠 Build for Production Build an optimized version of your project. -*Also see the [Builder Documentation](/Builder.md)* +*Also see the [Builder Documentation](./Builder)* ``` bash ❯ ui5 build @@ -103,38 +107,38 @@ This allows you to rely on UI5 CLI for UI5-specific build functionality and proj All available APIs are documented in the [UI5 CLI API Reference](https://ui5.github.io/cli/v4/api/index.html). -::: code-group - -```js [ESM] -import {graphFromPackageDependencies} from "@ui5/project/graph"; - -async function buildApp(projectPath, destinationPath) { - const graph = await graphFromPackageDependencies({ - cwd: projectPath - }); - await graph.build({ - destPath: destinationPath, - selfContained: true, - excludedTasks: ["transformBootstrapHtml"], - includedDependencies: ["*"] - }); -} -``` - -```js [CommonJS] -async function buildApp(projectPath, destinationPath) { - const {graphFromPackageDependencies} = - await import("@ui5/project/graph"); - const graph = await graphFromPackageDependencies({ - cwd: projectPath - }); - await graph.build({ - destPath: destinationPath, - selfContained: true, - excludedTasks: ["transformBootstrapHtml"], - includedDependencies: ["*"] - }); -} -``` - -::: +#### ESM + + ```js linenums="1 + import {graphFromPackageDependencies} from "@ui5/project/graph"; + + async function buildApp(projectPath, destinationPath) { + const graph = await graphFromPackageDependencies({ + cwd: projectPath + }); + await graph.build({ + destPath: destinationPath, + selfContained: true, + excludedTasks: ["transformBootstrapHtml"], + includedDependencies: ["*"] + }); + } + ``` + +#### CommonJS + + ```js linenums="1 + async function buildApp(projectPath, destinationPath) { + const {graphFromPackageDependencies} = + await import("@ui5/project/graph"); + const graph = await graphFromPackageDependencies({ + cwd: projectPath + }); + await graph.build({ + destPath: destinationPath, + selfContained: true, + excludedTasks: ["transformBootstrapHtml"], + includedDependencies: ["*"] + }); + } + ``` diff --git a/packages/documentation/docs/indexJsdoc.md b/packages/documentation/docs/pages/indexJsdoc.md similarity index 52% rename from packages/documentation/docs/indexJsdoc.md rename to packages/documentation/docs/pages/indexJsdoc.md index 835c46a506..e05da464ef 100644 --- a/packages/documentation/docs/indexJsdoc.md +++ b/packages/documentation/docs/pages/indexJsdoc.md @@ -1,7 +1,7 @@ # UI5 CLI API Reference ## Support -Please follow our [Contribution Guidelines](https://github.com/UI5/cli/blob/main/CONTRIBUTING.md#report-an-issue) on how to report an issue. Or chat with us in the [`#tooling`](https://openui5.slack.com/archives/C0A7QFN6B) channel of the [OpenUI5 Community Slack](https://ui5-slack-invite.cfapps.eu10.hana.ondemand.com) +Please follow our [Contribution Guidelines](https://github.com/UI5/cli/blob/main/CONTRIBUTING#report-an-issue) on how to report an issue. Or chat with us in the [`#tooling`](https://openui5.slack.com/archives/C0A7QFN6B) channel of the [OpenUI5 Community Slack](https://ui5-slack-invite.cfapps.eu10.hana.ondemand.com) ## License This project is licensed under the Apache Software License, Version 2.0 except as noted otherwise in the [LICENSE](https://github.com/UI5/cli/blob/main/LICENSE.txt) file. diff --git a/packages/documentation/docs/stylesheets/extra.css b/packages/documentation/docs/stylesheets/extra.css new file mode 100644 index 0000000000..cbc02d2937 --- /dev/null +++ b/packages/documentation/docs/stylesheets/extra.css @@ -0,0 +1,199 @@ +@font-face { + font-family: "SAP-icons"; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/SAP-icons.woff2") format("woff2"), local("SAP-icons"); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: "72"; + font-style: normal; + font-weight: 400; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Regular.woff2") format("woff2"), local("72"); +} +@font-face { + font-family: "72full"; + font-style: normal; + font-weight: 400; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Regular-full.woff2") format("woff2"); +} +@font-face { + font-family: "72"; + font-style: normal; + font-weight: 700; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Bold.woff2") format("woff2"), local("72-Bold"); +} +@font-face { + font-family: "72full"; + font-style: normal; + font-weight: 700; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Bold-full.woff2") format("woff2"); +} +@font-face { + font-family: "72"; + font-style: normal; + font-weight: 300; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Light.woff2") format("woff2"), local("72-Light"); +} +@font-face { + font-family: "72full"; + font-style: normal; + font-weight: 300; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Light-full.woff2") format("woff2"); +} +@font-face { + font-family: "72-Bold"; + font-style: normal; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Bold.woff2") format("woff2"), local("72-Bold"); +} +@font-face { + font-family: "72-Boldfull"; + font-style: normal; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Bold-full.woff2") format("woff2"); +} +@font-face { + font-family: "72-Light"; + font-style: normal; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Light.woff2") format("woff2"), local("72-Light"); +} +@font-face { + font-family: "72-Lightfull"; + font-style: normal; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Light-full.woff2") format("woff2"); +} +@font-face { + font-family: "72Mono"; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72Mono-Regular.woff2") format("woff2"), local("72Mono"); +} +@font-face { + font-family: "72Monofull"; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72Mono-Regular-full.woff2") format("woff2"); +} +@font-face { + font-family: "72Mono-Bold"; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72Mono-Bold.woff2") format("woff2"), local("72Mono-Bold"); +} +@font-face { + font-family: "72Mono-Boldfull"; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72Mono-Bold-full.woff2") format("woff2"); +} +@font-face { + font-family: "72Black"; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Black.woff2") format("woff2"); +} +@font-face { + font-family: "72Blackfull"; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Black-full.woff2") format("woff2"); +} +@font-face { + font-family: "72-SemiboldDuplex"; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-SemiboldDuplex.woff2") format("woff2"); +} +@font-face { + font-family: "72-SemiboldDuplexfull"; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-SemiboldDuplex-full.woff2") format("woff2"); +} +@font-face { + font-family: "72"; + font-style: normal; + font-weight: 400; + unicode-range: U+0102-0103, U+010F, U+013D, U+013E, U+0165, U+01A0-01A1, + U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, + U+1EE4-1EF1, U+1EF4-1EF7; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Regular-full.woff2") format("woff2"); +} +@font-face { + font-family: "72"; + font-style: normal; + font-weight: 700; + unicode-range: U+0102-0103, U+010F, U+013D, U+013E, U+0165, U+01A0-01A1, + U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, + U+1EE4-1EF1, U+1EF4-1EF7; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Bold-full.woff2") format("woff2"); +} +@font-face { + font-family: "72"; + font-style: normal; + font-weight: 300; + unicode-range: U+0102-0103, U+010F, U+013D, U+013E, U+0165, U+01A0-01A1, + U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, + U+1EE4-1EF1, U+1EF4-1EF7; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Light-full.woff2") format("woff2"); +} +@font-face { + font-family: "72-Bold"; + font-style: normal; + unicode-range: U+0102-0103, U+010F, U+013D, U+013E, U+0165, U+01A0-01A1, + U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, + U+1EE4-1EF1, U+1EF4-1EF7; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Bold-full.woff2") format("woff2"); +} +@font-face { + font-family: "72-Light"; + font-style: normal; + unicode-range: U+0102-0103, U+010F, U+013D, U+013E, U+0165, U+01A0-01A1, + U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, + U+1EE4-1EF1, U+1EF4-1EF7; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Light-full.woff2") format("woff2"); +} +@font-face { + font-family: "72Mono"; + unicode-range: U+0102-0103, U+010F, U+013D, U+013E, U+0165, U+01A0-01A1, + U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, + U+1EE4-1EF1, U+1EF4-1EF7; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72Mono-Regular-full.woff2") format("woff2"); +} +@font-face { + font-family: "72Mono-Bold"; + unicode-range: U+0102-0103, U+010F, U+013D, U+013E, U+0165, U+01A0-01A1, + U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, + U+1EE4-1EF1, U+1EF4-1EF7; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72Mono-Bold-full.woff2") format("woff2"); +} +@font-face { + font-family: "72Black"; + unicode-range: U+0102-0103, U+010F, U+013D, U+013E, U+0165, U+01A0-01A1, + U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, + U+1EE4-1EF1, U+1EF4-1EF7; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-Black-full.woff2") format("woff2"); +} +@font-face { + font-family: "72-SemiboldDuplex"; + unicode-range: U+0102-0103, U+010F, U+013D, U+013E, U+0165, U+01A0-01A1, + U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, + U+1EE4-1EF1, U+1EF4-1EF7; + src: url("https://sdk.openui5.org/resources/sap/ui/core/themes/sap_horizon/fonts/72-SemiboldDuplex-full.woff2") format("woff2"); +} + +html, body, h1, h2, h3, h4, h5, h6, p { + font-family: "72-Regular", "72", "72full", Arial, Helvetica, sans-serif; +} + +.sap-icon-initiative::before { + font-family: SAP-icons; + content: "\e161"; + margin-right: 0.5em; +} + +.sap-icon-accept::before { + font-family: SAP-icons; + content: "\e05b"; +} + +.sap-icon-ui5-after::after { + font-family: SAP-icons; + content: "\e21b"; + margin-left: 0.5em; + color: var(--md-primary-fg-color); +} + +.ui5-footer-item { + flex-grow: 0; + color: var(--md-footer-fg-color--lighter); + font-size: .64rem; + margin: auto 0.6rem; + padding: 0.4rem 0; +} + +.md-copyright { + flex-grow: 1; +} diff --git a/packages/documentation/docs/updates/migrate-v1.md b/packages/documentation/docs/updates/migrate-v1.md index e238dbb8c3..a35c3af8cc 100644 --- a/packages/documentation/docs/updates/migrate-v1.md +++ b/packages/documentation/docs/updates/migrate-v1.md @@ -12,7 +12,7 @@ to load the custom bundle file instead. **ui5-project: normalizer: Rename optional parameter "translator" ([SAP/ui5-project#96](https://github.com/SAP/ui5-project/pull/96))** -Renamed parameter "translator" of functions generateDependencyTree and generateProjectTree to "translatorName" +Renamed parameter "translator" of functions generateDependencyTree and generateProjectTree to "translatorName **ui5-fs: Remove top-level access to adapters ([SAP/ui5-fs#69](https://github.com/SAP/ui5-fs/pull/69))** @@ -52,12 +52,12 @@ npm install @ui5/cli@^1 #### `specVersion: "1.0"` -We have introduced the [specification version `1.0`](/Configuration.md#specification-version-10). +We have introduced the [specification version `1.0`](../pages/Configuration#specification-version-10). New features will only be available for projects with specVersion `1.0` or newer. The specVersion `0.1` will be compatible with the UI5 CLI v1.0.0, but we still recommend to adopt your projects. ```yaml -specVersion: "1.0" +specVersion: "1.0 metadata: name: type: diff --git a/packages/documentation/docs/updates/migrate-v2.md b/packages/documentation/docs/updates/migrate-v2.md index 9adb9f5339..decbc4cce0 100644 --- a/packages/documentation/docs/updates/migrate-v2.md +++ b/packages/documentation/docs/updates/migrate-v2.md @@ -26,7 +26,7 @@ If a library contains both a manifest.json and a .library file, they must be loc For projects of types **other** than `application` or `library`, the UI5 Server now expects `*.properties` files to be UTF-8 encoded as opposed to `ISO-8859-1` before. -_**Note:** This change does not affect most projects as `*.properties` files are typically only located in applications or libraries, for which their project specific [configuration](/Configuration.md#encoding-of-properties-files) is used._ +_**Note:** This change does not affect most projects as `*.properties` files are typically only located in applications or libraries, for which their project specific [configuration](../pages/Configuration#encoding-of-properties-files) is used._ **UI5 FS: Remove deprecated parameter useNamespaces ([SAP/ui5-fs#223](https://github.com/SAP/ui5-fs/pull/223))** @@ -56,12 +56,12 @@ npm install --save-dev @ui5/cli@^2 #### `specVersion: "2.0"` -We have introduced the [specification version `2.0`](/Configuration.md#specification-version-10). +We have introduced the [specification version `2.0`](../pages/Configuration#specification-version-10). New features will only be available for projects with specVersion `2.0` or newer. Most projects defining specVersion `0.1` or `1.0` can still be used. ```yaml -specVersion: "2.0" +specVersion: "2.0 metadata: name: type: diff --git a/packages/documentation/docs/updates/migrate-v3.md b/packages/documentation/docs/updates/migrate-v3.md index 55110133e6..70acb97dba 100644 --- a/packages/documentation/docs/updates/migrate-v3.md +++ b/packages/documentation/docs/updates/migrate-v3.md @@ -1,9 +1,10 @@ # Migrate to v3 -::: warning "Superseded" -**UI5 CLI 3.0 has been superseded by version 4.0. See [Migrate to v4](./migrate-v4.md).** +::: warning Superseded +**UI5 CLI 3.0 has been superseded by version 4.0. See [Migrate to v4](./migrate-v4).** Find the announcement blog post for version 3.0 here: **[SAP Community: UI5 CLI 3.0](https://blogs.sap.com/2023/02/10/ui5-tooling-3.0/)** + ::: ## Node.js and npm Version Support @@ -20,47 +21,59 @@ This means your old projects might still work. Unless they have non-standard con ## Changes for Projects -::: info +::: info Info ✅ Projects defining **Specification Version 2.x** are expected to be **fully compatible with UI5 CLI v3** + ::: For projects defining the latest **Specification Versions 3.0 and higher**, some changes apply: -* **Breaking Change:** The `metadata.name` property is now restricted to contain only certain characters and no uppercase letters. See [Configuration: `name`](/Configuration.md#name) for details +* **Breaking Change:** The `metadata.name` property is now restricted to contain only certain characters and no uppercase letters. See [Configuration: `name`](../pages/Configuration#name) for details -See also [Configuration: Specification Version 3.0](/Configuration.md#specification-version-30). +See also [Configuration: Specification Version 3.0](../pages/Configuration#specification-version-30). ## Changes for Extensions -::: info +::: info Info ✅ Custom Tasks and Custom Middleware defining **Specification Version 2.x** are expected to be **fully compatible with UI5 CLI v3** + ::: For extensions defining the latest **Specification Versions 3.0 and higher**, some changes and improvements apply: * **Breaking Change:** Custom Tasks need to request access to dependency resources - * By default, resources of dependencies can't be accessed. A custom task requiring such access needs to implement a callback function with the export name `determineRequiredDependencies`. In this function it can define the scope of dependency-access. Please refer to the [Custom Task: Required Dependencies](/extensibility/CustomTasks.md#required-dependencies) documentation for details -* **Breaking Change:** The `metadata.name` property is now restricted to contain only certain characters and no uppercase letters. See [Configuration: `name`](/Configuration.md#name) for details + * By default, resources of dependencies can't be accessed. A custom task requiring such access needs to implement a callback function with the export name `determineRequiredDependencies`. In this function it can define the scope of dependency-access. Please refer to the [Custom Task: Required Dependencies](../pages/extensibility/CustomTasks#required-dependencies) documentation for details +* **Breaking Change:** The `metadata.name` property is now restricted to contain only certain characters and no uppercase letters. See [Configuration: `name`](../pages/Configuration#name) for details * **Features:** Enhanced TaskUtil and MiddlewareUtil API * For example providing access to a [project's root directory](https://ui5.github.io/cli/v3/api/@ui5_project_build_helpers_TaskUtil.html#~ProjectInterface), or [dependencies](https://ui5.github.io/cli/v3/api/@ui5_project_build_helpers_TaskUtil.html#getDependencies) - * See also [Custom Tasks](/extensibility/CustomTasks.md) and [Custom Server Middleware](/extensibility/CustomServerMiddleware.md) + * See also [Custom Tasks](../pages/extensibility/CustomTasks) and [Custom Server Middleware](../pages/extensibility/CustomServerMiddleware) ## Changes to Dependency Configuration -::: info +::: info Info ✅ The **`ui5.dependencies` package.json configuration** becomes obsolete and is ignored in UI5 CLI v3. -::: Configuration like the following is not needed anymore: - `dependencies`, `devDependencies` and `optionalDependencies` are now [automatically analyzed](https://github.com/SAP/ui5-project/blob/ff04ae4aeeb7f7d889dffd0c0e3e8774dd708c79/lib/graph/providers/NodePackageDependencies.js#L104). - If a dependency can be configured as a UI5 project or UI5 CLI extension, it is added to the graph and its `dependencies` are analyzed. +```diff +{ + [...] +- "ui5": { +- "dependencies": [ +- "my-package +- ] +- } + [...] +} +``` `dependencies`, `devDependencies` and `optionalDependencies` are now [automatically analyzed](https://github.com/SAP/ui5-project/blob/ff04ae4aeeb7f7d889dffd0c0e3e8774dd708c79/lib/graph/providers/NodePackageDependencies.js#L104). -If a dependency can be configured as a UI5 project or UI5 Tooling extension, it is added to the graph and its `dependencies` are analyzed. +If a dependency can be configured as a UI5 project or UI5 CLI extension, it is added to the graph and its `dependencies` are analyzed. Note that `devDependencies` and `optionalDependencies` are ignored for all but the current root project. For projects that are intended to be consumed in other projects (for example libraries), this means that any required custom tasks must be added to `dependencies`. + ::: + ## Changes to Module API The `normalizer` and `projectTree` modules have been removed. The `builder` API has been moved from @ui5/builder to @ui5/project. @@ -91,24 +104,11 @@ await builder.build({ ``` **New: @ui5/project v3** -::: code-group - -```js [ESM] -import {graphFromPackageDependencies} from "@ui5/project/graph"; - -let graph = await graphFromPackageDependencies({cwd: "."}); - -await graph.build({ - destPath: "./dist", - includedDependencies: ["*"], // Parameter "buildDependencies" has been removed -}); -``` +#### ESM -```js [CommonJS] -// Since CommonJS does not suport top-level await, the code must be wrapped in an asynchronous function -async function buildProject() { - const {graphFromPackageDependencies} = await import("@ui5/project/graph"); + ```js + import {graphFromPackageDependencies} from "@ui5/project/graph"; let graph = await graphFromPackageDependencies({cwd: "."}); @@ -116,9 +116,23 @@ async function buildProject() { destPath: "./dist", includedDependencies: ["*"], // Parameter "buildDependencies" has been removed }); -} -``` -::: + ``` + +#### CommonJS + + ```js + // Since CommonJS does not suport top-level await, the code must be wrapped in an asynchronous function + async function buildProject() { + const {graphFromPackageDependencies} = await import("@ui5/project/graph"); + + let graph = await graphFromPackageDependencies({cwd: "."}); + + await graph.build({ + destPath: "./dist", + includedDependencies: ["*"], // Parameter "buildDependencies" has been removed + }); + } + ``` ## Changes to @ui5/cli @@ -139,10 +153,11 @@ Especially for projects of type `library`, where standard tasks like [`buildThem In the future, a caching mechanism should help and improve build times with this new behavior. -::: tip Info +::: info Info The CLI flags `-a` and `--all` are still present and now an alias for `--include-all-dependencies`. This flag (along with `--include-dependency*` and `--exclude-dependency*`) mainly controls the **build output**. Use it to define whether dependency resources should be part of the build result. -Please also refer to the [`ui5 build` documentation](/CLI.md#ui5-build). +Please also refer to the [`ui5 build` documentation](../pages/CLI#ui5-build). + ::: ## Removal of Standard Tasks and Processors @@ -164,7 +179,7 @@ The following processors have been removed: | UI5 CLI v2 | UI5 CLI v3 | Note | | --------------------------- | --------------------------- | ------------------------- | -| createDebugFiles uglify | minify | The minify task is executed earlier, before the bundling process takes place. Any existing `beforeTask` or `afterTask` configuration of custom tasks might need to be adapted to cater for this change.
To adapt, you can use the `generateResourcesJson` task for subscription before or after the last standard task. By default, `generateResourcesJson` is disabled, but you can still subscribe to it, thereby ensuring that your custom tasks execute in the correct order. | +| createDebugFiles
uglify | minify | The minify task is executed earlier, before the bundling process takes place. Any existing `beforeTask` or `afterTask` configuration of custom tasks might need to be adapted to cater for this change.
To adapt, you can use the `generateResourcesJson` task for subscription before or after the last standard task. By default, `generateResourcesJson` is disabled, but you can still subscribe to it, thereby ensuring that your custom tasks execute in the correct order. | | generateVersionInfo | generateVersionInfo | The task is no longer executed by default for application projects. It can be re-enabled by using the `--include-task` parameter. | | generateManifestBundle | *None* | This task was only needed for the HTML5 repository in Cloud Foundry. Meanwhile, the HTML5 repository implemented its own mechanism, so the task is no longer needed | @@ -176,39 +191,39 @@ The following processors have been removed: | replaceCopyright | *enabled* | *enabled* | *enabled* | | replaceVersion | *enabled* | *enabled* | *enabled* | | replaceBuildtime | | *enabled* | | -| generateJsdoc | | *disabled¹* | | -| executeJsdocSdkTransformation | | *disabled¹* | | +| generateJsdoc | | *disabled* ^1^ | | +| executeJsdocSdkTransformation | | *disabled* ^1^ | | | **ADDED:** minify | *enabled* | *enabled* | | | generateFlexChangesBundle | *enabled* | *enabled* | | | **REMOVED:** ~~generateManifestBundle~~ | *~~disabled~~* | *~~disabled~~* | | | generateLibraryManifest | | *enabled* | | -| generateComponentPreload | *enabled* | *disabled²* | | +| generateComponentPreload | *enabled* | *disabled* ^2^ | | | generateLibraryPreload | | *enabled* | | -| generateStandaloneAppBundle | *disabled³* | | | -| transformBootstrapHtml | *disabled³* | | | -| generateBundle | *disabled⁴* | *disabled⁴* | | +| generateStandaloneAppBundle | *disabled* ^3^ | | | +| transformBootstrapHtml | *disabled* ^3^ | | | +| generateBundle | *disabled* ^4^ | *disabled* ^4^ | | | buildThemes | | *enabled* | *enabled* | -| generateThemeDesignerResources | | *disabled⁵* | *disabled⁵* | +| generateThemeDesignerResources | | *disabled* ^5^ | *disabled* ^5^ | | **REMOVED:** ~~createDebugFiles~~ | *~~enabled~~* | *~~enabled~~* | | | **REMOVED:** ~~uglify~~ | *~~enabled~~* | *~~enabled~~* | | | generateVersionInfo | **disabled** | | | | generateCachebusterInfo | *disabled* | | | -| generateApiIndex | *disabled¹* | | | +| generateApiIndex | *disabled* ^1^ | | | | generateResourcesJson | *disabled* | *disabled* | *disabled* | -*Disabled tasks can be activated by certain build modes, the project configuration, or by using the `--include-task` [CLI parameter](/CLI.md#ui5-build). See footnotes where given* +*Disabled tasks can be activated by certain build modes, the project configuration, or by using the `--include-task` [CLI parameter](../pages/CLI#ui5-build). See footnotes where given* --- -¹ Enabled in `jsdoc` build, which disables most of the other tasks -² Enabled for projects defining a [component preload configuration](/Configuration.md#component-preload-generation) -³ Enabled in `self-contained` build, which disables `generateComponentPreload` and `generateLibraryPreload` -⁴ Enabled for projects defining a [bundle configuration](/Configuration.md#custom-bundling) -⁵ Can be enabled for framework projects via the `includeTask` option. For other projects, this task is skipped +^1^ Enabled in `jsdoc` build, which disables most of the other tasks +^2^ Enabled for projects defining a [component preload configuration](../pages/Configuration#component-preload-generation) +^3^ Enabled in `self-contained` build, which disables `generateComponentPreload` and `generateLibraryPreload` +^4^ Enabled for projects defining a [bundle configuration](../pages/Configuration#custom-bundling) +^5^ Can be enabled for framework projects via the `includeTask` option. For other projects, this task is skipped ## Removal of Standard Middleware -The following middleware has been removed from the [standard middlewares list](/Server#standard-middleware): +The following middleware has been removed from the [standard middlewares list](../pages/Server#standard-middleware): * connectUi5Proxy diff --git a/packages/documentation/docs/updates/migrate-v4.md b/packages/documentation/docs/updates/migrate-v4.md index 8edef62c12..0b3742aa27 100644 --- a/packages/documentation/docs/updates/migrate-v4.md +++ b/packages/documentation/docs/updates/migrate-v4.md @@ -1,9 +1,13 @@ # Migrate to v4 -::: tip "New Release" +::: tip New Release **UI5 CLI 4.0 has been released on July 24, 2024 🎉** +Install the latest version in your projects via: `npm i --save-dev @ui5/cli@latest` +And update your global install via `npm i --global @ui5/cli@latest` + And find the announcement blog post here: **[SAP Community: UI5 CLI 4.0](https://community.sap.com/t5/technology-blogs-by-sap/ui5-tooling-4-0/ba-p/13769578)** + ::: ## UI5 2.x Compatibility @@ -28,15 +32,11 @@ Old projects might therefore still work, unless they have a non-standard configu ## Changes for Projects -::: tip "No changes for Specification Versions 2.x and 3.x" +::: tip No changes for Specification Versions 2.x and 3.x Projects defining **Specification Version 2.x or 3.x** are expected to be **fully compatible with UI5 CLI v4** -::: - -### Changes for Specification Version 4.0 - -Projects defining **Specification Version 2.x or 3.x** are expected to be **fully compatible with UI5 Tooling v4** The following does not apply to them. + ::: For projects defining the latest **Specification Version 4.0 or higher**, the following changes apply: @@ -45,7 +45,7 @@ For projects defining the latest **Specification Version 4.0 or higher**, the fo In UI5 2.x, the feature of evaluating modules from a string is expected to be removed. Therefore, when using the latest Specification Version, UI5 CLI will **omit affected module from the bundle and log an error message instead.** - For more details, see [Builder: JavaScript Files Requiring Top Level Scope](/Builder.md#javascript-files-requiring-top-level-scope). + For more details, see [Builder: JavaScript Files Requiring Top Level Scope](../pages/Builder#javascript-files-requiring-top-level-scope). * **Breaking Change:** New `async` option for the `require` sections of bundle definitions. @@ -53,13 +53,13 @@ For projects defining the latest **Specification Version 4.0 or higher**, the fo Note that the same default applies for all standard bundles as well, like the component- or library preloads as well as self-contained bundles. - See [Configuration: `bundleDefinition.sections`](/Configuration.md#properties) for more on the new `async` option. + See [Configuration: `bundleDefinition.sections`](../pages/Configuration#properties) for more on the new `async` option. -* **Breaking Change:** Removal of the `usePredefineCalls` [bundle option](/Configuration.md#properties). UI5 CLI v4 will _always_ use `sap.ui.predefine` calls in bundles, making this option obsolete. +* **Breaking Change:** Removal of the `usePredefineCalls` [bundle option](../pages/Configuration#properties). UI5 CLI v4 will _always_ use `sap.ui.predefine` calls in bundles, making this option obsolete. **We do not expect any negative impact** on projects due to this change, therefore it is active independently of the Specification Version. However, when upgrading to Specification Version 4.0 you might need to remove the property if you have it in your ui5.yaml configuration. -You can find a summary of the above at [Configuration: Specification Version 4.0](/Configuration.md#specification-version-40). +You can find a summary of the above at [Configuration: Specification Version 4.0](../pages/Configuration#specification-version-40). ## Migrate Your Code @@ -78,39 +78,45 @@ Non-public `DuplexCollection#byGlobSource` API has been removed. - **Bundling**: The `usePredefineCalls` option has been removed. Bundling now enforces the use of `sap.ui.predefine` instead of function wrappers. -- **Task API**: The `namespace` option has been renamed to `projectNamespace`. For more information, check the documentation for [CustomTasks API](/extensibility/CustomTasks.md#task-implementation) +- **Task API**: The `namespace` option has been renamed to `projectNamespace`. For more information, check the documentation for [CustomTasks API](../pages/extensibility/CustomTasks#task-implementation) - **New Option**: Added a new `async` option for `builder.bundles.bundleDefinition.section`. -> [!IMPORTANT] Example ->```yaml ->builder: -> bundles: -> - bundleDefinition: -> name: "app.js" -> sections: -> - mode: require -> filters: -> - some/app/Component.js -> resolve: true -> sort: true -> async: true ->``` +::: details Example +```yaml +builder: + bundles: + - bundleDefinition: + name: "app.js + sections: + - mode: require + filters: + - some/app/Component.js + resolve: true + sort: true + async: true +``` + +::: ### Changes to @ui5/project -**Default Workspace Name**: The default `workspaceName` is now `"default"` for API usage. +- **Default Workspace Name**: The default `workspaceName` is now `"default"` for API usage. +::: details Example ```js import {graphFromPackageDependencies} from "@ui5/project/graph"; - + graphFromPackageDependencies({ - /* workspaceName: "default" */ + /* workspaceName: "default" */ }); ``` -**Directory Naming**: The `ui5HomeDir` has been renamed to `ui5DataDir` in APIs. +::: +- **Directory Naming**: The `ui5HomeDir` has been renamed to `ui5DataDir` in APIs. + +::: details Example ```js import Resolver from "@ui5/project/ui5Framework/Openui5Resolver"; @@ -120,6 +126,8 @@ await Resolver.resolveVersion("1.120.15", { }); ``` +::: + - **Dependencies**: The `@ui5/builder` is now an optional dependency to the `@ui5/project` Consumers of the Node.js API that make use of the `ProjectGraph#build` method need to declare a dependency to `@ui5/builder` in their respective `package.json`. The package manager should ensure that the version fulfills the range specified in the `package.json` of `@ui5/project`. @@ -130,7 +138,7 @@ Consumers of the Node.js API that make use of the `ProjectGraph#build` method ne This might be caused by a mismatch of your project's manifest version and your UI5 version. -UI5 CLI v4 enhances the manifest.json with information about the `supportedLocales` (also see [Builder: Generation of Supported Locales](/Builder.md#generation-of-supported-locales)). In UI5 1.71 this configuration is not supported and leads to an ambiguous error message `TypeError: invalid input` and a failure to process the manifest file. +UI5 CLI v4 enhances the manifest.json with information about the `supportedLocales` (also see [Builder: Generation of Supported Locales](../pages/Builder#generation-of-supported-locales)). In UI5 1.71 this configuration is not supported and leads to an ambiguous error message `TypeError: invalid input` and a failure to process the manifest file. UI5 CLI uses the manifest's `_version` property to decide whether the `supportedLocales` can be generated. For UI5 1.71, only versions up to `1.17.0` are supported. See [UI5 Demo Kit: Descriptor for Applications, Components, and Libraries (manifest.json)](https://sdk.openui5.org/#/topic/be0cf40f61184b358b5faedaec98b2da) for a mapping per manifest version. diff --git a/scripts/generateCliDoc.js b/scripts/generateCliDoc.js index c12c4e5248..bc748e12ab 100644 --- a/scripts/generateCliDoc.js +++ b/scripts/generateCliDoc.js @@ -193,12 +193,12 @@ function generateDoc() { content = content.split("<").join("<").split(">").join(">"); content = content.split("=").join("="); try { - writeFileSync("./packages/documentation/docs/CLI.md", content); + writeFileSync("./packages/documentation/docs/pages/CLI.md", content); } catch (err) { - console.error(`Failed to generate /packages/documentation/docs/CLI.md: ${err.message}.`); + console.error(`Failed to generate /packages/documentation/docs/pages/CLI.md: ${err.message}.`); throw err; } - console.log("Generated /packages/documentation/docs/CLI.md"); + console.log("Generated /packages/documentation/docs/pages/CLI.md"); } function splitString(temp) { From 2e146db2fc6a2a3b6b9c01c91c60b5cee1970de1 Mon Sep 17 00:00:00 2001 From: d3xter666 Date: Wed, 1 Oct 2025 15:16:18 +0300 Subject: [PATCH 09/10] refactor: Update generateCliDocs to properly escape links, so that they are valid in vitepress --- scripts/generateCliDoc.js | 8 ++++++++ scripts/resources/CLI.template.md | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/scripts/generateCliDoc.js b/scripts/generateCliDoc.js index bc748e12ab..f781f082b7 100644 --- a/scripts/generateCliDoc.js +++ b/scripts/generateCliDoc.js @@ -4,6 +4,14 @@ import {fileURLToPath} from "node:url"; import Handlebars from "handlebars"; const source = readFileSync(fileURLToPath(new URL("../scripts/resources/CLI.template.md", import.meta.url)), "utf8"); + +// Register Handlebars helper to escape URLs for VitePress +Handlebars.registerHelper("escapeUrls", function(text) { + if (!text) return text; + // Escape localhost URLs to prevent VitePress from treating them as dead links + return text.replace(/http:\/\/localhost:\d+\/[^\s)]+/g, (match) => `\`${match}\``); +}); + const template = Handlebars.compile(source); diff --git a/scripts/resources/CLI.template.md b/scripts/resources/CLI.template.md index 00b3bbef41..4e997e7379 100644 --- a/scripts/resources/CLI.template.md +++ b/scripts/resources/CLI.template.md @@ -35,7 +35,7 @@ These options you can use with each command. ## Examples {{#each commonExamples}} -{{commonExampleDescription}} +{{{escapeUrls commonExampleDescription}}} ``` {{commonExample}} ``` @@ -90,7 +90,7 @@ These options you can use with each command. **Examples** {{#each examples}} -{{exampleDescription}} +{{{escapeUrls exampleDescription}}} ``` {{example}} ``` From d4d6c9ebf7d28647f342c239c4bf6ad1b8ce145c Mon Sep 17 00:00:00 2001 From: d3xter666 Date: Thu, 2 Oct 2025 09:59:51 +0300 Subject: [PATCH 10/10] fix: Sidebar --- .gitignore | 1 + .../.vitepress/cache/deps/_metadata.json | 20 +-- packages/documentation/docs/index.md | 144 ++++++++++++++++++ packages/documentation/package.json | 8 +- 4 files changed, 159 insertions(+), 14 deletions(-) create mode 100644 packages/documentation/docs/index.md diff --git a/.gitignore b/.gitignore index fb5d1c7bae..b6372c716d 100644 --- a/.gitignore +++ b/.gitignore @@ -66,4 +66,5 @@ packages/documentation/docs/.vitepress/dist packages/documentation/docs/.vitepress/cache packages/documentation/.vitepress/dist packages/documentation/.vitepress/cache +packages/documentation/dist diff --git a/packages/documentation/.vitepress/cache/deps/_metadata.json b/packages/documentation/.vitepress/cache/deps/_metadata.json index e5bb65c83c..691cbc458e 100644 --- a/packages/documentation/.vitepress/cache/deps/_metadata.json +++ b/packages/documentation/.vitepress/cache/deps/_metadata.json @@ -1,43 +1,43 @@ { - "hash": "b0644836", - "configHash": "a988c895", - "lockfileHash": "43855618", - "browserHash": "5fb4a362", + "hash": "81bd2e0d", + "configHash": "9f95b6b5", + "lockfileHash": "bc2dc377", + "browserHash": "26e8f67c", "optimized": { "vue": { "src": "../../../node_modules/vue/dist/vue.runtime.esm-bundler.js", "file": "vue.js", - "fileHash": "be680425", + "fileHash": "5c7c354e", "needsInterop": false }, "vitepress > @vue/devtools-api": { "src": "../../../node_modules/@vue/devtools-api/dist/index.js", "file": "vitepress___@vue_devtools-api.js", - "fileHash": "c0a7be0f", + "fileHash": "4ff76e82", "needsInterop": false }, "vitepress > @vueuse/core": { "src": "../../../node_modules/@vueuse/core/index.mjs", "file": "vitepress___@vueuse_core.js", - "fileHash": "88c99269", + "fileHash": "ddb016a9", "needsInterop": false }, "vitepress > @vueuse/integrations/useFocusTrap": { "src": "../../../node_modules/@vueuse/integrations/useFocusTrap.mjs", "file": "vitepress___@vueuse_integrations_useFocusTrap.js", - "fileHash": "f23c76a6", + "fileHash": "f1dc281a", "needsInterop": false }, "vitepress > mark.js/src/vanilla.js": { "src": "../../../node_modules/mark.js/src/vanilla.js", "file": "vitepress___mark__js_src_vanilla__js.js", - "fileHash": "7923776d", + "fileHash": "f86e698d", "needsInterop": false }, "vitepress > minisearch": { "src": "../../../node_modules/minisearch/dist/es/index.js", "file": "vitepress___minisearch.js", - "fileHash": "cd4a6a7d", + "fileHash": "6f580467", "needsInterop": false } }, diff --git a/packages/documentation/docs/index.md b/packages/documentation/docs/index.md new file mode 100644 index 0000000000..3148e663ab --- /dev/null +++ b/packages/documentation/docs/index.md @@ -0,0 +1,144 @@ +![UI5 logo](./images/UI5_logo_wide.png) + +# UI5 CLI + +An open and modular toolchain to develop state-of-the-art applications based on the [UI5](https://ui5.sap.com) framework. + +::: warning Project Rename +**UI5 Tooling has been renamed to UI5 CLI 🚨** + +Read the announcement blog post: **[SAP Community: Goodbye UI5 Tooling - Hello UI5 CLI!](https://community.sap.com/t5/technology-blog-posts-by-sap/goodbye-ui5-tooling-hello-ui5-cli/ba-p/14211769)** +::: + +::: tip New Release +**UI5 CLI V4 is here 🎉** + +Read the announcement blog post: **[SAP Community: UI5 CLI 4.0](https://community.sap.com/t5/technology-blogs-by-sap/ui5-tooling-4-0/ba-p/13769578)** + +And checkout the **[Migrate to v4](./updates/migrate-v4)** documentation. +::: + + + +## Main Features + +### 💻 UI5 CLI + +*Also see the [UI5 CLI Documentation](./pages/CLI)* + +```sh +# Global +npm install --global @ui5/cli + +# In your project +npm install --save-dev @ui5/cli +``` + +#### ⚙️ Project Setup + +Configure your project for use with UI5 CLI. +*Also see the [Configuration Documentation](./pages/Configuration)* + +``` +❯ ui5 init +Wrote ui5.yaml: + +specVersion: "4.0 +metadata: + name: my-app +type: application +``` + +#### 🚚 Dependency Management + +UI5 framework dependencies are managed by UI5 CLI. All other dependencies are managed by your favorite node package manager. + +``` +❯ ui5 use SAPUI5@1.117.0 +Updated configuration written to ui5.yaml +This project is now using SAPUI5 version 1.117.0 + +❯ ui5 add sap.ui.core sap.m themelib_sap_fiori_3 +Updated configuration written to ui5.yaml +Added framework libraries sap.ui.core sap.m themelib_sap_fiori_3 as dependencies +``` + +#### 🏄 Development Server + +Start a local development server to work on your project. +*Also see the [Server Documentation](./pages/Server)* + +``` +❯ ui5 serve +Server started +URL: http://localhost:8080 +``` + +#### 🛠 Build for Production + +Build an optimized version of your project. +*Also see the [Builder Documentation](./pages/Builder)* + +``` bash +❯ ui5 build +info graph:helpers:ui5Framework Using OpenUI5 version: 1.117.0 +info ProjectBuilder Preparing build for project my-app +info ProjectBuilder Target directory: ./dist +info ProjectBuilder Cleaning target directory... +info Project 1 of 1: ❯ Building application project my-app... +info my-app › Running task escapeNonAsciiCharacters... +info my-app › Running task replaceCopyright... +info my-app › Running task replaceVersion... +info my-app › Running task minify... +info my-app › Running task generateFlexChangesBundle... +info my-app › Running task generateComponentPreload... +info ProjectBuilder Build succeeded in 296 ms +info ProjectBuilder Executing cleanup tasks... +``` + +### 🧪 Node.js API + +Most UI5 CLI modules provide JavaScript APIs for direct consumption in other Node.js projects. +This allows you to rely on UI5 CLI for UI5-specific build functionality and project handling, while creating your own tools to perfectly match the needs of your project. + +All available APIs are documented in the [UI5 CLI API Reference](https://ui5.github.io/cli/v4/api/index.html). + +#### ESM + + ```js linenums="1 + import {graphFromPackageDependencies} from "@ui5/project/graph"; + + async function buildApp(projectPath, destinationPath) { + const graph = await graphFromPackageDependencies({ + cwd: projectPath + }); + await graph.build({ + destPath: destinationPath, + selfContained: true, + excludedTasks: ["transformBootstrapHtml"], + includedDependencies: ["*"] + }); + } + ``` + +#### CommonJS + + ```js linenums="1 + async function buildApp(projectPath, destinationPath) { + const {graphFromPackageDependencies} = + await import("@ui5/project/graph"); + const graph = await graphFromPackageDependencies({ + cwd: projectPath + }); + await graph.build({ + destPath: destinationPath, + selfContained: true, + excludedTasks: ["transformBootstrapHtml"], + includedDependencies: ["*"] + }); + } + ``` diff --git a/packages/documentation/package.json b/packages/documentation/package.json index 609663d6aa..fb0a2a2685 100644 --- a/packages/documentation/package.json +++ b/packages/documentation/package.json @@ -22,10 +22,10 @@ "npm": ">= 8" }, "scripts": { - "start": "vitepress dev docs --open", - "dev": "vitepress dev docs", - "build": "vitepress build docs", - "preview": "vitepress preview docs --port 8080", + "start": "vitepress dev --open", + "dev": "vitepress dev", + "build": "vitepress build", + "preview": "vitepress preview --port 8080", "serve-docs": "npm run build && npm run preview" }, "dependencies": {

Migrate to v1

Migrate to v1