From c5e6b59d5d9ea3a4583329fd121534f73faacef2 Mon Sep 17 00:00:00 2001 From: Konrad Date: Mon, 26 Aug 2024 15:25:59 +0200 Subject: [PATCH 01/12] [FEATURE] Migrate UI5 Tooling documentation to VitePress --- .github/workflows/deploy-docs.yml | 140 +- .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 | 332 + .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 | 79 +- docs/{pages => }/CodeAnalysis.md | 41 +- docs/{pages => }/Configuration.md | 906 +- docs/ESSupport.md | 551 + docs/{pages => }/FAQ.md | 0 docs/{pages => }/FileSystem.md | 4 +- docs/{pages => }/GettingStarted.md | 39 +- docs/Guidelines.md | 60 - docs/HomePage.md | 131 + docs/{pages => }/OpenUI5.md | 17 +- docs/{pages => }/Overview.md | 7 +- docs/{pages => }/Privacy.md | 0 docs/{pages => }/Project.md | 31 +- docs/README.md | 50 + docs/{pages => }/SAPUI5.md | 36 +- docs/{pages => }/Server.md | 7 +- docs/{pages => }/Troubleshooting.md | 12 +- docs/{pages => }/Workspace.md | 101 +- docs/extensibility/CustomServerMiddleware.md | 255 + docs/extensibility/CustomTasks.md | 454 + .../{pages => }/extensibility/ProjectShims.md | 0 docs/index.md | 163 +- 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 | 127 +- docs/updates/migrate-v4.md | 82 +- eslint.config.js | 2 +- mkdocs.yml | 92 - overrides/partials/footer.html | 58 - package-lock.json | 4586 +++++- package.json | 22 +- postcss.config.js | 7 + resources/UI5_Tooling.graffle | Bin 464438 -> 0 bytes scripts/Dockerfile | 9 - scripts/buildDocs.sh | 30 - scripts/buildImage.sh | 22 - scripts/generateCliDoc.js | 21 +- scripts/hash.js | 18 - scripts/resources/CLI.template.md | 2 +- scripts/serveDocs.sh | 15 - tailwind.config.js | 96 + tsconfig.json | 33 + 122 files changed, 43287 insertions(+), 3003 deletions(-) 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/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 (81%) rename docs/{pages => }/CodeAnalysis.md (95%) rename docs/{pages => }/Configuration.md (64%) create mode 100644 docs/ESSupport.md rename docs/{pages => }/FAQ.md (100%) rename docs/{pages => }/FileSystem.md (96%) rename docs/{pages => }/GettingStarted.md (81%) delete mode 100644 docs/Guidelines.md create mode 100644 docs/HomePage.md rename docs/{pages => }/OpenUI5.md (90%) rename docs/{pages => }/Overview.md (97%) rename docs/{pages => }/Privacy.md (100%) rename docs/{pages => }/Project.md (82%) create mode 100644 docs/README.md rename docs/{pages => }/SAPUI5.md (72%) rename docs/{pages => }/Server.md (93%) rename docs/{pages => }/Troubleshooting.md (86%) 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_Tooling.graffle delete mode 100644 scripts/Dockerfile delete mode 100755 scripts/buildDocs.sh delete mode 100755 scripts/buildImage.sh 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.yml b/.github/workflows/deploy-docs.yml index aa07e5a841..5c58fbee68 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -1,67 +1,85 @@ -name: Build and Deploy Docs +# Sample workflow for building and deploying a VitePress site to GitHub Pages +# +name: Deploy VitePress site to Pages + 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 -jobs: - build-and-deploy: - name: Build and Deploy - runs-on: ubuntu-latest - env: - MIKE_VERSION: v4 - MIKE_ALIAS: stable - DOCKER_IMAGE: ui5-tooling/mkdocs-material - GIT_COMMITTER_NAME: "OpenUI5 Bot" - GIT_COMMITTER_EMAIL: "openui5@sap.com" - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Use Node.js LTS 20.x - uses: actions/setup-node@v4.0.3 - with: - node-version: 20.x + branches: [main] - - name: Install npm dependencies - run: npm ci + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: - - name: Fetch gh-pages branch - run: git fetch origin gh-pages --depth=1 +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: write + pages: write + id-token: write - - name: Set /site ownership to current user - run: | - mkdir site - sudo chown -R $(id -u):$(id -g) ./site +# 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 - - name: Build docs with Mike - run: ./scripts/buildDocs.sh - - - name: Publish docs - run: docker run --rm -v $(pwd):/docs --entrypoint mike --env GIT_COMMITTER_NAME="${GIT_COMMITTER_NAME}" --env GIT_COMMITTER_EMAIL="${GIT_COMMITTER_EMAIL}" $DOCKER_IMAGE set-default stable --push - - - 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/$MIKE_VERSION/api - cp -R ./site/api ./gh-pages/$MIKE_VERSION/ - 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 ${MIKE_VERSION} documentation deployment" - git push +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: 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/$DOC_VERSION + cp -R ./site ./gh-pages/$DOC_VERSION/ + 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..90c89a0180 --- /dev/null +++ b/.vitepress/cache/deps/_metadata.json @@ -0,0 +1,52 @@ +{ + "hash": "b6be9fd8", + "configHash": "f384ce4c", + "lockfileHash": "23ddd169", + "browserHash": "a06b72e2", + "optimized": { + "vue": { + "src": "../../../node_modules/vue/dist/vue.runtime.esm-bundler.js", + "file": "vue.js", + "fileHash": "ceacbf15", + "needsInterop": false + }, + "vitepress > @vue/devtools-api": { + "src": "../../../node_modules/@vue/devtools-api/dist/index.js", + "file": "vitepress___@vue_devtools-api.js", + "fileHash": "eafcbfdc", + "needsInterop": false + }, + "vitepress > @vueuse/core": { + "src": "../../../node_modules/@vueuse/core/index.mjs", + "file": "vitepress___@vueuse_core.js", + "fileHash": "b61e56d9", + "needsInterop": false + }, + "vitepress > @vueuse/integrations/useFocusTrap": { + "src": "../../../node_modules/@vueuse/integrations/useFocusTrap.mjs", + "file": "vitepress___@vueuse_integrations_useFocusTrap.js", + "fileHash": "1482b0ac", + "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": "b7b81973", + "needsInterop": false + }, + "vitepress > minisearch": { + "src": "../../../node_modules/minisearch/dist/es/index.js", + "file": "vitepress___minisearch.js", + "fileHash": "fd23aab4", + "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 6befa5d9c5..b32d5bf930 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-tooling-benchmark/ui5-cli/bin/ui5.cjs --version ``` On Windows: + ```sh set UI5_CLI_NO_LOCAL=X node /my/home/ui5-tooling-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-tooling-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-tooling-benchmark/ui5-cli/bin/ui5.cjs build' \ diff --git a/docs/pages/Builder.md b/docs/Builder.md similarity index 81% rename from docs/pages/Builder.md rename to docs/Builder.md index 2fd6b60e1d..e704121eaa 100644 --- a/docs/pages/Builder.md +++ b/docs/Builder.md @@ -6,7 +6,7 @@ Based on a project's type, the UI5 Builder defines a series of build steps to ex 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. -[**API Reference**](https://sap.github.io/ui5-tooling/v4/api/index.html){: .md-button .sap-icon-initiative } +[**API Reference**](https://sap.github.io/ui5-tooling/v4/api/index.html) ## Tasks Tasks are specific build steps to be executed during build phase. @@ -25,33 +25,33 @@ All available standard tasks are documented [in the API reference](https://sap.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,25 +65,26 @@ 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 Tooling'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" - ![minify Task Activity](../images/UI5_Tooling/Task_Minify.svg){ loading=lazy } - +::: details Minification Activity Diagram +![minify Task Activity](images/UI5_Tooling/Task_Minify.svg){ loading=lazy } +::: ### Generation of Supported Locales @@ -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 dca0f73b39..c1fa31380a 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 64% rename from docs/pages/Configuration.md rename to docs/Configuration.md index 76714c0b93..14890d7b06 100644 --- a/docs/pages/Configuration.md +++ b/docs/Configuration.md @@ -1,84 +1,69 @@ # Configuration A projects UI5 Tooling configuration is typically located in a [YAML](https://yaml.org/) file named `ui5.yaml`, located in the root directory. - -!!! info - This document describes the configuration of UI5 Tooling-based projects and extensions. It represents **[Specification Version 3.0](#specification-versions)**. - +:::tip Info +This document describes the configuration of UI5 Tooling-basedprojectandextensions. It represents **[Specification Version 3](/docs/Configuration#specification-versions)**. +::: ## Validation / IDE support -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://sap.github.io/ui5-tooling/schema/ui5.yaml.json +Starting with [Specification Version 2.0](/docs/Configuration#specification-version-20) the configuration is validated according to a JSON schema. The current version of the schema can be found here: https://sap.github.io/ui5-tooling/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,82 +102,96 @@ 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] + +resources: + configuration: + paths: + webapp: webapp +``` +::: + -### Encoding of `*.properties` files -!!! info - This configuration is available since UI5 CLI [`v1.7.0`](https://github.com/SAP/ui5-cli/releases/tag/v1.7.0) +:::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 +``` + -!!! 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) +> + + +> [!IMPORTANT] Example +>::: code-group +> +>```yaml [UTF-8] +>resources: +> configuration: +> propertiesFileSourceEncoding: UTF-8 +>``` +> +>```yaml [ISO-8859-1] +>resources: +> configuration: +> propertiesFileSourceEncoding: ISO-8859-1 +>``` +> +>::: +> By default UI5 Tooling expects different encodings for `*.properties` i18n files, depending on the project's specification version: Specification Version | Default `propertiesFileSourceEncoding` @@ -206,20 +205,22 @@ UI5 Tooling will read the corresponding files of the project in the given encodi ## 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. +::: + +> [!IMPORTANT] Example +> +>```yaml +>customConfiguration: +> myTool: +> key: value +> myOtherTool: +> otherKey: otherValue +>``` +> Custom configuration that is ignored by UI5 Tooling. This can be used to store UI5 specific configuration for third-party tools. @@ -228,30 +229,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 +263,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 Tooling 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 +351,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 +359,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 +435,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 +500,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 +546,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 +563,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 +593,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 Tooling will serve applications using Port `8080`. When running in HTTP/2 or HTTPS mode, Port `8443` will be used. @@ -616,30 +628,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 +660,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 +706,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://sap.github.io/ui5-tooling/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 +718,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 +774,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 +803,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 96% rename from docs/pages/FileSystem.md rename to docs/FileSystem.md index f24281b8cb..7249362ee8 100644 --- a/docs/pages/FileSystem.md +++ b/docs/FileSystem.md @@ -2,7 +2,7 @@ The [UI5 FS](https://github.com/SAP/ui5-fs) provides a UI5-specific file system abstraction. -[**API Reference**](https://sap.github.io/ui5-tooling/v4/api/){: .md-button .sap-icon-initiative } +[**API Reference**](https://sap.github.io/ui5-tooling/v4/api/) ## Overview @@ -27,6 +27,7 @@ The [File System Adapter](https://sap.github.io/ui5-tooling/v4/api/@ui5_fs_adapt 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()`. @@ -38,6 +39,7 @@ Reader collections allow grouped access to multiple adapters, which might even b They implement the same API for **retrieving** resources as adapters (`byPath` and `byGlob`). Multiple flavors exist: * [ReaderCollection](https://sap.github.io/ui5-tooling/v4/api/@ui5_fs_ReaderCollection.html): The most basic collection. Allows parallel read access to multiple readers (i.e. adapters or collections) + * [ReaderCollectionPrioritized](https://sap.github.io/ui5-tooling/v4/api/@ui5_fs_ReaderCollectionPrioritized.html): Contains a list of readers which are searched in-order. This allows one reader to "overlay" resources of another * [DuplexCollection](https://sap.github.io/ui5-tooling/v4/api/@ui5_fs_DuplexCollection.html): 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](https://sap.github.io/ui5-tooling/v4/api/@ui5_fs_WriterCollection.html): 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. diff --git a/docs/pages/GettingStarted.md b/docs/GettingStarted.md similarity index 81% rename from docs/pages/GettingStarted.md rename to docs/GettingStarted.md index 0f7d90177e..c234b4d719 100644 --- a/docs/pages/GettingStarted.md +++ b/docs/GettingStarted.md @@ -49,21 +49,23 @@ If your project is not set up for use with the UI5 Tooling yet, follow these ste 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 @@ -80,15 +82,15 @@ If your project is not set up for use with the UI5 Tooling yet, follow these ste 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 @@ -96,4 +98,5 @@ If your project is not set up for use with the UI5 Tooling yet, follow these ste ``` **Hooray! You can now use UI5 Tooling in your project!** -{: .sap-icon-ui5-after } + + 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 90% rename from docs/pages/OpenUI5.md rename to docs/OpenUI5.md index 354d6c9a97..c9eaf02e9d 100644 --- a/docs/pages/OpenUI5.md +++ b/docs/OpenUI5.md @@ -6,20 +6,21 @@ Note that projects using the SAPUI5 framework can depend on projects using the O Please also refer to our documentation on the [differences between OpenUI5 and SAPUI5](./FAQ.md#whats-the-difference-between-openui5-and-sapui5). -!!! info - The minimum OpenUI5 version that can be consumed by UI5 Tooling is **1.52.5** +::: tip Info +The minimum OpenUI5 version that can be consumed by UI5 Tooling 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](./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 5f65dbbb22..6e27f786ec 100644 --- a/docs/pages/Overview.md +++ b/docs/Overview.md @@ -9,8 +9,9 @@ UI5 Tooling differentiates between "framework dependencies" and "project depende **Framework dependencies** are generally libraries and themes provided by the SAP frameworks "OpenUI5" and "SAPUI5". UI5 Tooling 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 Tooling 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 82% rename from docs/pages/Project.md rename to docs/Project.md index 8524c98317..4bb985667e 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://sap.github.io/ui5-tooling/stable/pages/Configuration/#available-path-mappings). ^1^ | -| `Flat` | **Unsupported** ^3^ | -| `Namespace` | **Unsupported** ^3^ | +| `Default` | Root project is written with the [configured paths](https://sap.github.io/ui5-tooling/stable/pages/Configuration/#available-path-mappings). ¹ | +| `Flat` | **Unsupported** ³ | +| `Namespace` | **Unsupported** ³ | -^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://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_ProjectBuilder.html){: .md-button .sap-icon-initiative } +[**API Reference**](https://sap.github.io/ui5-tooling/v4/api/@ui5_project_build_ProjectBuilder.html) 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 72% rename from docs/pages/SAPUI5.md rename to docs/SAPUI5.md index 5db362a6ff..e31463a46f 100644 --- a/docs/pages/SAPUI5.md +++ b/docs/SAPUI5.md @@ -1,17 +1,27 @@ # 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 Tooling 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). + +> [!TIP] 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 Tooling 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 Tooling handle them instead by following this guide. -!!! note - For more background information also see the Blog Post ["UI5ers Buzz #49: The UI5 Tooling and SAPUI5 – The Next Step"](https://blogs.sap.com/2020/04/01/ui5ers-buzz-49-the-ui5-tooling-and-sapui5-the-next-step/) +::: info Note +For more background information also see the Blog Post ["UI5ers Buzz #49: The UI5 Tooling and SAPUI5 – The Next Step"](https://blogs.sap.com/2020/04/01/ui5ers-buzz-49-the-ui5-tooling-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. @@ -24,13 +34,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 93% rename from docs/pages/Server.md rename to docs/Server.md index a9d12f1ddb..2a778d0794 100644 --- a/docs/pages/Server.md +++ b/docs/Server.md @@ -2,7 +2,7 @@ The [UI5 Server](https://github.com/SAP/ui5-server) module provides server capabilities for local development of UI5 projects. -[**API Reference**](https://sap.github.io/ui5-tooling/v4/api/module-@ui5_server.html){: .md-button .sap-icon-initiative } +[**API Reference**](https://sap.github.io/ui5-tooling/v4/api/module-@ui5_server.html) ## Standard Middleware @@ -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 86% rename from docs/pages/Troubleshooting.md rename to docs/Troubleshooting.md index 960c8e1041..00871eb866 100644 --- a/docs/pages/Troubleshooting.md +++ b/docs/Troubleshooting.md @@ -50,9 +50,9 @@ 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. - +::: 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 Tooling's Data Directory UI5 Tooling's data directory is by default at `~/.ui5`. It's the place where the framework artifacts are stored. @@ -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 ad53d88676..8c76d8c2f2 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 9a1e258740..38bcf21889 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,133 +1,30 @@ -![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. - -!!! 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**](./pages/GettingStarted.md){: .md-button .md-button--primary .sap-icon-initiative } - -## Main Features - -### 💻 UI5 CLI - -*Also see the [UI5 CLI Documentation](./pages/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](./pages/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](./pages/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](./pages/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). - -=== "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: ["*"] - }); - } - ``` +--- +layout: home + +hero: + name: UI5 + text: Tooling + tagline: An open and modular toolchain to develop state-of-the-art applications based on the UI5 framework. + image: + light: "/icons/ui5/B.svg" + dark: "/icons/ui5/O.svg" + actions: + - theme: brand + text: Documentation + link: /HomePage + + +features: + - icon: 0 + title: Getting Started + details: Effortlessly create beautiful documentation sites with just markdown. + link: /GettingStarted + - icon: 0 + title: Using CLI + details: Use Vue syntax and UI5 Web Components directly in markdown. + link: /CLI + - icon: 0 + title: Config + details: An API enabling a utility-first driven design system. + link: /Configuration +--- diff --git a/docs/pages/ESSupport.md b/docs/pages/ESSupport.md deleted file mode 100644 index 9c17f847a0..0000000000 --- a/docs/pages/ESSupport.md +++ /dev/null @@ -1,580 +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. - -=== "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 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. - -=== "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 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. - -=== "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 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` - -=== "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 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. - -=== "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 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. - -=== "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 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. - -=== "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 d901457050..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://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) { - // [...] - } - }; - ``` - -=== "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://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 - -=== "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://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/pages/extensibility/CustomTasks.md b/docs/pages/extensibility/CustomTasks.md deleted file mode 100644 index 5fd9db3f02..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://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}) { - // [...] - }; - ``` - -=== "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://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 - -!!! 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)* - -=== "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://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 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://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 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://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`. - -=== "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 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()`. - -=== "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://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/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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è(9X|0|tdcr#GZrpuBM5l)x?@nxQ-}&^ldoO=O;z{$3a+86S=oEb=4>u^<_} zaKBkWrmW8#EHYMhVB7#~xh5*M>{dS4yd!il-`ev_mt_BDvYJ?t3o(_%P81Gb$)C2I zN$Lmd16o+6b!@n?JV7-OI{puP?*Wfx+y4PyW+kIUAtS5oh={T(JA3bytW-i)MuZ}y ztdx9-{1E)kGpLG zJ?o$Nu$C4-QZ9-VhADi|Zol-b-|cwk+Zf}0yI*K6nBwK009`50DS8yibBFBHclRH?eB@cFbwEVl%nH`H zaC!xnowd|w^4f=VcgGKV+N)gA9Jk&d-JN+&s&@YkN6tq{8?SJ_X7h*DT28KZG^W2e zk9|UI#MIDG#Wm_pe08aZOh-0fT0ph0?< zC4W)SdEw#bIA5mpeCVV1em)nRB4d5LXoX2q<34Em^7W2u*U2+oVhWApl?jugJ&u)@ zU#`Euo8AA;W$i-;fu&EtYGcwynhV#dSoWOfrf^&PBdk(dNIp z5;;*~`V~|GYSKv5+F#q`h&h=y8q+7s)VmjFW+%Q|kV}`K#C-0)0ma3P*V+8jU-gRm z#wd^D0kMA9#{wyuJ=JCZOIeIs*`^0}KE>80+|gBGH$PidcVU31;9XeZqvFShNE%D( zHE|3zKI3&JKhwbFc9aloYG2Cq=Qs)4`Bl0ODHcx1n=T4J*s6=p!1n!Ak}x~&$9|0a zyh&!tA@5gwp;&F*%Vp9Zce(C}l3Fh~d&=bs3Ddj@TN{L%}ck5gEy9mE2FR4 z6NXQYT9@{^`Wr4`68M#9!8 zAy}j}c}noZRFD`L+R+^ z&dXf#vCPBAa;PxS@@%b>ll17T7cZuC9W|8uuD=J)>Zd0+teu7!mIRZ0?!8kbO^n%f z$R?jln8Z|<^+?{$_>X0b@u_zc0Y3)3*i#wsVZil3P2W!w;gO{$1>vCxz#lDj0&Z44 zKauAszIg zJAe=9CIATs{?N~W;0LH%$o8v_A$``_bK#23^w&3;f|r-1JaS~MIB&n^eB*kMJ?r#{ zP3E9;(k1_d1u(-*MS@Jrw7sh#L+u{#zh1z>5?D4 zhnHyFtlL|MLMv8E!PmDXl(Ci1;kQQNg1nT2a_8`)RDr}JxImZ$1RmtAgvd&8AC#3q zi@2q9GN?*H)!UNoya4?NAkBrBY+4D22VelD|20<6KBQJfPl+BNLnL9%Niq~zbAt#h zJiox&9fv;@LALW8*oVqyHID2)vz?Ft{;CcS#VP4lsN&e}|eB<)V>TYKIK zyG2M3OZ8m6=7gQO27T+j$yx0iB%#CuHxvKYd5(HLo#Q ztZKJLYpSvj3aeW~anCAaJO%mU1C4>#jMbuz@8dF@GR;&}`lFQ|D;%U}?M^+uk8Bbp ztAkI0KnKi9F$o9eJ`QQLKS~Td=}=J6QW6Jo<9kay2qkjT*x~3h6;B8fI=}~k00*4- z0%lY}1On68fwUI5AG)v-J;-2Y3dpts8(`KIGDVf=FJ?yt&I!cRwF`|gu(+4i63nBD z8SlUq0YMoKX*!-Cu=>vud?ILt^`9+OVNe)prTP6tNNpm}fS7Y4v;)aE+QJzuOIU{l zlIGBF6f_e+r^_kp8qm%)KF(>_42sb&dvt16M0r|RvG~hl_S*$_GMo;VMIS1 zDH+EWPCm(SgD44s6f|(?m>iVzM?s&XZwN??I~MJ4f~FRLjesn2w^?)OmKZl;x=6U?9OP0l{~}# z*MU7Gqio>}xTj9F1n7`j?n_&tp>UVXQum&eOFG`%G}W5p7Nk}3<>4g0<=47|V^(qr z>`eOazNFnc^udehBFDaR@Tl2nx-O{k~JY}lG<34L5^?BCLc&(}mano5VeWxf6a;b_tH5#TqxUpjF zHp)uIYAo~EkB3e&s^6G>^J@Bn$5U()myT42;kTyV$;Is%ERbJUak3P+O`r z0}uk#2;eU`Ee3BeLw`Hb0b?GXWNY88rVp5=p7EX{Cck*n|9oY^IF*06m;dY%P$X!C zD?mCVV9FWMU1*U>44R-=p27~D7M zk)ngW$eSP)(!r=$+SwaSV`n0r`XI$%Cc`@?^lJ7A=3%D8AF)>}?4YGucjA7BFx< zL542uMuJctv77Opds+YmYNjUw2nFbgtd0@4zXR&nBfxn8BigGFcLp*S6@Xn1D1`0U z$^lrC^T!oHQy(;|f$Hn^8L=1kar}_~-ftn5g5HbbyFH9f|;}#=B&kzl%4qD_veKWkB?}pAl zrqH&B@#C@lhfBuaO(6`GMmi{LS@3YCWkl6sI*Y)!3_uuHVV&~4 z^_5GEe?ogql_x8)0-mdY&r=f9c-+$RcaGNu2c%wuY|rx^s!go{yCa9!Ip*{tlR%W2DUsZjTMQ@?oaTIc@PHs%Cp2uQ;A7^%&_27{8+AD5Yv8yGhr zp@EqbNI6)5Q}Kb=Cw^-i$kImvgy4?`4HY79f>j}qr~n@a0D~c5CCQ?30j%|H4FOvK zeJKGD03`nss|E0iAS{IS76JkAFbpN(Mu-fMYH%WdpjFYkL4ye~j}R!>;xS-SK=dyA zfX2neKu4r6`Wn!RLN3+~rw~L?14!c`>2@oqiB_7sxPoUvJ$gv6uZz59w1AUL8KwB38nh?(h@Nd9MS6`lY@Ker7$%)o$ixkK*!LtMA(B=j)C`bz$@ z1pkYnS~OottZ#6GV{CdZM%?(TK(ofxjGeQM{!Tg_A{3Ef?|Yp*OE>Mw=3Y8{F+ZZy!*6|GLq_|Ao82qXe2>ayj~A!% zD-?pWop&rMf;=XY?D5C@CVs9T`9lPrRB5@vb-%wu8W-ifmdS6JUV?S-u%_(x^s3uIsh;Q5nnUd9; zyGFt$?f;fnj{hum=w(Pk@S-Q*X6Y~qtJ@LyOZLZbS&*k3Zy>25M!l zG<`W*sVd=_rpwbKPB(W+BG~nUr``w!D5-Lj|sTg41vN?g0&e+edsT0_$(4XX=~Y0TWc!&2QRIvptb0&zom&Yp;Xf$0NpOG zv7HrB0R$tQM`iO`IXb%(i?vK?Y&(L}gx~5X)3YSg1H!=q?MFb%u#sX!K*|7JgTPG& zd?BbdxpSwL;k>B;eql1pP4Gn$a=Tl=%;fV2HYRXTqkAu*dV#eFNFVfDBhGAa5Fjlt z`2nDDu8Q26=8;TfiZ z7Z{*AU`EV<>;XE6AUA~M?eGjxSr!?Y$JYY;1?+^GNR!13Q z96T5lz5x$KgET;DtAO0zwSlZU=zO5mz!L33YiIjZ;|}KQIrfqI1q3BS!75w)>N3+Y|c7oTHmODd|X_U3eGiNh@N zKPSCpM>AjGYx$CBC=cYc=FZx6Tvqa~e|R-GY-N?|Az>PZSN(V`f59bgFq~i`vONfH zAm6^*m>9JW;y0W!mvOsz6Zd~Um0wyFPZ%yz<;j?%JQrJiGr(-@me@T7N*nQdFo{8B zv+Y9i0l}lYmj#qR@7^WG-zm1LUPa+#BT#3H^lJ;fCJ(QI2hXm%>ff3 zUhD%JxAfxvAHnIrlj9vH8xIRt$+TV5D+ zavDGtz{ikOH^9_j?unIOd z<*WDerS`KQnC2wQ?omD^kXqn+>$c*O+*c+3q_qBiO8W4t{ih`rP^$z7@?Dr}Hao2A zl_lgdv}c&VWHYi1Y)t8DR)l|547_ylaFEukH%Zd88|CfoH%&9O?b+2rORbnEANc8Z z_R5D9dKp;d=YAELJX)!Ey>0PW;Xq76I9F5z)1~+KO1*U*SM?JnfPr%^BL z)=>3TVv2OTh{H`!nqTj4D>!WCrMhQwkobLL*_uP!H&iY)V`UGwqk!O4(`B8G!5LyO zgJk#^N8XIa@JQR|wIHtKvOT*W;H4d=Ucb3eV@G?(>`k^%Yva(OAy@CQ;j6A#3&$%5 z{WRKUjr=9#?#bXTOn7?W=<}u4Dvx^D*4(L4xD#qpJh{j_GB=t)ZB|uxSky;1wlkB% zW%Pky^vj5yB1?_>y6$oU4{ja=xAz*n94yk&5DoZW+g7S5#YH z*72=kXqEdDO{v`k*I6q=-ku?RlBdPsOhI_pU#4zQ|A=q+OZ`3y$~)zeEMv3= zl0@npLQ&-=HKsHa$qAJnQ+APNASHny7Zkkju{KpLDlF~TPbB;x`JN={Y$H|^$f(Y@ ze=oq+-WyJ@K>bByVS~_Wd?dGd`jM`F6XQ9tzUouv6Rl~@){-3?(ps$E{^H!oTVfu39qajO zM;WPZff@Bh=DFmqdpxsz?*d#|vWI&{2VddW5fGny@$682uJcuikt!2-Xp8gzjC(+#@Nw7qQ zmr#OS=V8F9GXI6(FhuhCFPeUtQSEqUs+!sx=R&B?AQ2B-Fle2q`cX1mB8aE7&qsMu zewW_CysQ)_YvuM#pZ>DCk-S5fF7ET6dDgT4HdjdE9TV}q;K3K`TCJC6QoVYozmgK< zX;3hFv76U~iyC*O5OCjjU+|!<%(j%&l#tQNaflz#nYc1}Y{mWTyK95_&Xm;d z=5`-uMAuH+5f#WBEGJGGsogPTaj7-;^jm-+Ix&v=fpvZb(NePazKT6)sCksIuTij; zk-xwS&Do-Q4@H{qf2@+k1wcT_;LS?om<+CO8cn5ahm~^RYKLrq69C-PtOA`CM$J>LcQl zw)1IsJ}rlK1X=m#pT_to&&A{nE+JGTPy>z`yYl3q!i$&0zg&} z%F+kv1^oUJoB*03hyh~(EE5njQ-BU79q4HS1VMEV*o4H<0IfiL&IQ0qNJ<9I8hYUM z`A#;_3&8$?Nj=b+3%CV6;3a^L2myyQ^cPJcr{qxp90W}#LMK6-4j~qRKmg8w3-||V z1n6M}sE5iBh7>9;-4zdf9Edw`03kaduFq8xd#rJR!I4QLL&_IH=R=yJra1!*`20R1|SakI0 zH;Kj;`S|lb-~|dj83JjcW8N#Bm;JbWIs-`rE&RgY`zf}O54U^Yi~>AETO&C!P?nwd z3LFuD`UoA}t$2{RCiEuGkvGrQjk-jFUcG4X&lSX_-mBZ1RsZOG_JcbADz?RY*DShx z>onSq2KN}7n-KWz4r5$(KTf*rt*Z8J%zIYpLR8p^^5hm$-^0oyQ2}djJ@%aYY!Omz zKiPFGO86~#hFubQZf^Hcb5YA9IpKANZXz4}149QXJ}KS! zl0VB{m&_jVq~j=uTGrE-^kbH&;Ld_@2Hy9QW(&JiABJ+YeR5biXs4$iNOeu0|DYC) zv~jdw4DTHc=Ft@A>)3tgWQkATxUs6HkZ(JpxlY77$UH+fe6Kh|fMajcTxc3q#MOhK z*~(~cW+8hyO;xXcdL6Sgu2TAGwTefTS(nIj!)P3Ih_2T+X5LY5&%p88`GRcfc4A5N zXsFlhRcVUsYmRkM1B;{K(TTz%0s8OsLio<#pwOcZdNi7>sT%7kQVZO>_*55SJnb&5}evghrffyf$9Cy#sI{tMmB$y-`)uf1oBL*QJhjC| zqjj_JKRGTj#!v{|1zllATXGy6Y-v+cc6T%QoQW={6P6SuE_|z}C-1-$K6HB4HOkL$ z$=~{M)+zF|`eXT*3%{XMFTV^wpfV}P!Tp*|$dlmChgDZ~iiLj36KCaY@8V;z?V=0Z z7slG~P+2MA)?-@fo}336IWL=?TpEuEoGD~!1)4nLTU4ayk<{*2E^PN#G%nwo^~nwtIAJLjUKwoIc0B2X;A=)g z2{Xxu_fHV8cZ#SXOlX{JR>@7$YB%Mn2DJsl&<+MUG7xFPNIVI?*2WWk8A>~vlCLCP z#Zyg#+GW?W+>&?U-PzOxRV)mTK28!HXp?{0F_5B}VJ$*^U;V<d>~3G zZalfBN&H4TfCo&er05cvL4G(Un)qWaPhHyhwWz{eW=+Z_rL3v>6WJQVrb@x`LN1D% z{?ENBC4?1RLZTEz7KZrdp9sxJ)(@>cFOsp!{6ua0tY$bDr+7@Sz@5G$-gl?zQ+AqX zr*ii?J+DhS<9Osk9=X zNg0qPp%k}a+j)CHd1PnL$>_te2dxZAh6@W;l240^x8GgMThU}rnbeHBSgXt0d-xRh zWk2DV$dpM-%IWO8##8NP!#A$C*sd$Bn zi1l6{pS(_)_`YX~^sR#p6H8ub!=3ZP_6rl8dFMY%K4F>?c*mdbMTV$LWV|b}Yv0lK(>xa!sxeVV>Q%4=jI>^(pG#oW?xxO|wfHNh)pe$Vayw%}yy8I(0>J*iW?f8H2D#?>-vEor)tBPD58@eN8 zJdy2cTOL=8dfL)Hf32_33xHvHoalTwxJJM0<|eKFr0db+Zj0gOA+$V9-XP>gI~F@8 z7G!#+*@4F8)AXu6-sh#^OM7>ui4J#FPAu+^vWeHxdVcqGG`ZBInO9C5sl>ljBfxHHIgOPPG zZU>G4Zeg%9hFNXnP$0`lmemuiheQc{5O)kW;$s1Ueq;skthA%!^nly|Pcw+Z@3aAF ziqO}K;YCQK4iFw3OXMUVx))kdRc-r&Bmquy8ah{yXc~0FV7O8ZCqlE}wcFu3^at#1 zViFC!H#%Z~gaM}u+D{C_cv~C54-!KdRUE>d03Cw<7Btxcj|MOv_zkRs4+_TP?m`xX z_Se86xDpq(*WuY1d3gNcr#GgY_15%V%IU!S9A zgn%#Vdd;6S2=L$g9;Y{R8?Nv6y^gIoS8S>k7A>osn%Q_qLA9D;DJSvg|YU>CukQ4ZP@xRuF-Ik-|j?)#((}tuj^Lf!dcgo2O46SLKOQKX%`BG z_C0uQcu+P%_gSs^?FD*Qx8avPzJ#7qp9So+!p2pTsH|Si*-|{{3L7TFID4@!E5_D8 zw5AJNUZqMqZDfD^bnV<8hR_f58p4y=3>$DNDEJos^&j%nt8*xmTf_4gXwvk~Q{CLW z_)cv-t**U8_Tio1aEbjDvBLQK4+VqAtL*)*Wze9;fYr{fto3>9!W|LI9czrMF(L(6 zO_n<9i#bk3We(+US*LDP1*^CctnQF%$>fvc0d)+SGV4+qf(xd7%{v4JMNwMg54k=q z8W;wNGY;PZHB=<3vmUb3<1n@(3;8rcs-Z-%AfN!rJ}|K`o3>Wr0{0>)PuLbi!b1{! z5U>DFVQ3*0AaV(j0#r4?|Bw@+(}SQvgbv^X0Y{fPfGh!+1puxL3@{`9Xn$Oc>lU%m zfQ0v610g3pRd@@~cWVp7?!e6Zp7#SY6A>q_18^h*e=gep3k^KrIfiB!_CbIwZK>b{ z&_n_s#HEYz?gFa@I(HFk>kt79+{2t4B=Q8UumZw!AnJo48F0+P>>Oq;RuDS^h8jc* zWEYTC2ettzhSnDd3ZXG%%jiN9wGKhxfR7Zp2Tx=qqElzkZ~?~QkJk=II@&-(cKlt; z*oqB_VdUc9oDIlk!kw`!ADgwVm!29`H){AeQ?^m`J;q9#D1WaR+s4djDY;e>rMzo>xJlJ%_p?)HW2~^jv7l6s23E%imDX zg%zIW2dAz0Efz0f&ZN8`%DvgSIri}z3bi2grCuaul&<%E-@3;K+7ttAsrL2iHQlw? z;B}n#sRow6*HtA(f_NS6(MO@aEhm+Q%MS(0*=dZTcXrz6XX2~MnGK~>YCSbwt zub2-pHXJi_k55;=!f#sPrTDSe?Vx{cimlc-4!c|Dj&bYQ_(9Xh*)9P-LB6Gvpq7hj zEVV>y+&bppS-qQWV-#l+In@QZZpKaFx)$e5E3W;VeTFhz>LL=0lU7OWe;4%q!5WSA z>3r5{(wu_CKIimI->B9*@o_w1Ie0>h;+lq|z>A^Raj$NYF5B7|=YQ4TWp`CjOQ?>nYprg6bs>Ax6UEJa;)gy1IKqrp za)*A@WuXZfK-}#-;Wud;WOE2}3y%bWHQ+Ntcpol2D-6vc*;cIxpMo?G3AO>4D}Z3Q z(?$p!1L9=}q=8Gq6M*lqcPjXw2d+T}*8mvMwyk7KbQ}#G zfP>@^#M0mwh{iB72LfzBvmgf{tPLm%s5k)cdI>HJ@fA({wnJpHaO*D6l(Y>^ISVuL(^Wu zm<)@Q8=EV1uRInq+E}piYC|ORUi#niCP?Q-&0|L+ZqHx7TrecinKFRDgrfN;dKDNB zkWGB2q|BJ%0gWb@QTJVXkrUj+h-KuKphCM0NP!I}lrUuFcUi>5mp4=+MSQvC#~QG&~Y;qwnˬO>6_PT8h${?nqeT;@I7;Ip!VP@b zFf|g~(3V(2VMKrc5G{oN03im_imZk_#uktvcr&oS3iyQ>@dXq|49#6&X(gKSKuxTih{$&!vM(E_pLzl#{!;)p74#L47h98C1lX*rZc0 z3EiEsZpTZ!uV=^Q9K#e@)bJ_hxdH2nh_Yp;Lz6|-ejZDeWx{0}?41_C3!v-De!i%{ zhu#;)gRr5;0s{8dADCJK(Gikow0!~;St5|e-5{%YYbSJs2-&`6q`+Y;yLAXiHUTLo z->n)bLBP2H#1qH~CiyM=#y0swqz(!7fD3`)eiKL_q8lR-0YTd`7JFdi1~@lh0!b3k zS)3rv86F7^K#MF8541eNdqLD2M2&49AQQ+Qn6M9w0D(On5dQ{{Qy_d$$}Ety6vP$5 zyiL@=b15JM`y---Xg%=T(N+pP3MQwZonmOe1d@V+JWG(}hJJ8JQp(To95|#iGMJ5{*k)>9njHjvwzpG@!5uN%`xV}COOTHG-1>dAC^i*Y?UF& z#d%OK7}HQb_=@6cW9x97QlKsSe%Cuq%Ea|5kAD9_an!*3Qa`6KX-II74a@2>JXjWg>hyB z>^t=HYeBL*w#0WkOve5BFzb&u_RrFH1%jPiP*_q?DrYTiV3~MAP5hn(Hq}DTuIv0> zZDym-NS*80FA4^V4s3p2oLGn>K2sHg-+o=J!IsO0gZDmf4wq;*&1Qv21$&Dpr zWrWr1$vdyVPq8_(rYIT}=yAJ=W2__CrR9fS`!|+Mwt3@_R|bRtOiGK?03%urBXr+? z40`+n{RTlA;fveEi$?;w+29AEdOw`}XyHP18_+#y@j8vpMu3zOky#+k!0iQ`@u1HD z)MOxu5@t{!Neh5ah88@B0t#gm8O>-@3nC19?bcuLE6}$9{AWP8TA|Y3`XE`5h;S)k z`6CBF5rXCS;JnCzXpw;5F%EV_3PTG#(K~?RHpH2~9fS*haXXNe8l#EDHbVpIIpixw z*#R{BO^W$XMgGsE;b+qQ`y^6zC`cwzD_+u>dQe?bM#NJIhrR7Ou*-@X-tQ$O26owf zv|W~pa}OAD4oCOCA>1|Gi{n>n`z6?THZ7GYp>r&c+}-Cl0W%(?{Hh-1w9PV8O~s6Z4C-!Ov0iKzzMh54?zDP+u?DD zY+(cuEn3LV&>jQ>77;E)X>O^gWN@;Z7N#Du%<YC{E6ueBbY^U;>sO!El$*Yv5`=Yz(+E>?zt=~^)&SY|`bk^hgQq+>~F(N>{ zoU8OMcuy=z%l!4z&g#AsW5DkzHT6lK{5N0KzkZ^>gQ+heL4@9wEs?@3ZRs22)naTW zunD?I(Ex)Hsqaz+JTpK*pa=qW37s6s2g4G9gw^~cL@+}Txzd(kA>y?q8yM-VLC7cI zdB6L?&`V(DA)0Bs6d{%SKS>pkTNY5ujYu-QHp246z?1ty9ns`+OMIc0g13U`Pbe>N z=O3bixI)ol^lLU@gx>Xs21aD}H~#$7z2Q3<|MA>^XK8w!`NQs+%Vq3iRTCx*x=0Wxt_by0DRG2>ZCJd=Umn)h!Hlc6xAIjGD!?rS|e!*OTOA`qNY-dH^1z`KA zg5&Eai3G*w790tW7`Je~)&ys{VO3)Div}i+L#`nZkKt$yb}vuT0;4>2%7>#O(LSK0*5MKx8zCDgsa-ie3VJQqAKJ(V!!J%9*&TVjLW)K2Mb@O?=~1G8cK&NUjams?UnTc=@bdh0 zc)K$QtG~o5)P{MDI0P6OPrM`*o1oQiniiLBl$*~$ic@&_o>N~dC6rfV z#XlK}Sqe#n2ipwyoIN1w42;#jR?0Waa)bTJ5&2&=dmNp(8)$i{r9cm3k+I-0{VbH6 zvJ!3~`G4&{ZsycfY#o13^nZ6r+tsi*CB)GGo!e!_h6<05+r=h?x|i^W|LtgFA@^%z zp;$FTi98U?1pl<$j(O&;nqe8Y_hMJ472x@)TI?oHZr)ELAIBl|P)til7Q3odX+Lm# zs6R?y_lPO=xRhFo#Qfax88<`Y8Xv`yr`4(EB#{ryF zC7H~e2X^n;wpLKGEw$uoV2bjUk%J2HgZ2E;64jwLLIHj(y$%P6mBArbZ_9yIvN~MU z@!-58q~Ty2IGx~GaDn=5r?c$_`|JmseY`+7R?zdZ>V?FC-FRer9LR0``iI1Ea5Dey zuiknn^Yz%(6QOwEk?kf)R@zT@E{+59%<`C}#I(TE=8#ctJ|-LF$&@;Q#VmCW{SFdw z!)Q=o!@n~^_FG`<7y(7<_A3STLy`Qv^yl5oR6^J3Ro@yn*e{aX957)EswTH2?VkKY z2>$`*f0HHb@W(sPe^t9$;Z~#TFmNZOq=pFl0u4DHT5pnJC8Si5pX#J8Ry5XVxyFz> z&7%>*8T4zK)7kt~*dwbUz`h4{!uiqlgo#PFRGecw%}O2^d-30sI-#z7&$`=Ql%(6@ z?of}wo9eL#b#LB(5Khy(CitG%iIV=ELl)jWg^Wvr>R>*mrB(aYE?e0_W6;1(9mPU{ zBF00Ur@y}JU;JGF(#^?<3yBEAj;LTu$Exq{HcT`HngD;-bvx+C$XZ?`;uidp32rkt zei$DAPHyS~`FWo|Ez-a5I{I1k|F8F>;8P>RkVpKVf1rgW)$zqAwm^?+kyO$Ts=~Hw zsJQgT7s_%xCs2g<4T?eAn%&*w{!A!E$Dj+wZ5u7`R$5D@?P93scwgsF>EP{4f9L%g z2+!iG!>VRnYl+r*?mAp{vb~wMaaHMeP^|Nq;K1K?usNU;-*L&5a4h2D{&rCCuhaqd z&y7WY>DIu&F&Myq+KG%+A)!sbUHE=7TmG&a@QHrtCiD*^w^nG&UO4&qve|Cwv1}oh zg(JCf1cj48Fx-;w=MPQUy!|j{OUFRBD3w#X!K%k$Cqg|ZU$fW{t?E#bH!RiC=OMld z=KGtk*QB|{F~d1+(>c&e?$11)&gSw_DiOJ{`?Zha_`#h?O z%fal5cj%U0#E)}aS@_GY=+R$4+5Y%OVsV+5qjKy~JegHeTJ8EN#P zclJnGp=|yRiu$|mB{!+9pHeE9(`BJ`9tI)X``=KVwDVY524RCuxVk+yr5)G$^c?m& zoCT=hv>E1jxbFC1(@y=#HS^Mbn+whZQg6PYW`n2Jr#e{muCYy&*~COxaZW$hYIYFr zUcKMfQFi8+Sl`foJkmzSA8Smp&0?ISa#@4-rK<1rKnzuuq7RibWvz3%&c%J{g>OGz zDhajU99qPV7A&2zX0TGd!&mV>yk?SJmHu80bxXn3IQvU+Z4-P^PpE88COmxBlFfOr zsV(O8jydnI!O22hGI~#5w7Jwt4PQG$ry(S#K5Dn$fFbG_>E}}&n_uRtSE*V$=Ix)V z@}ZbM<|J&mZA?+BzHD7Kv$sE;Ov06Te+Kr?H)y2Q`=|!7Q?Du zBwrXpc|KXjPntPurW}3x$y!vVgR!0AMU_IrsN$q>Mp3kun!(hm-U2q2Yf*eGS?5mw zO&G1)_xAGme?-l}d?9!Dxa_gOOyThN;!xqg@c;jw>i_du$d{Ehq_;C`+VT%fYIA`P zSx}`R5BokDuY0CAff;z$=+-R1p%SQ)X8G*Ng03ZSgRa|zI&+_vwFX$ep<=r$KUI17 zpj-p5(qeyh`b?CdYY?U{i533*d6>sj;SH%36pb6dlyrh6lfzjtZP+;??XV|}!I>et z+d2;?TeJPxB+Teu`6Or@GhHs7h#6?dn(7#fCBCknY291V@hs)aJt^vg?HpE5XK`|u z;z-T_y*0eaFcq;%eEYIpa(!L{^Q*vsLzg40X~8VPVl-yXir!Cca;%=Q=I2$ENqMQf zYd@QCLQ+_4fedT19U3@JOF?^0KRc|(p-2OlLsdLf6+XXT4?6IE5wwkw$kOQ!x10Zy zcF<3H;`iRi@7PfP<7185@1Eg&`I_kIWsdACsou=Nxv4Bc6^d1cL>j^o&ls@Yr}yGK z2eTV5t&(&lp{~;IpSzSaB)I>q;gcR5-xAvwi^}U#^Er-zq%55$T9nDq-JF&1FWeZM z5vX2_0S&(>{XQ{YGB`8qks{j>w=;Ds7jrAzfWsU{AD9^C6@TZRby(*DqqAt(UXior zLGGUyvI&;EtEH`)q(~wfQ!0cH49TTg^Xlh$H6N4gvt5cwp6j@4(v?qAcCBthaejR& zCMwInQ{mM_`rNXFMeP?Zi`COTsZm#`J_NrIUEN&BGVtLL7BVC_)!Ut3`0PlEQGBsr zRn%t{Ghv!ds38!0axh3*bN3^t{E*@>z>YD#x(@O+&unD$-~Og?+@{h@oc_7{y4 zjGJ0>Up5Cy7kAJ&aj2!qOHDty>1D||Did##?RUuE|LM(MN2wNBHrXcAXSq-1rq0HQ z@K$rVPt3B%%w@I6rEx~C=M&Y7_R?)!9x=#1xNkvI7gL9iw>JryzEw;<- zub9sNwQ;;fxIjnnt;o^N@!!t2Q9JJV=-qBtrE_i33EhsOW1Z=HMlYzRr`uL!uQCd# zch#4lF_EIClx`Z?Jbt{`cP0d@G-TL)P~pJ3bu!n@Q%yowYCAS31=F&RL_gun9@|Jh zTz0aO==r34LV-<>)-YA)@rhOHFm8(IflA&;T<^PABxG!Hi`w{9=`{^H$}BSye3e7> zqn>c~OdSZ%>InmVeGyMl{LxdOHWh>000Q4aMLVyixEC)eJzKe}#sOO4CjMsxx7qh2c z((YL^_b#ZoEFU1Sw?|^}R=XX;O*-x+x`qic@~4I$mpbQfad4PA?LSL&&Eu&@iD=KK zPtO;cSmP%IbOut0eC}Pkccx)))zNF91cgP@^78@7f@Y8WiyRTd(iBfdvleEqb?>4{cX*1aZGiz11`a~ZU)6xf36Z&C7dpEjkU1vbXOGqBO> z)kv~Sv{HKC6Sl8PMx~nZu9V{AIFdx`rl%y?%NZ{nV;mZ)X&>&|81~vD5IcKxLAY|S z7_GMi%6Ui7H`MTzXW;R9ta4iXy%eBqy0%v;(|yk!E-2ZVr-C0WkMuZX`ucNaTq35d z9GIu=cMk>rfwIFlJhI*vbqeR<_&rz#4(WX}1~s^Q-kr{UR~zyY7X09`2i0o&UO$q& ze3fqg{MSp7#$*McVe_eUNsNZZRojZGqca6qtR3;+oeK*cj2$+t`-aMjN*W4h zXe6IL-!uVdZ0E3%BDkinuwHgATKAbBuT0eEX*aBQ6Fj#H%FSp#60LmQu;g<-+pAtq z{OZ7$kE@y$zQy^0!4GQET%GM4zoC4&T67=PUQ0@6e*7f?Ym_m?4A?I|NFGFJXN!m15DLdK} zoZwHM?l*@L^6|`X1tq833z>fr87xx2cCq9* zJL83l*i_HZ_}R@T$B)D_I56TlpWM$LS^Ak{TDr(*ubb|DU5?|DSLJvf(-sR|B05L1Y2*at8ywdVtnl@RftX0o-GWtr|u8f+#0F}1*cKTj0H$}h_H8Ip+*==`54%olWkR(@6 z&c5OpuDM_3V$3mN3VYEr`fc%LVGe{Tsf-L|rU7osV`}yBo4d5W_RcW1*iR74=c;bL zW?az-ASbRnS)V>{F*H>WEYX%AxPLHs?VLObIq~!S^a`ELXHx8@#=`TD=~atGd1C_f zs~Bn@?>(J5j(ScWnkT=`GM*A9VJ&c#{iN3P%)OmuM^z`?tXxJzA4T^}RPDX#Y?A5a zFY%AgLp)x8O6MsY+9N)0Nx0%)@o969;qGs!=EFzVX1<|nJ-M8e%&T0aPX*`I09TcN zOJT8ZYbU$4{Vqc3y<~J{J5Wk^M2ywFmjdmaZH-Yua-{;Lo1fMgo6V2VZdMht;Jn`C z`G$I>sQ~(Ef;K{rHRC4-Xj>f~Fy2?qm-D-0bNWp+&Kw`sXyrC_*OfS7K-0=+8Dn$o zHRrHH?;FY>NxL9VU77-eCNDofWxtEIbHo(Hk_FW7Bh!}$jrGKs62Pmrc8~V%HB+~TZDO(hN%;Jk@X5mqK@|0jI7zz-DVzCwZ1CX?S1NyHh;UXXKpmU z=u2Vd8{DhZX~GY`p>nhwDyY6B&UcT!9HiH`uC!~(2+sYC*Ac&S1ly@jzK&3oYM%a1 z@>25`HnXsVxyftfZ)JwUSbTV#Dz(w>GPA? z-3b~7D3bnyDDk_C`s7oRXVEyio{Ju|02y3Q}TU7>AC^VHWw@|sALzm zMp=!2HKUa1m3^Ztmu7QhpV&Js_p>fkzJ6pKk*BYEKh=NGXW4sGV9xi>;PaK{1-cEZ zA>{!9l7r;N&E8(@QBG=``(5mx$kgb>myWBy^st^hcx@x?^RoHZ%x7s_V^WJ*TyLhb zXItNy5c0J~=cQbAa}T>exFI4xy7|fW8eMsR*Ocms(=oHtyuk+pgsgzi5w?_%nTR%+H;3NGsPXlkchn$z@d z9ieG*TC+)6-w+40uHZQdgEYkfk$1qX5moYd|H6O-oE)n(qh4r_zO9HgbBU;J z^h^een6Y;ySy~BQFFH1T_mbpVP7nz&gP-S4m3y;nU~w z#3%9OMk0*JNMC-y8pt{s_D1sVCx^4=o={^=S|_yHH$A~R^}+e&6;TkK>&jlGV7uSx z!g#MpXiuw9{y?ln(Y1h`wX>O0b{f{*DGGca8}`+usi-r*Jxr#4_dk3^|J}pnkg8BH zrEy|1uKn+gR&hu3%g(e7x2mz4m*~!@wy9W~98uuaxL4ZLG#Gk>e~DQtA=^V)AI~DA zU0=b{i2KXhkz>y&B4eXQP>U+o$ter|(XX|y(G?H9c_@tE+T;EDL7&HU+ZBz%v+0ex zPb`crst5fE*oZy152F8j_4lvt;GgV_E#Ex=Ir1lQPF8EWclqQ-ba8y6>*)N_;t0#F zowLWZIOCno?7$q6hbsakny2lxPL)eLPqi1vL z{&GFsX5UaT7q3V)FJ%Xnrg$fDg$qr5oH~=Wp@6TI=(8w$Cvd!)d_aiFUqeDewS8}h z-lwB8jOl_YU!^{uU_Sj`cKW?sp56UR2^+1Npam_KYJy~Jul*YDeH6>{?2I*r>P;t) zk29OcV;3C^rdC&WuSrHgW7~x1_3^G6>&wK1O0|jh^v>&(l~0(KLLNP#n7`emJFz4{ z(LO|vbp#Adw0c8A#D>An(X<}1ooSFrr{1L zqPKm>^CJH?`{r*?4w#_p7W9azPB^@{}Kibs(LXG}qzZMke z6R+vSHWUO8tA4HTV{;dI){YfReVHSG+M;p#N_qlQ)WQr-wT2Lral9e_@EyKc!F6Ha zJFOEOY{K4X$hzp7l`FcscQbY~{gb602mgsy5K#<4M-<5>f0=ys;{~D>8Pp)yY+KV< z{(i#TUp3IR#lnAee_O%>46t9vPXA&g^T$j1^GpB#79O_Ih@=6luG0gxq%-UCEov_J zdp%h_WnhkP&fxo9+T(-fk-GyLpP3Tx0gYBga}1M!zz7UB;kqLZQ2AD-M@J~Y%gAmeX(?Zu-Dp6nVS&Br}= z2{|;;O;d5<+X!hT`kny^X_qS0eRr<2U={p7*2~AD6rtAY51eqbX_fHllJPK{_@JhhwT2jof#^ZiLJRMMrBeO3OpPM zJ?P)E$K^$c<5JTSp@}uQl`#LJE`NDYr$(`o%-y3nG#1!dKYqGZ@3O0Ed4AC3PPN3G zd~Q8_yEab?7pyRY=)oqucb4xiInWdfoVi=F!YJCl7R9w+Fo)QQe@gA0om*LN^OqAV z!>h#AeO;-bU_c``x3DcsW1ybg|M>LDSQXc(CunEy9}OkUL)Zq~zwig6)DCEd7g=RF z+K~~|pqN*}u8b+Qf1>SL(4{;V<<94M?+FMs&j+vW>iLFxzwix3Wn`hY zzc{?uzqWOhvTCkYfGD`$^GMUS88~;Pvbbr~!#Ce%2d4LnUD|<9f2e=O zA>j%~3#1k5cCHr1r`!9gxJaan1M4ak3b0Ht63dn~`q<0_>uH%U^*r(Oee*OESXOC0 zlTmJ8ZJs>!)tD;OGygJmZg=P($j5&>`|JC=+`6YjzkHYK)){N;{OaZ9Uiij$neK9V z2#INDenZVvFm8HX^H|#OsEwo|S0PeWEDe>gakJs@i)TuIxru7VD?@Cy$FxsU8q!4` z(mWTC>EMs)mvp({lbuTYFk-T#qQE-As+jxXjm|?KuY79DLTPQe0g}=t!*$fyIp+s- z%54lo?#dlT^A}N&^1f_V1=Q4 zz6aOr;?CGLpW4A?homb<)m`P@$+aJ~v?Hq*nl`dsm`}#@mqqEky>Hmc5YgZ!*)4F! zZwFoAA-=Q_IqJ`ucVFF;?5CvI2dIVpS%7+KasdVGb<* zyVo4=KEfNo5URyHA$wHp{-DHrl_TdQ!J7r^y)~y_Mzgkw~XYHHN$8 zlyZGN`Tf)#G!mA2FFp)E4cC3JB+GPIf@5s7=@f}eq)z>aoTJg_f;|Hk8olw!J?;k5 zW7fpJ`Pa3FSPCVA8f&DB0*m)E9&8f7(XCQA<`7TS%6~rKLqI8Gu~T+}G5>Be>F%A4 zZX4`|HN~pBP8x5-8IMFMQ>49Mv^=rFHr)HrpCPtFUS@?FgfacNYzo0NwdQN*@(;Pa zxaKK1_4=cK-?9VMK3ASYWjDpA1x3du6bA#l4Q5~6bRzIL8hv^%KkpOcy0O>^RT<;Q zMTuQ+hyEY#-a4!eZ`&3P&_Z!3?nMg}TCBL0;suIBuwq4mTkrra?(XgqDDG0+-QC?? z)0^LZ=be4tzGt6z?mh3_`+fJndjG2Il1@KYD3nSzMs*6-+5G9wQ11N~=WeIk^IUyA2HZ94zzU=aW=>hW zoe)poY`a*iSs3;`$(Re_iAGsSU>;IyYKbF+JI>L0DnY zrPB*w6)1Zi>?P*AF7%>;_obcnA8u`)Q9+-f$XyFoB;Xs3I$@gR;nbz&>J+(6vWW6u z-A-=gW-ENtxi-z-$4}D35{!?nrmNRRh0ohmhgqo}D2}YRo{dxjQFg9+rEpwc__oVnP=8j>- zylqCB=KDj`FjF0Au&`lRsy1IzvjCkQh3>bdEJ-wvmgWn)nMU;S4F8JF#~^qoJ-Dbz zhW^=1Uc`;HO=M`t5fk^iVLO;_hL+TSkj-J(%0u7}AkuI5*`8{o=!u8nH0?d(0|`Gk zV5@DW%yGJ2734W@-++RFqS#Z{%>4&I+f#A{7eI*P=Rn!48@=+Y)Z-Gavpy-lTBshTTas3V(OB7;-2PpBu7gSE*XaG@|AZZUvL75nMYJ49JCG^24Yty z;jJuPfk{}eDC6cq>hY{O+Vji$WGn_XVlOc7C`6!m@wJ~NbahkHOV$nt$d@?TruO11IFjn~$7{Q5O7{t4UW?f+ieGpn9iAH^CgpT8n;4r@H07 zIsPp23ffks!eaxu;IG2^yYd5L$^_+Xs^4YSQcB>wy=5r@$%A3ai2{=2{$Ym)r|Yp< zgC@L&v>mc=uNy_0RKBt#Zq|XxxqV^UKY-FnSTy9Q+5=8=(JFYRgJT+q*W=6hk)5OZ z&-8>1sPd`Igw^*-Ck-%~edc*}#=g4KFpz>)p)T3orkdrKXal)j>g81-gn09eT*ajq zXu|wG;>9=Ep4#Id0FjoirjB-gLPcI!aVzwh9xWAuu{s?4olV zT^&hTNIQmxRExosT*i~5lF|YXzEfNOc6sjL$;Kuk#O2Zh@5ubB8^V(WENQf?Ls3qULhs#L?C$#A>_15AvDGM zIb%yrdV%M?OHAi1|4PN{+#n40b|e9e%lfmICQst^3CFdyi+zDoZPqSy(IR;!n9Ct? z_e7&toHeUx%jSfC0OokPXNX82$Ygh?+%&|@xe}DksS8kO*JjtQe0Pb?+vLvoX6-J0$ABfk->@RmYYznpzi7poe3pfJ<_eTXxNlg`e6Yzxb7cVIp1nKa zj-ORn?b*MH*?YB08rG zL0HNtM)mIj$4E%~qxlAjrz3$CZne>qG%%AHw zeHFBB?-C``BSq~XE)U0b>1r#&Q?0a|8nogJFR90pzj{-X9p{}yKje~NBlIiAiB5WU z8GUN<7s1R&eHrZuEa==dS1QtN?HV?RF&bPYx+t=3+V$MWLmVVp{^V4^jKmRk%M;-3 zks%=u*^R5qE;tYTQQpXPbGD&6nor|s@%B9}1pTS#_wvUFG$3&K%k&w=eBILRuhK5t z6d95$xYz+$^F6hOTy;MV{&d&;5(N+vtHBEEwCzdccZB{B7 zWgYFDO1A$JL2eRsdWmJ0c0Ua#KfY90DqDdh?Ov%N?0FG{9C_hJUko6yE(TaSy%VFx zp3HOL7cMB>bKY@*=7AVHsW?8)IV|y5sOT)da0Ihyx(urPP(o69v$h=cdJwJu3QoS5 z$;$|;hFY5)T?_H4Z3%q+h1DQ@*O$dON70lz8pL+wgsE}NZ^4WAb_H$o{nb;6RW+F> zPfsnb)NplfUvRI0^oz|)#5iGHOTIc|jmk5jt(gt&ro>}8dz`Wj;pR}KbHt7BGc(Xw=H^iR95UG8_?Ba@LGuu9ywbN0!cPtx2av)F0~##~*vHq5C+?9fgbLwGc(! zLuBo(KfVH5FH2uV+%sy3T#x7if;8U~-u)%Gu*x)s6Cj(msjvHHQ8!^O}6 z<}UKYfeYsd;2zhTjDXpC*w*SmaZU~N*@D^YGTKw5pFBMz|6_R}Yql&6y__|z5c3~^ z?@l&u2aaAoGNZzEi0tz%M=|VU+UgD z%9(>rg6Kx06(O-IN=mozhN*rLYu!ooBE-lXMqM>QTb*`7ts}wGr=>w%0Y7cCHOdWt z0MThEk2!FuOfpj)8z_z|S{+uyuWPDZIc}iEHXkCg6o#x-65poQdKZI1B+8|9j8;&9 zTJKez*-$=@rFWp%kb@F#nXIZ^BA4O_X`;mlb$b?0DuI2d3x;4Wlc;{D#|jwx0h3^4 z)BVkoaC-g9vbz6$A4gX(*%tK)$|OAYPH55JnTjOJ%#o;O$akbEI?o)ym(m=*d1yb` zknNu@h%<``M$6_kSA=H12v=NJz9W3KdA6iX1Gs1+;@w({6p2%f`V4-?Z8J-m1HT?*^~C=H;G7!zePW=yms047C5_dF)%}uNj@F-bX!^?#@t@Xv|MtRv zQ1rEH!xP!;7=$&}UF2*?J-KMXAwV6bmhsfA7jebpfxZ2Zrkn8OvIu{g8>SkMLE5n# zyG0!P;|^^B@|vUIEGO*T<|#Z`@wpPt{PvIO{z*l;FG?P@Z46lySCQI;%!Gdwo9c6d4gC_g6_kHW6*auyDCIXRS7jx?CYNNW@$HsgkyePu4hULnd41HX z6|8Pwe;HZ;o~00xZ4mk#Rg}A*?3IEJ`QAgw_p2-59og7cjLxW!Y4YmVDXxUbX4`0u zF`PNxhw*0D`1Y%~^j$O2Z(<}UKjf6Bdu-G3P~^_7V2MjCh(xRAeb1-`cVUn!K~RAO z?a#zQhpT(VJqdn={on8{I`dm4clP?(T5NNkzGeFOi1oJvhWs0)Ltn+c8i&q8Zbia_ z#*nb_-ozN;CkXwsg<(oa#uA?ZH+J*Xnde^p*$~F@a6Nm)75d~=xBX3>>F4Tmti&Pl z_qbk+)({#@)$QSz^sTG2*JDZ%@9y;$6FhK9+Gd?7fTC_`4cA5)TOz;|IbV5!_3fcO zv_XEZq!WaDsr_NR=Oz5F38#$Cdd=r~p*-?7<~Bm>ip}HL31`=(HfXvB@otJwa#v#Z z(R{2t$@mrf5gj2~ShuDs*)G0=Ky||H31bqoT;gv+p4|>J>cFn__W`Ogav!4_x_;~6 zxKPJDsDw8K11+VBbR|VX#1>t z?#uS4ir&m`@}`WHT)|Vj9(f3$Z zI%)2HQFB4U6K?slthN@+gIll?C5bHLm7$}a@DsZJqtiKEIbwz3R=Ct{_uh*@UQ=eN zA_t@n9Kxi}`Cz=hY3C2zcB~=P$1P($mYmbKHK9P(0AFT*jI~*W5!0Vkhb=}B%mEL0 z)WN9CWF||a-r|mH?w6X*w!J)EO&RRsmV;&P6gkPsURT;)ki^}S>NaSY05<9VE!cO( zEU$LSww!_e?m^wOi#W$h?h8G#@lvUKR1}OMRcPNn*z3qOWa92pF?`c-QAd!kHyJ>3 z3z%*r6~{R%J)r$cJO9h*%A6`|%*<#q zUE05H@#>Y3cvLctyVr~~3B0}`80re~JZDyNE*@ZdFI3J z%v@2v$gfHG$`mfN8177vWM#goi3$7kQDtTqG||DsSY%c)c+Y(KZdK8jH`G?1vk}Ea z$0O-T5vq5V*39nmeT)tiq~dUX8+2V9U4^eZE*u11068Dimu(yKx~vxe0bG|PoB;zp zREouk7fAyUq%u9wXwAhFDK>>wvSym)jB>x!o>VH@F5N4IOXYjAL`|@jx2-cwy=Sdn z_q3((NB6tvIRZZzW>a3d2FFLl?pKczX|AlW=AI3kbEdwHwN*680Ct_fAU&!56_Z6w z?^jv*u2?~cIsV2FB#)J$Gy82^zP>(KM)2a(Q7>_?&NC?K&f6FyPdCK=MtwyHi-?Q< zaYPAfen|>$<^5ILV3t#t?kKrntOHQ2gMtnSoi{sY3A5>OpiO}KwQqJRj05HM;wyED z8H@1|S+!7rtASE=HQ<6Is%@&?l~6y0bq)VW}LGgK2T6rl+Byn?6Zy=PI&f>nIu;> z>u2lh>i}2x2P)-kW;jGg`Cga?r##NM6WD-Co) zA{{0D7_n57KrkF<5&W@tRqKevYa}&9_rzH+d72v z)13tU6LsPL2Nl_W-k~O0NDnHosH97{*-;NQP`J^-Zl4KbaY9eGDcZXsgmG3+Zg@jW zQ+OC|`1<*F`AQyUpJKJKA5EWz`GEr(uxbKb8tC?Y8bLyUV;IMp?xMD*t_2lHh%2N6C) z*rz7s9`@)9o?;Ipvfx>WVTj^A(=3%ZoL}F~FY=-llEm!=mxSwLJ_>oQ9BOCCUYLZN zf$iryjV3RLza54=Cv29WpLciI&*Uc&MXZ=dm#C?_)$}vV#P9oS)AaFHY6YV5aBp9~$|gKjqlqNG33>+@Y13 z=JR=k#2yueI(%AX0|P|pXG)5}`~@HTTYfBb1o~{LYBN|=<5{w3&i{_cALZheg!ClI zS1H5_4{f**QNG}>RBX(AY9g0E48hBGlZ)eu4Oj z$CR|EiS8$7sON?hUjg@bT=3^cwki-5m~Rr)1_q$=7`SpZEs&nw*x3vaui=iIZr)Eq977Pyc3egX! zpF7upO3l@w0GF+BL%Luwe?5^n-Ma{zSK0!RnP0ji)30X046X?60+}Gh!*IQ$f6gZqE^85vYbZ?PIOr2E><9ST#o^U|c?@0KiA`vEzWQQci^-mBFnF=;lfx1jw2e4b*{ zIL7TS=uZo&KS2@1V-MYgs-Lx175)K$kHTbpTw+^8<{inJN&>XXct8G1FBD+vRf3aqSx!^=|uRJ+z{A>M}=9gMg zc|EKrl4$W!!5K!Wu(%ZWtV2EWTF@|$nk#j{j@gJL%3}fb*un|gu5OOFt5senau$t@ z9r40QZff{a`dwkOP%(wRbnx*Q-Oo5%erw7&rf|*B*tI&5c04yKo|WW|=E#<-R_taWU6k5By@^2` z*fu+n0zQK{O&ESRs;sT9zhnrCZ9FmvWkQK&pK0JHZEo-*7$m^Ayff8?b+?&D$^Cx2 zNKGM?MG&T#=i6)ZjuNZBk^hGt!OJ=>KI+%76V7`LT;;f0GVs#k?6tN)m?Q~Th$eK? z`$R*!gUE81k)pm-mZrf8`J@zVQ({I*TNx|_6t}XY@=6pso1>-dsh1^JJ3+0etj60~DW+>BVPfPJml=*nM<4YMvGT9f4-+#pjc zyH=M0Yu!+GKk5rfmZ<#c?I9eGsBI}-bEx_F9sSjAefN0SlvG7yJe@+Qu8 zB3sYxk83h{IMvvF-lK4cUTi@-HA2*r1-bY^Q%aP3y6W8WA+F#wGpdjFg^fytexAub zf9!(VgKj%P@R?fUhZAN40s@2n<)uR>OsNjAgJcdtW*CRI`2=mrzL!OBiR2*ab|55o-8gdO5Vn_Gv4h78=huwz`2!_EW_j7X8zUpIKDVhkb{3WZPaCCI!G|Z?zzB%c%W47`EvH!;i?+e_q z&Dr2hrs|X?yvfhbRw90mAU@@J6{WNWL{;ojYdde@)L9all50|D{`Y7uK3pk9%15|X ze1im3b}hC78Ul)WLGDY(+bJE+8W{`D7bFF&4KzB(>Z3YF5&By!fw_O%tou)(63v5% z@0N_0pABxGLhDD^r?6#r-YQkqFQPF8UI`qVc08n&e%03{(mZQ_5&3PC!q0V^k-{2X z!l=^eOt@#B*1DJKuo0#P-=bbQUk*KJOZOM76Pz%QdlTrwWy3=4KW_dilMP}s`A(nH z01>Ybo&;9c*Ly}uQNNpGL^>-bkeN%8e4tQhDw)&0%Ta8p%kXTb=V|RB?u>S!6=I3c z!?vppiD|4Da~V{I7p&fXuSgk|2rw6rUE4}ubDI^Bk$BVavDB#+IFdo+YciQz-#tm| zL)mj6Lz`;Yz^vj6FWt;48y-2kF_h=&-hm&<)DnODRP#{drut$VU6*kb%ca;xG*zsa z6Tyhb3Zhv+4dnIrJ0|aV_i_;H`PCOrw z+_|n&j6)}b$<^mNheTkU+P&PQB<&Z*uT}Q~8sLgbxuoSZa40uaKzZ`mu%iA_kB_6% zhz(h&y-czo%E19u=pC5wVJD)@TxlK@YLLW!d4WJ1)*hY_W_z_DzeJc!TbH3VUM)na z&59?PZjM0quoe~8wTW_8MiUcuOX@sL!Q=NNW@Q3mODSdo$vF7;IPVtHPVVart7xbj zLn+1=#j$@>@5`?)$d8CEqCc&95yPCiCh8K03v0S+&xxm?tjfd)i(A=#FZn6c9-l#k zscOE!w4EHgbs^p8hlA~S2>?gf!0?eI-$TSmJ-<%v9QXu&C<3`kPSIQPO4D@;%%nel zSU|$!40WWe>HfM2wqrE;28UKiz>|c*bKG+bl<7j0xlA=uV{9|h^Dr_ikF~3M?$oOH z$5q431&g06Q7l=~O$NLU|6950gcGcJj-SxD#qU>{II~EpT&LHtd#I@@VSnJOa4>Xo zV)Mka!D|@vHR;%zmRRtZc9EAlVy0e}Pwm9_WJUnfp^MamU*twI5H&Qc^o|-~$)TTd zrs0KT)HJRfCpiFFhKqN3IZVLPDcQNIKy0ny>fZX}GKVyxrBSp)xLt4)oQTJH)Hvg# zc2L`X0a+1h^$nuCeYMBvYue;VdNS|0Z*8b7OYWyJ`qJL+8Ppp5b}h)zkC1olFP9uD zS!IubA-t+a!7CRPwdjsrtI&_lzLB)P6XfBgGHV#;=`AJW=Ir^#X6moC@2ttlsxP*2 zD|!2P`-M}%P&bF$D?|7$>^38{39M$>w1^*XfQ*8s^2AZhTKUxnPB zF9D-}r$_)uc*<{I?WbPfl;y{IE-n^spVB1_xukU7YJejTl2v}T1W+;YE{7)yabB0D zN2`Oytq+Da-djCsmwm3~i5~+l##0*k^7WPv$vm;t737`JqCHBPdC)V&eM>hAgew9u zd-)jCg+R`+Eyo?gCp}VrrDa^t$mpQ@r-sPd?IkRZu4{7j78Nj_I-k6VbX!2rEHE_E zswT#Ho~N9zhj#>2QWVjctUpsn-m;VO_u0j8&dtBibpJQJhTvd0xBTy%C1mTiTq&qI z)Z)0}_cGb00I<4<+pfUKuO^@e_(jC1&Yy2xKmH@V=G&Wo6e{3J(Q19TxcJ#l=EJY) z>wR&B0v1X!z9R)*fHPv_!|U1(i^tT0uxj^bwbC%Zwv=s~)yv{d-d<%PmXd7YqlPGr zi5|tkY6GY_oZZx}B?6 zntUgXkUAES%+3b6r+noaVD~6*r1IS#XP${BI%@0C-ja;o4N7OIPi$)Qb|v6SlSqp8 z2~sMq-)o4;E-Zm3dWe2<6;-EE4K_xYbVU<6_3<9@kvmdBt*3eHm1_$yH&!uLR}ViO zD%N2|XWs|7l@Z%5Js376Czc4rE>8!y8T{OD`(`pEtPv|!%dTEDxU!^l>&#msNA=pp zDYtIY!2f1E#r}kL`-$U~NMhMcnANvSJ}6$VUV@61xK@K%%$=1{%=V~)C> zMeTo>b@)^{g>eX_oZ0-$|CQ{`9Io_1uA@kr*+fE1J?lr_khg-`*`F+}SglSnU))NN~y%FcWwmM8CoDda$4sss*NYn>mV zt#080vtp(5A9He-w0aK0nAh0%`0|t*w6}07ZFcX;!2vP)Rbv|swn)vi__K3=hdrS99vya&uP?4N@`$j2vsb|$>%ua&cN;m_XE6)`JJ(_es zy?S>XS9z5C4Mr9uGSKAarnhmy_v|he_w+LZ!6k8p%h*@Jzl z<%qWn%?;sFU&pz11+-(-&;9@s7}GL7qEH*Bx7bCcyX`a{$jRfZG^IkKHd+i%sA_&q zvW{(sa(t`Xl3_gTcE+Cx-|!6A=xG#!<;SxaAf)uOwz1`qEQaTr<~gZKEa-H$H4SLA zgl$jm2D2x)B&nJf(Uhw8JFu`zTr4bO+586To+K13NkFh;PuaG~ei(mqd#y{a?WUDH8b8(7Mnv{lzUev&Igi{#ms zRHNNihP|na$yO&eF|@&r4j}-I<;5+B)szbS1~2hP+~JDEIbWH(`)J5l$%`oZ4ii^) z_}IHYB-h9{9dyOjqW$G1{!fAOzw*LA2U$4W+9&5n6zaH4jD8JXbt-k|5xyq=&9}){ zRu=dOt(ko)#nb6$e0E|wxY1wW*X>S!_E&AU5nm`%t$~Aa@PyI1UYrHjoZ}%lO!Fvi z$-v%KkWy+r`Pib|vm2fwt`B3Y{5t0zUOuo1|7@^pt)CWz!iz%N;*1YZ7~Gnw;wvZK zZ=83J^U_7tErb;F|UfNn|MFj>tG>|%t}ly(*mhS`LbJH z^VhMHXKUNF`|A>;cxRM$9v@{_ynpr_EOd+0A4leUCMB5B(a5Ymv#l>jOi4Jt^=mAB z1IrG2ykE40jwCu57QBFIjfd2}iifCrH56&fpimo=> zy*x_-Q@cBi6=h}l!bh%Ow@Vws84kr~96hb&#YI0SGX=4d;jpJmQ%6OmCzdS)J{I>; zHdgu0Tq)un;&eJW;al+bBxk-(x^Lm5D7L@@_vAEUb$D_)M zBsd}#z0fD+pDbXeR%KDPAkWTDS9~6+GuL}fvi6I*MH;$`aeR||F5_Z{V$;T z|Nn#^|7q-TrX)Z6eA{I0^mXRu`Liws46bT{5}}jBBC=OOJd|pwT1vND)&#-@4;qy~ z;NrY?UQ4MAzVrtI$-n%!6a${vjk2koD4oWsxQ6&4jRI&(xgY*-KJmY*NB@V4TYs-Z z{X1&*{{z$`|Hn&z{xf67;dhJwf`|UzMzqeoUDIaSc&Z9Q&HH(4$nJ{%f|Kn2y2hc+0GPWUcw@OSgZ!KMMryr6Sl# z942jh%>JKJ8imiUWR_+_p7`GrF*AKpU*Jgn_p{FaJwQr5?Y{@-x5us9N{5I-VbCT^>cSJy_d7 zBT(Z%o!uzo!TlTnd~_2C7QEksUAiKrqu=cHwMUF3;{7v#`wzG__!9&5OYNrl@&Nu| z08>_MG!mkeQZm5l?>EvnZzN>^Zpi?ks2Ir$++$I6>7indE`$>^1oOXUEB{Ymehhrn z2TrW7M=*xWh z4~P#J0>MAwR1{qX?p@6Kh8iQrM-*MDpG)bpNwlhTuf}(Pm!o%dl$NeI6GpBvjtf`& zUwXm+%b@YUj}?U*=_GZo9K8&k{tNBL!v5ZL`CJvH-zB3E-}W22z_lV&^5LK3xuY31 zBuOv|s3#Go{$7*#>5a+=aN_a?mJ?j3EVF%wvb7bG|L{(QCY~<`Pn@PNAcv_> zBn%+@4~ICivW({g$$pF|I=mO%ZxT*C6vLnWUfsxBgj7^GxwI^6{0F?TjU|TP{%q2kh%o#vV+rm8R@ zV*^;dw!WbWR|bL|e?d{G{j7&@s6|@vyk!FlxKU76$FOGN=t^Oj<1SO$ z>KJ9hrB3*skBSdFkUY#4D^zoQ)vEEG`Z~C3q}K-fd*pRVI{iSWan$)M1;GB|gNn_{ zulU)w7Nn{-(v|Tt2G-#L!EFU5&75xZ+xT!gLOZNlPF@U@1zZ$Q-&kOp(d>}vAMsK; zRJYNLKm&S9W3*FwRd46~$||;uP?*HA*x^YgQGSPqE!B6#oF4QC@Fv9OHsXSdI?71z zmz;Y*GS5#IUPQXJa>@)pu`;-n!Ep0HB(f;zOUs5&5-R|<4vVuY*CPmDvptGSWGAzdikq z4a!RmJbhl=E)fXZ72N1EZPHYYgTZ=MHpE(`{oL@pR+z8qOI?wuTpv@d*v!B07 zZL91%UuwGqOBX~AY;b^M(mI3T6m9zAw-8eqccH5&>89+cAn~aS3r~*SBiNfb&8O(T zK8Uagkfxl12US2$~D&f53AQBU1Ox7LI+y#fwI zQFe3!okv!=;r=;vRd@GfR+1!NQnbAna#h7W@$I_UV0B-1-Iw?)I zC+OlP7PxY(EgHLiZ+(r5%Deb`bRrszTx!y9YDcj<59Hi6MUZlv zX^wKTGDI-Gkf7G#{IH-w!k5keqb9I7U{F=o-+b>s0*6h z0iaY~qbg&5kGpmV;E@kW{yHP?8V;mk(IwP^`gL7)+r0Lid~*nFT$>ykgB~uGz23t0 zsiO)k@U*0>ZU`zgkD0SFM{BmZ)m20;*Ij|1c*E!LrIFQ-U;A=q(;@tnYoW4lkqW0R zDR0PV=%jPP-!(O~lcSYye1!a(D;$m2U_A7RI8@Ll!x!-nCiRcvj-|2P=VH8@tkInq zc+y?wkz?dNPhqjaoOl6?)UldC3emc(zM0xb;`H(!JvCLw~J8fO!9OlJ4F z1*?91mg%K)b*NTYHRU_E% zR>DupKH3Zlxf?O#I(cROZzgj|HQQF2(2Z=o>Y;GqMU)U^6;919l9?|*tdFnbw5+~u z_T5l*QbIhTzWvM9)ohO%K56qnJ{-ekbZuIBf`^=7D~c^7zndXLFglSUPcgyvMel6P zzLJ^91vXr`cbITx!FZx%XTK*%M3D|^xX4gFBGc4FglUiVFN?M-BL zWhEPdgd34x9F-iAB-d-%E&-o@z?pCyll}57#fh<*9(L74)}vQt|GPpSE5Tm41PmXf z-M#Ja|LEX*K(?Q8-p#N)aiT2kC`?-y>rYq*vQ`khr0Nqc_yv87higDetCm*FAC!|0iCr4Ud zu)kp8lR1o7b5^YG;(SET)85RYtH6FGqfq=Z)Cq^CQ)9cct>G13RQf zko+m+nMq2sZWm@eC_}#ulZZdZtV`lj`t9&;oKKPU^}D$PNo-l@dJWZrThlkw(H;n4 z9>urB?c7q$kS=HYj-d)2lIhy#R0dEglb zerwuzl1&o!fqLFzj`PhxyB@2C+r!UJihcAsdM1a@hUiQ)OH$n3of!9D%QjG24EJ}H ztw5^oZ_JGG*28*^d}2b4>Zk@{oivz%0%UGp6)&%bZMFwrc7!J8>p~-dInNm-iX{tr z%VY!>s3-%h(FKR{uF+R>b#`S7i!1UL`5){|4=zOzvqVGcZ#9*g{H#JdP-Ct|~{*T;YHaGk8sfGm*~52a&=GeP7U zzP$Zd!B`9r7*Eqia9E2mlz7=k}hJA6Dcs=9;y;=%WWj2E z!y;hT72mPFZ5!1k`dcIn^UxR_RQcCEiZ#VjDmD zSrXap>oT0v>)us2YLoY&?)6D5VwJ==ABFUOa)1)wnJirJCkSs(%$p@|$N8qW1sTb; z5+%#XrMRckAq|;pAnGSXW4XfNVd^I1f(_2m)B6D@z!Ydpyiu9XYNU&&mBE{r9Md)l z!lRVrkLfSvO`2_2+}@=Rl*AKC79z9O=G#2@aWH zUXO6BjMkhIScBr_5fPz2$mh1Zx{ku-K)A*)bKPJ@S>&39*0NV204@aX)?`}A_4D?6x+D1G-C%JzUSE#Eha$+F$*wC zKd8>=c_V_{I^K5NdvBg|#aHZ*O{nw#LyG_R?DiiEK3MMEBIlQRaAH6^%rK_gm@e5e ztb?_E$&(-A2WKkczG(A@dmHacz^@q}_@3cd=&5~{JJuJ|SqnY59C1Zpp+uoN0_WN`mq|M>RSHe#f~RyW-`;Ny9DD4Dxq;s?NhXK!SrHZMrA@Fz#yOldy^uY%(xvj(Jw45Qjauz(r^7aJm zmo+uRi&CA5uWePdyeLTPCt~N&v6+&BI8K)o+&9uniKbR3YsfrhU(+{yQ(YhTCsC{~ z=2y>vAeY;@yI6UreHcWwX=We6-uyJD=%Bts&`=wVDtr{I3gc#FC@WQV{@}sHi7s=* z03TOx{zk|BHHKkm_oM~s1WA+WcZKiEEX@ohkR6B%0;Ng@_a5~dyF96 zzlXcGG2V0I&fM1 z29^fAx|H%02@@;SI&Aby(bmD_qQ$Y#yZGS#Ju%!jt6GM(+Mh3wgZZr?KOPDf_jmdV z5<^YPcs z?$bt9vt<6vL9dz^EL%R>=&|4l9&y1{_n60yW~&EZ=lX5PgJ@eik0eA6m2;bE$We%s;Amh}Md-s848L*C zlkHP0ji2tz>9p-?d-8YDy?&*qxD>iq@u2OhaEif;-uhOD1DEU@GxbKE8VUtWfqou@ z3eKY!Mo3GS6BSRNkbdW~g!;#cp|l~UwYd%+&^?bBPTs{Y@Tjmt7esr}Ii>uBHx~-d zX-dp^M7?b@BdjIloS9e>tZk@kszF7$h}4`-WuELhGsR#tevSc%<1kgyRWBTyipn8T zco~gbgU98+g_=%l8vU7YekMzw{oD)(DJn^aC)rjaY~Ragh_WlGtebQ?n%>F5MA;$D zt0NJpkUr%1w<-5CmGdOfd67W)#1AAeyfSB)(8a9%sR>}ZHF~I}SWwIrzIi2bk2nuU zNqU%SGJ45gyq`3+BnoBD58$8!?~$p+AHW6IzJ3@(vG`rp7YRNSW$7z&c&7SUm}ehm zqPV8lwnZ8M*QP<9?L{8B|II^w_dbU^qVjvp*&N@)E<(cD&#vfX%}G|7Sne=_JSUSp zJquYjbw0K@mruJVe*jIX%HhX9=4qhe37Ind{U+No@4gUQCRV(ltRGfAr$}o}xzT=n zHG?|ytv>YIhu_CAx5<#^Qike=$qB4jgwdsl3YU%rgAUyurPiE3fT^1I!J9NaWL;E3 zrNx_nrH5~uWJkaAvGmH1Yjn4oOvN{PAhC(dN{vAt4m{asmCgy457x7Txq~?u(-p6u z_GAvUX^)me6RX7<>>c#Y)|;+06Kd0Y!vf=AF-?# zlmVdA&48msdxO&7$4BpAdhN`}xoXJG)5P(vb|Z;x)M}hvHsTBn{ls1RUTiTlsddL^ zRYn4o9`IG&G6GZOeVN!%hgFl?nA*=i(cy?89@R7^znwx!=DqOVOb03arXjUz>_Lg! zW)phVt#f4=Xc@%HmepJ<7Xn@;3&%9PlR{j%Hrk=D7ZA?a#jguausdc5^Zc}@r8#Wh zDGZE8DLP`V3p6ml637*csRM6`!QwdFhzOj&nMgTqh@~-( zTLC$+<~pbhkui0m75aXjHl!!3jl>movc*yy8}laPZK4TDLY|#UTniWHhhK0Kawse+ zsTyZoCd(WewD?;9^J(j%fZ3P%0SmU2rnMOjFre;#uBuj=*S zp>+hEZ|%B?)Tg${#~=GZ zo_*X&Q!T`MJr&b24AuUNlGwQAAmPbZwU3I)tqRMJmpwwDNN@rS=kwO_r7dK62?ABE zHfPHYuWJ)Gg5hbRB`FVFLx1lW5Di`*0&DkiD#LKz$839}SQ-YIy=^Lqs?D`yV|098c-C!X9s(_(lXKEjko-j{UQ2 z3bkEthGfHuaeWKMX1t;bRu-05mUL5W**-XTC?Gi;Ugxehd1c*{qHf5U8(`a5IdN|7 zaDA!tSz0?|ra~?bW0nLM56ufVqvcnB5uTLvPb*nG_;?|M*hl)ljSM?c-76l^rAk$e zSh-mGcJoP|zSJ6XL7jOH#0jxlA*ySO=2;-5$W3g`5makogh_^J>{W}ew`JV_gt53n zq997snZKfWwdj*w`82b2hdd8zi}IIS^9XYauhg|YZp=vi^bt2Tq%Ms@4&oIuSC}GCxOvdJZAsSc(i{mJ;HQWm2~D+ zBVim@BzXfzcOf-H=TMR!>_{_n3xvfs2U1EQQYpqZ5R_(J}%}eKnM(in#Nb{ zSL0022e#7H#uG#@EF3uVy^G41#kl>wk+OEJlvM;koM301DJnq~8ph;Qshg(eSUh>D zKtlYjsB{?T#W_}4@rS0^HMpz5eU4oVy-{YiHy?Zu6Q{1cY2N2KP{7jNQO;A$o!YBY zw(sYdBUx78Zi6TdVieiH7Ou0&5+f+8; z?&+(T_?x}A;61KcWlZ($Q$Z4nt~Sq`6XD#CoDXUdc)uy?{J-FY(wPuQZGK*`hokW; zhM2Z%ctz?DfD&Hvx$cKVX7|Db;R2h(Xn3JSLnJ6^@(xFDMa;l*mgs#A%8p`YsUki} zcvfESC(a~PB?f20z8<@;HF05-!P{}?V3wqk0chTQftV8(2Zx;1hs-qX|@+~93 zMYYlHe~}E&DH1CXBcDVzj_SZnJcZ{`zn;WiM7p?jtgMyrO9ysQVk1Y?X8$;<9h`KD zULahuvL0@=WyF07SfaeP0ZQ;wEF6=4W<;7q3XVVGE)u+*8PoEtlo9=5_N_B@H=l)& zY!52P^8Io#BzleJvuG!IDulU+MS#Zeq^$oBV4dzK^B`;3k@IormvN8g+v0^Lkg_=u zrUOANj^%wMo{qblvUNAT{b+ES@!w-vk%j&R?Qhr?WF&Svx2?TIvq%|0Fg<~it zil*j$5Kultz719!1bWG~6FK4hZjt-HwfCI?O|9A5K?GEqA|M?EM0zh$0w~g@_t2!* z(2H~g5v3Oa>Ae#W351SHQ#u4t2t}lZE)Y8SZO`0$=giDGbI;r}Gk4~G{tL+_d*|J2 zueIK_p66M4hx{yU&liG;Q`L75>NnY&vv(M(hJsc+btG@?oIWo?9Hn2k7fy3Zb>K;1 zc>FGpwM+Y2mz%?FQ_!KiDqgPbH_#rH^I=9_?3)Q+XA;AEsA$*(V&LKzDZp#bz}6Is zWtxohZJ&Jhedww_9RW$UY(m8JO*fY@pxS~Q^|(p|vT;5wWQL7Of&trK(^2&6;V8-3 zOb;Nm^_O>MBN|7zqN?9y&L2r#hd8|oc>E%4N21ve+I^^*xcGo+OF#0#sM+X7)HX-i zQ;u+Ki2x3Pw{1IkjzNRg=l4p>nK@R68#qe|)Ho~1u39}`XKyX_BuvicJh;5X7~2rF zc{``Xsgv0z=$-Oq8Fu}dmijf`$i-t!$)t*PfM}Yy1BbH3wRe2CLgwr4pjAy)ams}^ zDj6FQiU4(?z9+3`JLNRk>>J3ZEw#+PqsZ1?WY}&T>dxQ97{?oIlMS;uM4U_W13jI# zf!r1iMcaPeOx@9`t6ooLV-CCQ;eEJI*A==aVx_jJJi(|>+GlG6p)1BKz8z6Mw}lZyoOuVW8AyGe?cEbJ?R?dL^^L^M zn@w^FAfv`AO#uyb+YZwdkZj&ER!PB(zH|btF085dJ!N+pinIFk!XLrs_)JpY2>1_d)2rsRwoSm|V_9ekYi?di^kBQv-h_f|8 zKmWPV3>si>__4enU@!t|3RO~P31yWjED25by}av$1L+KVZLO4bK3pDa-3JE*tg!_x zWM>zjj}~jmh2wbjM;bd(_m<4nA?iJxUOzb^oxj6UJUq%BYfTE0NRkL(O{lSbu^I7^ zYMpOd5$X(e_hb$V`k?YQpsZ>?u(W8#Xs{4|T~>U{w%~K~j-5 z?UBVxxacg=YzF-UZ86~-gu78Y*UP%5XR$(ZL|gvIX(MAt>lNST{u1MYSF=j5A6&Rl z_=F*`-F*jeuw~sq9cO{*yR1$(#-3@Lh2(G&s1jj|XpBSGZz~6J8*I|YlPV`h~=N<{woXVyH9c`!wGMQ&3cF80eg872<-Tt`E*DiG8Tz*`fzw4{m`%9GqO3m@m|YhHk1qt|+=FD7fh z<9qw2-_E|A+D=57m0F_c^iFB^yF300`Ey>{+w0uxWO_c#d)TfOa2r!lX6izmE4nRh zB)|4qNRxHySLTa?aR4UqLYB2cDoy|+yg&8aK$+OWzXnI~mU zXD-%ogi9jn>E!-6uWRU2)OjFWoI#IgRSy!-_4K1axti@8n%ft5F|?~si@kBSLKm`T zZj#Ut23y!o@v~+{6H!f#pBNV=C(^#{)9t0&z)OsBk*p1eJw!LM_nzmx_DMw#1w9y3 zhGZ0Uo@8_$Hp@HpE&<9u7a#B^e4rz1soB!2)p>>%xo6}Ps1?M`&b%HG(R9<;dK&It z`fPDWe*3f2TC9;SbI=Zh6i};6PSP3~zhplRRBj1H{S}>nN*xf3r7w&yTIr#{0=j!} z({*v}N#S(Q_n4mD`)8;Kv1HE8+?HD9NH1VN32rH8dfR=@ye@wECGkkQAs@$d@z6|O z+`B);M*QP(kyyEf_7o)WhELc`w65BvFhOa|t;Y0?8=CzH=a-$;8S_G9%oT)FZDsaSlU&z!{M)!( z4{EYUN;IHOw44r*wM$&&-r)ge@R$B0R;Fc=))*-3Pg7}8((upux& zeqbcGddGEMS*s0(4MNp^A1 z67#5-)TQk`PA+mT2pea*_Uz%+iBn&lD`Hb(`jh7qb@e)8VIjSY1bBFq6_AIvruIl< z75uKqE7I;%JobYHfS<0eo9xe6ztxCLTGkj9!8<({dM-_M-Tr`NmF>}m(%3N7H@><7 z_|m@VHU_Wx&kE4x`%%l{^@CMP9XW&?0ph)cP7=8rj8@zLq7JlnWijTC&1=0dJsf4r#7{AIDwLd!@56QF3ePKV z*ODjKtvTbl5JP$k&89|PjRg)mLY*EOM!LC?X31J3u_4R)QIM9}urgFZwogrh14~lK zzK|nEKjFQ>tf9|#X%8^T+DgkeWav|XlT>xT9Zo{`^-`Voy+QYGp;*OL+^qESvzY0P z;$SswnvL6q)>_!MYdts9E>$GlDY#cw_6e1-u(wog=TvcdV*17&OaZ;cVouV{(9U+} z8whM4CYg+_N~=i?RjJ(AxR9&Ts_z&G=HO2lqANV%QeJO-k&>l)cG7D6sY})OOVQA& z6fk8s(sJTTc9so2pk4NSKi9T`dQ~&JxPDY-va4U9x8a)He8%$ED#M{>uvwmLq{pl% zg-?cmH+ltJdK((hE;}q8H7SbMZLGQ@g}gG~b%^K=8>1AR#WrK^ zhOpbK7+vT6JXDz%Whh)OU=Vs&wXnmQi;Q_%0y^=BajK2Rc`}@V#OS@<8nJL7k7ONk@(XyNA)zI~~m`8Dl`(wY9)sy8;dF^T>b za|4nmYpBPa(UG9w`1APKtsL-!4IU*!++;fzzsS_qQ&?9(FpMgIlg|43BVUEh#pHI4 zd7&mn+X`YW4wYdo)wZl9(bRDr{MvA)V&>(9AecR}HJPloA-f3ReAPFn z4D3oGSx%u{GtHjMFk5xFF7?>dU>#B-+GO<`XkdD|gj#ssiEmb74|at-;tj@IVD`au zB}?J5g=L^=3ZlxyJv&HgDA&%<6AxBtWwNrtwS{tYni*M$62-5-b3j(EXp5_o74vl# zA9d2*RIl;m*1fU-90#pW1c!pNw+-q?B{pW{OID^0ze6Y@*+&j<<5NZ|o zTJ}~wnlA({%v&0xYwZLpB$Ulf7M+~=g8d?1&h=0?i5o$b%)hyp+=9#tSwcs5$h!@c zhcT2V_1xNHtJVR~i&L&(Rx4t%xivc?KgP%?*aFdM|~m4V%cjdNTDk^YV%Q)xN8 zaEpT%BA%C=Xm*zVFuBz^9iG_aG*b)~(6gK3wE2Y2wrFc^+(n!fhC)%%Eq=>cwYm3( z_30|-{#1PC*A>^XAm=@V_r_qGq%WNA(%!|8Sto@oOA6B7W!hmJU(y%Ds)+*&q^+<$ zR(pVi?)5seOkGb*wqEV3)NrYe@KBEQdv1jkBCl0UcbBsu5?B>5)J_I&ya2p~OK_Jn zR$$PTuP*^Xc`B|OEtyO#K)RBM8e~HIhE6hvyWh7U$~mzqglYmFePCp-;FX=VPu7wn%k)nj4~4WD z!_+U7yuq#&3l^wVVRN2g%g@}{G?Qvdl5@q-uF0hURuqxOxoa#dTwEeF^kh?^!|aA+ zF|C7r8dBXiHSKgfve2m06Cmddj4?aiuEQIzn6ex9)~YxlM>9X;#V7c>S86}6+DVLW zkZyd_xO?liq}ia6*O^qNqX$}d`h!A_$JCmI=5C|x;*npF(eklw*sa2iQD-eFZDbIf zYNC0I=lu)C1NSCW6kG|f8ivM`1VwyKOMNkS4ZyGu84)6kC zU~YXk?C=m|~}WOaOAIOA|j92MqY7%6~W6a2J!+RUn( z*gG(Xj`|9D@e>zScuNjZKa%j4_yuEk@@LCZ+BK!{@_H_^XB#65pYNxs35}X%JBj#x zDaZ}c6~I9GJjtFXTZcR{^l)PxARd9Uc>)Q~U`x8@FQiYuo z{%8;VsWA_S2$x9S6+$}GSj{EOi=Ny0YP`<_~fZsgppDxHmd0|A+X-%qgW|d_t??3audW%La{=9E=vF`bR|LdmUV|T+n ztfaz~>Q8+K`~wFfs=QW#vr1#dE&`Q;ZBh`#sQ*T*5_D&O8SJ+_1Gj}Z66;t9XpfK_ z+isd?ZdB&YS*bqSV}zr99!C;|GtJ1mmzsj-o-GM+)ZWE(0p>D9mn#dp>*t6_b~hA# z6R)%k=q9TvmPd_Fx#1KxeCN_?@u*IjF8)iEJk#DA6O}@#Ca7GEs|4~z>*E`| z0?zQ4n;wsg@0~wzK-i(0C{7)e633zsNfmkD&1!DWD;(D$t zlL1j;0eOaop|w8D7>iZ=e!?lv+a`ou47>%~yRt4LXz!hga8cV)C(}2Ux*H%%yJIRt z;@TscXY*;ISu;yK4eXwD9o{f16SD>L?mQK)QTNr9E$>B| zJjY8p$8logV?sc5JCjj4fo^0DX4b4%H91XfqGu&MfQS(D83Wi@fWV0=tJc6ybLquY zRFmYi?Dv3xS60JjKQ1*1@tZtq)!iZ5Xy_vHwXPg_Wwdmva-lFe-D#G;q9?pgj?WOG z>va%lI>|)5Shu(kMGpyrDn^Wlv-8^wITgjO_m`{eOMC;Bu?obhOe`Vn2+AC}VzT$I zQ=CZlrw6ok!T#XmujQH)u#9t=>(ruOb>U;7n}k}VNr{rK*lraYCQ|W}P06XMxv%M= z!QMDUoqqVv)%xwwwxAbH-WHUn?481!%oR3h$U|g)y$nwpOI*VdU)27p!@UGuqZYjJ zC8`x~;mY|3qcf8?M0e77=K@nHl)dt7kda3QyOpR|bw24@_hnlaecQ_wE)<*cMX#EvD|fk-BMXn>XP{veA) z=S028+6H8gOBkNAH)+K|Yffn7-O&=9jf*U9rgFhO|HH-S)JIM|(vCKEm`+6*y`k&X@(RclxU&=*7$U z96Y^E!F(~bh4O|NqGW~^#EH&}an!y~iI$f@)QL7gcjqEV6}+=JY=&G&Mac9hm4^^Z z%zuU1JL|bXI4Im!QV?ESIQwNgMUv8tSFkX5B*qtSmr&}7NoD7D7X{=yy~*#J$e2e- zjn~?>7=Hph=&VemesoJ^Ij3;P!|s|pn70Gc`>-AnoZNd{+!TT-$c+!O9#-6PstT+2 zXT-*D?aKHK<)(88c{XTqCHk{BY>I+l4(gcid6W0CJW6oQK~2ggPJ44A^AiO+Z8Y!v zKtx@sr{hN5H<117G*sZA&=sdH*KGT&L_M6`7yHS{lJqBBCtHYUmqGaPwu?Xn(n?RW zGWSK)Rk^!)dS=v28Ifu=5y-v(YXe78%lnpC3VV`mO2a@o#7}Y8f3TWmeVIC)KG{`9 z@1pLuFaJu@vo}5lDN`;|h0we*hWqMe`5>%d96)3OQYRB+Lw1&tjI^uD*qDa0>R~-}fEt7OFK1_ZE%1or5oNoY*LOo>@@FbE?LTKm zUGf*_e+OM2V@aN3!zZ7@LTCA4k04fjAIm>Lc0Nt3Q@NdnyIwbCa~mm%@l6MUlcOct zSEA8!LDqlE;lovakK40SBef;iBB~>;?@}C=w@#E(PF|w2yVFJroxM|XOii4Mbn2oP zY~AeIY^R%fcZDq|_XjaBh%<0Qs+9=A*A@$dpU6dqx^oGs#6QliRh+$ho!73 z0%pgT6N8lws*zzadL7T5OYOac_g|L}bmXr;bZG@DG9KiOo=FAKw`v=i5W3g^gh(gz z6SyMsQY4N2Gu|>@yqsb!oE!~lQj9Wi+a;Av1$t*=)16#Hvy$ABo@PcAA;k<{?~1iA zI(OFzMAWLBpdtXh4~1dZxo@ELDtHh|C40jOoxKJb{q7b!gyRCz2B-s2%>~-iQ8w6Q zLWI-PA-a63&t08eIUB9>#!Cg9Z2Qc*0^}U*6M(e0C@`h4GRrDy$!C*AG(mS>>h2_* zZSR%O%X!%ZT8%BvEfdnD_FnS7r^~ln9M$2U=$gVvu@XycyS`wYVcc0G3j{ZGrYQU( z#tY!smro^k)tp^j19zrm8N9qyFX4q@OI(>Q`e|z+unC`q+t(pxyk=`cgrNiLC(98- z1>b{AwU&0x`4Dokc2}ZJfL?fN{vyDzFwARL{n?MX+(a>e%We;yo_@|jF&X%nET)ue zwZB<-BYvZ+FWYFmA79pzSkLPhJi}Y}%X`Xe&pK{2b|jz(tS*`<2dD;hA?zNfm!dBR zSm9K-T_PdZHBIpbSW@2WcB=zsV8*Q%28lZ~7n|Qw!5%t!lLXoU`C7QxKe~1P^ z>o^VJ2GqqnI2W}%Bl!BB_+`gV#{ujL@CXgPH6}X0BiTz-!-%rLdLaFZE_J}cH&&g0 zY1mBcCXykpE1X`GI>sGS3n#rq(`#Hht55YDbx?~Hndfunx zV#I^}HRsaGFMmhDiNuV2_M%i$hBK;rS^644(i64tzL+O~vnoBn7CiYA|5cH!8TpjA zV+(FoSLyoGF@OHEeop0ja3SMsvkeK;O^LauY@o@X$Z+oRj3w4`SEeu1Q2m@gYC7T( zIc>iD;q|jR$=xh6yoQ`B?1eAcL-aF1cq}ar?K5Q6!`e#HSzFD0l3OSFh}}ZhPfMqw zpY2#so-o`P$#N$m$~HhUDKju>#iNp(DTD$xr~fe8A{v)W`{9*@|5hXY=a>Dru@nC~ z6Y)tfzXJA5FnNCRBeTfCvEdh{}7$_m`sx(6g@x8y`b+Tczndd&0cO3dJmZUtv z_CR4y60^FC5-$V2D(eNMUuG2+Of}VQQnv{F#OzbYQZTp+dUbK{!`grR{inPCKgt{Z z<6r$cY~(ld`Tv@g{cX4F?|;gF!h_6(KK4I;67_0B=WepK#Fd(S({9_EPS@)nF6J+B zjB2gis;^mzsoN5&?Gs^?YQDO|KB`NOxTZ7--h2PqDxW#(#Ou74$KeH{S{JpE{pkiF z&3mqPv$z;F)$p&S0BdhSyBTN}XP>HQk4GM_UWK%+<(hv~dJb14%lhlW`XVi`iABja+!mpJha!Le~H@CA!oZz03E|^@Cb7F0qnu z^rz(4)y8|5m0pFcUM^H?p~{j~wBn9+@JPIS3+*|81qwaZ#O5F9^6O2!sQi@P&l@YS zHWykZi(BLBN~*f8GK#fJ95fJCmvb=Wu)!`0a^dhFF zFxA0_AY>JaFZkZcy)H5P&}`oqPLNv*|PD3 z`2)ozd?(65lWdsUTy{giH;_>`CeLZeQR6T^)45pD)l6uzF)X|+t2knK1h5msw&Uyt z*7Vnnmsb0x#ol5rPqI#{mu>a}T*{&C5-I1T>Nn4#&KWCb*34JcUmEhN zij?~sXLew+w@y;>$lOHb)CJ+qks|F^7rWoC0YtN)oy(&^Q&Pv5%Tn51wGP)UjZtUG zbGf@DD)mQk3sg_zZU}COsYv%QdTLP&g4dMabrX8YAK+nfPq{)4D`dWbF6}Lmvq|u< z$EFEM#5x|296n4e6IK+BTAqzp%kjK)3Kq}B{X&*bxl@xM3GWw5KPORlbF=b4!4%%; zt0b1wc-r&DuigIn$&doWez(zhH9T#tL*yRiBq*G7)y1{*s<)mQ7j68t?UMwHn4Rfm zjYJBGu}mS45{v@COA%02Y^QI^pvfBLy1QaIVK*{81FpR9#=yL}5gIWGwD{vI*Upe< zY_iivxAFzJ;ok6C0c8olxAaZ4E-G40<{yy)B#Lo6fwkJ%0+D-{?K~VFC5xnJA!39$ zHz+_vr)g6!Q1}??B&QihCQgCJ=Rrxgnk?EH<3G&WRap*q?d10X@Rojlg>rJ&o>r!4 z9-oxH-s@BIp{FG=dC8&O;Y-)5GTkp~woOOJn%ak&*obuiSkDV*eD}Pmb$Qm};bL4- zngn8I3J0CsuMObQ5(BD=#vK^6V$}?Q%O?rk=n-z@tTDuYz7#RZa#AES4trGasvdE- z~b2{*dr&NFP#$J(Nh4MMI&K7a6>K8AXp zc6#VCRrsSJ|85kxyx=v0>i)3`@-**@u;O!!6z?GVNJpgnf$qr41d^p1(U7S4s*aEA z^WAH2eD zc>7tKjzC=y^%P_|a91k0X#9B$L@{4kc?^mXbid^BXn>aHVZ;FPjVXmadp@Y^GTk>2 z*R^pGQn;P>pHqf@sW|dKe(wV0zZ6UUd{}X5$tw9V6p`)L!R-Q~p!sC7pfeatSUYTpsvn9_kNpWlBZH5Gd_HhP$X8G7jmM3|!f@j{29$;lM? zYf3uTDURgC7xpTuu9Y|ta_L)As$W~{6ggGZ;F;T{s-vp#9=Q`U`!x&)!xk&VtgbRKPR<;Kye z>kNPb6;Joli!(Lk>a5w6IlLM`XpYjKwL5l#G4~UplL};?WU##*G=29XGv7sNr`lQ# zVD2c=0?^>0sJR)616F`udE-01l5c+LgQM@lcTn&`wf+79mAi={GZN>H?XcVDWAozL zh#pZJ;gFk5!d92u+y^yKEe~3$V@t#5pqh3Tys9aQ0zIw*7kWamLlox$bJBVwa(>qx z00y-O-GoSmU2GK&={}dIl{s(V0mkCQp2k4J&)iIbPBT3=Fqf7$yOUlNo!l_QRqIiRzY$yQVdj4W$WSwqbZVnVetVFDo>WC{G=~^sbI5nkj*h|V+b3=C_ z0r%0ue#IH~xom*)8qaw!dvSpl+pP^672-oht{Jj~nekQss8`Vfi{C)aep=1!IgbLT zg0ajyPENZrlAb+iDgulw36brnDi8ut=8ma)w%_CXl{0SV%|AweD5#By12YddxbmY= z9|S^lg*c_xf(6u9vv;llqcSRazJYSmQpFj+R53@*e=)SU&`$^(?TsGL;0J=k zb79!+ai592muHuRv<^I3#G0lw7YdX`RKGy=!1{;^l^&;!(>sykec$T~BQkilMduH#oAja}bb8KCN!% zrco<4*Sw_eB_seMz2{g?A2v3o~RV$nYeq9aftHVc~g4ZWSnr}{v}OC zD{O9c!s;_s2dQ_l&ij;%_t`w60*9!#uCM7pxmhsP0EiHRc->&A6X6gUBCzDloZ zEeQ9ckayylOCmP--oiIfa3QTlpQ!D+?kLZf)-ia(b7nW@4hc=}aTC3gQp{r1qi{vD zSl(7*BoqC3#&>3onN;YKgFPg(E}aU#m^wAbbT`>zor7PRzH9h-V6ypP%EEv&1v zabS{NPSo0vqDS(9@PTlG;(^58BvtO$V6}BzsU9LIc=dy*E#w;GS$ zjA4!!;dlrIKU&)`@I8E_r7{{LWB9(+W(Wh!ITdW#)K%G{11Q&PI=0(m>sorlP97r1QNqMd2~15>k{#OEqNi#t7H@gS zPGxKumc$)g+4imJ&s>kRlxMsrNM;+GYE-u%wKXjc2FWUOB2fgJgCL@XF+3e->fDD! zDF0ZCe%7@hoqDdo(PXZ(EuWp#+6UVrFPZK_2* z0{WrZC1`-n^P|}w38B}G#+aF<@zt@#J2L!Gf&lh{w9JiyZ5BlFI}4l1L^(IoqDcSww%l{*jD7l7k?Bj%Gh@V50(`A0>6u1ml zS1h&~H@P}~t<#l(kxe~>_%P68yrAWZH>6|uFik=xV3CoG7e`8Tc?myDzQv#cNVmq3 z=PiTh{r4q5Vm`S~P^E|^wG@U-Pi;l(U$_=Nn24gQjs3y{u5IDFdF^_Fx^iZE%hy9q zNY9%+J+9(s4@nrOA;yyh;rPtMb87SIrjrhceP`$$MCxnu$sR|@%D-q`c(aDk53_Qam?gfKT z|H|^=mG~(guIriPgFtZE0Y(dvc*`EM5&Tm9=wIu-e*zpY=)ve@r)BgPgWSZen`NYL zCZN`rZh9aqo)9v;b#s%o(6pa(+Y<{@VveomON zCAYN{WmmBtuD`K?5wHuo)d|0A?%sF*YecT1T@F~KcHD8!LZ~wBx#*@E_USppqMNIdQnuglV_d_|{ zE@68K69qJ^8SFLc+f7UXXAXG!)d{FvgQ6R{A;77tZ}rXEHY7uv{JXfKmMKfnx6Bak zIos>bWUz%1CQc|lfgDzs1I_F-wFY#V_Xz=%f>gysBA1qS!a`|`T8+Dik5e;X@itku z+IzW$K!%tZnSF;#^Uq>*6fS0)B!w$jKg}$o29CK`bC<36rck!LGPbw3Fug$t1#_%w z%~iorf`x@~Frg8*=?I3YIF&4qq>~kZiItI_hW2Ic+uAhPam`)L?Yc^rgu~Dfq&(VI z6V?4;SE3Vp%Ywd8J$JQ&*2!pOtF2};>Rc~1i6i<`na7)2sLy_Yf{BmctIoR3Zli-! zdl+*?#p6}G_6iBH0z~9h6b~V#(=4PfmxF`Bw<%q*!T|N)Rt++Vvh^$1F|kr-4&fc4 zpxe61C+`PeUYcktRz2LW=pm_lMwh>s*q6G{CBo+zDA>caIXR8BYC7sE+|m>=clF(H z2{vKY(V!C0WCfs;BdueB6AK>}e7yNA4$7v32zqVU4hX>K~|7vN$>R5dq*e)CCH)_0EY1l z(N!+_Q#mJAOxe?UZHZo3M|HBntDk=Jt`l!a3$NO4wSDL8dM%v-`E!y9KK{t2{hbo<5lN=kG zif@eMB${y~3v8BPlXN*&Ml0um;dH6{(M=a(1+3j;flUx(tO(=%5dNuuRIsY9-HtxH zW_=TunL7O#^95eg*3v(!i%iM+D4QTGuin#sk?u>Tf;E+`cXDnX5@W}Ju!yIYqjw$} zU*u&)r&)@5*4&R85e)Z;IWrntr7HtymV{TnOe|1Y7vF;O10!DXu+jZaBRj?QP5TID#%XkQoIXz<5YufcHE59K3NOW(*Fy3xl!&s=#>phFPqQ51O zRBG>Ja$Uo$B+Erza_B2@7y&7UF$aS z9skKfn&ORR_9G2)rV)MjQoCH^Ba##KsJy&o!TjAPQYtZneY?UoOQ@)YMC8|U0HE~T zR(*JHcD+d$vD-Y=5CC8UP5}ti-1rjo>5ICAnVQ}u7%G_qK`k!#`rPePw!Ero z3j8i`2dMr5J>$V)FYFLx!Bt*2%<#t12CuqY@Vhv^j56}N8nU&!tq)H;-ATj-h1Ns2 z=)6o$%jdX1tfg?>+*zoQDYO0!ZDTfMEbmzV*MA|vwD|_I6{_)>F^y+U++6lXm~h+! z90*-mSHOANK}s?L-S}w7tvUwi zq(8mB;+>*YZBGSHM1>|qQfSU<0dSImQFvi%%(!6Oy}BJd5VsqiQ*FMyiBs-KC#{9r zIkH-K#yKgOu*qpNYl6%-QIEC&(7}wfDU)*?f(6`xp`BTQ5wO4 zJI7d4A1m{iZA+=j7^84Bg1?Jl2S(@Vuhg9zXPAo8OTc=i0C6{^k>9I^{kK;&e;p+D zOLyzv@4X-T*?;Kc{to@@KkDQDk6%gSJOh!afv$i!;M>cO7aLIS6}V5YzYliV!0gdi zjQ~%K-~A!y+R}YU_p`@GOHO1#bjy=15i>K?`sDbw39ND7XE6cLgx(>45sN%I0*p!QP{nKppXRb?DmiKRe^#0ZVxnz?cZqlj*t&a zhNYXhgf^2#6!cl@n6d{dRHG3+tCR{12c#Wbe=oR&p3dALuCcuzxATD^gigA9kYS%T zydiJS0$&N(h5E(gMBN(v$~UL(n>g8$(AD)(wa(Cw6)5+;KKKs__j9`K%;YF?J3dz* zfCfh4lD!!-Yf?KjQvdExshj__XX*Qi)}*iGbE)aPIVkuqj1DOlHGvQ~g=r?3DZlXl z(j%4+1F=Wdg7vUx;=T)p|G~a4I`WS08^!v9Vq#vr`PWa~ezS4Jz(HmFqZlJ%U+Lfa z2>j-71te!AvV!q6T^)X2B`X(JS2^+eDWqf~3RTy2fo>Nd=z*j^^#kCv+N@3ZH@<=3 zLFm|XFaT32BQ*|-1e6A)zALW*&EqwlE8OoozkxRBk1YUM>mW>7*bOuDZ=n6yGrn)2 z?zZExdy%iIgHGhnUjn0(XV2_&Wk2b+odHek2SH!A&TG~4);Uej0St7J)Zqb8k0{ab zBL8s#e{}_5ZC4)AtAEAj>d2Y=WRv>R?fkv?nQwqEuyO+M**bf~bGzaRiCqy{-4(E6 zH}=%WhLtpy>|BFLs2CR2HxPA}!C*Pvo^e_V>p3=#jCsoVr%3UhGR_XJn} ze=*{JuNyg?Rg@`x2}H|g`#03uB+Y+gS?zE5&R^VQtVr<9(W-U0V>@N38IaHo& zCQs)P+D;rCgNCzaZv{O%@i_jNJ9L5dO0G5t1Tc61!fO8_wf;|Y{_(+oC4oPdcJesp&)he+m~DG|5xzKKKb1}v5X zPm%c;nA;K9rdqoO$HGa<1jKV76Vh>SDcnB~n@|;FSxte)LaTX(#Rcc!Z);yhG#Z1Zd;|rik#L={d|81_<&suE% zF!;%jbNu}|dVlXV{p}+O|J&c9UAMn$Y;>yyuEse+!^rT#Vx9E@JI494zi*XvN(nZ+gE8`JhFU)v}Vu*Y1@?0pw&-tn^%4 zF|WsV`vGF0)RP?%o|~B4rxD0Muc`dzs_6e>rTxb>gZ>Yd*Z< zTw!X=g~tghAmNtVz@Ei2-D>OE;}}UwC|0}3$ueTd9Z1a7+D%ADPvs@KEOs_t%xyB$ zGoBD@txG8#^gg;-`h2K|5FkS|7Gvif59-++rx^NtGG;`=TkQIH^ZVr*@-R<+j zFZgXts-Z6Qfx2@{bj!z{RXL8FP(jrF+Umy)kHr{?cN4dyDNM+=P15H^4Ww^~d^)P6 z@z~cu9eq^(k*fW@la3$X_unQ{zdb4cTN<}NJFVyW^=;borq`=mo`sK>edr}Z&*J?2 z09k&l0koLPe$Au0M$e{xwzZfDu;L0%08W7&ITcshBzk;})S`5CAV6``7CU1*CD_pe zoT7(v+Umaf?1)KfJ#=>JJn7Sq81o~>{54q^Y9djuk0k@q1wLP>n z4dO{F4a)9>N2n!5PbMk6!u2euIY_MvvQ_e_tH?8h}SG^`H%w2)Rv^?U1ui(cYOl>~{>+hd?U}cmIywy+^ zpaJ133T+0GZp&rPEgDSWm!G-|#9Tjni(315q>guUj_2vfG|>D6*_uhfO73_8niGIr z(Ei$9m44187%Zm-q3oxxNnt^uE&GN(?8jE;?}Zos?dki^Qt}@s|DSKQf3=RS(=YI# zWvq%EsfO@ba_Su-*7U{Nw7rn&C;z0C-oO^cjp0i1ZjX;YsgHfN88A2(0h&L(wY{^e zJKBKY>Q8p<{GnlS9MpYeO?p}U9dW?Ubw$d(V-Wr z=T#&>Z%1Mq_cxFhdi@UUPy0|m`k=qsU;FXFzlo_FMZCD60J2O2DeduG_7|ydneeH? zLm*b`=AYA_ZEePW1PW+X;msnYk0RE9r{Tap$VXuNIYzRzJ?-E`T-lFWyRIhe=2M^t zN^v2WPl9KTP^3K`FU75G^BBlf|g^?C0KK?{o8iGv-W^9x0)W!19Uwg`}pyFKi2Pu jz5IASe)xkQ{`5!u_z^FE5o2IQ>%aAs@vXG8J=>~Mu z264+rBIu@;5<7vFsv#fXi8cwS(6K@wA5cL?fH5jU5(iKTUycb)o1~8K{>S!nULMcy zD@M~KoZOuE-o59Z-?@J8zI)HTVJwLyvzap)WG377b;cfLjAdp<&(j!d!?iR>%Fjz- zY$FO}p$t^mA|$#V{!ERC`+x7Z!2hBJs(-~Moi0dTaJs67l2Z|^T* zRR@-{rOgGVJ4igi>CTN(%ZjcF$G&^PUz5k4s9M5!RW9?LDlp|In4O>5l(M#~+}_bu zVdsGg#}kS4!TVE|4E8f&e)s@iHZ&KS+7jqPtG~=vKp@1Nc5vU?+aQ?Z$dn)q45=y(wii*srVcQ@+2<@qIl$cwc5?z}BIWpI7CvBD|0Pqr-=D zUFEhnwXlczE9{?e?~IXJeL&m)Q8PQe)0VLQW3J@ITKQYHj$I6{ey#jeE>LM-sfB;f zVm28(pXuZ$ANHNzXj%>*3Y8L-p)rCU_GsDe8#~h{s`&tpcMP!8`{2)Nbqo1;SFJI? zPw%vCLLG9lI*-i)`+x!dOM7$KSh+gou6??9(pd0cHsC`L&kaq>?)q>{)4+Yy06Tv_ zkNxbf3RNxyDjm-n;76b8sFkZ4W1Iy>*wObikneJJDqZ88C4s-eh!24Z+mQAO_m>zK z8{i+negB9Or&8YSvI%p*KVZOz_V#x&M+}$y8 z-aPgo*p2j;-FtGGYJaBY7xjtY?>6AWXE(i8V&8`3*PU|Nay2%s`50%ugzv$xH~A~= zB|eY!x9!E261}OdIPGz*d}`%*V^$7t$S%>H8l6kqiY!n1JQl7uwR`f!Z-Bp(AD{XaDL!OIOR5aW=7zo@0J=stx>Iiayk551DJ}svq|$_#5N-(C)UZ z&{LmWS$qd86!;tHS&`Gzdacc4eH8oyGCrI?S;9tWttVbN+#4g%pPrZTVSv|9H#|2L z+e3f4<1T);`6+Rk;T-e&?5AY-w-2XIv97NqeIod~1s~eo)*5ksB96hoSL8!CKk6Lz z+*HhkIl}5Fe;Cw|#wxh&6_j-|SoYwMs%i%j1&yP)iOt0Sk^7mW7XbbT02Xhyx>}4zifmzY((o{1C&_E67@q(Mr4^T}hmyW`ZCT<|0Y9qt^u~l&_`wpfA)Xwb#os@Jl@4 zfDDoZUy$_ji9aGaad5asc1XU;@e8?*^CKkdIDR3oa{P*g!F+AR((iM5Y^99Y4&V%@G!>l&n}T;I)| z*0=oS_78{Fs_hIhd|{os=fnmRG3eTtbnY)B-V*H{`H?oOky6-~GZMaEKe>3E^Y%_ zqlQh@eH~a2TqV|%JI1~k+J7Q#_o3(5&v)57d5oZs=WV@$&qDiOMBA&5ziEsP`xn(2 zZ0pE=&0_Xd*#1I;{T~RtYO<@+@k4d{_8z}?(iHe!3fqe7eCP}JsM(a}cU9W=sIS}E z-^ILX9p--rm6LhBw0^a7#IrYGE$5(0dhL?iJP)?j;=)0nCvBFRO(7ra7_%^6LtIyJ z?JR`Y<6P3g{INVb2adbm*Ws}o5$acyuzN(sHm&KE3iY&YP0N7&&(#>Pminxq6HlVv z=QP;vk;Yx&U%r}s)>-MW#EmI$H2BvgZ)2Ab!p!L)?3=t7?fgjxYu6RV7n#W zJifiyyg=A(-1TjIL#emB8>lZc^Ps}C`C{B@vl!+9JQ>5VJ9)2*l zeY|O%X$R&Jt#av;H%9L8SK8*uAqew?{ma+^=*rE@`)-w`{}bcCkLCIdjP;%u#+oNy zHSLnlW!j1!*cBT)mfIGI8N9hH6}s01eax3GU_NwRs0054bscl=mY9Bp{hHrvMieaa z!5rgtK{qP<53OR4ohe|mDRq>Lp9|eDMfx1^gUzHZH%>-R{s?r3 zzSm^lr|2)%hx^RI_xAwa>$3?D<3u;=5RDP7z1SZ!MeqT78A!bn{URa%(~|M&(D#e# z7&4xc89({?;c4lDK1rY3yeg*eHV>J{Q9kn*YM60Cp9%|q!L^c#`lu6JM@ z`aPw!b?jr9iM@B \ 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 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 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 301810d2ae..aa2744333f 100644 --- a/docs/updates/migrate-v3.md +++ b/docs/updates/migrate-v3.md @@ -1,10 +1,10 @@ # Migrate to v3 -!!! warning "Superseded" - **UI5 Tooling 3.0 has been superseded by version 4.0. See [Migrate to v4](./migrate-v4.md).** - - 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/)** +::: warning +**UI5 Tooling 3.0 has been superseded by version 4.0. See [Migrate to v4](./migrate-v4.md).** +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.** @@ -19,9 +19,9 @@ This means your old projects might still work. Unless they have non-standard con ## Changes for Projects -!!! info - ✅ Projects defining **Specification Version 2.x** are expected to be **fully compatible with UI5 Tooling v3** +::: info ✅ Projects defining **Specification Version 2.x** are expected to be **fully compatible with UI5 Tooling 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 @@ -30,8 +30,9 @@ See also [Configuration: Specification Version 3.0](../pages/Configuration.md#sp ## Changes for Extensions -!!! info - ✅ Custom Tasks and Custom Middleware defining **Specification Version 2.x** are expected to be **fully compatible with UI5 Tooling v3** +::: info ✅ Custom Tasks and Custom Middleware defining **Specification Version 2.x** are expected to be **fully compatible with UI5 Tooling v3** + +::: For extensions defining the latest **Specification Versions 3.0 and higher**, some changes and improvements apply: @@ -44,28 +45,28 @@ For extensions defining the latest **Specification Versions 3.0 and higher**, so ## Changes to Dependency Configuration -!!! info - ✅ The **`ui5.dependencies` package.json configuration** becomes obsolete and is ignored in UI5 Tooling v3. +::: info ✅ The **`ui5.dependencies` package.json configuration** becomes obsolete and is ignored in UI5 Tooling 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 Tooling extension, it is added to the graph and its `dependencies` are analyzed. +```diff title="package.json" {3-7} +{ + [...] +- "ui5": { +- "dependencies": [ +- "my-package" +- ] +- } + [...] +} +``` - 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 +97,24 @@ 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 - import {graphFromPackageDependencies} from "@ui5/project/graph"; +```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 +122,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 +145,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 +170,7 @@ The following processors have been removed: | UI5 Tooling v2 | UI5 Tooling 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 +182,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 7f8ef2d522..b96dc44311 100644 --- a/docs/updates/migrate-v4.md +++ b/docs/updates/migrate-v4.md @@ -1,13 +1,14 @@ # Migrate to v4 -!!! tip "In Development" - **UI5 Tooling 4.0 has been released on July 24, 2024 🎉** +::: tip In Development - 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 Tooling 4.0](https://community.sap.com/t5/technology-blogs-by-sap/ui5-tooling-4-0/ba-p/13769578)** +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 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)* @@ -30,10 +31,13 @@ Old projects might therefore still work, unless they have a non-standard configu ## Changes for Projects -!!! 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 Tooling 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 +82,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/eslint.config.js b/eslint.config.js index d6565f5547..aa9b635e51 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -4,7 +4,7 @@ export default [ { // Add project-specific ignore patterns for ESLint here // to add to common config - ignores: ["**/site/"] + ignores: ["**/site/", ".vitepress", "src", "tailwind.config.js", "docs", "postcss.config.js"] }, ...eslintCommonConfig, // Load common ESLint config { diff --git a/mkdocs.yml b/mkdocs.yml deleted file mode 100644 index e7976635a8..0000000000 --- a/mkdocs.yml +++ /dev/null @@ -1,92 +0,0 @@ -site_name: UI5 Tooling -site_url: 'https://sap.github.io/ui5-tooling/' # required for working 404 page -repo_name: 'SAP/ui5-tooling' -repo_url: 'https://github.com/SAP/ui5-tooling' -edit_uri: ./edit/main/docs # default points to "master" branch -docs_dir: 'docs' # default -site_dir: 'site' # default -copyright: '© Copyright 2024, SAP SE and UI5 Tooling 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 e8feff947e..197bc5797a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,6 +19,13 @@ "devDependencies": { "@apidevtools/json-schema-ref-parser": "^11.7.0", "@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.9.1", @@ -29,8 +36,15 @@ "handlebars": "^4.7.8", "jsdoc": "^4.0.3", "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.9" + "postcss": "^8.4.38", + "tailwindcss": "^3.4.4", + "traverse": "^0.6.9", + "vitepress": "^1.2.3", + "vue": "^3.4.30" }, "engines": { "node": "^20.11.0 || >=22.0.0", @@ -55,6 +69,343 @@ "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.0.tgz", "integrity": "sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ==" }, + "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": "11.7.0", "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-11.7.0.tgz", @@ -252,6 +603,81 @@ "node": ">=6.9.0" } }, + "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": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "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": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "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, + "license": "MIT" + }, + "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": { + "@docsearch/react": "3.6.1", + "preact": "^10.0.0" + } + }, + "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": { + "@algolia/autocomplete-core": "1.9.3", + "@algolia/autocomplete-preset-algolia": "1.9.3", + "@docsearch/css": "3.6.1", + "algoliasearch": "^4.19.1" + }, + "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/@es-joy/jsdoccomment": { "version": "0.48.0", "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.48.0.tgz", @@ -266,90 +692,481 @@ "node": ">=16" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "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, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "node": ">=12" } }, - "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==", + "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, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=12" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", - "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "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, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=12" } }, - "node_modules/@eslint/config-array": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", - "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", + "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": { - "@eslint/object-schema": "^2.1.4", - "debug": "^4.3.1", - "minimatch": "^3.1.2" - }, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=12" } }, - "node_modules/@eslint/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "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, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@eslint/config-array/node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "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": { - "ms": "2.1.2" - }, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">=12" } }, - "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/@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, - "dependencies": { - "brace-expansion": "^1.1.7" + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "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" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "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" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", + "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", + "dev": true, + "dependencies": { + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/config-array/node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "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==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" }, "engines": { "node": "*" @@ -634,6 +1451,13 @@ "node": ">= 14.0.0" } }, + "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/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -896,36 +1720,522 @@ "node": "^16.14.0 || >=18.0.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, - "engines": { - "node": ">=14" + "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": { + "@odata2ts/odata-core": "^0.1.0" } }, - "node_modules/@pkgr/core": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", - "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "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, - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" + "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/@sigstore/bundle": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz", - "integrity": "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==", + "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": { - "@sigstore/protobuf-specs": "^0.3.2" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" + "@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": ">=14" + } + }, + "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/@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": { + "jiti": "^1.19.1" + }, + "engines": { + "node": ">=v16" + }, + "peerDependencies": { + "@types/node": "*", + "cosmiconfig": ">=8.2", + "typescript": ">=4" + } + }, + "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/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@prettier/plugin-xml": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@prettier/plugin-xml/-/plugin-xml-2.2.0.tgz", + "integrity": "sha512-UWRmygBsyj4bVXvDiqSccwT1kmsorcwQwaIy30yVh8T+Gspx4OlC0shX1y+ZuwXZvgnafmpRYKks0bAu9urJew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@xml-tools/parser": "^1.0.11", + "prettier": ">=2.4.0" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.0.tgz", + "integrity": "sha512-WTWD8PfoSAJ+qL87lE7votj3syLavxunWhzCnx3XFxFiI/BA/r3X7MUM8dVrH8rb2r4AiO8jJsr3ZjdaftmnfA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.0.tgz", + "integrity": "sha512-a1sR2zSK1B4eYkiZu17ZUZhmUQcKjk2/j9Me2IDjk1GHW7LB5Z35LEzj9iJch6gtUfsnvZs1ZNyDW2oZSThrkA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.0.tgz", + "integrity": "sha512-zOnKWLgDld/svhKO5PD9ozmL6roy5OQ5T4ThvdYZLpiOhEGY+dp2NwUmxK0Ld91LrbjrvtNAE0ERBwjqhZTRAA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.0.tgz", + "integrity": "sha512-7doS8br0xAkg48SKE2QNtMSFPFUlRdw9+votl27MvT46vo44ATBmdZdGysOevNELmZlfd+NEa0UYOA8f01WSrg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.0.tgz", + "integrity": "sha512-pWJsfQjNWNGsoCq53KjMtwdJDmh/6NubwQcz52aEwLEuvx08bzcy6tOUuawAOncPnxz/3siRtd8hiQ32G1y8VA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.0.tgz", + "integrity": "sha512-efRIANsz3UHZrnZXuEvxS9LoCOWMGD1rweciD6uJQIx2myN3a8Im1FafZBzh7zk1RJ6oKcR16dU3UPldaKd83w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.0.tgz", + "integrity": "sha512-ZrPhydkTVhyeGTW94WJ8pnl1uroqVHM3j3hjdquwAcWnmivjAwOYjTEAuEDeJvGX7xv3Z9GAvrBkEzCgHq9U1w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.0.tgz", + "integrity": "sha512-cfaupqd+UEFeURmqNP2eEvXqgbSox/LHOyN9/d2pSdV8xTrjdg3NgOFJCtc1vQ/jEke1qD0IejbBfxleBPHnPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.0.tgz", + "integrity": "sha512-ZKPan1/RvAhrUylwBXC9t7B2hXdpb/ufeu22pG2psV7RN8roOfGurEghw1ySmX/CmDDHNTDDjY3lo9hRlgtaHg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.0.tgz", + "integrity": "sha512-H1eRaCwd5E8eS8leiS+o/NqMdljkcb1d6r2h4fKSsCXQilLKArq6WS7XBLDu80Yz+nMqHVFDquwcVrQmGr28rg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.0.tgz", + "integrity": "sha512-zJ4hA+3b5tu8u7L58CCSI0A9N1vkfwPhWd/puGXwtZlsB5bTkwDNW/+JCU84+3QYmKpLi+XvHdmrlwUwDA6kqw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.0.tgz", + "integrity": "sha512-e2hrvElFIh6kW/UNBQK/kzqMNY5mO+67YtEh9OA65RM5IJXYTWiXjX6fjIiPaqOkBthYF1EqgiZ6OXKcQsM0hg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.0.tgz", + "integrity": "sha512-1vvmgDdUSebVGXWX2lIcgRebqfQSff0hMEkLJyakQ9JQUbLDkEaMsPTLOmyccyC6IJ/l3FZuJbmrBw/u0A0uCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.0.tgz", + "integrity": "sha512-s5oFkZ/hFcrlAyBTONFY1TWndfyre1wOMwU+6KCpm/iatybvrRgmZVM+vCFwxmC5ZhdlgfE0N4XorsDpi7/4XQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.0.tgz", + "integrity": "sha512-G9+TEqRnAA6nbpqyUqgTiopmnfgnMkR3kMukFBDsiyy23LZvUCpiUwjTRx6ezYCjJODXrh52rBR9oXvm+Fp5wg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.0.tgz", + "integrity": "sha512-2jsCDZwtQvRhejHLfZ1JY6w6kEuEtfF9nzYsZxzSlNVKDX+DpsDJ+Rbjkm74nvg2rdx0gwBS+IMdvwJuq3S9pQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sap-theming/theming-base-content": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/@sap-theming/theming-base-content/-/theming-base-content-11.12.0.tgz", + "integrity": "sha512-kPHlziH8e6W8VjzljOiNjgBz81GuvC8WUAi7K6F5k+ZaRc1DUkDU12x9k6B0l4u9nPtprdZTse55r3PFGuELdQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@shikijs/core": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.14.1.tgz", + "integrity": "sha512-KyHIIpKNaT20FtFPFjCQB5WVSTpLR/n+jQXhWHWVUMm9MaOaG9BGOG0MSyt7yA4+Lm+4c9rTc03tt3nYzeYSfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.4" + } + }, + "node_modules/@shikijs/transformers": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-1.14.1.tgz", + "integrity": "sha512-JJqL8QBVCJh3L61jqqEXgFq1cTycwjcGj7aSmqOEsbxnETM9hRlaB74QuXvY/fVJNjbNt8nvWo0VwAXKvMSLRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "shiki": "1.14.1" + } + }, + "node_modules/@sigstore/bundle": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz", + "integrity": "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==", + "dependencies": { + "@sigstore/protobuf-specs": "^0.3.2" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/@sigstore/core": { @@ -1011,6 +2321,89 @@ "node": ">= 10" } }, + "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": ">=10.13.0" + } + }, + "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": { + "fast-glob": "^3.2.12", + "minimatch": "^7.4.3", + "mkdirp": "^2.1.6", + "path-browserify": "^1.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", @@ -1045,6 +2438,33 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/jquery": { + "version": "3.5.30", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.30.tgz", + "integrity": "sha512-nbWKkkyb919DOUxjmRVk8vwtDb0/k8FKncmUKFi+NY+QXqWltooxTrswvz4LspQwxvLdvzBN1TImr6cw3aQx2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/sizzle": "*" + } + }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -1065,6 +2485,16 @@ "@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==", + "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", @@ -1076,18 +2506,74 @@ "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/@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/@ui5/builder": { + "node_modules/@types/qunit": { + "version": "2.19.10", + "resolved": "https://registry.npmjs.org/@types/qunit/-/qunit-2.19.10.tgz", + "integrity": "sha512-gVB+rxvxmbyPFWa6yjjKgcumWal3hyqoTXI0Oil161uWfo1OCzWZ/rnEumsx+6uVgrwPrCrhpQbLkzfildkSbg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/sizzle": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.8.tgz", + "integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@ui5/builder": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@ui5/builder/-/builder-4.0.2.tgz", "integrity": "sha512-dO60oanh7rDojmGvvz9cynOOL7GErsBhrokEtYuQcnHM+OnY+xwvVQEoQ8MylrCPtc5GOTB6wQR+zu4i6JlsOQ==", @@ -6767,6 +8253,98 @@ "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.4.38", "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.38.tgz", @@ -6817,12 +8395,293 @@ "@vue/shared": "3.4.38" } }, + "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.4.38", "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.38.tgz", "integrity": "sha512-q0xCiLkuWWQLzVrecPb0RMsNWyxICOjPrcrwxTUEHb1fsnvni4dcuyG7RT/Ie7VPTvnjzIaWzRMUBsrqNj/hhw==", "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": { + "@vueuse/core": "11.0.1", + "@vueuse/shared": "11.0.1", + "vue-demi": ">=0.14.10" + }, + "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/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": ">=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/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/@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": { + "vue-demi": ">=0.14.10" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "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": ">=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/@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": { + "chevrotain": "7.1.1" + } + }, "node_modules/abbrev": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", @@ -6862,6 +8721,19 @@ "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" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -6932,6 +8804,73 @@ "ajv": ">=5.0.0" } }, + "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": { + "@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/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": { + "@algolia/client-common": "4.24.0", + "@algolia/requester-common": "4.24.0", + "@algolia/transporter": "4.24.0" + } + }, + "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": { + "@algolia/requester-common": "4.24.0" + } + }, + "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/ansi-escape-sequences": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-6.2.2.tgz", @@ -6963,6 +8902,27 @@ "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": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/are-docs-informative": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", @@ -6972,6 +8932,13 @@ "node": ">=14" } }, + "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/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -7064,23 +9031,80 @@ "lodash": "^4.17.14" } }, - "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/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true, - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "license": "MIT" }, - "node_modules/balanced-match": { - "version": "1.0.2", + "node_modules/autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "dev": true, + "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.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "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": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.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==" }, @@ -7102,6 +9126,29 @@ "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" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/antfu" + } + }, "node_modules/bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -7154,6 +9201,39 @@ "node": ">=8" } }, + "node_modules/browserslist": { + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "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": { + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -7262,6 +9342,17 @@ "node": ">=6" } }, + "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": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, "node_modules/camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", @@ -7274,6 +9365,50 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "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": ">= 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==", + "dev": true, + "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.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/catharsis": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", @@ -7421,6 +9556,54 @@ "url": "https://github.com/sponsors/fb55" } }, + "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/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": { + "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==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/chownr": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", @@ -7557,6 +9740,13 @@ "node": ">=8.0.0" } }, + "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/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -7570,6 +9760,26 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, + "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": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/command-exists": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", @@ -7673,6 +9883,18 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "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": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case": "^2.0.2" + } + }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -7737,6 +9959,22 @@ "node": ">= 0.8" } }, + "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": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, "node_modules/copy-to": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz", @@ -7785,6 +10023,13 @@ "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.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -7844,6 +10089,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "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 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, "node_modules/css-select": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", @@ -7859,6 +10117,20 @@ "url": "https://github.com/sponsors/fb55" } }, + "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": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, "node_modules/css-what": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", @@ -7870,6 +10142,141 @@ "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==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "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": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "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": { + "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": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "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": "^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==", + "dev": true, + "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==", + "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", @@ -7959,6 +10366,16 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "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", @@ -8029,6 +10446,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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", @@ -8203,6 +10630,30 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true, + "license": "MIT" + }, "node_modules/docdash": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/docdash/-/docdash-2.0.2.tgz", @@ -8263,16 +10714,34 @@ "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==" + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "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", @@ -8503,6 +10972,45 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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" + }, + "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.1.2", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", @@ -9297,6 +11805,37 @@ "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "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": { + "tabbable": "^6.2.0" + } + }, + "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" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -9321,6 +11860,21 @@ "url": "https://github.com/sponsors/isaacs" } }, + "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": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -9329,6 +11883,20 @@ "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": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -9337,6 +11905,21 @@ "node": ">= 0.6" } }, + "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": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, "node_modules/fs-minipass": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", @@ -9348,6 +11931,21 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "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": "^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", @@ -9737,6 +12335,13 @@ "node": ">=0.10.0" } }, + "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, + "license": "MIT" + }, "node_modules/hosted-git-info": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", @@ -10167,6 +12772,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/is-boolean-object": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", @@ -10497,6 +13115,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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, + "license": "MIT", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, "node_modules/is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -10546,6 +13177,16 @@ "@pkgjs/parseargs": "^0.11.0" } }, + "node_modules/jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -10675,6 +13316,19 @@ "node": ">=6" } }, + "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": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, "node_modules/jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", @@ -11096,6 +13750,19 @@ "node": ">= 0.8.0" } }, + "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": ">=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", @@ -11110,6 +13777,16 @@ "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, + "license": "BSD-3-Clause", + "dependencies": { + "@types/trusted-types": "^2.0.2" + } + }, "node_modules/load-module": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/load-module/-/load-module-5.0.0.tgz", @@ -11197,6 +13874,13 @@ "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, + "license": "MIT" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -11209,6 +13893,23 @@ "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==", "dev": true }, + "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": { + "tslib": "^2.0.3" + } + }, "node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", @@ -11468,6 +14169,13 @@ "@jridgewell/sourcemap-codec": "^1.5.0" } }, + "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": "13.0.1", "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", @@ -11490,6 +14198,13 @@ "node": "^16.14.0 || >=18.0.0" } }, + "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", @@ -11515,6 +14230,30 @@ "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, + "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==", + "dev": true, + "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==", + "dev": true, + "license": "MIT" + }, "node_modules/marked": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", @@ -11526,6 +14265,13 @@ "node": ">= 12" } }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true, + "license": "CC0-1.0" + }, "node_modules/mdurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", @@ -11757,6 +14503,13 @@ "node": ">=8" } }, + "node_modules/minisearch": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-7.1.0.tgz", + "integrity": "sha512-tv7c/uefWdEhcu6hvrfTihflgeEi2tN6VV7HJnCjK6VxM75QQJh4t9FwJCsA2EsRS8LCnu3W87CuGPWMocOLCA==", + "dev": true, + "license": "MIT" + }, "node_modules/minizlib": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", @@ -11780,6 +14533,13 @@ "node": ">=8" } }, + "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", @@ -11865,6 +14625,18 @@ "node": "*" } }, + "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": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "node_modules/nanoid": { "version": "3.3.7", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", @@ -11903,6 +14675,17 @@ "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": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, "node_modules/node-gyp": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.2.0.tgz", @@ -11926,6 +14709,13 @@ "node": "^16.14.0 || >=18.0.0" } }, + "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", @@ -11965,6 +14755,26 @@ "node": "^16.14.0 || >=18.0.0" } }, + "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==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/npm-bundled": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.1.tgz", @@ -12071,6 +14881,16 @@ "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, "node_modules/object-inspect": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", @@ -12350,233 +15170,861 @@ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "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" + "@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": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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": ">=0.10.0" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "dependencies": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "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/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/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": { + "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": ">=8" + } + }, + "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": ">=0.10.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": ">=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==" + }, + "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": { + "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/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/peek-readable": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.1.4.tgz", + "integrity": "sha512-E7mY2VmKqw9jYuXrSWGHFuPCW2SLQenzXLF3amGaY6lXXg4/b3gj5HVM7h8ZjCO/nZS9ICs0Cz285+32FvNd/A==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "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.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" + }, + "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/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.10.0" + } + }, + "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": { + "find-up": "^5.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "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/portscanner": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz", + "integrity": "sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==", + "dependencies": { + "async": "^2.6.0", + "is-number-like": "^1.0.3" + }, + "engines": { + "node": ">=0.4", + "npm": ">=1.0.0" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.4.41", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz", + "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==", + "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" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "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": "^18.12 || ^20.9 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.38" + } + }, + "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": { + "browserslist": "^4.23.3", + "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.31" + } + }, + "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": { + "browserslist": "^4.23.3", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "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": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "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, + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "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, + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "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.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "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": { + "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.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": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "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==", + "dev": true, + "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-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": ">= 14" + } + }, + "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": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^7.0.3" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "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": { + "browserslist": "^4.23.3", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^5.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/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": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "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": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "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": { + "browserslist": "^4.23.3", + "cssnano-utils": "^5.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/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": { + "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/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": { + "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/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dependencies": { - "entities": "^4.4.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": { + "node_modules/postcss-normalize-display-values": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "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.2", - "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/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": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "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.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "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.1.4", - "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.1.4.tgz", - "integrity": "sha512-E7mY2VmKqw9jYuXrSWGHFuPCW2SLQenzXLF3amGaY6lXXg4/b3gj5HVM7h8ZjCO/nZS9ICs0Cz285+32FvNd/A==", + "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.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" - }, - "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.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "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.4.41", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz", - "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==", + "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.7", - "picocolors": "^1.0.1", - "source-map-js": "^1.2.0" + "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": { @@ -12588,6 +16036,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", @@ -12646,6 +16110,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", @@ -12737,6 +16208,16 @@ "node": ">= 0.8" } }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, "node_modules/read-package-json-fast": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", @@ -12849,6 +16330,13 @@ "node": ">=6" } }, + "node_modules/regexp-to-ast": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/regexp-to-ast/-/regexp-to-ast-0.5.0.tgz", + "integrity": "sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw==", + "dev": true, + "license": "MIT" + }, "node_modules/regexp.prototype.flags": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", @@ -13048,6 +16536,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": "6.0.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz", @@ -13122,10 +16617,46 @@ "minipass": "^7.1.2" }, "engines": { - "node": "20 || >=22" + "node": "20 || >=22" + }, + "funding": { + "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" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "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": { @@ -13234,6 +16765,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", @@ -13416,6 +16955,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.0.6", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", @@ -13486,6 +17036,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.3", "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", @@ -13678,6 +17239,16 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "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.1.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", @@ -13971,6 +17542,16 @@ "node": ">=8" } }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -13999,6 +17580,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": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -14021,6 +17665,42 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/svgo": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", + "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^5.1.0", + "css-tree": "^2.3.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, "node_modules/synckit": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz", @@ -14037,6 +17717,13 @@ "url": "https://opencollective.com/unts" } }, + "node_modules/tabbable": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", + "dev": true, + "license": "MIT" + }, "node_modules/table-layout": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-4.1.1.tgz", @@ -14050,6 +17737,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": "6.2.1", "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", @@ -14158,6 +17893,29 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -14225,6 +17983,88 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/ts-morph": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-18.0.0.tgz", + "integrity": "sha512-Kg5u0mk19PIIe4islUI/HWRvm9bC1lHejK4S0oh1zaZ77TMZAEmQC0sHQYiu2RgCQFZKXz1fMVi/7nOOeirznA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ts-morph/common": "~0.19.0", + "code-block-writer": "^12.0.0" + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tsconfig-loader": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tsconfig-loader/-/tsconfig-loader-1.1.0.tgz", + "integrity": "sha512-KrFF45RYo/JHpoAp1Lf68NupYNyRmh7BwSh1AmAQ3fdCMl8laOyZSLO5iByQR2VTkVdt454HS3c5kfVeYWq7iQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "deepmerge": "^4.2.2", + "json5": "^2.1.1", + "resolve": "^1.15.1", + "strip-bom": "^4.0.0" + } + }, "node_modules/tslib": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", @@ -14402,6 +18242,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.1.1", "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", @@ -14457,6 +18312,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.1.0", "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", @@ -14505,6 +18367,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", @@ -14513,6 +18385,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", @@ -14534,6 +18457,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", @@ -14568,6 +18498,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", @@ -14896,6 +18948,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 223953e465..9ea3d5d54d 100644 --- a/package.json +++ b/package.json @@ -29,8 +29,9 @@ "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", @@ -62,6 +63,21 @@ "jsdoc": "^4.0.3", "local-web-server": "^5.4.0", "open-cli": "^8.0.0", - "traverse": "^0.6.9" + "traverse": "^0.6.9", + "@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", + "markdown-it-implicit-figures": "^0.12.0", + "markdown-it-link-attributes": "^4.0.1", + "markdown-it-plantuml": "^1.4.1", + "postcss": "^8.4.38", + "tailwindcss": "^3.4.4", + "vitepress": "^1.2.3", + "vue": "^3.4.30" + } } 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_Tooling.graffle b/resources/UI5_Tooling.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 dfd0111002..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-tooling/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 b65f15737a..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-tooling/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 "Legal Disclosure + Terms of Use + Privacy + Trademarks + `, + + + }, + + search: { + provider: "local", + //hotKeys: [], // disable hotkeys to avoid search while using UI5 web components input + }, + + + + }, + + markdown: { + + + //theme: "material-theme-palenight", // pre rc5 default + // Add support for your own languages. + // https://github.com/shikijs/shiki/blob/main/languages.md#supporting-your-own-languages-with-shiki + languages: [ + // https://github.com/SAP-samples/vscode-abap-cds/blob/main/syntaxes/cds.tmLanguage.json + await loadSyntax('syntaxes/abapcds.tmLanguage.json', 'abapcds'), + // https://github.com/SAP/cds-textmate-grammar/blob/main/syntaxes/cds.tmLanguage.json + await loadSyntax('syntaxes/cds.tmLanguage.json', 'cds'), + // https://github.com/mechatroner/vscode_rainbow_csv/blob/master/syntaxes/csv.tmLanguage.json + await loadSyntax('syntaxes/csv.tmLanguage.json', 'csv'), + // https://github.com/mechatroner/vscode_rainbow_csv/blob/master/syntaxes/csv.tmLanguage.json + await loadSyntax('syntaxes/scsv.tmLanguage.json', 'csvs'), + // https://github.com/Huachao/vscode-restclient/blob/master/syntaxes/http.tmLanguage.json + await loadSyntax('syntaxes/http.tmLanguage.json', 'rest'), + ], + + // Configure the Markdown-it instance + config: (md) => { + // https://www.npmjs.com/package/markdown-it-implicit-figures + md.use(MarkdownItImplicitFigures, { + figcaption: true, + }); + md.use(MarkdownItPlantuml, { + //imageFormat: 'png' + }); + // https://github.com/gmunguia/markdown-it-plantuml/issues/35 + md.use(MarkdownItPlantuml, { + openMarker: "```plantuml", + closeMarker: "```", + diagramName: "uml", + imageFormat: "svg", + }); + // Textik https://textik.com/ + md.use(MarkdownItPlantuml, { + openMarker: "```ditaa", + closeMarker: "```", + diagramName: "ditaa", + imageFormat: "png", + }); + }, + }, + + + vite: { + build: { + chunkSizeWarningLimit: 4000, // chunk for local search index dominates + } + } +}); + +function nav() { + return [ + { + + text: 'V4', + items: [ + { + text: 'V3', + link: 'https://konnraad.github.io/ui5-tooling/v3/', + target: "_self" + }, + { + text: 'V2', + link: 'https://konnraad.github.io/ui5-tooling/v2/', + target: "_self" + } + ] + }, + // { + // text: "Home", + // link: "/Home/", + // activeMatch: "/", + // }, + // { text: "About", link: "/about" }, + + ]; +} + +function guide() { + + return [ + + { + text: "Introduction", + collapsed: false, + + items: [ + + { + text: "Home", + link: "/HomePage", + }, + { + text: "Getting Started", + link: "/GettingStarted", + }, + + ], + + }, + { + text: "UI5 CLI", + collapsed: true, + link: "/CLI", + + + }, + { + text: "Configuration", + collapsed: true, + + link: "/Configuration", + + }, + { + text: "Development", + collapsed: false, + items: [ + { + text: "Overview", + link: "/Overview", + }, + { + text: "OpenUI5", + link: "/OpenUI5", + }, + { + text: "SAPUI5", + link: "/SAPUI5", + }, + { + text: "Workspace", + link: "/Workspace", + }, + + ], + }, + + { + text: "Extensibility", + collapsed: false, + items: [ + { + text: "Custom Tasks", + link: "/extensibility/CustomTasks", + }, + { + text: "Custom Server Middleware", + link: "/extensibility/CustomServerMiddleware", + }, + { + text: "Project Shims", + link: "/extensibility/ProjectShims", + }, + ], + }, + { + text: "Modules", + collapsed: false, + items: [ + { + text: "Server", + link: "/Server", + }, + { + text: "Builder", + link: "/Builder", + }, + { + text: "Project", + link: "/Project", + }, + { + text: "File System", + link: "/FileSystem", + }, + ], + }, + { + text: "FAQ", + collapsed: false, + link: "/FAQ", + + }, + { + text: "Upgrade Guides", + collapsed: false, + items: [ + { + text: "Migrate to v4", + link: "/updates/migrate-v4", + }, + { + text: "Migrate to v3", + link: "/updates/migrate-v3", + }, + { + text: "Migrate to v2", + link: "/updates/migrate-v2", + }, + { + text: "Migrate to v1", + link: "/updates/migrate-v1", + }, + ], + }, + { + text: "Miscellaneous", + collapsed: false, + items: [ + { + text: "Troubleshooting", + link: "/Troubleshooting", + }, + { + text: "Benchmarking", + link: "/Benchmarking", + }, + { + text: "ECMAScript Support", + link: "/ESSupport", + }, + { + text: "Code Analysis", + link: "/CodeAnalysis", + }, + ], + }, + { + text: "API Reference", + link: "https://sap.github.io/ui5-tooling/v4/api/index.html", + + }, + + ]; +} + diff --git a/package.json b/package.json index 9ea3d5d54d..20d34f4574 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "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": "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/scripts/generateStableConfig.js b/scripts/generateStableConfig.js new file mode 100644 index 0000000000..697d334b4b --- /dev/null +++ b/scripts/generateStableConfig.js @@ -0,0 +1,10 @@ +import { readFileSync, writeFileSync} from "node:fs"; +import {fileURLToPath} from "node:url"; + +// Define the new content you want to write to the file +const content = readFileSync(fileURLToPath(new URL("../.vitepress/baseconfig.ts", import.meta.url)), "utf8"); + +// Write the new content to the file, replacing the old content +writeFileSync("./.vitepress/config.ts", content, 'utf8'); + +console.log("File has been replaced with new content."); \ No newline at end of file From f8b01ac7c1380a2156a1c44f0f2e8396517b7600 Mon Sep 17 00:00:00 2001 From: Konrad Date: Fri, 30 Aug 2024 14:05:33 +0200 Subject: [PATCH 09/12] added next link --- .github/workflows/deploy-docs-next.yml | 87 +++++ .github/workflows/deploy-docs-stable.yml | 4 +- .vitepress/config.ts | 4 +- .vitepress/pathConfigurations/nextconfig.ts | 340 ++++++++++++++++++ .../stableconfig.ts} | 0 package.json | 3 +- scripts/generateStableConfig.js | 9 +- scripts/generatenextConfig.js | 11 + 8 files changed, 450 insertions(+), 8 deletions(-) create mode 100644 .github/workflows/deploy-docs-next.yml create mode 100644 .vitepress/pathConfigurations/nextconfig.ts rename .vitepress/{baseconfig.ts => pathConfigurations/stableconfig.ts} (100%) create mode 100644 scripts/generatenextConfig.js diff --git a/.github/workflows/deploy-docs-next.yml b/.github/workflows/deploy-docs-next.yml new file mode 100644 index 0000000000..c7d7647f71 --- /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 + +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 + - 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 index de4a91e3e9..60d5e040a7 100644 --- a/.github/workflows/deploy-docs-stable.yml +++ b/.github/workflows/deploy-docs-stable.yml @@ -55,8 +55,8 @@ jobs: sudo chown -R $(id -u):$(id -g) ./site - name: generate CLI doc run: npm run generate-cli-doc - - name: generate CLI doc - run: npm run replace-base-path + - name: generate stable Config + run: npm run replace-base-path-stable - name: Build jsdoc run: npm run jsdoc-generate - name: Build vitepress build diff --git a/.vitepress/config.ts b/.vitepress/config.ts index 6a94e314ff..c505c9f9a2 100644 --- a/.vitepress/config.ts +++ b/.vitepress/config.ts @@ -97,7 +97,9 @@ export default defineConfig({ }, markdown: { - + externalLinks:{ + + }, //theme: "material-theme-palenight", // pre rc5 default // Add support for your own languages. diff --git a/.vitepress/pathConfigurations/nextconfig.ts b/.vitepress/pathConfigurations/nextconfig.ts new file mode 100644 index 0000000000..8df36eb062 --- /dev/null +++ b/.vitepress/pathConfigurations/nextconfig.ts @@ -0,0 +1,340 @@ +// using the defineConfig helper will provide TypeScript-powered +// intellisense for config options +import { defineConfig } from "vitepress"; +import { join } from "node:path"; + +// markdown +import MarkdownItImplicitFigures from "markdown-it-implicit-figures"; +import MarkdownItPlantuml from "markdown-it-plantuml"; + +// shikiji loading +import { promises as fs, truncate } from 'node:fs' +import type { LanguageInput, RawGrammar } from 'shiki' +const loadSyntax = async (file: string, name: string, alias: string = name): Promise => { + const src = await fs.readFile(join(__dirname, file)) + const grammar: RawGrammar = JSON.parse(src.toString()) + return { name, aliases: [name, alias], ...grammar } +} + +export default defineConfig({ + + base: "/ui5-tooling/next", // use this for github pages deployment or remove for CF + + srcDir: "docs", + outDir: "site", + lang: "en-US", + title: "UI5 Tooling", + + description: "An open and modular toolchain to develop state-of-the-art applications based on the UI5 framework.", + lastUpdated: false, // disable git author info + cleanUrls: false, + ignoreDeadLinks: true, + + + //to-do + //(!) Found dead link ./CLI in file docs\GettingStarted.md (x2) + //(!) Found dead link ./CODE_OF_CONDUCT in file docs\README.md + //(!) Found dead link ./CLI in file docs\SAPUI5.md + vue: { + template: { + compilerOptions: { + // treat all tags with a "ui5-" prefix as custom elements + isCustomElement: (tag: string) => tag.includes("ui5-"), + }, + }, + }, + + + head: [ + [ + "link", + { rel: "icon", type: "image/svg+xml", href: "/icons/ui5/O.svg" } + + ] + ], + + themeConfig: { + + + logo: { + light: "/icons/ui5/B.svg", + dark: "/icons/ui5/O.svg" + }, + externalLinkIcon: false, + outline: [1,3], + + nav: nav(), + + sidebar: { + "/": guide(), + }, + + socialLinks: [ + + { icon: "github", link: "https://github.com/SAP/ui5-tooling" }, + ], + + footer: { + + message: ` + © Copyright ${new Date().getFullYear()}, SAP SE and UI5 Tooling Contributors
+ Legal Disclosure + Terms of Use + Privacy + Trademarks + `, + + + }, + + search: { + provider: "local", + //hotKeys: [], // disable hotkeys to avoid search while using UI5 web components input + }, + + + + }, + + markdown: { + externalLinks:{ + + }, + + //theme: "material-theme-palenight", // pre rc5 default + // Add support for your own languages. + // https://github.com/shikijs/shiki/blob/main/languages.md#supporting-your-own-languages-with-shiki + languages: [ + // https://github.com/SAP-samples/vscode-abap-cds/blob/main/syntaxes/cds.tmLanguage.json + await loadSyntax('syntaxes/abapcds.tmLanguage.json', 'abapcds'), + // https://github.com/SAP/cds-textmate-grammar/blob/main/syntaxes/cds.tmLanguage.json + await loadSyntax('syntaxes/cds.tmLanguage.json', 'cds'), + // https://github.com/mechatroner/vscode_rainbow_csv/blob/master/syntaxes/csv.tmLanguage.json + await loadSyntax('syntaxes/csv.tmLanguage.json', 'csv'), + // https://github.com/mechatroner/vscode_rainbow_csv/blob/master/syntaxes/csv.tmLanguage.json + await loadSyntax('syntaxes/scsv.tmLanguage.json', 'csvs'), + // https://github.com/Huachao/vscode-restclient/blob/master/syntaxes/http.tmLanguage.json + await loadSyntax('syntaxes/http.tmLanguage.json', 'rest'), + ], + + // Configure the Markdown-it instance + config: (md) => { + // https://www.npmjs.com/package/markdown-it-implicit-figures + md.use(MarkdownItImplicitFigures, { + figcaption: true, + }); + md.use(MarkdownItPlantuml, { + //imageFormat: 'png' + }); + // https://github.com/gmunguia/markdown-it-plantuml/issues/35 + md.use(MarkdownItPlantuml, { + openMarker: "```plantuml", + closeMarker: "```", + diagramName: "uml", + imageFormat: "svg", + }); + // Textik https://textik.com/ + md.use(MarkdownItPlantuml, { + openMarker: "```ditaa", + closeMarker: "```", + diagramName: "ditaa", + imageFormat: "png", + }); + }, + }, + + + vite: { + build: { + chunkSizeWarningLimit: 4000, // chunk for local search index dominates + } + } +}); + +function nav() { + return [ + { + + text: 'V4', + items: [ + { + text: 'V3', + link: 'https://konnraad.github.io/ui5-tooling/v3/', + target: "_self" + }, + { + text: 'V2', + link: 'https://konnraad.github.io/ui5-tooling/v2/', + target: "_self" + } + ] + }, + // { + // text: "Home", + // link: "/Home/", + // activeMatch: "/", + // }, + // { text: "About", link: "/about" }, + + ]; +} + +function guide() { + + return [ + + { + text: "Introduction", + collapsed: false, + + items: [ + + { + text: "Home", + link: "/HomePage", + }, + { + text: "Getting Started", + link: "/GettingStarted", + }, + + ], + + }, + { + text: "UI5 CLI", + collapsed: true, + link: "/CLI", + + + }, + { + text: "Configuration", + collapsed: true, + + link: "/Configuration", + + }, + { + text: "Development", + collapsed: false, + items: [ + { + text: "Overview", + link: "/Overview", + }, + { + text: "OpenUI5", + link: "/OpenUI5", + }, + { + text: "SAPUI5", + link: "/SAPUI5", + }, + { + text: "Workspace", + link: "/Workspace", + }, + + ], + }, + + { + text: "Extensibility", + collapsed: false, + items: [ + { + text: "Custom Tasks", + link: "/extensibility/CustomTasks", + }, + { + text: "Custom Server Middleware", + link: "/extensibility/CustomServerMiddleware", + }, + { + text: "Project Shims", + link: "/extensibility/ProjectShims", + }, + ], + }, + { + text: "Modules", + collapsed: false, + items: [ + { + text: "Server", + link: "/Server", + }, + { + text: "Builder", + link: "/Builder", + }, + { + text: "Project", + link: "/Project", + }, + { + text: "File System", + link: "/FileSystem", + }, + ], + }, + { + text: "FAQ", + collapsed: false, + link: "/FAQ", + + }, + { + text: "Upgrade Guides", + collapsed: false, + items: [ + { + text: "Migrate to v4", + link: "/updates/migrate-v4", + }, + { + text: "Migrate to v3", + link: "/updates/migrate-v3", + }, + { + text: "Migrate to v2", + link: "/updates/migrate-v2", + }, + { + text: "Migrate to v1", + link: "/updates/migrate-v1", + }, + ], + }, + { + text: "Miscellaneous", + collapsed: false, + items: [ + { + text: "Troubleshooting", + link: "/Troubleshooting", + }, + { + text: "Benchmarking", + link: "/Benchmarking", + }, + { + text: "ECMAScript Support", + link: "/ESSupport", + }, + { + text: "Code Analysis", + link: "/CodeAnalysis", + }, + ], + }, + { + text: "API Reference", + link: "https://sap.github.io/ui5-tooling/v4/api/index.html", + + }, + + ]; +} + diff --git a/.vitepress/baseconfig.ts b/.vitepress/pathConfigurations/stableconfig.ts similarity index 100% rename from .vitepress/baseconfig.ts rename to .vitepress/pathConfigurations/stableconfig.ts diff --git a/package.json b/package.json index 20d34f4574..e585f7a42d 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,8 @@ "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": "node ./scripts/generateStableConfig.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/scripts/generateStableConfig.js b/scripts/generateStableConfig.js index 697d334b4b..00be35dae0 100644 --- a/scripts/generateStableConfig.js +++ b/scripts/generateStableConfig.js @@ -1,10 +1,11 @@ -import { readFileSync, writeFileSync} from "node:fs"; +import {readFileSync, writeFileSync} from "node:fs"; import {fileURLToPath} from "node:url"; // Define the new content you want to write to the file -const content = readFileSync(fileURLToPath(new URL("../.vitepress/baseconfig.ts", import.meta.url)), "utf8"); +const content = +readFileSync(fileURLToPath(new URL("../.vitepress/pathConfigurations/stableconfig.ts", import.meta.url)), "utf8"); // Write the new content to the file, replacing the old content -writeFileSync("./.vitepress/config.ts", content, 'utf8'); +writeFileSync("./.vitepress/config.ts", content, "utf8"); -console.log("File has been replaced with new content."); \ No newline at end of file +console.log("File has been replaced with new content."); diff --git a/scripts/generatenextConfig.js b/scripts/generatenextConfig.js new file mode 100644 index 0000000000..2489139a39 --- /dev/null +++ b/scripts/generatenextConfig.js @@ -0,0 +1,11 @@ +import {readFileSync, writeFileSync} from "node:fs"; +import {fileURLToPath} from "node:url"; + +// Define the new content you want to write to the file +const content = +readFileSync(fileURLToPath(new URL("../.vitepress/pathConfigurations/nextconfig.ts", import.meta.url)), "utf8"); + +// Write the new content to the file, replacing the old content +writeFileSync("./.vitepress/config.ts", content, "utf8"); + +console.log("File has been replaced with new content."); From 35888ab60a339f145d7164b2920492abba1f1943 Mon Sep 17 00:00:00 2001 From: Konrad Date: Fri, 30 Aug 2024 14:06:12 +0200 Subject: [PATCH 10/12] added next link --- .github/workflows/deploy-docs-next.yml | 2 +- .github/workflows/deploy-docs-stable.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy-docs-next.yml b/.github/workflows/deploy-docs-next.yml index c7d7647f71..faf1d4745d 100644 --- a/.github/workflows/deploy-docs-next.yml +++ b/.github/workflows/deploy-docs-next.yml @@ -1,6 +1,6 @@ # Sample workflow for building and deploying a VitePress site to GitHub Pages # -name: Deploy VitePress site to Pages +name: Deploy VitePress site to Pages (next) on: # Runs on pushes targeting the `main` branch. Change this to `master` if you're diff --git a/.github/workflows/deploy-docs-stable.yml b/.github/workflows/deploy-docs-stable.yml index 60d5e040a7..c075d56e2b 100644 --- a/.github/workflows/deploy-docs-stable.yml +++ b/.github/workflows/deploy-docs-stable.yml @@ -1,6 +1,6 @@ # Sample workflow for building and deploying a VitePress site to GitHub Pages # -name: Deploy VitePress site to Pages +name: Deploy VitePress site to Pages (stable) on: # Runs on pushes targeting the `main` branch. Change this to `master` if you're From d3fbc14918a3f50dd8120534ffc27665d5364df4 Mon Sep 17 00:00:00 2001 From: Konrad Date: Fri, 30 Aug 2024 14:14:33 +0200 Subject: [PATCH 11/12] next link added (fix) --- .github/workflows/deploy-docs-next.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy-docs-next.yml b/.github/workflows/deploy-docs-next.yml index faf1d4745d..6366006e7a 100644 --- a/.github/workflows/deploy-docs-next.yml +++ b/.github/workflows/deploy-docs-next.yml @@ -56,7 +56,7 @@ jobs: - name: generate CLI doc run: npm run generate-cli-doc - name: generate next config - run: npm run replace-base-path + run: npm run replace-base-path-next - name: Build jsdoc run: npm run jsdoc-generate - name: Build vitepress build From 83ab60696c978ef3fe67fe08019562b854dcbf34 Mon Sep 17 00:00:00 2001 From: Konrad Date: Fri, 30 Aug 2024 14:25:52 +0200 Subject: [PATCH 12/12] fix? --- .vitepress/pathConfigurations/nextconfig.ts | 3 +-- .vitepress/pathConfigurations/stableconfig.ts | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/.vitepress/pathConfigurations/nextconfig.ts b/.vitepress/pathConfigurations/nextconfig.ts index 8df36eb062..b4e53bcc40 100644 --- a/.vitepress/pathConfigurations/nextconfig.ts +++ b/.vitepress/pathConfigurations/nextconfig.ts @@ -18,8 +18,7 @@ const loadSyntax = async (file: string, name: string, alias: string = name): Pro export default defineConfig({ - base: "/ui5-tooling/next", // use this for github pages deployment or remove for CF - + base: "/ui5-tooling/next/", // use this for github pages deployment or remove for CF srcDir: "docs", outDir: "site", lang: "en-US", diff --git a/.vitepress/pathConfigurations/stableconfig.ts b/.vitepress/pathConfigurations/stableconfig.ts index a8cbd01d4e..c126a117f9 100644 --- a/.vitepress/pathConfigurations/stableconfig.ts +++ b/.vitepress/pathConfigurations/stableconfig.ts @@ -19,7 +19,6 @@ const loadSyntax = async (file: string, name: string, alias: string = name): Pro export default defineConfig({ base: "/ui5-tooling/stable/", // use this for github pages deployment or remove for CF - srcDir: "docs", outDir: "site", lang: "en-US",