From 29b0efe71b77d3e0517a79e66c6e45b3d6dea2f2 Mon Sep 17 00:00:00 2001 From: this-is-tobi Date: Mon, 12 Aug 2024 23:46:30 +0200 Subject: [PATCH 1/2] style: :heavy_plus_sign: add eslint --- .vscode/settings.json | 94 ++ eslint.config.js | 29 + package.json | 7 +- pnpm-lock.yaml | 3483 ++++++++++++++++++++++++++++++++++++----- 4 files changed, 3191 insertions(+), 422 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 eslint.config.js diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..a60fc40 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,94 @@ +{ + // visuals + "window.autoDetectColorScheme": true, + "editor.fontLigatures": "'ss01', 'ss02', 'ss03', 'ss06', 'zero'", + "editor.cursorBlinking": "phase", + "editor.suggestSelection": "first", + "editor.wordWrap": "on", + "editor.bracketPairColorization.enabled": true, + "editor.tabSize": 2, + "editor.minimap.enabled": false, + "search.exclude": { + "**/.git": true, + "**/.nuxt": true, + "**/.pnpm": true, + "**/.vscode": true, + "**/.yarn": true, + "**/.turbo": true, + "**/dist/**": true, + "**/out/**": true, + "**/logs": true, + "**/node_modules": true, + "**/package-lock.json": true, + "**/pnpm-lock.yaml": true, + "**/yarn.lock": true + }, + // general + "editor.unicodeHighlight.invisibleCharacters": false, + "workbench.startupEditor": "none", + // git + "git.autofetch": true, + "git.untrackedChanges": "separate", + // github + "githubPullRequests.pullBranch": "never", + // eslint + "editor.codeActionsOnSave": { + "source.fixAll": "never", + "source.fixAll.eslint": "explicit", + "source.organizeImports": "never" + }, + "eslint.quiet": true, + "eslint.validate": [ + "javascript", + "javascriptreact", + "typescript", + "typescriptreact", + "vue", + "html", + "markdown", + "json", + "jsonc", + "yaml", + "toml", + "xml", + "gql", + "graphql", + "astro", + "svelte", + "css", + "less", + "scss", + "pcss", + "postcss" + ], + // languages + "[javascript]": { + "editor.defaultFormatter": "dbaeumer.vscode-eslint" + }, + "javascript.preferences.quoteStyle": "single", + "javascript.preferences.importModuleSpecifierEnding": "js", + "javascript.suggest.completeJSDocs": true, + "javascript.suggest.jsdoc.generateReturns": true, + "[typescript]": { + "editor.defaultFormatter": "dbaeumer.vscode-eslint" + }, + "typescript.preferences.quoteStyle": "single", + "typescript.preferences.importModuleSpecifierEnding": "js", + "typescript.suggest.completeJSDocs": true, + "typescript.suggest.jsdoc.generateReturns": true, + "[html]": { + "editor.defaultFormatter": "dbaeumer.vscode-eslint" + }, + "[markdown]": { + "editor.quickSuggestions": { + "other": true, + "comments": true, + "strings": true + }, + "editor.formatOnSave": true, + "editor.formatOnPaste": true, + "editor.defaultFormatter": "dbaeumer.vscode-eslint" + }, + // conventional commits + "conventionalCommits.showNewVersionNotes": false +} diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..b8bde87 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,29 @@ +import antfu from '@antfu/eslint-config' + +export default antfu({ + stylistic: { + overrides: { + 'style/comma-dangle': ['error', 'always-multiline'], + 'style/quote-props': ['error', 'as-needed', { keywords: false, unnecessary: true }], + 'style/brace-style': ['error', '1tbs', { allowSingleLine: true }], + 'style/max-statements-per-line': ['error', { max: 2 }], + 'jsonc/sort-keys': 'off', + 'node/prefer-global/process': ['error', 'always'], + 'node/prefer-global/console': ['error', 'always'], + 'yaml/quotes': ['error', { prefer: 'double' }], + }, + }, + yaml: { + overrides: { + 'yaml/quotes': ['error', { prefer: 'double' }], + }, + }, + ignores: [ + '**/node_modules', + '**/pnpm-lock.yaml', + '**/.turbo', + 'helm/templates', + '**/tsconfig.base.json', + '**/tsconfig.json', + ], +}) diff --git a/package.json b/package.json index 2ceb247..a6b1dda 100644 --- a/package.json +++ b/package.json @@ -1,18 +1,21 @@ { "name": "@cloud-pi-native/docs", - "version": "1.0.0", "type": "module", + "version": "1.0.0", "scripts": { "build": "vitepress build docs", "dev": "vitepress dev docs --port 8081", "docker:build": "docker build --tag cloud-pi-native/documentation --target prod .", "docker:run": "docker run --publish 8081:8080 --rm cloud-pi-native/documentation", + "format": "eslint . --fix", + "lint": "eslint .", "preview": "vitepress preview docs --port 8081" }, "devDependencies": { + "@antfu/eslint-config": "^2.24.1", "vitepress": "^1.2.3" }, "volta": { "node": "20.14.0" } -} \ No newline at end of file +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0a0e441..37e1dba 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,9 +8,12 @@ importers: .: devDependencies: + '@antfu/eslint-config': + specifier: ^2.24.1 + version: 2.25.1(@typescript-eslint/utils@8.1.0(eslint@9.9.0)(typescript@5.5.4))(@vue/compiler-sfc@3.4.27)(eslint@9.9.0)(typescript@5.5.4) vitepress: specifier: ^1.2.3 - version: 1.2.3(@algolia/client-search@4.20.0)(postcss@8.4.38)(search-insights@2.9.0) + version: 1.2.3(@algolia/client-search@4.20.0)(postcss@8.4.38)(search-insights@2.9.0)(typescript@5.5.4) packages: @@ -76,6 +79,62 @@ packages: '@algolia/transporter@4.20.0': resolution: {integrity: sha512-Lsii1pGWOAISbzeyuf+r/GPhvHMPHSPrTDWNcIzOE1SG1inlJHICaVe2ikuoRjcpgxZNU54Jl+if15SUCsaTUg==} + '@antfu/eslint-config@2.25.1': + resolution: {integrity: sha512-aWnq8kNL4MM3RjXJtMvCGhzzXiukbNn4oXT3RFVgQ2KkBmryrlCos8HW7zfF27gggSqrMX8p75wHk8zM/Mo9+Q==} + hasBin: true + peerDependencies: + '@eslint-react/eslint-plugin': ^1.5.8 + '@prettier/plugin-xml': ^3.4.1 + '@unocss/eslint-plugin': '>=0.50.0' + astro-eslint-parser: ^1.0.2 + eslint: '>=8.40.0' + eslint-plugin-astro: ^1.2.0 + eslint-plugin-format: '>=0.1.0' + eslint-plugin-react-hooks: ^4.6.0 + eslint-plugin-react-refresh: ^0.4.4 + eslint-plugin-solid: ^0.13.2 + eslint-plugin-svelte: '>=2.35.1' + prettier-plugin-astro: ^0.13.0 + prettier-plugin-slidev: ^1.0.5 + svelte-eslint-parser: '>=0.37.0' + peerDependenciesMeta: + '@eslint-react/eslint-plugin': + optional: true + '@prettier/plugin-xml': + optional: true + '@unocss/eslint-plugin': + optional: true + astro-eslint-parser: + optional: true + eslint-plugin-astro: + optional: true + eslint-plugin-format: + optional: true + eslint-plugin-react-hooks: + optional: true + eslint-plugin-react-refresh: + optional: true + eslint-plugin-solid: + optional: true + eslint-plugin-svelte: + optional: true + prettier-plugin-astro: + optional: true + prettier-plugin-slidev: + optional: true + svelte-eslint-parser: + optional: true + + '@antfu/install-pkg@0.3.4': + resolution: {integrity: sha512-xmYFuDsaS5hlqVSJYVIzBGnUBhZR6NpwelQx/qr9wHTenqMF14YhsexWADcFyMCKwf/vApnvLTfEEnaOBvo5SA==} + + '@antfu/utils@0.7.10': + resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==} + + '@babel/code-frame@7.24.7': + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} + engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.22.5': resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} engines: {node: '>=6.9.0'} @@ -84,6 +143,14 @@ packages: resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.24.7': + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + engines: {node: '>=6.9.0'} + + '@babel/highlight@7.24.7': + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} + engines: {node: '>=6.9.0'} + '@babel/parser@7.24.5': resolution: {integrity: sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==} engines: {node: '>=6.0.0'} @@ -93,6 +160,14 @@ packages: resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} engines: {node: '>=6.9.0'} + '@clack/core@0.3.4': + resolution: {integrity: sha512-H4hxZDXgHtWTwV3RAVenqcC4VbJZNegbBjlPvzOzCouXtS2y3sDvlO3IsbrPNWuLWPPlYVYPghQdSF64683Ldw==} + + '@clack/prompts@0.7.0': + resolution: {integrity: sha512-0MhX9/B4iL6Re04jPrttDm+BsP8y6mS7byuv0BvXgdXhbV5PdlsHt55dvNsuBCPZ7xq1oTAOOuotR9NFbQyMSA==} + bundledDependencies: + - is-unicode-supported + '@docsearch/css@3.6.0': resolution: {integrity: sha512-+sbxb71sWre+PwDK7X2T8+bhS6clcVMLwBPznX45Qu6opJcgRjAp7gYSDzVFp187J+feSj5dNBN1mJoi6ckkUQ==} @@ -116,6 +191,14 @@ packages: search-insights: optional: true + '@es-joy/jsdoccomment@0.43.1': + resolution: {integrity: sha512-I238eDtOolvCuvtxrnqtlBaw0BwdQuYqK7eA6XIonicMdOOOb75mqdIzkGDUbS04+1Di007rgm9snFRNeVrOog==} + engines: {node: '>=16'} + + '@es-joy/jsdoccomment@0.46.0': + resolution: {integrity: sha512-C3Axuq1xd/9VqFZpW4YAzOx5O9q/LP46uIQy/iNDpHG3fmPa6TBtvfglMCs3RBiBxAIi0Go97r8+jvTt55XMyQ==} + engines: {node: '>=16'} + '@esbuild/aix-ppc64@0.21.5': resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} engines: {node: '>=12'} @@ -254,9 +337,59 @@ packages: cpu: [x64] os: [win32] + '@eslint-community/eslint-utils@4.4.0': + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.11.0': + resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.17.1': + resolution: {integrity: sha512-BlYOpej8AQ8Ev9xVqroV7a02JK3SkBAaN9GfMMH9W6Ch8FlQlkjGw4Ir7+FgYwfirivAf4t+GtzuAxqfukmISA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.1.0': + resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.9.0': + resolution: {integrity: sha512-hhetes6ZHP3BlXLxmd8K2SNgkhNSi+UcecbnwWKwpP7kyi/uC75DJ1lOOBO3xrC4jyojtGE3YxKZPHfk4yrgug==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.4': + resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.3.0': + resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==} + engines: {node: '>=18.18'} + '@jridgewell/sourcemap-codec@1.4.15': resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@pkgr/core@0.1.1': + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + '@rollup/rollup-android-arm-eabi@4.17.2': resolution: {integrity: sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==} cpu: [arm] @@ -343,21 +476,152 @@ packages: '@shikijs/transformers@1.7.0': resolution: {integrity: sha512-QX3TP+CS4yYLt4X4Dk7wT0MsC7yweTYHMAAKY+ay+uuR9yRdFae/h+hivny2O+YixJHfZl57xtiZfWSrHdyVhQ==} + '@stylistic/eslint-plugin-js@2.6.2': + resolution: {integrity: sha512-wCr/kVctAPayMU3pcOI1MKR7MoKIh6VKZU89lPklAqtJoxT+Em6RueiiARbpznUYG5eg3LymiU+aMD+aIZXdqA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: '>=8.40.0' + + '@stylistic/eslint-plugin-jsx@2.6.2': + resolution: {integrity: sha512-dSXK/fSPA938J1fBi10QmhzLKtZ/2TuyVNHQMk8jUhWfKJDleAogaSqcWNAbN8fwcoe9UWmt/3StiIf2oYC1aQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: '>=8.40.0' + + '@stylistic/eslint-plugin-plus@2.6.2': + resolution: {integrity: sha512-cANcPASfRvq3VTbbQCrSIXq+2AI0IW68PNYaZoXXS0ENlp7HDB8dmrsJnOgWCcoEvdCB8z/eWcG/eq/v5Qcl+Q==} + peerDependencies: + eslint: '*' + + '@stylistic/eslint-plugin-ts@2.6.2': + resolution: {integrity: sha512-6OEN3VtUNxjgOvWPavnC10MByr1H4zsgwNND3rQXr5lDFv93MLUnTsH+/SH15OkuqdyJgrQILI6b9lYecb1vIg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: '>=8.40.0' + + '@stylistic/eslint-plugin@2.6.2': + resolution: {integrity: sha512-Ic5oFNM/25iuagob6LiIBkSI/A2y45TsyKtDtODXHRZDy52WfPfeexI6r+OH5+aWN9QGob2Bw+4JRM9/4areWw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: '>=8.40.0' + + '@types/eslint@8.56.11': + resolution: {integrity: sha512-sVBpJMf7UPo/wGecYOpk2aQya2VUGeHhe38WG7/mN5FufNSubf5VT9Uh9Uyp8/eLJpu1/tuhJ/qTo4mhSB4V4Q==} + + '@types/eslint@9.6.0': + resolution: {integrity: sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==} + '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/linkify-it@5.0.0': resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} '@types/markdown-it@14.1.1': resolution: {integrity: sha512-4NpsnpYl2Gt1ljyBGrKMxFYAYvpqbnnkgP/i/g+NLpjEUa3obn1XJCur9YbEXKDAkaXqsR1LbDnGEJ0MmKFxfg==} + '@types/mdast@3.0.15': + resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} + '@types/mdurl@2.0.0': resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} + '@types/normalize-package-data@2.4.4': + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + + '@types/unist@2.0.10': + resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} + '@types/web-bluetooth@0.0.20': resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} + '@typescript-eslint/eslint-plugin@8.1.0': + resolution: {integrity: sha512-LlNBaHFCEBPHyD4pZXb35mzjGkuGKXU5eeCA1SxvHfiRES0E82dOounfVpL4DCqYvJEKab0bZIA0gCRpdLKkCw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@8.1.0': + resolution: {integrity: sha512-U7iTAtGgJk6DPX9wIWPPOlt1gO57097G06gIcl0N0EEnNw8RGD62c+2/DiP/zL7KrkqnnqF7gtFGR7YgzPllTA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@7.18.0': + resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@typescript-eslint/scope-manager@8.1.0': + resolution: {integrity: sha512-DsuOZQji687sQUjm4N6c9xABJa7fjvfIdjqpSIIVOgaENf2jFXiM9hIBZOL3hb6DHK9Nvd2d7zZnoMLf9e0OtQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@8.1.0': + resolution: {integrity: sha512-oLYvTxljVvsMnldfl6jIKxTaU7ok7km0KDrwOt1RHYu6nxlhN3TIx8k5Q52L6wR33nOwDgM7VwW1fT1qMNfFIA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/types@7.18.0': + resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@typescript-eslint/types@8.1.0': + resolution: {integrity: sha512-q2/Bxa0gMOu/2/AKALI0tCKbG2zppccnRIRCW6BaaTlRVaPKft4oVYPp7WOPpcnsgbr0qROAVCVKCvIQ0tbWog==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@7.18.0': + resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/typescript-estree@8.1.0': + resolution: {integrity: sha512-NTHhmufocEkMiAord/g++gWKb0Fr34e9AExBRdqgWdVBaKoei2dIyYKD9Q0jBnvfbEA5zaf8plUFMUH6kQ0vGg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@7.18.0': + resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + + '@typescript-eslint/utils@8.1.0': + resolution: {integrity: sha512-ypRueFNKTIFwqPeJBfeIpxZ895PQhNyH4YID6js0UoBImWYoSjBsahUn9KMiJXh94uOjVBgHD9AmkyPsPnFwJA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + + '@typescript-eslint/visitor-keys@7.18.0': + resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@typescript-eslint/visitor-keys@8.1.0': + resolution: {integrity: sha512-ba0lNI19awqZ5ZNKh6wCModMwoZs457StTebQ0q1NP58zSi2F6MOZRXwfKZy+jB78JNJ/WH8GSh2IQNzXX8Nag==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@vitejs/plugin-vue@5.0.5': resolution: {integrity: sha512-LOjm7XeIimLBZyzinBQ6OSm3UBCNVCpLkxGC0oWmm2YPzVZoxMsdvNVimLTBzpAnR9hl/yn1SHGuRfe6/Td9rQ==} engines: {node: ^18.0.0 || >=20.0.0} @@ -365,6 +629,21 @@ packages: vite: ^5.0.0 vue: ^3.2.25 + '@vitest/eslint-plugin@1.0.1': + resolution: {integrity: sha512-albpL56cL9XMwHJWCWZqjDxkuDkBXBF3WpPGOv6q2WA3cipCP41cKEwfSGktoRNGmPN77wuX452O8pM+z+ApNw==} + peerDependencies: + '@typescript-eslint/utils': '>= 8.0' + eslint: '>= 8.57.0' + typescript: '>= 5.0.0' + vitest: '*' + peerDependenciesMeta: + '@typescript-eslint/utils': + optional: true + typescript: + optional: true + vitest: + optional: true + '@vue/compiler-core@3.4.27': resolution: {integrity: sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg==} @@ -455,601 +734,2727 @@ packages: '@vueuse/shared@10.11.0': resolution: {integrity: sha512-fyNoIXEq3PfX1L3NkNhtVQUSRtqYwJtJg+Bp9rIzculIZWHTkKSysujrOk2J+NrRulLTQH9+3gGSfYLWSEWU1A==} + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + algoliasearch@4.20.0: resolution: {integrity: sha512-y+UHEjnOItoNy0bYO+WWmLWBlPwDjKHW6mNHrPi0NkuhpQOOEbrkwQH/wgKFDLh7qlKjzoKeiRtlpewDPDG23g==} - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} - entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} - esbuild@0.21.5: - resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} - engines: {node: '>=12'} - hasBin: true + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} - estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + are-docs-informative@0.0.2: + resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==} + engines: {node: '>=14'} - focus-trap@7.5.4: - resolution: {integrity: sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==} + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} - hookable@5.5.3: - resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - magic-string@0.30.10: - resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - mark.js@8.11.1: - resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - minisearch@6.3.0: - resolution: {integrity: sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ==} + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - mitt@3.0.1: - resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} - nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + browserslist@4.23.3: + resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - perfect-debounce@1.0.0: - resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} - picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} - postcss@8.4.38: - resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} - engines: {node: ^10 || ^12 || >=14} + caniuse-lite@1.0.30001651: + resolution: {integrity: sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==} - preact@10.18.2: - resolution: {integrity: sha512-X/K43vocUHDg0XhWVmTTMbec4LT/iBMh+csCEqJk+pJqegaXsvjdqN80ZZ3L+93azWCnWCZ+WGwYb8SplxeNjA==} + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} - rfdc@1.3.1: - resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} - rollup@4.17.2: - resolution: {integrity: sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true + character-entities-legacy@1.1.4: + resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} - search-insights@2.9.0: - resolution: {integrity: sha512-bkWW9nIHOFkLwjQ1xqVaMbjjO5vhP26ERsH9Y3pKr8imthofEFIxlnOabkmGcw6ksRj9jWidcI65vvjJH/nTGg==} + character-entities@1.2.4: + resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} - shiki@1.7.0: - resolution: {integrity: sha512-H5pMn4JA7ayx8H0qOz1k2qANq6mZVCMl1gKLK6kWIrv1s2Ial4EmD4s4jE8QB5Dw03d/oCQUxc24sotuyR5byA==} + character-reference-invalid@1.1.4: + resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} - source-map-js@1.2.0: - resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} - engines: {node: '>=0.10.0'} + ci-info@4.0.0: + resolution: {integrity: sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==} + engines: {node: '>=8'} - speakingurl@14.0.1: - resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} - engines: {node: '>=0.10.0'} + clean-regexp@1.0.0: + resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} + engines: {node: '>=4'} - tabbable@6.2.0: - resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} - to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - vite@5.3.1: - resolution: {integrity: sha512-XBmSKRLXLxiaPYamLv3/hnP/KXDai1NDexN0FpkTaZXTfycHvkRHoenpgl/fvuK/kPbB6xAgoyiryAhQNxYmAQ==} - engines: {node: ^18.0.0 || >=20.0.0} + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + comment-parser@1.4.1: + resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} + engines: {node: '>= 12.0.0'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + confbox@0.1.7: + resolution: {integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==} + + core-js-compat@3.38.0: + resolution: {integrity: sha512-75LAicdLa4OJVwFxFbQR3NdnZjNgX6ILpVcVzcC4T2smerB5lELMrJQQQoWV6TiuC/vlaFqgU2tKQx9w5s0e0A==} + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} hasBin: true + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 + supports-color: '*' peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: + supports-color: optional: true - vitepress@1.2.3: - resolution: {integrity: sha512-GvEsrEeNLiDE1+fuwDAYJCYLNZDAna+EtnXlPajhv/MYeTjbNK6Bvyg6NoTdO1sbwuQJ0vuJR99bOlH53bo6lg==} - hasBin: true + debug@4.3.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + engines: {node: '>=6.0'} peerDependencies: - markdown-it-mathjax3: ^4 - postcss: ^8 + supports-color: '*' peerDependenciesMeta: - markdown-it-mathjax3: - optional: true - postcss: + supports-color: optional: true - vue-demi@0.14.8: - resolution: {integrity: sha512-Uuqnk9YE9SsWeReYqK2alDI5YzciATE0r2SkA6iMAtuXvNTMNACJLJEXNXaEy94ECuBe4Sk6RzRU80kjdbIo1Q==} + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + electron-to-chromium@1.5.6: + resolution: {integrity: sha512-jwXWsM5RPf6j9dPYzaorcBSUg6AiqocPEyMpkchkvntaH9HGfOOMZwxMJjDY/XEs3T5dM7uyH1VhRMkqUU9qVw==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + enhanced-resolve@5.17.1: + resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} + engines: {node: '>=10.13.0'} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + es-module-lexer@1.5.4: + resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} engines: {node: '>=12'} hasBin: true + + escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-compat-utils@0.5.1: + resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==} + engines: {node: '>=12'} peerDependencies: - '@vue/composition-api': ^1.0.0-rc.1 - vue: ^3.0.0-0 || ^2.6.0 - peerDependenciesMeta: - '@vue/composition-api': - optional: true + eslint: '>=6.0.0' - vue@3.4.27: - resolution: {integrity: sha512-8s/56uK6r01r1icG/aEOHqyMVxd1bkYcSe9j8HcKtr/xTOFWvnzIVTehNW+5Yt89f+DLBe4A569pnZLS5HzAMA==} + eslint-config-flat-gitignore@0.1.8: + resolution: {integrity: sha512-OEUbS2wzzYtUfshjOqzFo4Bl4lHykXUdM08TCnYNl7ki+niW4Q1R0j0FDFDr0vjVsI5ZFOz5LvluxOP+Ew+dYw==} + + eslint-flat-config-utils@0.3.0: + resolution: {integrity: sha512-FaFQLUunAl6YK7aU/pT23DXYVWg/cEHbSfxwAxpCGT6Su8H9RfkmzKLh1G2bba46p6dTlQeA4VTiV5//0SeToQ==} + + eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + + eslint-merge-processors@0.1.0: + resolution: {integrity: sha512-IvRXXtEajLeyssvW4wJcZ2etxkR9mUf4zpNwgI+m/Uac9RfXHskuJefkHUcawVzePnd6xp24enp5jfgdHzjRdQ==} peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + eslint: '*' -snapshots: + eslint-plugin-antfu@2.3.5: + resolution: {integrity: sha512-q3S9q7O176sd5VyPKksN1WGtB0l8W1jeWs61xWAmbM5JdZN8q9e0Vmm+tY/YOygHfn1eK9uE4/MGyZBebdtgLA==} + peerDependencies: + eslint: '*' + + eslint-plugin-command@0.2.3: + resolution: {integrity: sha512-1bBYNfjZg60N2ZpLV5ATYSYyueIJ+zl5yKrTs0UFDdnyu07dNSZ7Xplnc+Wb6SXTdc1sIaoIrnuyhvztcltX6A==} + peerDependencies: + eslint: '*' + + eslint-plugin-es-x@7.8.0: + resolution: {integrity: sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '>=8' + + eslint-plugin-eslint-comments@3.2.0: + resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} + engines: {node: '>=6.5.0'} + peerDependencies: + eslint: '>=4.19.1' + + eslint-plugin-import-x@3.1.0: + resolution: {integrity: sha512-/UbPA+bYY7nIxcjL3kpcDY3UNdoLHFhyBFzHox2M0ypcUoueTn6woZUUmzzi5et/dXChksasYYFeKE2wshOrhg==} + engines: {node: '>=16'} + peerDependencies: + eslint: ^8.56.0 || ^9.0.0-0 + + eslint-plugin-jsdoc@50.0.1: + resolution: {integrity: sha512-UayhAysIk1Du8InV27WMbV4AMSJSu60+bekmeuGK2OUy4QJSFPr1srYT6AInykGkmMdRuHfDX6Q0tJEr8BtDtg==} + engines: {node: '>=18'} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 + + eslint-plugin-jsonc@2.16.0: + resolution: {integrity: sha512-Af/ZL5mgfb8FFNleH6KlO4/VdmDuTqmM+SPnWcdoWywTetv7kq+vQe99UyQb9XO3b0OWLVuTH7H0d/PXYCMdSg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' + + eslint-plugin-markdown@5.1.0: + resolution: {integrity: sha512-SJeyKko1K6GwI0AN6xeCDToXDkfKZfXcexA6B+O2Wr2btUS9GrC+YgwSyVli5DJnctUHjFXcQ2cqTaAmVoLi2A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: '>=8' + + eslint-plugin-n@17.10.2: + resolution: {integrity: sha512-e+s4eAf5NtJaxPhTNu3qMO0Iz40WANS93w9LQgYcvuljgvDmWi/a3rh+OrNyMHeng6aOWGJO0rCg5lH4zi8yTw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: '>=8.23.0' + + eslint-plugin-no-only-tests@3.1.0: + resolution: {integrity: sha512-Lf4YW/bL6Un1R6A76pRZyE1dl1vr31G/ev8UzIc/geCgFWyrKil8hVjYqWVKGB/UIGmb6Slzs9T0wNezdSVegw==} + engines: {node: '>=5.0.0'} + + eslint-plugin-perfectionist@3.1.3: + resolution: {integrity: sha512-eFRkBvMnnHjle5MuqTzoTIukWIr7Gm2wXvhTj3HyT/ku2J5oj7quBRbvZ8iYkjPyUFBpir3ZBnVQ5vFYswvpQg==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + astro-eslint-parser: ^1.0.2 + eslint: '>=8.0.0' + svelte: '>=3.0.0' + svelte-eslint-parser: ^0.41.0 + vue-eslint-parser: '>=9.0.0' + peerDependenciesMeta: + astro-eslint-parser: + optional: true + svelte: + optional: true + svelte-eslint-parser: + optional: true + vue-eslint-parser: + optional: true + + eslint-plugin-regexp@2.6.0: + resolution: {integrity: sha512-FCL851+kislsTEQEMioAlpDuK5+E5vs0hi1bF8cFlPlHcEjeRhuAzEsGikXRreE+0j4WhW2uO54MqTjXtYOi3A==} + engines: {node: ^18 || >=20} + peerDependencies: + eslint: '>=8.44.0' + + eslint-plugin-toml@0.11.1: + resolution: {integrity: sha512-Y1WuMSzfZpeMIrmlP1nUh3kT8p96mThIq4NnHrYUhg10IKQgGfBZjAWnrg9fBqguiX4iFps/x/3Hb5TxBisfdw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' + + eslint-plugin-unicorn@55.0.0: + resolution: {integrity: sha512-n3AKiVpY2/uDcGrS3+QsYDkjPfaOrNrsfQxU9nt5nitd9KuvVXrfAvgCO9DYPSfap+Gqjw9EOrXIsBp5tlHZjA==} + engines: {node: '>=18.18'} + peerDependencies: + eslint: '>=8.56.0' + + eslint-plugin-unused-imports@4.1.3: + resolution: {integrity: sha512-lqrNZIZjFMUr7P06eoKtQLwyVRibvG7N+LtfKtObYGizAAGrcqLkc3tDx+iAik2z7q0j/XI3ihjupIqxhFabFA==} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0 + eslint: ^9.0.0 || ^8.0.0 + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + + eslint-plugin-vue@9.27.0: + resolution: {integrity: sha512-5Dw3yxEyuBSXTzT5/Ge1X5kIkRTQ3nvBn/VwPwInNiZBSJOO/timWMUaflONnFBzU6NhB68lxnCda7ULV5N7LA==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 + + eslint-plugin-yml@1.14.0: + resolution: {integrity: sha512-ESUpgYPOcAYQO9czugcX5OqRvn/ydDVwGCPXY4YjPqc09rHaUVUA6IE6HLQys4rXk/S+qx3EwTd1wHCwam/OWQ==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' + + eslint-processor-vue-blocks@0.1.2: + resolution: {integrity: sha512-PfpJ4uKHnqeL/fXUnzYkOax3aIenlwewXRX8jFinA1a2yCFnLgMuiH3xvCgvHHUlV2xJWQHbCTdiJWGwb3NqpQ==} + peerDependencies: + '@vue/compiler-sfc': ^3.3.0 + eslint: ^8.50.0 || ^9.0.0 + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-scope@8.0.2: + resolution: {integrity: sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.0.0: + resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.9.0: + resolution: {integrity: sha512-JfiKJrbx0506OEerjK2Y1QlldtBxkAlLxT5OEcRF8uaQ86noDe2k31Vw9rnSWv+MXZHj7OOUV/dA0AhdLFcyvA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.1.0: + resolution: {integrity: sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up-simple@1.0.0: + resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==} + engines: {node: '>=18'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + + focus-trap@7.5.4: + resolution: {integrity: sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-tsconfig@4.7.6: + resolution: {integrity: sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globals@15.9.0: + resolution: {integrity: sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==} + engines: {node: '>=18'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + + hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + is-alphabetical@1.0.4: + resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} + + is-alphanumerical@1.0.4: + resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + + is-core-module@2.15.0: + resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==} + engines: {node: '>= 0.4'} + + is-decimal@1.0.4: + resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-hexadecimal@1.0.4: + resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsdoc-type-pratt-parser@4.0.0: + resolution: {integrity: sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==} + engines: {node: '>=12.0.0'} + + jsdoc-type-pratt-parser@4.1.0: + resolution: {integrity: sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==} + engines: {node: '>=12.0.0'} + + jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + + jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + jsonc-eslint-parser@2.4.0: + resolution: {integrity: sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + local-pkg@0.5.0: + resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} + engines: {node: '>=14'} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + magic-string@0.30.10: + resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} + + mark.js@8.11.1: + resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} + + mdast-util-from-markdown@0.8.5: + resolution: {integrity: sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==} + + mdast-util-to-string@2.0.0: + resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromark@2.11.4: + resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==} + + micromatch@4.0.7: + resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + engines: {node: '>=8.6'} + + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + + minimatch@10.0.1: + resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} + engines: {node: 20 || >=22} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minisearch@6.3.0: + resolution: {integrity: sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ==} + + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + + mlly@1.7.1: + resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare-lite@1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + + normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-entities@2.0.0: + resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} + + parse-gitignore@2.0.0: + resolution: {integrity: sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==} + engines: {node: '>=14'} + + parse-imports@2.1.1: + resolution: {integrity: sha512-TDT4HqzUiTMO1wJRwg/t/hYk8Wdp3iF/ToMIlAoVQfL1Xs/sTxq1dKWSMjMbQmIarfWKymOyly40+zmPHXMqCA==} + engines: {node: '>= 18'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + + perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + + picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + + picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + + pkg-types@1.1.3: + resolution: {integrity: sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==} + + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + + postcss@8.4.38: + resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} + engines: {node: ^10 || ^12 || >=14} + + preact@10.18.2: + resolution: {integrity: sha512-X/K43vocUHDg0XhWVmTTMbec4LT/iBMh+csCEqJk+pJqegaXsvjdqN80ZZ3L+93azWCnWCZ+WGwYb8SplxeNjA==} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + read-pkg-up@7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} + + read-pkg@5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} + + refa@0.12.1: + resolution: {integrity: sha512-J8rn6v4DBb2nnFqkqwy6/NnTYMcgLA+sLr0iIO41qpv0n+ngb7ksag2tMRl0inb1bbO/esUwzW1vbJi7K0sI0g==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + regexp-ast-analysis@0.7.1: + resolution: {integrity: sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + regexp-tree@0.1.27: + resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} + hasBin: true + + regjsparser@0.10.0: + resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} + hasBin: true + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rfdc@1.3.1: + resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} + + rollup@4.17.2: + resolution: {integrity: sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + scslre@0.3.0: + resolution: {integrity: sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==} + engines: {node: ^14.0.0 || >=16.0.0} + + search-insights@2.9.0: + resolution: {integrity: sha512-bkWW9nIHOFkLwjQ1xqVaMbjjO5vhP26ERsH9Y3pKr8imthofEFIxlnOabkmGcw6ksRj9jWidcI65vvjJH/nTGg==} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shiki@1.7.0: + resolution: {integrity: sha512-H5pMn4JA7ayx8H0qOz1k2qANq6mZVCMl1gKLK6kWIrv1s2Ial4EmD4s4jE8QB5Dw03d/oCQUxc24sotuyR5byA==} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + slashes@3.0.12: + resolution: {integrity: sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==} + + source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + engines: {node: '>=0.10.0'} + + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-expression-parse@4.0.0: + resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} + + spdx-license-ids@3.0.18: + resolution: {integrity: sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==} + + speakingurl@14.0.1: + resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} + engines: {node: '>=0.10.0'} + + stable-hash@0.0.4: + resolution: {integrity: sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + synckit@0.6.2: + resolution: {integrity: sha512-Vhf+bUa//YSTYKseDiiEuQmhGCoIF3CVBhunm3r/DQnYiGT4JssmnKQc44BIyOZRK2pKjXXAgbhfmbeoC9CJpA==} + engines: {node: '>=12.20'} + + synckit@0.9.1: + resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==} + engines: {node: ^14.18.0 || >=16.0.0} + + tabbable@6.2.0: + resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + tinyexec@0.1.4: + resolution: {integrity: sha512-Ba2ELcNnnWkgqnAJBouhcsDsYitbD9LIAVNSz3746u50f+tlF3wO0uB3uqyz8NHFSTpv23qtT47XGDw8pXW5DA==} + + to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toml-eslint-parser@0.10.0: + resolution: {integrity: sha512-khrZo4buq4qVmsGzS5yQjKe/WsFvV8fGfOjDQN0q4iy9FjRfPWRgTFrU8u1R2iu/SfWLhY9WnCi4Jhdrcbtg+g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + ts-api-utils@1.3.0: + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + + tslib@2.6.3: + resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + type-fest@0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + + type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + + typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} + engines: {node: '>=14.17'} + hasBin: true + + ufo@1.5.4: + resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} + + unist-util-stringify-position@2.0.3: + resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} + + update-browserslist-db@1.1.0: + resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + vite@5.3.1: + resolution: {integrity: sha512-XBmSKRLXLxiaPYamLv3/hnP/KXDai1NDexN0FpkTaZXTfycHvkRHoenpgl/fvuK/kPbB6xAgoyiryAhQNxYmAQ==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + vitepress@1.2.3: + resolution: {integrity: sha512-GvEsrEeNLiDE1+fuwDAYJCYLNZDAna+EtnXlPajhv/MYeTjbNK6Bvyg6NoTdO1sbwuQJ0vuJR99bOlH53bo6lg==} + hasBin: true + peerDependencies: + markdown-it-mathjax3: ^4 + postcss: ^8 + peerDependenciesMeta: + markdown-it-mathjax3: + optional: true + postcss: + optional: true + + vue-demi@0.14.8: + resolution: {integrity: sha512-Uuqnk9YE9SsWeReYqK2alDI5YzciATE0r2SkA6iMAtuXvNTMNACJLJEXNXaEy94ECuBe4Sk6RzRU80kjdbIo1Q==} + engines: {node: '>=12'} + hasBin: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + + vue-eslint-parser@9.4.3: + resolution: {integrity: sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' + + vue@3.4.27: + resolution: {integrity: sha512-8s/56uK6r01r1icG/aEOHqyMVxd1bkYcSe9j8HcKtr/xTOFWvnzIVTehNW+5Yt89f+DLBe4A569pnZLS5HzAMA==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + xml-name-validator@4.0.0: + resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} + engines: {node: '>=12'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yaml-eslint-parser@1.2.3: + resolution: {integrity: sha512-4wZWvE398hCP7O8n3nXKu/vdq1HcH01ixYlCREaJL5NUMwQ0g3MaGFUBNSlmBtKmhbtVG/Cm6lyYmSVTEVil8A==} + engines: {node: ^14.17.0 || >=16.0.0} + + yaml@2.5.0: + resolution: {integrity: sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==} + engines: {node: '>= 14'} + hasBin: true + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: '@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0)(search-insights@2.9.0)': dependencies: - '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0)(search-insights@2.9.0) - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0) + '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0)(search-insights@2.9.0) + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0) + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + - search-insights + + '@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0)(search-insights@2.9.0)': + dependencies: + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0) + search-insights: 2.9.0 + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + + '@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0)': + dependencies: + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0) + '@algolia/client-search': 4.20.0 + algoliasearch: 4.20.0 + + '@algolia/autocomplete-shared@1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0)': + dependencies: + '@algolia/client-search': 4.20.0 + algoliasearch: 4.20.0 + + '@algolia/cache-browser-local-storage@4.20.0': + dependencies: + '@algolia/cache-common': 4.20.0 + + '@algolia/cache-common@4.20.0': {} + + '@algolia/cache-in-memory@4.20.0': + dependencies: + '@algolia/cache-common': 4.20.0 + + '@algolia/client-account@4.20.0': + dependencies: + '@algolia/client-common': 4.20.0 + '@algolia/client-search': 4.20.0 + '@algolia/transporter': 4.20.0 + + '@algolia/client-analytics@4.20.0': + dependencies: + '@algolia/client-common': 4.20.0 + '@algolia/client-search': 4.20.0 + '@algolia/requester-common': 4.20.0 + '@algolia/transporter': 4.20.0 + + '@algolia/client-common@4.20.0': + dependencies: + '@algolia/requester-common': 4.20.0 + '@algolia/transporter': 4.20.0 + + '@algolia/client-personalization@4.20.0': + dependencies: + '@algolia/client-common': 4.20.0 + '@algolia/requester-common': 4.20.0 + '@algolia/transporter': 4.20.0 + + '@algolia/client-search@4.20.0': + dependencies: + '@algolia/client-common': 4.20.0 + '@algolia/requester-common': 4.20.0 + '@algolia/transporter': 4.20.0 + + '@algolia/logger-common@4.20.0': {} + + '@algolia/logger-console@4.20.0': + dependencies: + '@algolia/logger-common': 4.20.0 + + '@algolia/requester-browser-xhr@4.20.0': + dependencies: + '@algolia/requester-common': 4.20.0 + + '@algolia/requester-common@4.20.0': {} + + '@algolia/requester-node-http@4.20.0': + dependencies: + '@algolia/requester-common': 4.20.0 + + '@algolia/transporter@4.20.0': + dependencies: + '@algolia/cache-common': 4.20.0 + '@algolia/logger-common': 4.20.0 + '@algolia/requester-common': 4.20.0 + + '@antfu/eslint-config@2.25.1(@typescript-eslint/utils@8.1.0(eslint@9.9.0)(typescript@5.5.4))(@vue/compiler-sfc@3.4.27)(eslint@9.9.0)(typescript@5.5.4)': + dependencies: + '@antfu/install-pkg': 0.3.4 + '@clack/prompts': 0.7.0 + '@stylistic/eslint-plugin': 2.6.2(eslint@9.9.0)(typescript@5.5.4) + '@typescript-eslint/eslint-plugin': 8.1.0(@typescript-eslint/parser@8.1.0(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0)(typescript@5.5.4) + '@typescript-eslint/parser': 8.1.0(eslint@9.9.0)(typescript@5.5.4) + '@vitest/eslint-plugin': 1.0.1(@typescript-eslint/utils@8.1.0(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0)(typescript@5.5.4) + eslint: 9.9.0 + eslint-config-flat-gitignore: 0.1.8 + eslint-flat-config-utils: 0.3.0 + eslint-merge-processors: 0.1.0(eslint@9.9.0) + eslint-plugin-antfu: 2.3.5(eslint@9.9.0) + eslint-plugin-command: 0.2.3(eslint@9.9.0) + eslint-plugin-eslint-comments: 3.2.0(eslint@9.9.0) + eslint-plugin-import-x: 3.1.0(eslint@9.9.0)(typescript@5.5.4) + eslint-plugin-jsdoc: 50.0.1(eslint@9.9.0) + eslint-plugin-jsonc: 2.16.0(eslint@9.9.0) + eslint-plugin-markdown: 5.1.0(eslint@9.9.0) + eslint-plugin-n: 17.10.2(eslint@9.9.0) + eslint-plugin-no-only-tests: 3.1.0 + eslint-plugin-perfectionist: 3.1.3(eslint@9.9.0)(typescript@5.5.4)(vue-eslint-parser@9.4.3(eslint@9.9.0)) + eslint-plugin-regexp: 2.6.0(eslint@9.9.0) + eslint-plugin-toml: 0.11.1(eslint@9.9.0) + eslint-plugin-unicorn: 55.0.0(eslint@9.9.0) + eslint-plugin-unused-imports: 4.1.3(@typescript-eslint/eslint-plugin@8.1.0(@typescript-eslint/parser@8.1.0(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0) + eslint-plugin-vue: 9.27.0(eslint@9.9.0) + eslint-plugin-yml: 1.14.0(eslint@9.9.0) + eslint-processor-vue-blocks: 0.1.2(@vue/compiler-sfc@3.4.27)(eslint@9.9.0) + globals: 15.9.0 + jsonc-eslint-parser: 2.4.0 + local-pkg: 0.5.0 + parse-gitignore: 2.0.0 + picocolors: 1.0.1 + toml-eslint-parser: 0.10.0 + vue-eslint-parser: 9.4.3(eslint@9.9.0) + yaml-eslint-parser: 1.2.3 + yargs: 17.7.2 + transitivePeerDependencies: + - '@typescript-eslint/utils' + - '@vue/compiler-sfc' + - supports-color + - svelte + - typescript + - vitest + + '@antfu/install-pkg@0.3.4': + dependencies: + tinyexec: 0.1.4 + + '@antfu/utils@0.7.10': {} + + '@babel/code-frame@7.24.7': + dependencies: + '@babel/highlight': 7.24.7 + picocolors: 1.0.1 + + '@babel/helper-string-parser@7.22.5': {} + + '@babel/helper-validator-identifier@7.22.20': {} + + '@babel/helper-validator-identifier@7.24.7': {} + + '@babel/highlight@7.24.7': + dependencies: + '@babel/helper-validator-identifier': 7.24.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.0.1 + + '@babel/parser@7.24.5': + dependencies: + '@babel/types': 7.23.0 + + '@babel/types@7.23.0': + dependencies: + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + + '@clack/core@0.3.4': + dependencies: + picocolors: 1.0.1 + sisteransi: 1.0.5 + + '@clack/prompts@0.7.0': + dependencies: + '@clack/core': 0.3.4 + picocolors: 1.0.1 + sisteransi: 1.0.5 + + '@docsearch/css@3.6.0': {} + + '@docsearch/js@3.6.0(@algolia/client-search@4.20.0)(search-insights@2.9.0)': + dependencies: + '@docsearch/react': 3.6.0(@algolia/client-search@4.20.0)(search-insights@2.9.0) + preact: 10.18.2 + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/react' + - react + - react-dom + - search-insights + + '@docsearch/react@3.6.0(@algolia/client-search@4.20.0)(search-insights@2.9.0)': + dependencies: + '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0)(search-insights@2.9.0) + '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0) + '@docsearch/css': 3.6.0 + algoliasearch: 4.20.0 + optionalDependencies: + search-insights: 2.9.0 + transitivePeerDependencies: + - '@algolia/client-search' + + '@es-joy/jsdoccomment@0.43.1': + dependencies: + '@types/eslint': 8.56.11 + '@types/estree': 1.0.5 + '@typescript-eslint/types': 7.18.0 + comment-parser: 1.4.1 + esquery: 1.6.0 + jsdoc-type-pratt-parser: 4.0.0 + + '@es-joy/jsdoccomment@0.46.0': + dependencies: + comment-parser: 1.4.1 + esquery: 1.6.0 + jsdoc-type-pratt-parser: 4.0.0 + + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true + + '@eslint-community/eslint-utils@4.4.0(eslint@9.9.0)': + dependencies: + eslint: 9.9.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.11.0': {} + + '@eslint/config-array@0.17.1': + dependencies: + '@eslint/object-schema': 2.1.4 + debug: 4.3.6 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/eslintrc@3.1.0': + dependencies: + ajv: 6.12.6 + debug: 4.3.6 + espree: 10.1.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.9.0': {} + + '@eslint/object-schema@2.1.4': {} + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.3.0': {} + + '@jridgewell/sourcemap-codec@1.4.15': {} + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + '@pkgr/core@0.1.1': {} + + '@rollup/rollup-android-arm-eabi@4.17.2': + optional: true + + '@rollup/rollup-android-arm64@4.17.2': + optional: true + + '@rollup/rollup-darwin-arm64@4.17.2': + optional: true + + '@rollup/rollup-darwin-x64@4.17.2': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.17.2': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.17.2': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.17.2': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.17.2': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.17.2': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.17.2': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.17.2': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.17.2': + optional: true + + '@rollup/rollup-linux-x64-musl@4.17.2': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.17.2': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.17.2': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.17.2': + optional: true + + '@shikijs/core@1.7.0': {} + + '@shikijs/transformers@1.7.0': + dependencies: + shiki: 1.7.0 + + '@stylistic/eslint-plugin-js@2.6.2(eslint@9.9.0)': + dependencies: + '@types/eslint': 9.6.0 + acorn: 8.12.1 + eslint: 9.9.0 + eslint-visitor-keys: 4.0.0 + espree: 10.1.0 + + '@stylistic/eslint-plugin-jsx@2.6.2(eslint@9.9.0)': + dependencies: + '@stylistic/eslint-plugin-js': 2.6.2(eslint@9.9.0) + '@types/eslint': 9.6.0 + eslint: 9.9.0 + estraverse: 5.3.0 + picomatch: 4.0.2 + + '@stylistic/eslint-plugin-plus@2.6.2(eslint@9.9.0)(typescript@5.5.4)': + dependencies: + '@types/eslint': 9.6.0 + '@typescript-eslint/utils': 8.1.0(eslint@9.9.0)(typescript@5.5.4) + eslint: 9.9.0 + transitivePeerDependencies: + - supports-color + - typescript + + '@stylistic/eslint-plugin-ts@2.6.2(eslint@9.9.0)(typescript@5.5.4)': + dependencies: + '@stylistic/eslint-plugin-js': 2.6.2(eslint@9.9.0) + '@types/eslint': 9.6.0 + '@typescript-eslint/utils': 8.1.0(eslint@9.9.0)(typescript@5.5.4) + eslint: 9.9.0 + transitivePeerDependencies: + - supports-color + - typescript + + '@stylistic/eslint-plugin@2.6.2(eslint@9.9.0)(typescript@5.5.4)': + dependencies: + '@stylistic/eslint-plugin-js': 2.6.2(eslint@9.9.0) + '@stylistic/eslint-plugin-jsx': 2.6.2(eslint@9.9.0) + '@stylistic/eslint-plugin-plus': 2.6.2(eslint@9.9.0)(typescript@5.5.4) + '@stylistic/eslint-plugin-ts': 2.6.2(eslint@9.9.0)(typescript@5.5.4) + '@types/eslint': 9.6.0 + eslint: 9.9.0 + transitivePeerDependencies: + - supports-color + - typescript + + '@types/eslint@8.56.11': + dependencies: + '@types/estree': 1.0.5 + '@types/json-schema': 7.0.15 + + '@types/eslint@9.6.0': + dependencies: + '@types/estree': 1.0.5 + '@types/json-schema': 7.0.15 + + '@types/estree@1.0.5': {} + + '@types/json-schema@7.0.15': {} + + '@types/linkify-it@5.0.0': {} + + '@types/markdown-it@14.1.1': + dependencies: + '@types/linkify-it': 5.0.0 + '@types/mdurl': 2.0.0 + + '@types/mdast@3.0.15': + dependencies: + '@types/unist': 2.0.10 + + '@types/mdurl@2.0.0': {} + + '@types/normalize-package-data@2.4.4': {} + + '@types/unist@2.0.10': {} + + '@types/web-bluetooth@0.0.20': {} + + '@typescript-eslint/eslint-plugin@8.1.0(@typescript-eslint/parser@8.1.0(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0)(typescript@5.5.4)': + dependencies: + '@eslint-community/regexpp': 4.11.0 + '@typescript-eslint/parser': 8.1.0(eslint@9.9.0)(typescript@5.5.4) + '@typescript-eslint/scope-manager': 8.1.0 + '@typescript-eslint/type-utils': 8.1.0(eslint@9.9.0)(typescript@5.5.4) + '@typescript-eslint/utils': 8.1.0(eslint@9.9.0)(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 8.1.0 + eslint: 9.9.0 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 1.3.0(typescript@5.5.4) + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.1.0(eslint@9.9.0)(typescript@5.5.4)': + dependencies: + '@typescript-eslint/scope-manager': 8.1.0 + '@typescript-eslint/types': 8.1.0 + '@typescript-eslint/typescript-estree': 8.1.0(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 8.1.0 + debug: 4.3.6 + eslint: 9.9.0 + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@7.18.0': + dependencies: + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/visitor-keys': 7.18.0 + + '@typescript-eslint/scope-manager@8.1.0': + dependencies: + '@typescript-eslint/types': 8.1.0 + '@typescript-eslint/visitor-keys': 8.1.0 + + '@typescript-eslint/type-utils@8.1.0(eslint@9.9.0)(typescript@5.5.4)': + dependencies: + '@typescript-eslint/typescript-estree': 8.1.0(typescript@5.5.4) + '@typescript-eslint/utils': 8.1.0(eslint@9.9.0)(typescript@5.5.4) + debug: 4.3.6 + ts-api-utils: 1.3.0(typescript@5.5.4) + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - eslint + - supports-color + + '@typescript-eslint/types@7.18.0': {} + + '@typescript-eslint/types@8.1.0': {} + + '@typescript-eslint/typescript-estree@7.18.0(typescript@5.5.4)': + dependencies: + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/visitor-keys': 7.18.0 + debug: 4.3.6 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.5.4) + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/typescript-estree@8.1.0(typescript@5.5.4)': + dependencies: + '@typescript-eslint/types': 8.1.0 + '@typescript-eslint/visitor-keys': 8.1.0 + debug: 4.3.6 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.5.4) + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@7.18.0(eslint@9.9.0)(typescript@5.5.4)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.0) + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) + eslint: 9.9.0 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/utils@8.1.0(eslint@9.9.0)(typescript@5.5.4)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.0) + '@typescript-eslint/scope-manager': 8.1.0 + '@typescript-eslint/types': 8.1.0 + '@typescript-eslint/typescript-estree': 8.1.0(typescript@5.5.4) + eslint: 9.9.0 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/visitor-keys@7.18.0': + dependencies: + '@typescript-eslint/types': 7.18.0 + eslint-visitor-keys: 3.4.3 + + '@typescript-eslint/visitor-keys@8.1.0': + dependencies: + '@typescript-eslint/types': 8.1.0 + eslint-visitor-keys: 3.4.3 + + '@vitejs/plugin-vue@5.0.5(vite@5.3.1)(vue@3.4.27(typescript@5.5.4))': + dependencies: + vite: 5.3.1 + vue: 3.4.27(typescript@5.5.4) + + '@vitest/eslint-plugin@1.0.1(@typescript-eslint/utils@8.1.0(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0)(typescript@5.5.4)': + dependencies: + eslint: 9.9.0 + optionalDependencies: + '@typescript-eslint/utils': 8.1.0(eslint@9.9.0)(typescript@5.5.4) + typescript: 5.5.4 + + '@vue/compiler-core@3.4.27': + dependencies: + '@babel/parser': 7.24.5 + '@vue/shared': 3.4.27 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.0 + + '@vue/compiler-dom@3.4.27': + dependencies: + '@vue/compiler-core': 3.4.27 + '@vue/shared': 3.4.27 + + '@vue/compiler-sfc@3.4.27': + dependencies: + '@babel/parser': 7.24.5 + '@vue/compiler-core': 3.4.27 + '@vue/compiler-dom': 3.4.27 + '@vue/compiler-ssr': 3.4.27 + '@vue/shared': 3.4.27 + estree-walker: 2.0.2 + magic-string: 0.30.10 + postcss: 8.4.38 + source-map-js: 1.2.0 + + '@vue/compiler-ssr@3.4.27': + dependencies: + '@vue/compiler-dom': 3.4.27 + '@vue/shared': 3.4.27 + + '@vue/devtools-api@7.2.1(vue@3.4.27(typescript@5.5.4))': + dependencies: + '@vue/devtools-kit': 7.2.1(vue@3.4.27(typescript@5.5.4)) + transitivePeerDependencies: + - vue + + '@vue/devtools-kit@7.2.1(vue@3.4.27(typescript@5.5.4))': + dependencies: + '@vue/devtools-shared': 7.2.1 + hookable: 5.5.3 + mitt: 3.0.1 + perfect-debounce: 1.0.0 + speakingurl: 14.0.1 + vue: 3.4.27(typescript@5.5.4) + + '@vue/devtools-shared@7.2.1': + dependencies: + rfdc: 1.3.1 + + '@vue/reactivity@3.4.27': + dependencies: + '@vue/shared': 3.4.27 + + '@vue/runtime-core@3.4.27': + dependencies: + '@vue/reactivity': 3.4.27 + '@vue/shared': 3.4.27 + + '@vue/runtime-dom@3.4.27': + dependencies: + '@vue/runtime-core': 3.4.27 + '@vue/shared': 3.4.27 + csstype: 3.1.3 + + '@vue/server-renderer@3.4.27(vue@3.4.27(typescript@5.5.4))': + dependencies: + '@vue/compiler-ssr': 3.4.27 + '@vue/shared': 3.4.27 + vue: 3.4.27(typescript@5.5.4) + + '@vue/shared@3.4.27': {} + + '@vueuse/core@10.11.0(vue@3.4.27(typescript@5.5.4))': + dependencies: + '@types/web-bluetooth': 0.0.20 + '@vueuse/metadata': 10.11.0 + '@vueuse/shared': 10.11.0(vue@3.4.27(typescript@5.5.4)) + vue-demi: 0.14.8(vue@3.4.27(typescript@5.5.4)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/integrations@10.11.0(focus-trap@7.5.4)(vue@3.4.27(typescript@5.5.4))': + dependencies: + '@vueuse/core': 10.11.0(vue@3.4.27(typescript@5.5.4)) + '@vueuse/shared': 10.11.0(vue@3.4.27(typescript@5.5.4)) + vue-demi: 0.14.8(vue@3.4.27(typescript@5.5.4)) + optionalDependencies: + focus-trap: 7.5.4 + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/metadata@10.11.0': {} + + '@vueuse/shared@10.11.0(vue@3.4.27(typescript@5.5.4))': + dependencies: + vue-demi: 0.14.8(vue@3.4.27(typescript@5.5.4)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + acorn-jsx@5.3.2(acorn@8.12.1): + dependencies: + acorn: 8.12.1 + + acorn@8.12.1: {} + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + algoliasearch@4.20.0: + dependencies: + '@algolia/cache-browser-local-storage': 4.20.0 + '@algolia/cache-common': 4.20.0 + '@algolia/cache-in-memory': 4.20.0 + '@algolia/client-account': 4.20.0 + '@algolia/client-analytics': 4.20.0 + '@algolia/client-common': 4.20.0 + '@algolia/client-personalization': 4.20.0 + '@algolia/client-search': 4.20.0 + '@algolia/logger-common': 4.20.0 + '@algolia/logger-console': 4.20.0 + '@algolia/requester-browser-xhr': 4.20.0 + '@algolia/requester-common': 4.20.0 + '@algolia/requester-node-http': 4.20.0 + '@algolia/transporter': 4.20.0 + + ansi-regex@5.0.1: {} + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + are-docs-informative@0.0.2: {} + + argparse@2.0.1: {} + + array-union@2.1.0: {} + + balanced-match@1.0.2: {} + + boolbase@1.0.0: {} + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.23.3: + dependencies: + caniuse-lite: 1.0.30001651 + electron-to-chromium: 1.5.6 + node-releases: 2.0.18 + update-browserslist-db: 1.1.0(browserslist@4.23.3) + + builtin-modules@3.3.0: {} + + callsites@3.1.0: {} + + caniuse-lite@1.0.30001651: {} + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + character-entities-legacy@1.1.4: {} + + character-entities@1.2.4: {} + + character-reference-invalid@1.1.4: {} + + ci-info@4.0.0: {} + + clean-regexp@1.0.0: + dependencies: + escape-string-regexp: 1.0.5 + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + comment-parser@1.4.1: {} + + concat-map@0.0.1: {} + + confbox@0.1.7: {} + + core-js-compat@3.38.0: + dependencies: + browserslist: 4.23.3 + + cross-spawn@7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + cssesc@3.0.0: {} + + csstype@3.1.3: {} + + debug@3.2.7: + dependencies: + ms: 2.1.3 + + debug@4.3.6: + dependencies: + ms: 2.1.2 + + deep-is@0.1.4: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 + + electron-to-chromium@1.5.6: {} + + emoji-regex@8.0.0: {} + + enhanced-resolve@5.17.1: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + + entities@4.5.0: {} + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + es-module-lexer@1.5.4: {} + + esbuild@0.21.5: + 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 + + escalade@3.1.2: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@4.0.0: {} + + eslint-compat-utils@0.5.1(eslint@9.9.0): + dependencies: + eslint: 9.9.0 + semver: 7.6.3 + + eslint-config-flat-gitignore@0.1.8: + dependencies: + find-up-simple: 1.0.0 + parse-gitignore: 2.0.0 + + eslint-flat-config-utils@0.3.0: + dependencies: + '@types/eslint': 9.6.0 + pathe: 1.1.2 + + eslint-import-resolver-node@0.3.9: + dependencies: + debug: 3.2.7 + is-core-module: 2.15.0 + resolve: 1.22.8 transitivePeerDependencies: - - '@algolia/client-search' - - algoliasearch - - search-insights + - supports-color - '@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0)(search-insights@2.9.0)': + eslint-merge-processors@0.1.0(eslint@9.9.0): dependencies: - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0) - search-insights: 2.9.0 + eslint: 9.9.0 + + eslint-plugin-antfu@2.3.5(eslint@9.9.0): + dependencies: + '@antfu/utils': 0.7.10 + eslint: 9.9.0 + + eslint-plugin-command@0.2.3(eslint@9.9.0): + dependencies: + '@es-joy/jsdoccomment': 0.43.1 + eslint: 9.9.0 + + eslint-plugin-es-x@7.8.0(eslint@9.9.0): + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.0) + '@eslint-community/regexpp': 4.11.0 + eslint: 9.9.0 + eslint-compat-utils: 0.5.1(eslint@9.9.0) + + eslint-plugin-eslint-comments@3.2.0(eslint@9.9.0): + dependencies: + escape-string-regexp: 1.0.5 + eslint: 9.9.0 + ignore: 5.3.2 + + eslint-plugin-import-x@3.1.0(eslint@9.9.0)(typescript@5.5.4): + dependencies: + '@typescript-eslint/utils': 7.18.0(eslint@9.9.0)(typescript@5.5.4) + debug: 4.3.6 + doctrine: 3.0.0 + eslint: 9.9.0 + eslint-import-resolver-node: 0.3.9 + get-tsconfig: 4.7.6 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + stable-hash: 0.0.4 + tslib: 2.6.3 transitivePeerDependencies: - - '@algolia/client-search' - - algoliasearch + - supports-color + - typescript - '@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0)': + eslint-plugin-jsdoc@50.0.1(eslint@9.9.0): dependencies: - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0) - '@algolia/client-search': 4.20.0 - algoliasearch: 4.20.0 + '@es-joy/jsdoccomment': 0.46.0 + are-docs-informative: 0.0.2 + comment-parser: 1.4.1 + debug: 4.3.6 + escape-string-regexp: 4.0.0 + eslint: 9.9.0 + espree: 10.1.0 + esquery: 1.6.0 + parse-imports: 2.1.1 + semver: 7.6.3 + spdx-expression-parse: 4.0.0 + synckit: 0.9.1 + transitivePeerDependencies: + - supports-color - '@algolia/autocomplete-shared@1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0)': + eslint-plugin-jsonc@2.16.0(eslint@9.9.0): dependencies: - '@algolia/client-search': 4.20.0 - algoliasearch: 4.20.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.0) + eslint: 9.9.0 + eslint-compat-utils: 0.5.1(eslint@9.9.0) + espree: 9.6.1 + graphemer: 1.4.0 + jsonc-eslint-parser: 2.4.0 + natural-compare: 1.4.0 + synckit: 0.6.2 + + eslint-plugin-markdown@5.1.0(eslint@9.9.0): + dependencies: + eslint: 9.9.0 + mdast-util-from-markdown: 0.8.5 + transitivePeerDependencies: + - supports-color - '@algolia/cache-browser-local-storage@4.20.0': + eslint-plugin-n@17.10.2(eslint@9.9.0): dependencies: - '@algolia/cache-common': 4.20.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.0) + enhanced-resolve: 5.17.1 + eslint: 9.9.0 + eslint-plugin-es-x: 7.8.0(eslint@9.9.0) + get-tsconfig: 4.7.6 + globals: 15.9.0 + ignore: 5.3.2 + minimatch: 9.0.5 + semver: 7.6.3 + + eslint-plugin-no-only-tests@3.1.0: {} + + eslint-plugin-perfectionist@3.1.3(eslint@9.9.0)(typescript@5.5.4)(vue-eslint-parser@9.4.3(eslint@9.9.0)): + dependencies: + '@typescript-eslint/types': 8.1.0 + '@typescript-eslint/utils': 8.1.0(eslint@9.9.0)(typescript@5.5.4) + eslint: 9.9.0 + minimatch: 10.0.1 + natural-compare-lite: 1.4.0 + optionalDependencies: + vue-eslint-parser: 9.4.3(eslint@9.9.0) + transitivePeerDependencies: + - supports-color + - typescript - '@algolia/cache-common@4.20.0': {} + eslint-plugin-regexp@2.6.0(eslint@9.9.0): + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.0) + '@eslint-community/regexpp': 4.11.0 + comment-parser: 1.4.1 + eslint: 9.9.0 + jsdoc-type-pratt-parser: 4.1.0 + refa: 0.12.1 + regexp-ast-analysis: 0.7.1 + scslre: 0.3.0 + + eslint-plugin-toml@0.11.1(eslint@9.9.0): + dependencies: + debug: 4.3.6 + eslint: 9.9.0 + eslint-compat-utils: 0.5.1(eslint@9.9.0) + lodash: 4.17.21 + toml-eslint-parser: 0.10.0 + transitivePeerDependencies: + - supports-color - '@algolia/cache-in-memory@4.20.0': + eslint-plugin-unicorn@55.0.0(eslint@9.9.0): dependencies: - '@algolia/cache-common': 4.20.0 + '@babel/helper-validator-identifier': 7.24.7 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.0) + ci-info: 4.0.0 + clean-regexp: 1.0.0 + core-js-compat: 3.38.0 + eslint: 9.9.0 + esquery: 1.6.0 + globals: 15.9.0 + indent-string: 4.0.0 + is-builtin-module: 3.2.1 + jsesc: 3.0.2 + pluralize: 8.0.0 + read-pkg-up: 7.0.1 + regexp-tree: 0.1.27 + regjsparser: 0.10.0 + semver: 7.6.3 + strip-indent: 3.0.0 + + eslint-plugin-unused-imports@4.1.3(@typescript-eslint/eslint-plugin@8.1.0(@typescript-eslint/parser@8.1.0(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0): + dependencies: + eslint: 9.9.0 + optionalDependencies: + '@typescript-eslint/eslint-plugin': 8.1.0(@typescript-eslint/parser@8.1.0(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0)(typescript@5.5.4) - '@algolia/client-account@4.20.0': + eslint-plugin-vue@9.27.0(eslint@9.9.0): dependencies: - '@algolia/client-common': 4.20.0 - '@algolia/client-search': 4.20.0 - '@algolia/transporter': 4.20.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.0) + eslint: 9.9.0 + globals: 13.24.0 + natural-compare: 1.4.0 + nth-check: 2.1.1 + postcss-selector-parser: 6.1.2 + semver: 7.6.3 + vue-eslint-parser: 9.4.3(eslint@9.9.0) + xml-name-validator: 4.0.0 + transitivePeerDependencies: + - supports-color - '@algolia/client-analytics@4.20.0': + eslint-plugin-yml@1.14.0(eslint@9.9.0): dependencies: - '@algolia/client-common': 4.20.0 - '@algolia/client-search': 4.20.0 - '@algolia/requester-common': 4.20.0 - '@algolia/transporter': 4.20.0 + debug: 4.3.6 + eslint: 9.9.0 + eslint-compat-utils: 0.5.1(eslint@9.9.0) + lodash: 4.17.21 + natural-compare: 1.4.0 + yaml-eslint-parser: 1.2.3 + transitivePeerDependencies: + - supports-color - '@algolia/client-common@4.20.0': + eslint-processor-vue-blocks@0.1.2(@vue/compiler-sfc@3.4.27)(eslint@9.9.0): dependencies: - '@algolia/requester-common': 4.20.0 - '@algolia/transporter': 4.20.0 + '@vue/compiler-sfc': 3.4.27 + eslint: 9.9.0 - '@algolia/client-personalization@4.20.0': + eslint-scope@7.2.2: dependencies: - '@algolia/client-common': 4.20.0 - '@algolia/requester-common': 4.20.0 - '@algolia/transporter': 4.20.0 + esrecurse: 4.3.0 + estraverse: 5.3.0 - '@algolia/client-search@4.20.0': + eslint-scope@8.0.2: dependencies: - '@algolia/client-common': 4.20.0 - '@algolia/requester-common': 4.20.0 - '@algolia/transporter': 4.20.0 + esrecurse: 4.3.0 + estraverse: 5.3.0 - '@algolia/logger-common@4.20.0': {} + eslint-visitor-keys@3.4.3: {} - '@algolia/logger-console@4.20.0': + eslint-visitor-keys@4.0.0: {} + + eslint@9.9.0: dependencies: - '@algolia/logger-common': 4.20.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.0) + '@eslint-community/regexpp': 4.11.0 + '@eslint/config-array': 0.17.1 + '@eslint/eslintrc': 3.1.0 + '@eslint/js': 9.9.0 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.3.0 + '@nodelib/fs.walk': 1.2.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.6 + escape-string-regexp: 4.0.0 + eslint-scope: 8.0.2 + eslint-visitor-keys: 4.0.0 + espree: 10.1.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color - '@algolia/requester-browser-xhr@4.20.0': + espree@10.1.0: dependencies: - '@algolia/requester-common': 4.20.0 + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) + eslint-visitor-keys: 4.0.0 - '@algolia/requester-common@4.20.0': {} + espree@9.6.1: + dependencies: + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) + eslint-visitor-keys: 3.4.3 - '@algolia/requester-node-http@4.20.0': + esquery@1.6.0: dependencies: - '@algolia/requester-common': 4.20.0 + estraverse: 5.3.0 - '@algolia/transporter@4.20.0': + esrecurse@4.3.0: dependencies: - '@algolia/cache-common': 4.20.0 - '@algolia/logger-common': 4.20.0 - '@algolia/requester-common': 4.20.0 + estraverse: 5.3.0 - '@babel/helper-string-parser@7.22.5': {} + estraverse@5.3.0: {} - '@babel/helper-validator-identifier@7.22.20': {} + estree-walker@2.0.2: {} - '@babel/parser@7.24.5': + esutils@2.0.3: {} + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.2: dependencies: - '@babel/types': 7.23.0 + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.7 - '@babel/types@7.23.0': + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fastq@1.17.1: dependencies: - '@babel/helper-string-parser': 7.22.5 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 + reusify: 1.0.4 - '@docsearch/css@3.6.0': {} + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 - '@docsearch/js@3.6.0(@algolia/client-search@4.20.0)(search-insights@2.9.0)': + fill-range@7.1.1: dependencies: - '@docsearch/react': 3.6.0(@algolia/client-search@4.20.0)(search-insights@2.9.0) - preact: 10.18.2 - transitivePeerDependencies: - - '@algolia/client-search' - - '@types/react' - - react - - react-dom - - search-insights + to-regex-range: 5.0.1 - '@docsearch/react@3.6.0(@algolia/client-search@4.20.0)(search-insights@2.9.0)': + find-up-simple@1.0.0: {} + + find-up@4.1.0: dependencies: - '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0)(search-insights@2.9.0) - '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0) - '@docsearch/css': 3.6.0 - algoliasearch: 4.20.0 - optionalDependencies: - search-insights: 2.9.0 - transitivePeerDependencies: - - '@algolia/client-search' + locate-path: 5.0.0 + path-exists: 4.0.0 - '@esbuild/aix-ppc64@0.21.5': - optional: true + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 - '@esbuild/android-arm64@0.21.5': - optional: true + flat-cache@4.0.1: + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 - '@esbuild/android-arm@0.21.5': - optional: true + flatted@3.3.1: {} - '@esbuild/android-x64@0.21.5': - optional: true + focus-trap@7.5.4: + dependencies: + tabbable: 6.2.0 - '@esbuild/darwin-arm64@0.21.5': + fsevents@2.3.3: optional: true - '@esbuild/darwin-x64@0.21.5': - optional: true + function-bind@1.1.2: {} - '@esbuild/freebsd-arm64@0.21.5': - optional: true + get-caller-file@2.0.5: {} - '@esbuild/freebsd-x64@0.21.5': - optional: true + get-tsconfig@4.7.6: + dependencies: + resolve-pkg-maps: 1.0.0 - '@esbuild/linux-arm64@0.21.5': - optional: true + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 - '@esbuild/linux-arm@0.21.5': - optional: true + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 - '@esbuild/linux-ia32@0.21.5': - optional: true + globals@13.24.0: + dependencies: + type-fest: 0.20.2 - '@esbuild/linux-loong64@0.21.5': - optional: true + globals@14.0.0: {} - '@esbuild/linux-mips64el@0.21.5': - optional: true + globals@15.9.0: {} - '@esbuild/linux-ppc64@0.21.5': - optional: true + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 3.0.0 - '@esbuild/linux-riscv64@0.21.5': - optional: true + graceful-fs@4.2.11: {} - '@esbuild/linux-s390x@0.21.5': - optional: true + graphemer@1.4.0: {} - '@esbuild/linux-x64@0.21.5': - optional: true + has-flag@3.0.0: {} - '@esbuild/netbsd-x64@0.21.5': - optional: true + has-flag@4.0.0: {} - '@esbuild/openbsd-x64@0.21.5': - optional: true + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 - '@esbuild/sunos-x64@0.21.5': - optional: true + hookable@5.5.3: {} - '@esbuild/win32-arm64@0.21.5': - optional: true + hosted-git-info@2.8.9: {} - '@esbuild/win32-ia32@0.21.5': - optional: true + ignore@5.3.2: {} - '@esbuild/win32-x64@0.21.5': - optional: true + import-fresh@3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 - '@jridgewell/sourcemap-codec@1.4.15': {} + imurmurhash@0.1.4: {} - '@rollup/rollup-android-arm-eabi@4.17.2': - optional: true + indent-string@4.0.0: {} - '@rollup/rollup-android-arm64@4.17.2': - optional: true + is-alphabetical@1.0.4: {} - '@rollup/rollup-darwin-arm64@4.17.2': - optional: true + is-alphanumerical@1.0.4: + dependencies: + is-alphabetical: 1.0.4 + is-decimal: 1.0.4 - '@rollup/rollup-darwin-x64@4.17.2': - optional: true + is-arrayish@0.2.1: {} - '@rollup/rollup-linux-arm-gnueabihf@4.17.2': - optional: true + is-builtin-module@3.2.1: + dependencies: + builtin-modules: 3.3.0 - '@rollup/rollup-linux-arm-musleabihf@4.17.2': - optional: true + is-core-module@2.15.0: + dependencies: + hasown: 2.0.2 - '@rollup/rollup-linux-arm64-gnu@4.17.2': - optional: true + is-decimal@1.0.4: {} - '@rollup/rollup-linux-arm64-musl@4.17.2': - optional: true + is-extglob@2.1.1: {} - '@rollup/rollup-linux-powerpc64le-gnu@4.17.2': - optional: true + is-fullwidth-code-point@3.0.0: {} - '@rollup/rollup-linux-riscv64-gnu@4.17.2': - optional: true + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 - '@rollup/rollup-linux-s390x-gnu@4.17.2': - optional: true + is-hexadecimal@1.0.4: {} - '@rollup/rollup-linux-x64-gnu@4.17.2': - optional: true + is-number@7.0.0: {} - '@rollup/rollup-linux-x64-musl@4.17.2': - optional: true + is-path-inside@3.0.3: {} - '@rollup/rollup-win32-arm64-msvc@4.17.2': - optional: true + isexe@2.0.0: {} - '@rollup/rollup-win32-ia32-msvc@4.17.2': - optional: true + js-tokens@4.0.0: {} - '@rollup/rollup-win32-x64-msvc@4.17.2': - optional: true + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsdoc-type-pratt-parser@4.0.0: {} + + jsdoc-type-pratt-parser@4.1.0: {} + + jsesc@0.5.0: {} + + jsesc@3.0.2: {} + + json-buffer@3.0.1: {} + + json-parse-even-better-errors@2.3.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + jsonc-eslint-parser@2.4.0: + dependencies: + acorn: 8.12.1 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + semver: 7.6.3 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lines-and-columns@1.2.4: {} + + local-pkg@0.5.0: + dependencies: + mlly: 1.7.1 + pkg-types: 1.1.3 + + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.merge@4.6.2: {} - '@shikijs/core@1.7.0': {} + lodash@4.17.21: {} - '@shikijs/transformers@1.7.0': + magic-string@0.30.10: dependencies: - shiki: 1.7.0 - - '@types/estree@1.0.5': {} + '@jridgewell/sourcemap-codec': 1.4.15 - '@types/linkify-it@5.0.0': {} + mark.js@8.11.1: {} - '@types/markdown-it@14.1.1': + mdast-util-from-markdown@0.8.5: dependencies: - '@types/linkify-it': 5.0.0 - '@types/mdurl': 2.0.0 + '@types/mdast': 3.0.15 + mdast-util-to-string: 2.0.0 + micromark: 2.11.4 + parse-entities: 2.0.0 + unist-util-stringify-position: 2.0.3 + transitivePeerDependencies: + - supports-color - '@types/mdurl@2.0.0': {} + mdast-util-to-string@2.0.0: {} - '@types/web-bluetooth@0.0.20': {} + merge2@1.4.1: {} - '@vitejs/plugin-vue@5.0.5(vite@5.3.1)(vue@3.4.27)': + micromark@2.11.4: dependencies: - vite: 5.3.1 - vue: 3.4.27 + debug: 4.3.6 + parse-entities: 2.0.0 + transitivePeerDependencies: + - supports-color - '@vue/compiler-core@3.4.27': + micromatch@4.0.7: dependencies: - '@babel/parser': 7.24.5 - '@vue/shared': 3.4.27 - entities: 4.5.0 - estree-walker: 2.0.2 - source-map-js: 1.2.0 + braces: 3.0.3 + picomatch: 2.3.1 - '@vue/compiler-dom@3.4.27': + min-indent@1.0.1: {} + + minimatch@10.0.1: dependencies: - '@vue/compiler-core': 3.4.27 - '@vue/shared': 3.4.27 + brace-expansion: 2.0.1 - '@vue/compiler-sfc@3.4.27': + minimatch@3.1.2: dependencies: - '@babel/parser': 7.24.5 - '@vue/compiler-core': 3.4.27 - '@vue/compiler-dom': 3.4.27 - '@vue/compiler-ssr': 3.4.27 - '@vue/shared': 3.4.27 - estree-walker: 2.0.2 - magic-string: 0.30.10 - postcss: 8.4.38 - source-map-js: 1.2.0 + brace-expansion: 1.1.11 - '@vue/compiler-ssr@3.4.27': + minimatch@9.0.5: dependencies: - '@vue/compiler-dom': 3.4.27 - '@vue/shared': 3.4.27 + brace-expansion: 2.0.1 + + minisearch@6.3.0: {} + + mitt@3.0.1: {} - '@vue/devtools-api@7.2.1(vue@3.4.27)': + mlly@1.7.1: dependencies: - '@vue/devtools-kit': 7.2.1(vue@3.4.27) - transitivePeerDependencies: - - vue + acorn: 8.12.1 + pathe: 1.1.2 + pkg-types: 1.1.3 + ufo: 1.5.4 + + ms@2.1.2: {} - '@vue/devtools-kit@7.2.1(vue@3.4.27)': + ms@2.1.3: {} + + nanoid@3.3.7: {} + + natural-compare-lite@1.4.0: {} + + natural-compare@1.4.0: {} + + node-releases@2.0.18: {} + + normalize-package-data@2.5.0: dependencies: - '@vue/devtools-shared': 7.2.1 - hookable: 5.5.3 - mitt: 3.0.1 - perfect-debounce: 1.0.0 - speakingurl: 14.0.1 - vue: 3.4.27 + hosted-git-info: 2.8.9 + resolve: 1.22.8 + semver: 5.7.2 + validate-npm-package-license: 3.0.4 - '@vue/devtools-shared@7.2.1': + nth-check@2.1.1: dependencies: - rfdc: 1.3.1 + boolbase: 1.0.0 - '@vue/reactivity@3.4.27': + optionator@0.9.4: dependencies: - '@vue/shared': 3.4.27 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 - '@vue/runtime-core@3.4.27': + p-limit@3.1.0: dependencies: - '@vue/reactivity': 3.4.27 - '@vue/shared': 3.4.27 + yocto-queue: 0.1.0 - '@vue/runtime-dom@3.4.27': + p-locate@4.1.0: dependencies: - '@vue/runtime-core': 3.4.27 - '@vue/shared': 3.4.27 - csstype: 3.1.3 + p-limit: 2.3.0 - '@vue/server-renderer@3.4.27(vue@3.4.27)': + p-locate@5.0.0: dependencies: - '@vue/compiler-ssr': 3.4.27 - '@vue/shared': 3.4.27 - vue: 3.4.27 + p-limit: 3.1.0 - '@vue/shared@3.4.27': {} + p-try@2.2.0: {} - '@vueuse/core@10.11.0(vue@3.4.27)': + parent-module@1.0.1: dependencies: - '@types/web-bluetooth': 0.0.20 - '@vueuse/metadata': 10.11.0 - '@vueuse/shared': 10.11.0(vue@3.4.27) - vue-demi: 0.14.8(vue@3.4.27) - transitivePeerDependencies: - - '@vue/composition-api' - - vue + callsites: 3.1.0 - '@vueuse/integrations@10.11.0(focus-trap@7.5.4)(vue@3.4.27)': + parse-entities@2.0.0: dependencies: - '@vueuse/core': 10.11.0(vue@3.4.27) - '@vueuse/shared': 10.11.0(vue@3.4.27) - vue-demi: 0.14.8(vue@3.4.27) - optionalDependencies: - focus-trap: 7.5.4 - transitivePeerDependencies: - - '@vue/composition-api' - - vue + character-entities: 1.2.4 + character-entities-legacy: 1.1.4 + character-reference-invalid: 1.1.4 + is-alphanumerical: 1.0.4 + is-decimal: 1.0.4 + is-hexadecimal: 1.0.4 - '@vueuse/metadata@10.11.0': {} + parse-gitignore@2.0.0: {} - '@vueuse/shared@10.11.0(vue@3.4.27)': + parse-imports@2.1.1: dependencies: - vue-demi: 0.14.8(vue@3.4.27) - transitivePeerDependencies: - - '@vue/composition-api' - - vue + es-module-lexer: 1.5.4 + slashes: 3.0.12 - algoliasearch@4.20.0: + parse-json@5.2.0: dependencies: - '@algolia/cache-browser-local-storage': 4.20.0 - '@algolia/cache-common': 4.20.0 - '@algolia/cache-in-memory': 4.20.0 - '@algolia/client-account': 4.20.0 - '@algolia/client-analytics': 4.20.0 - '@algolia/client-common': 4.20.0 - '@algolia/client-personalization': 4.20.0 - '@algolia/client-search': 4.20.0 - '@algolia/logger-common': 4.20.0 - '@algolia/logger-console': 4.20.0 - '@algolia/requester-browser-xhr': 4.20.0 - '@algolia/requester-common': 4.20.0 - '@algolia/requester-node-http': 4.20.0 - '@algolia/transporter': 4.20.0 - - csstype@3.1.3: {} + '@babel/code-frame': 7.24.7 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 - entities@4.5.0: {} + path-exists@4.0.0: {} - esbuild@0.21.5: - 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 + path-key@3.1.1: {} - estree-walker@2.0.2: {} + path-parse@1.0.7: {} - focus-trap@7.5.4: - dependencies: - tabbable: 6.2.0 + path-type@4.0.0: {} - fsevents@2.3.3: - optional: true + pathe@1.1.2: {} - hookable@5.5.3: {} + perfect-debounce@1.0.0: {} - magic-string@0.30.10: - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 + picocolors@1.0.0: {} - mark.js@8.11.1: {} + picocolors@1.0.1: {} - minisearch@6.3.0: {} + picomatch@2.3.1: {} - mitt@3.0.1: {} + picomatch@4.0.2: {} - nanoid@3.3.7: {} + pkg-types@1.1.3: + dependencies: + confbox: 0.1.7 + mlly: 1.7.1 + pathe: 1.1.2 - perfect-debounce@1.0.0: {} + pluralize@8.0.0: {} - picocolors@1.0.0: {} + postcss-selector-parser@6.1.2: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 postcss@8.4.38: dependencies: @@ -1059,6 +3464,54 @@ snapshots: preact@10.18.2: {} + prelude-ls@1.2.1: {} + + punycode@2.3.1: {} + + queue-microtask@1.2.3: {} + + read-pkg-up@7.0.1: + dependencies: + find-up: 4.1.0 + read-pkg: 5.2.0 + type-fest: 0.8.1 + + read-pkg@5.2.0: + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 2.5.0 + parse-json: 5.2.0 + type-fest: 0.6.0 + + refa@0.12.1: + dependencies: + '@eslint-community/regexpp': 4.11.0 + + regexp-ast-analysis@0.7.1: + dependencies: + '@eslint-community/regexpp': 4.11.0 + refa: 0.12.1 + + regexp-tree@0.1.27: {} + + regjsparser@0.10.0: + dependencies: + jsesc: 0.5.0 + + require-directory@2.1.1: {} + + resolve-from@4.0.0: {} + + resolve-pkg-maps@1.0.0: {} + + resolve@1.22.8: + dependencies: + is-core-module: 2.15.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + reusify@1.0.4: {} + rfdc@1.3.1: {} rollup@4.17.2: @@ -1083,20 +3536,157 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.17.2 fsevents: 2.3.3 + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + scslre@0.3.0: + dependencies: + '@eslint-community/regexpp': 4.11.0 + refa: 0.12.1 + regexp-ast-analysis: 0.7.1 + search-insights@2.9.0: {} + semver@5.7.2: {} + + semver@7.6.3: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + shiki@1.7.0: dependencies: '@shikijs/core': 1.7.0 + sisteransi@1.0.5: {} + + slash@3.0.0: {} + + slashes@3.0.12: {} + source-map-js@1.2.0: {} + spdx-correct@3.2.0: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.18 + + spdx-exceptions@2.5.0: {} + + spdx-expression-parse@3.0.1: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.18 + + spdx-expression-parse@4.0.0: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.18 + + spdx-license-ids@3.0.18: {} + speakingurl@14.0.1: {} + stable-hash@0.0.4: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-indent@3.0.0: + dependencies: + min-indent: 1.0.1 + + strip-json-comments@3.1.1: {} + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + synckit@0.6.2: + dependencies: + tslib: 2.6.3 + + synckit@0.9.1: + dependencies: + '@pkgr/core': 0.1.1 + tslib: 2.6.3 + tabbable@6.2.0: {} + tapable@2.2.1: {} + + text-table@0.2.0: {} + + tinyexec@0.1.4: {} + to-fast-properties@2.0.0: {} + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toml-eslint-parser@0.10.0: + dependencies: + eslint-visitor-keys: 3.4.3 + + ts-api-utils@1.3.0(typescript@5.5.4): + dependencies: + typescript: 5.5.4 + + tslib@2.6.3: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-fest@0.20.2: {} + + type-fest@0.6.0: {} + + type-fest@0.8.1: {} + + typescript@5.5.4: {} + + ufo@1.5.4: {} + + unist-util-stringify-position@2.0.3: + dependencies: + '@types/unist': 2.0.10 + + update-browserslist-db@1.1.0(browserslist@4.23.3): + dependencies: + browserslist: 4.23.3 + escalade: 3.1.2 + picocolors: 1.0.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + util-deprecate@1.0.2: {} + + validate-npm-package-license@3.0.4: + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + vite@5.3.1: dependencies: esbuild: 0.21.5 @@ -1105,24 +3695,24 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - vitepress@1.2.3(@algolia/client-search@4.20.0)(postcss@8.4.38)(search-insights@2.9.0): + vitepress@1.2.3(@algolia/client-search@4.20.0)(postcss@8.4.38)(search-insights@2.9.0)(typescript@5.5.4): dependencies: '@docsearch/css': 3.6.0 '@docsearch/js': 3.6.0(@algolia/client-search@4.20.0)(search-insights@2.9.0) '@shikijs/core': 1.7.0 '@shikijs/transformers': 1.7.0 '@types/markdown-it': 14.1.1 - '@vitejs/plugin-vue': 5.0.5(vite@5.3.1)(vue@3.4.27) - '@vue/devtools-api': 7.2.1(vue@3.4.27) + '@vitejs/plugin-vue': 5.0.5(vite@5.3.1)(vue@3.4.27(typescript@5.5.4)) + '@vue/devtools-api': 7.2.1(vue@3.4.27(typescript@5.5.4)) '@vue/shared': 3.4.27 - '@vueuse/core': 10.11.0(vue@3.4.27) - '@vueuse/integrations': 10.11.0(focus-trap@7.5.4)(vue@3.4.27) + '@vueuse/core': 10.11.0(vue@3.4.27(typescript@5.5.4)) + '@vueuse/integrations': 10.11.0(focus-trap@7.5.4)(vue@3.4.27(typescript@5.5.4)) focus-trap: 7.5.4 mark.js: 8.11.1 minisearch: 6.3.0 shiki: 1.7.0 vite: 5.3.1 - vue: 3.4.27 + vue: 3.4.27(typescript@5.5.4) optionalDependencies: postcss: 8.4.38 transitivePeerDependencies: @@ -1152,14 +3742,67 @@ snapshots: - typescript - universal-cookie - vue-demi@0.14.8(vue@3.4.27): + vue-demi@0.14.8(vue@3.4.27(typescript@5.5.4)): dependencies: - vue: 3.4.27 + vue: 3.4.27(typescript@5.5.4) - vue@3.4.27: + vue-eslint-parser@9.4.3(eslint@9.9.0): + dependencies: + debug: 4.3.6 + eslint: 9.9.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.6.0 + lodash: 4.17.21 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + + vue@3.4.27(typescript@5.5.4): dependencies: '@vue/compiler-dom': 3.4.27 '@vue/compiler-sfc': 3.4.27 '@vue/runtime-dom': 3.4.27 - '@vue/server-renderer': 3.4.27(vue@3.4.27) + '@vue/server-renderer': 3.4.27(vue@3.4.27(typescript@5.5.4)) '@vue/shared': 3.4.27 + optionalDependencies: + typescript: 5.5.4 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + word-wrap@1.2.5: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + xml-name-validator@4.0.0: {} + + y18n@5.0.8: {} + + yaml-eslint-parser@1.2.3: + dependencies: + eslint-visitor-keys: 3.4.3 + lodash: 4.17.21 + yaml: 2.5.0 + + yaml@2.5.0: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.1.2 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yocto-queue@0.1.0: {} From 9b4561910e646ce387a58c5db0f10b3cf7dcd2da Mon Sep 17 00:00:00 2001 From: this-is-tobi Date: Mon, 12 Aug 2024 23:47:06 +0200 Subject: [PATCH 2/2] style: :art: format code base --- .github/workflows/build.yml | 2 +- .github/workflows/release.yml | 2 +- .gitlab-ci-dso.yml | 3 +- CONTRIBUTING.md | 4 +- README.md | 24 ++-- docs/.vitepress/sidebar.json | 2 +- docs/administration/introduction.md | 2 +- docs/administration/journaux.md | 18 +-- docs/administration/quotas.md | 1 - docs/agreement/exploitation.md | 9 +- docs/agreement/faq.md | 49 ++++--- docs/agreement/introduction.md | 26 ++-- docs/agreement/kyverno.md | 2 +- docs/agreement/labels-list.md | 62 ++++----- docs/agreement/mocks.md | 65 +++++---- docs/agreement/observability.md | 6 +- docs/agreement/support.md | 8 +- docs/contribution/contribute.md | 4 +- docs/guide/alerting.md | 11 +- docs/guide/archive-logs.md | 56 ++++---- docs/guide/best-practices.md | 51 ++++--- docs/guide/environments-management.md | 4 +- docs/guide/get-started.md | 2 +- docs/guide/logs-kibana.md | 7 +- docs/guide/metrics.md | 4 +- docs/guide/projects-management.md | 3 +- docs/guide/repositories-management.md | 3 +- docs/guide/secrets-management.md | 148 ++++++++++---------- docs/guide/team.md | 3 +- docs/installation/configuration.md | 20 +-- docs/installation/debug.md | 2 +- docs/installation/installation.md | 22 +-- docs/installation/prerequisites.md | 2 +- docs/installation/versions.md | 186 +++++++++++++------------- docs/platform/introduction.md | 6 +- docs/platform/roadmap.md | 2 +- docs/platform/skills-matrix.md | 5 +- docs/public/examples/postgres.yaml | 16 +-- docs/services/artefacts.md | 11 +- docs/services/gitlab.md | 9 +- docs/services/gitops.md | 6 +- docs/services/sonarqube.md | 2 +- docs/services/vault.md | 2 +- helm/Chart.yaml | 2 +- helm/values-dso.yaml | 14 +- helm/values.yaml | 14 +- 46 files changed, 434 insertions(+), 468 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 07e7f1d..4b6e2af 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -4,7 +4,7 @@ on: push: branches: - main - paths: + paths: - docs/** workflow_dispatch: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a71c64e..4753d69 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -25,7 +25,7 @@ jobs: build: name: Build application runs-on: ubuntu-latest - needs: + needs: - release permissions: contents: read diff --git a/.gitlab-ci-dso.yml b/.gitlab-ci-dso.yml index d7cc4b4..7f469ed 100644 --- a/.gitlab-ci-dso.yml +++ b/.gitlab-ci-dso.yml @@ -5,7 +5,6 @@ include: - kaniko-ci.yml ref: main - default: image: alpine:latest @@ -25,7 +24,7 @@ read_secret: docker-build: variables: - WORKING_DIR: "." + WORKING_DIR: . IMAGE_NAME: dso-documentation stage: docker-build extends: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f126dbc..331a954 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -6,7 +6,6 @@ Merci de nous aider à améliorer la plateforme de services Cloud π Native. L'e Dans l'intérêt de favoriser un environnement ouvert et accueillant, nous, en tant que contributeurs et mainteneurs, nous engageons à faire de la participation à notre projet et à notre communauté une expérience sans harcèlement pour tous, quels que soient l'âge, la taille, le handicap, l'origine ethnique, l'identité et l'expression de genre, niveau d'expérience, nationalité, apparence personnelle, race, religion ou identité et orientation sexuelles. - ## Liste des ressources Le projet Cloud π Native est constitué d'un ensemble de repos github suivant : @@ -28,7 +27,6 @@ Le projet Cloud π Native est constitué d'un ensemble de repos github suivant : - Déploiement par helm chart dans un context de monorepo (code + helm dans le même repo) - Tutorial GitOps - ## Contribution -Pour contribuer au projet, vous pouvez, sur chacune des ressources ci-dessous créer une *issue* github, par exemple pour le projet de [documentation](https://github.com/cloud-pi-native/documentation/issues) \ No newline at end of file +Pour contribuer au projet, vous pouvez, sur chacune des ressources ci-dessous créer une *issue* github, par exemple pour le projet de [documentation](https://github.com/cloud-pi-native/documentation/issues) diff --git a/README.md b/README.md index 9a5c02e..9a41088 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,7 @@ Ce dépôt est construit et déployé à l'adresse : Dés que les [prérequis](https://cloud-pi-native.fr/agreement/support.html) sont présents, la souscription à l'offre Cloud π Native est possible en suivant les étapes suivantes : - - Contacter l’adresse suivante pour faire une demande : dtnum-brm-contacts@interieur.gouv.fr - - Après acceptation de la demande, l'équipe [Accompagnement](https://cloud-pi-native.fr/agreement/introduction.html#accompagnement) prendra contact avec vous pour la phase d'accompagnement. + - Contacter l’adresse suivante pour faire une demande: dtnum-brm-contacts@interieur.gouv.fr + - Après acceptation de la demande, l'équipe [Accompagnement](https://cloud-pi-native.fr/agreement/introduction.html#accompagnement) prendra contact avec vous pour la phase d'accompagnement. Enfin, le déploiement s'effectue sur différentes cibles d'hébergement possibles : @@ -40,19 +40,19 @@ Enfin, le déploiement s'effectue sur différentes cibles d'hébergement possibl ![vision](/img/global-vision.png) -Comme mentionné dans le schèma, l'offre de services comprend si vous le souhaitez l'infrastructure hébergeant vos applicatifs. +Comme mentionné dans le schèma, l'offre de services comprend si vous le souhaitez l'infrastructure hébergeant vos applicatifs. Cette infrastructure peut-être : - - Un socle Kubernetes/Openshift mutualisé dans la zone "Non Protégé" (NP) du ministère de l'Intérieur. - - Un socle Kubernetes/Openshift dédié dans la zone "Non Protégé" (NP) ou la zone "Diffusion Restreinte (DR) du ministère de l'intérieur. + - Un socle Kubernetes/Openshift mutualisé dans la zone "Non Protégé" (NP) du ministère de l'Intérieur. + - Un socle Kubernetes/Openshift dédié dans la zone "Non Protégé" (NP) ou la zone "Diffusion Restreinte (DR) du ministère de l'intérieur. - Un socle Kubernetes directement gérés par l'équipe projet. -Le choix de la cible est au cas par cas et fait lors des premières phases d'échange. +Le choix de la cible est au cas par cas et fait lors des premières phases d'échange. ## Accompagnement -Comme mentionné plus haut, à la souscription de l'offre Cloud π Native, une équipe accompagnement sera le vis-à-vis du projet et assurera : +Comme mentionné plus haut, à la souscription de l'offre Cloud π Native, une équipe accompagnement sera le vis-à-vis du projet et assurera : - Un [accompagnement](/agreement/support) rapproché aux projets pour que l'utilisation de l'offre se réalise dans des conditions optimales. -- Le parcours technique d'embarquement sur l'offre Cloud π Native qui s'articule sur trois niveaux : +- Le parcours technique d'embarquement sur l'offre Cloud π Native qui s'articule sur trois niveaux : * Démarche autonome (Kit d'autoformation, tutoriels, etc. ) * Démarche d'accompagnement à l'initialisation ( "Service Team" ) * Formation et certification d'acteurs externes @@ -63,12 +63,12 @@ Typiquement, l'équipe doit être dans un parcours de montée en compétences à ## Embarquement technique -Un parcours technique d'apprentissage permettant de valider les prérequis et d'intégrer les bonnes pratiques permet à nos clients d'appréhender l'offre Cloud π Native. +Un parcours technique d'apprentissage permettant de valider les prérequis et d'intégrer les bonnes pratiques permet à nos clients d'appréhender l'offre Cloud π Native. ![parcours_apprentissage](/img/learning-process.png) -- Étape 1 : [Matrice de compétences](/platform/skills-matrix) Des technologies à connaître pour utiliser l'offre Cloud π Native -- Étape 2 : vérification de l'éligibilité de son application avec le modèle Cloud Native Application [prérequis](/platform/compatibility) technique liée à l'offre. Les équipes Cloud π Native [accompagnent](/agreement/support) les équipes projets sur cette étape afin d'apporter conseils et qualification des architectures et maturité technique des équipes. +- Étape 1 : [Matrice de compétences](/platform/skills-matrix) Des technologies à connaître pour utiliser l'offre Cloud π Native +- Étape 2 : vérification de l'éligibilité de son application avec le modèle Cloud Native Application [prérequis](/platform/compatibility) technique liée à l'offre. Les équipes Cloud π Native [accompagnent](/agreement/support) les équipes projets sur cette étape afin d'apporter conseils et qualification des architectures et maturité technique des équipes. - Étape 3 : prise de connaissance des [bonnes pratiques](/guide/best-practices) et expérimentation avec une série de tutoriels [tutoriels](/guide/tutorials) afin de faire ses premiers pas avec l'offre - Étape 4 : [Embarquement](/guide/get-started) de l'application sur l'offre - Étape 5 : félicitations ! Vous êtes maintenant un utilisateur de la plateforme Cloud π Native et votre application peut passer en production via les principes d'[exploitation et observabilité](/agreement/exploitation) de vos projets. @@ -79,5 +79,5 @@ Enfin notre [FAQ](/agreement/faq) permet de lister les questions fréquentes de ## Contact -Pour toute information ou demande, veuillez nous contacter à l'adresse suivante : . Nous vous recontacterons au plus vite dès la réception du mail. +Pour toute information ou demande, veuillez nous contacter à l'adresse suivante : . Nous vous recontacterons au plus vite dès la réception du mail. Si vous faites déjà parti des beta testeurs et que vous souhaitez poser des questions ou avoir de l'accompagnement, veuillez nous contacter directement via le serveur Mattermost prévu à cet effet (si vous n'avez pas été ajouté au serveur Mattermost, veuillez contacter l'adresse mail précédente). diff --git a/docs/agreement/kyverno.md b/docs/agreement/kyverno.md index a7a2b8d..bca636c 100644 --- a/docs/agreement/kyverno.md +++ b/docs/agreement/kyverno.md @@ -28,7 +28,7 @@ Dans le cadre de l'offre de services du MIOM, les règles suivantes sont appliqu | need-liveness-readiness | AUDIT | ENFORCE | | medium | Best Practices | Assure que tous les conteneurs ont l'une des trois sondes (Liveness, Readiness ou Startup), pour s'assurer qu'ils signalent correctement leur statut à Openshift | | job-history | AUDIT | ENFORCE | | low | Best Practices | Cronjob: ajoute les propriétés `successfulJobsHistoryLimit: 5` et `failedJobsHistoryLimit: 5` | -Explication de la difference entre ENFORCE et AUDIT : +Explication de la difference entre ENFORCE et AUDIT : - Enforce : Kyverno bloquera l'action (par exemple, la création, la mise à jour ou la suppression d'une ressource) si la politique n'est pas respectée. Cela garantit que toutes les ressources du cluster respectent les politiques mises en place. - Audit: Une action d'Audit ne bloquera pas une action si la politique n'est pas respectée, mais elle enregistrera l'infraction dans les résultats d'audit de Kyverno. C'est utile pour observer les infractions aux politiques sans bloquer les actions, ce qui peut être particulièrement utile dans les environnements de développement ou de test. diff --git a/docs/agreement/labels-list.md b/docs/agreement/labels-list.md index d0e6b43..cae4463 100644 --- a/docs/agreement/labels-list.md +++ b/docs/agreement/labels-list.md @@ -36,42 +36,42 @@ Ajouter un label `criticality: ` où `element` est un élément de la l Ajouter un label `component: ` où `element` est un élément de la liste suivante : - web : - - nginx - - apache - - caddy - - tomcat + - nginx + - apache + - caddy + - tomcat - defaults : - - python - - node - - openjdk - - golang - - php - - ruby - - perl - - drupal - - java - -- database : - - postgres - - mariadb - - mysql - - mongo - - cassandra - - cockroach - - influx - - etcd + - python + - node + - openjdk + - golang + - php + - ruby + - perl + - drupal + - java + +- database : + - postgres + - mariadb + - mysql + - mongo + - cassandra + - cockroach + - influx + - etcd - caching : - - varnish - - redis - - memcached + - varnish + - redis + - memcached - broker : - - rabbitmq - - kafka - - apachemq - - kubemq + - rabbitmq + - kafka + - apachemq + - kubemq - others : - - busybox \ No newline at end of file + - busybox diff --git a/docs/agreement/mocks.md b/docs/agreement/mocks.md index a849ceb..e353201 100644 --- a/docs/agreement/mocks.md +++ b/docs/agreement/mocks.md @@ -46,7 +46,7 @@ smtp: # Référence vers l'image mailhog sur docker.io image: repository: docker.io/mailhog/mailhog - tag: "v1.0.1" + tag: v1.0.1 pullPolicy: IfNotPresent nameOverride: "" @@ -73,16 +73,16 @@ smtp: enabled: true # ingressClassName: nginx annotations: {} - # kubernetes.io/ingress.class: nginx - # kubernetes.io/tls-acme: "true" + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" labels: {} -# hostOverride: mailhog.example.com + # hostOverride: mailhog.example.com auth: enabled: true existingSecret: "" fileName: auth.txt - fileContents: "Ym9iOiQyYSQwNCRRN1VwdmQvWUlwck5DcExsUHpFQ2VlRnZrVlI1RVhKbG1uZjZ4S050ZHlXSnJoeW1hNUhlaQ==" # format user:password (où password est bcrypted) le tout en base64 + fileContents: Ym9iOiQyYSQwNCRRN1VwdmQvWUlwck5DcExsUHpFQ2VlRnZrVlI1RVhKbG1uZjZ4S050ZHlXSnJoeW1hNUhlaQ== # format user:password (où password est bcrypted) le tout en base64 # JSON file defining outgoing SMTP servers outgoingSMTP: @@ -90,21 +90,21 @@ smtp: existingSecret: "" fileName: outgoing-smtp.json fileContents: {} - # See https://github.com/mailhog/MailHog/blob/master/docs/CONFIG#outgoing-smtp-configuration - # Only name, host and port are required. - # - # server_name1: - # name: "server_name1" - # host: "mail.example.com" - # port: "25" # NOTE: go requires this port number to be a string... otherwise the container won't start - # email: "" - # username: "" - # password: "" - # mechanism: "PLAIN|CRAM-MD5" - # server_name2: - # name: "server_name2" - # host: "mail2.example.com" - # port: "587" # NOTE: go requires this port number to be a string... otherwise the container won't start + # See https://github.com/mailhog/MailHog/blob/master/docs/CONFIG#outgoing-smtp-configuration + # Only name, host and port are required. + # + # server_name1: + # name: "server_name1" + # host: "mail.example.com" + # port: "25" # NOTE: go requires this port number to be a string... otherwise the container won't start + # email: "" + # username: "" + # password: "" + # mechanism: "PLAIN|CRAM-MD5" + # server_name2: + # name: "server_name2" + # host: "mail2.example.com" + # port: "587" # NOTE: go requires this port number to be a string... otherwise the container won't start podReplicas: 1 @@ -124,7 +124,7 @@ smtp: initialDelaySeconds: 10 timeoutSeconds: 1 - resources: + resources: # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little # resources, such as Minikube. If you do want to specify resources, uncomment the following @@ -153,19 +153,19 @@ minio: Le chart dans cette configuration va créer sur le namespace : - 2 buckets S3 nommés my-bucket-app et my-second-bucket - Un secret contenant 2 clés **root-password** et **root-user** pour se connecter à l'IHM permettant d'administrer minIO (création de bucket de 'AK/SK). - + Pour utiliser MinIO sur un pod, il faut créer et injecter la configuration via configMap ou Secret : ```yaml -[...] - containers: - [...] - envFrom: - - configMapRef: - name: cm-name - - secretRef: - name: secret-name -[...] +# [...] +containers: + # [...] + envFrom: + - configMapRef: + name: cm-name + - secretRef: + name: secret-name +# [...] ``` ### Passage2 @@ -186,9 +186,8 @@ passage2: # Url de l'ingress du reverse proxy authentifiant hostname: mellon.example.com proxy: - #Valeur des headers ajouté par MELLON + # Valeur des headers ajouté par MELLON headers: |- - #Ajout de header Mellon-NameID avec le nom de l'utilisateur connecté RequestHeader set Mellon-NameID %{MELLON_NAME_ID}e Header set Mellon-NameID %{MELLON_NAME_ID}e diff --git a/docs/agreement/observability.md b/docs/agreement/observability.md index fccbc06..1b621eb 100644 --- a/docs/agreement/observability.md +++ b/docs/agreement/observability.md @@ -1,10 +1,7 @@ - - # Observabilité > __:warning: L'observabilité n'est pas en place sur les environnements OVH.__ - Dans le cadre de l'offre Cloud-Pi Native, l'observabilité est disponible via plusieurs composants: - Prometheus/Grafana pour les métriques - AlertManager/Grafana pour l'alerting @@ -21,7 +18,6 @@ Ces différents services sont accessibles via la console `Cloud Pi Native > Proj Pour apprendre à utiliser ce service, [cliquer ici](/guide/metrics) - ## Alerting [AlertManager](https://grafana.com/docs/grafana/latest/alerting/fundamentals/alertmanager/) est utilisé pour gérer les différentes alertes de vos projets. @@ -42,4 +38,4 @@ Pour bénéficier de ce service, merci de créer un ticket auprès de la Service Pour apprendre à utiliser kibana, [cliquer ici](/guide/logs-kibana.md) -Un exemple de mise en place d'un collecteur de log avec le produit [vector](https://vector.dev/) vers un bucket AWS S3 est disponible [ici](/guide/archive-logs.md) \ No newline at end of file +Un exemple de mise en place d'un collecteur de log avec le produit [vector](https://vector.dev/) vers un bucket AWS S3 est disponible [ici](/guide/archive-logs.md) diff --git a/docs/agreement/support.md b/docs/agreement/support.md index e50f525..352eb4f 100644 --- a/docs/agreement/support.md +++ b/docs/agreement/support.md @@ -7,12 +7,12 @@ La Service Team est l'équipe qui vous accompagne pour embarquer sur l'offre Clo L'accompagnement technique se fera sur 2 plateformes : - Plateforme d'accélération OVH; plateforme non liée aux réseaux interministères et a pour objectif de fournir aux projets un accès plus rapide à la console et aux services Cloud π native. Ainsi les projets peuvent anticiper en effectuant leurs premiers tests. - + - Cluster Cloud π native sur les infrastructures du ministère de l'intérieur ## Prérequis organisationnels -Avant d'utiliser l'offre Cloud π native, il est nécessaire : +Avant d'utiliser l'offre Cloud π native, il est nécessaire : - De suivre le processus d'accompagnement [haut niveau](https://github.com/cloud-pi-native/embarquement-autoformation) ## Prérequis techniques @@ -27,7 +27,7 @@ En plus de ces prérequis, les éléments suivants sont à fournir par le projet - Si une reprise de données est à prévoir et la volumétrie associée - Processus de sauvegarde et restauration demandé et/ou prévues par l'application - Procédure de création de la base de données (portée par l'application / manuel) -- Liste des composants externes au projet et appelés par l'application pour évaluer les ouvertures de flux: +- Liste des composants externes au projet et appelés par l'application pour évaluer les ouvertures de flux: - Internes MI / RIE - Sur Internet - Exposition de l'application (Internet/Intranet/RIE/DR/NP) @@ -44,7 +44,7 @@ En plus de ces prérequis, les éléments suivants sont à fournir par le projet - Prise en main de la console : - Intégration des projets applicatifs et construction de la chaine de construction sur DSO (gitlab-ci-dso) - Intégration des repos d'infra et intégation sur ArgoCD - - Accès aux éléments de monitoring + - Accès aux éléments de monitoring ## Accompagnement sur Cloud π diff --git a/docs/contribution/contribute.md b/docs/contribution/contribute.md index f126dbc..331a954 100644 --- a/docs/contribution/contribute.md +++ b/docs/contribution/contribute.md @@ -6,7 +6,6 @@ Merci de nous aider à améliorer la plateforme de services Cloud π Native. L'e Dans l'intérêt de favoriser un environnement ouvert et accueillant, nous, en tant que contributeurs et mainteneurs, nous engageons à faire de la participation à notre projet et à notre communauté une expérience sans harcèlement pour tous, quels que soient l'âge, la taille, le handicap, l'origine ethnique, l'identité et l'expression de genre, niveau d'expérience, nationalité, apparence personnelle, race, religion ou identité et orientation sexuelles. - ## Liste des ressources Le projet Cloud π Native est constitué d'un ensemble de repos github suivant : @@ -28,7 +27,6 @@ Le projet Cloud π Native est constitué d'un ensemble de repos github suivant : - Déploiement par helm chart dans un context de monorepo (code + helm dans le même repo) - Tutorial GitOps - ## Contribution -Pour contribuer au projet, vous pouvez, sur chacune des ressources ci-dessous créer une *issue* github, par exemple pour le projet de [documentation](https://github.com/cloud-pi-native/documentation/issues) \ No newline at end of file +Pour contribuer au projet, vous pouvez, sur chacune des ressources ci-dessous créer une *issue* github, par exemple pour le projet de [documentation](https://github.com/cloud-pi-native/documentation/issues) diff --git a/docs/guide/alerting.md b/docs/guide/alerting.md index 6d3b0b4..d3d8e26 100644 --- a/docs/guide/alerting.md +++ b/docs/guide/alerting.md @@ -28,7 +28,7 @@ Les étapes d'après expliquent les informations demandées pour créer une aler --- - Choisir `Mimir or Loki alert` et `Prometheus` comme datasource - + :warning: **La métrique choisie doit renvoyer vraie quand l'alerte doit être levée** :warning: Par exemple ici, AlertManager surveille le nombre de pod pgrest ready et s'il est inférieur à 1, cela lève l'alerte @@ -45,7 +45,6 @@ Par exemple ici, AlertManager surveille le nombre de pod pgrest ready et s'il es ![create_alert_step_4](/img/guide/alerting/create_alert_step_4.png) - *Affichage des alertes selon le namespace et le groupe* ![alert_ns_group](/img/guide/alerting/alert_ns_group.png) @@ -93,13 +92,13 @@ Il est possible de définir d'autres politiques pour envoyer certaines alertes Cliquer sur `Notification policies` dans le menu Dans la liste déroulante `Choose Alertmanager`, choisir `Alertmanager` -![contact_point_manager](/img/guide/alerting/contact_point_manager.png) +![contact_point_manager](/img/guide/alerting/contact_point_manager.png) La première politique sera celle par défaut (choisir un canal approprié pour les recevoir), il est possible par la suite de définir des politiques imbriquées pour router les alertes selon des règles spécifiques --- La liste déroulante `Default contact Point` permet de choisir le canal de communication par défaut. -![policy_default](/img/guide/alerting/policy_default.png) +![policy_default](/img/guide/alerting/policy_default.png) Cliquer sur `Add default policy` pour sauvegarder --- @@ -110,7 +109,7 @@ Choisir où l'imbrication se fera et cliquer sur le bouton `+ New nested policy` Une nouvelle fenêtre s'ouvre, où il est possible de choisir les alertes selon l'existence d'un label, etc. (attention le bouton `Add policy` se trouve en bas) Exemple si le label `refapp`est égal à `demo`, alors l'alerte est routée vers le point de contact nommé `opsdroid` -![notification_policy_nested_create](/img/guide/alerting/notification_policy_nested_create.png) +![notification_policy_nested_create](/img/guide/alerting/notification_policy_nested_create.png) Cliquer sur `Add policy` pour créer la nouvelle politique imbriquée, que l'on retrouve sous celle par défaut dans cet exemple: -![notification_policies](/img/guide/alerting/notification_policies.png) \ No newline at end of file +![notification_policies](/img/guide/alerting/notification_policies.png) diff --git a/docs/guide/archive-logs.md b/docs/guide/archive-logs.md index fc269ca..4678f4b 100644 --- a/docs/guide/archive-logs.md +++ b/docs/guide/archive-logs.md @@ -18,10 +18,10 @@ Les clés de sécurité (AK/SK) sont sauvegardés dans un secret, voir avec [SOP *Version 0.30.0 à la date d'écriture de cette documentation* ```yaml dependencies: -- name: vector - version: "0.30.0" - repository: "https://helm.vector.dev" - condition: vector.enabled + - name: vector + version: 0.30.0 + repository: "https://helm.vector.dev" + condition: vector.enabled ``` **values.yaml:** @@ -29,7 +29,7 @@ dependencies: vector: enabled: true commonLabels: - app:my-app + app: my-app tier: logs component: vector podMonitor: @@ -39,19 +39,19 @@ vector: enabled: true size: 10Gi extraVolumes: - - name: aws-creds - secret: - secretName: aws-log-archive + - name: aws-creds + secret: + secretName: aws-log-archive extraVolumeMounts: - - name: aws-creds - mountPath: /var/aws/ + - name: aws-creds + mountPath: /var/aws/ resources: requests: cpu: 100m memory: 200Mi limits: cpu: 100m - memory: 200Mi + memory: 200Mi customConfig: data_dir: /vector-data-dir api: @@ -71,23 +71,23 @@ vector: inputs: [internal_metrics] address: 0.0.0.0:9090 aws_s3_out: - type: "aws_s3" + type: aws_s3 acknowledgements: enabled: true - tls: + tls: verify_certificate: false inputs: - - http_server + - http_server endpoint: "https://monendpointS3" - bucket: "logs" - region: "eu-east-1" + bucket: logs + region: eu-east-1 auth: credentials_file: /var/aws/credentials - compression: "gzip" + compression: gzip encoding: - codec: "raw_message" + codec: raw_message key_prefix: "%Y/%m/%d/" - buffer: + buffer: type: disk max_size: 268435488 batch: @@ -95,7 +95,6 @@ vector: timeout_secs: 1800 tags: Project: monprojet - ``` Les clés de sécurité (AK/SK): @@ -107,9 +106,9 @@ metadata: type: Opaque data: credentials: |- - [default] - aws_access_key_id = ++++++++++++ - aws_secret_access_key = ++++++++++++ + [default] + aws_access_key_id = ++++++++++++ + aws_secret_access_key = ++++++++++++ ``` :warning: **Pour profiter de ce service, ouvrir un ticket auprès de la ServiceTeam détaillant le namespace source, la méthode de transmission (http, kafka, syslog) ainsi que l'url (+ port) vers laquelle envoyer les logs.** :warning: @@ -143,7 +142,6 @@ est parsé en: L'idée est de compter le nombre de requête par utilisateur (ici frank). - La propriété `transforms` permet de transformer ses logs (voir [documentation](https://vector.dev/docs/reference/configuration/transforms/) pour plus d'exemple). Les transformations peuvent s'enchaîner, c'est ce qui est utilisé ici sélectionner, parser et remonter une métrique. @@ -164,7 +162,7 @@ vector: - http_server source: >- . = parse_json!(.message) - parse_pgrest_log: + parse_pgrest_log: # Check si le log reçu correspond est émis par le pod qui contient un label component:postgrest # Si c'est le cas, parse la clé message qui est au format apache combined type: remap @@ -183,7 +181,7 @@ vector: . = parse_apache_log!(.message, "combined") pgrest_log_to_metrics: - ## Transforme le log en métrique, ici compter le nombre de requête par utilisateur + # # Transforme le log en métrique, ici compter le nombre de requête par utilisateur type: log_to_metric inputs: - parse_pgrest_log # Fait appel au transform précédent @@ -199,7 +197,7 @@ vector: type: prometheus_exporter flush_period_secs: 3600 inputs: - - internal_metrics - - pgrest_log_to_metrics # Ajout du dernier transform afin d'avoir la métrique exposée au format prometheus + - internal_metrics + - pgrest_log_to_metrics # Ajout du dernier transform afin d'avoir la métrique exposée au format prometheus address: 0.0.0.0:9090 -``` \ No newline at end of file +``` diff --git a/docs/guide/best-practices.md b/docs/guide/best-practices.md index 8523662..b588b66 100644 --- a/docs/guide/best-practices.md +++ b/docs/guide/best-practices.md @@ -4,7 +4,7 @@ Une application Cloud π Native doit respecter les [Twelve-Factor](https://12factor.net/fr/) -D'autres bonnes pratiques à réspecter impérantivement: +D'autres bonnes pratiques à réspecter impérantivement: 1. Base de code @@ -21,7 +21,7 @@ D'autres bonnes pratiques à réspecter impérantivement: 4. Port Afin de respecter les préconisation de sécurité, les applications déployées doivent écouter sur des ports > 1024. - + 6. Logs L'application __NE DOIT PAS__ écrire dans un fichier de logs spécifique mais écrire l'ensemble de ces logs dans la sortie standards (stdout) au format GELF ou à defaut JSON. @@ -53,16 +53,16 @@ L'application déployée doit être conteneurisée (sous la forme d'un ou plusie L'application doit se déployer à l'aide de fichiers d'__Infrastructure As Code__: - Utiliser des manifestes [kubernetes](https://kubernetes.io/) avec Kustomize pour variabliser vos manifestes (cf. [tutoriels](/guide/tutorials)) - Utiliser des charts [helm](https://helm.sh/) (cf. [tutoriels](/guide/tutorials) pour avoir des exemples de fichiers). - - Utiliser [Kustomize](https://kustomize.io/) + - Utiliser [Kustomize](https://kustomize.io/) ## Labels -Les ressources doivent comporter des labels permettant de les identifier. les labels pourraient etre decomposés de la facon suivante : +Les ressources doivent comporter des labels permettant de les identifier. les labels pourraient etre decomposés de la facon suivante : -``` Yaml +``` Yaml App : " " Env : " " -Tier : " " +Tier : " " Criticality : " " Component : " " ``` @@ -73,7 +73,7 @@ Tous les labels disponibles [ici](/agreement/labels-list). Les images poussées dans le registry devront etre unique et identifiés via un Sha ou Short-Sha qui pourrait etre lié au commit Git. Grace a cela une gestion des releases et un rollback seront possibles. -Exemple de valeur pour le Tag de l'image : +Exemple de valeur pour le Tag de l'image : ``` CI_COMMIT_SHA @@ -84,8 +84,8 @@ CI_JOB_ID ## Politiques de nommage -Les noms de toutes les ressources Openshift ne doivent jamais etre trop longs, il est donc conseillé de choisir des noms courts. -il se pourrait que des ressources ne soient pas déployées si le nom est trop long. +Les noms de toutes les ressources Openshift ne doivent jamais etre trop longs, il est donc conseillé de choisir des noms courts. +il se pourrait que des ressources ne soient pas déployées si le nom est trop long. Coté exploitation, cela facilite grandement la gestion. Exemple : @@ -101,20 +101,20 @@ Route : env-route PVC : env-name-pvc ``` -## Secrets +## Secrets Les secrets comportent toutes les informations sensibles. Les différents types de secrets peuvent etre : - Passwords -- Certificats -- Usernames -- Tokens +- Certificats +- Usernames +- Tokens + +Toutes les secrets devront etre contenus dans un Vault qui sera mis a disposition pour l'ensemble des projets. Les objets contenus dans le Vault sont séparés par projets (NS). -Toutes les secrets devront etre contenus dans un Vault qui sera mis a disposition pour l'ensemble des projets. Les objets contenus dans le Vault sont séparés par projets (NS). - ## Liveness et Readiness -Il est très important de mettre en place ces checks afin de vérifier l'etat de vos applications. Ceci est nécessaire pour assurer la haute disponibilité et la résilience de vos applications. +Il est très important de mettre en place ces checks afin de vérifier l'etat de vos applications. Ceci est nécessaire pour assurer la haute disponibilité et la résilience de vos applications. Cela peut-etre une fonctionnalité de l'application, une page d'un site web, une entrée en base de donnée, etc. ``` Yaml @@ -133,11 +133,11 @@ readinessProbe: periodSeconds: 3 ``` -## SSL +## SSL -Afin d'optimiser un flux sécurisé,il est préférable que cela soit de bout en bout. +Afin d'optimiser un flux sécurisé,il est préférable que cela soit de bout en bout. -Exemple du schéma de distribution de la requete. +Exemple du schéma de distribution de la requete. Users --HTTPS-> ReverseProxy --HTTPS-> Ingress Kubernetes --HTTPS-> Container (Best Case) @@ -147,14 +147,14 @@ Users --HTTPS-> ReverseProxy --HTTPS-> Ingress Kubernetes --HTTP-> Container ( Le scaling est très important afin de répondre aux besoins en termes d'affluence. il est aujourd'hui un atout majeur pour avoir une application qui soit le plus disponible possible avec des performances élevées. Pour cela il est donc possible de définir des triggers afin d'upscale l'applicatif (CPU, RAM, Métriques Applicatives). -## QOS +## QOS Il est important de définir les consommations de chaque POD (prévisionnelles), Savoir si il serait intéressant que certains disposent d’une "request" égal a la "limit" afin d’assurer une réservation des ressources. (Guaranteed Class) L'utilisation du "Burstable" n'est pas pas une bonne pratique. il est vraiment necessaire d'avoir une "limit" même si celle-ci n'est pas équivalente a la "request". -Exemple : +Exemple : -```Yaml +```Yaml limits: memory: "200Mi" cpu: "700m" @@ -165,14 +165,14 @@ requests: ## Taille des images -Il est très important de construire des images les plus légères possibles, c'est a dire utiliser uniquement les paquets nécéssaires au bon fonctionnement de l'application ainsi que la meilleure image de base. +Il est très important de construire des images les plus légères possibles, c'est a dire utiliser uniquement les paquets nécéssaires au bon fonctionnement de l'application ainsi que la meilleure image de base. C'est un gros vecteur de sécurité, de charge stockage et réseau. Exemple d'image base Lightway : Alpine ## Politiques réseau -Les "Network policies" sont par défaut en "Deny ALL". Il est donc à vous de déifnir les flux entrants et sortants sur les namespaces de vos projets. +Les "Network policies" sont par défaut en "Deny ALL". Il est donc à vous de déifnir les flux entrants et sortants sur les namespaces de vos projets. ReverseProxy-->Networkpolicies-->Pods (Ingress) @@ -187,9 +187,8 @@ metadata: spec: podSelector: matchLabels: - Tier: frontend + Tier: frontend ingress: - ports: - port: 80 ``` - diff --git a/docs/guide/environments-management.md b/docs/guide/environments-management.md index 7b93e32..1c42e7d 100644 --- a/docs/guide/environments-management.md +++ b/docs/guide/environments-management.md @@ -8,7 +8,7 @@ La console crée automatiquement : - un namespace applicatif par environnement sur le cluster correspondant. - le pullsecret associé au projet. - les quotas correspondant à l'environnement sur le namespace - - une application ArgoCD par environnement et par repo de code infrastructure. + - une application ArgoCD par environnement et par repo de code infrastructure. ## Création d'un environnement @@ -23,4 +23,4 @@ La console crée automatiquement : - Le cluster de destination ![quota](/img/environnement/cluster-env.png) -Cliquez sur le bouton **Ajouter l'environnement** pour créer l'environnement \ No newline at end of file +Cliquez sur le bouton **Ajouter l'environnement** pour créer l'environnement diff --git a/docs/guide/get-started.md b/docs/guide/get-started.md index 86cc371..a4523e6 100644 --- a/docs/guide/get-started.md +++ b/docs/guide/get-started.md @@ -34,7 +34,7 @@ Il existe deux types de dépôts: ## Etape 5 - Ajouter un environnement -Un environnement est un namespace cloisonné au sens kubernetes permettant de déployer le code d'infrastructure du dépôt idoine. +Un environnement est un namespace cloisonné au sens kubernetes permettant de déployer le code d'infrastructure du dépôt idoine. Pour déployer un environnement un guide est disponible [ici](/guide/environments-management). diff --git a/docs/guide/logs-kibana.md b/docs/guide/logs-kibana.md index ca83cef..9eee89a 100644 --- a/docs/guide/logs-kibana.md +++ b/docs/guide/logs-kibana.md @@ -9,7 +9,6 @@ Pour se logguer, cliquer sur le bouton `dso-client` ![login](/img/guide/kibana/log-in.png) - *Les prochaines étapes ne seront à faire qu'une seule fois* - Kibana va demander l'autorisation d'accéder à des ressources, cocher tout et cliquer sur `Allow selected permissions` @@ -25,7 +24,6 @@ Kibana va demander quel champ utiliser pour la date, choisir `@timestamp` dans l Félicitations, vous venez de créer votre premier index Kibana et allez pouvoir dès à présent découvrir et filtrer vos logs ![create_index_valid](/img/guide/kibana/create_index_valid.png) - ## Explorer vos logs Pour explorer et requêter vos logs, allez sur l'onglet `Discover` ![discover](/img/guide/kibana/discover.png) @@ -47,16 +45,13 @@ A gauche se trouve les champs requêtables (ceux trouvés dans l'index créé à --- A droite se trouve les résultats avec un graphique reprenant la disparité des lignes de logs selon la date. -En en dessous, les logs correspondants à la recherche (avec les critères surlignés). +En en dessous, les logs correspondants à la recherche (avec les critères surlignés). *A noter qu'il est possible de déplier les résultats en cliquant sur la flèche à côté de la date* ![discover_results](/img/guide/kibana/discover_results.png) - - ## Aller plus loin La documentation de Kibana se trouve [ici](https://www.elastic.co/guide/en/kibana/6.8/index.html) Plus d'informations concernant la syntaxe de requêtage [ici](https://www.elastic.co/guide/en/kibana/6.8/kuery-query.html) - diff --git a/docs/guide/metrics.md b/docs/guide/metrics.md index a9d7bf4..e5f8712 100644 --- a/docs/guide/metrics.md +++ b/docs/guide/metrics.md @@ -11,7 +11,7 @@ Pour se logguer, cliquer sur le bouton en bas de page commençant par "Sign in w ![signin](/img/guide/grafana-sign-in.png) -Une fois connecté, l'accès aux dashboards est disponible via la menu hamburger en haut à gauche +Une fois connecté, l'accès aux dashboards est disponible via la menu hamburger en haut à gauche ![menu](/img/guide/grafana_menu.png) ![menu dashboard](/img/guide/grafana_menu_dashboard.png) @@ -55,7 +55,6 @@ Le bouton composé de 2 flèches formant un cercle permet de rafraichir la prév Le panel de droite permet de définir des options pour le graphique, notamment son type (ici `bar chart`) et le titre associé (ici `RAM postgresql`) ![option](/img/guide/grafana_first_visualization_option.png) - --- Tout en haut à droite se trouve 3 boutons: ![visualization_save](/img/guide/grafana_visualization_save.png) @@ -93,4 +92,3 @@ Quelques liens utiles concernant les dashboard: - : dashboards créés par la société Sysdig basés sur le principe des golden signals - : Documentation sur le langage PromQL, permettant d'interroger Prometheus - : Comment importer un dashboard dans grafana - diff --git a/docs/guide/projects-management.md b/docs/guide/projects-management.md index 7001117..e4e71f2 100644 --- a/docs/guide/projects-management.md +++ b/docs/guide/projects-management.md @@ -4,7 +4,7 @@ Un projet est un espace virtuel (namespace au sens kubernetes) cloisonné pour u Chaque projet contient une liste de collaborateurs (voir [Gestion des équipes](/guide/team)) ainsi qu'un ou plusieurs dépôts de code (voir [Gestion des dépôts](/guide/repositories-management.md)) -## Création d'un projet +## Création d'un projet Une fois connecté sur la console, le menu gauche présente une entrée "Mes Projets" contenant la liste de ses projets. ![mes projets](/img/tuto/2tuto-mes-projets.png) @@ -42,4 +42,3 @@ La partie GitLab permet d'avoir le token ainsi que l'id du dépôt mirror (perme Concernant Harbor, la registry stockant les images construites sur la plateforme CPiN Pour la section Kubernetes, le nom du secret permettant de s'authentifier auprès d'Harbor. - **Supprimer le projet monprojet**: après confirmation, supprime définitivement le projet. Aucune restauration n'est possible. - diff --git a/docs/guide/repositories-management.md b/docs/guide/repositories-management.md index ba78e07..9e8604f 100644 --- a/docs/guide/repositories-management.md +++ b/docs/guide/repositories-management.md @@ -27,7 +27,6 @@ Cliquer enfin sur le bouton `Ajouter le dépôt`. Lorsqu'un dépôt est créé dans la console en tant que `dépôt d'infrastructure`, la plateforme créée automatiquement l'application [ArgoCD](https://argo-cd.readthedocs.io/en/stable/) associée qui permettra le déploiement. - Une fois que le dépôt est correctement ajouté, il apparait avec une icône indiquant son statut : depots synchronisés ok @@ -52,7 +51,7 @@ Ce bouton lancer une pipeline sur la GitLab DSO afin de synchroniser la branche > name: Webhook to update the Cloud Pi repo > on: push > jobs: -> curl: +> curl: > runs-on: ubuntu-latest > steps: > - name: call webhook diff --git a/docs/guide/secrets-management.md b/docs/guide/secrets-management.md index db52506..618a721 100644 --- a/docs/guide/secrets-management.md +++ b/docs/guide/secrets-management.md @@ -35,7 +35,7 @@ spec: stringData: token: supersecrettoken - name: docker-login - type: "kubernetes.io/dockerconfigjson" + type: kubernetes.io/dockerconfigjson stringData: .dockerconfigjson: '{"auths":{"index.docker.io":{"username":"user","password":"pass","email":"toto@example.com","auth":"dXNlcjpwYXNz"}}}' ``` @@ -56,50 +56,50 @@ Le contenu du fichier devient alors : apiVersion: isindir.github.com/v1alpha3 kind: SopsSecret metadata: - name: mysecret-sops + name: mysecret-sops spec: - secretTemplates: - - name: ENC[AES256_GCM,data:GCTwnqz3qLWBltXkI1E=,iv:6s/89KUaymATUyyiavb1JQdndbvBY5XrBwdqg7Zp7nM=,tag:LcEyQU0/UvYWt7YCyGiFpw==,type:str] - labels: - label1: ENC[AES256_GCM,data:YKnixwbNsFPccmx7Kw==,iv:TQNNfHyvcJaXTnuNAi7iq/HHGpjtIN3SInxds1aWJpM=,tag:LCHNCjIQ8lrKRzlHIflYRA==,type:str] - annotations: - key1: ENC[AES256_GCM,data:IrcoTdCj0sS+tA==,iv:W5ccDu7jna7fP/ZfQ6cYaQX/uqU9PjKJ83PgJpHR9b0=,tag:4UDYI4WHXgipY8wXZu/NhA==,type:str] - stringData: - data-name0: ENC[AES256_GCM,data:t431CrKunuDACSw=,iv:pou2IIpBl6LeKloCC1yGzHA8Vkt/0Jo0nu8M4e+8XW0=,tag:kkuw1HXkSCS9f5K73MBEgw==,type:str] - data: - data-name1: ENC[AES256_GCM,data:p7ffMnDqVKj8Vog=,iv:KI07DuHBarC4du/sqrLus4o9s7o5knu/wu3W8ssO4e8=,tag:TgKXwVJJGEI9H5jWM5Ca4A==,type:str] - - name: ENC[AES256_GCM,data:isdJvbWonL593lfI4w==,iv:bpHG0fsIXWcmJ3fCDebKXeFGWNrHfHRWTQ86e+Dgruw=,tag:HmgDZLLssR+roPBSsSrizw==,type:str] - stringData: - token: ENC[AES256_GCM,data:QYXc7S8EHkSblo7RDW9Ovw==,iv:9lJcVQ5EJR+LYVFX/0OUJ+uZqQx0kiL2Kze8OJ3fu0M=,tag:QDpVKlSS1jj+OnWzpfCW2Q==,type:str] - - name: ENC[AES256_GCM,data:pHr2cwiFjGsIBZj+,iv:x1TkramaD0peRJe95n+r+ye5IWeeE630C0LwbVWJ154=,tag:7TiqbtURY7fn+9r2V7PlDA==,type:str] - type: ENC[AES256_GCM,data:8ZBm++dOCx4xlmPW4bZagHMVua5gj7v7GVkEtBRX,iv:Y8HYgfO8Ae9SY3WYF/BYhKY9n6KESwQEHMNUPZfQd9o=,tag:LqlUy6FLcYAtYEa8qtx5NQ==,type:str] - stringData: - .dockerconfigjson: ENC[AES256_GCM,data:1TmIvfP95WReEpGqF2/ukxkvyFVdYbO3gda+oAtNZqwRZw749qvU8koYsi012s1/yhutll5v3ldqUYtr4sNuVS7TFVy2/qZ+ryiBaI8qUxt+kOx85eyfp36pJolwQtdQPNanRTLLkV4mf1JzSYOG6WAokkQ=,iv:X1jzTyp+CzTIowxH6gl2cIInk892cuO9/5JUkuCJdqI=,tag:DbtJe3pRo8TMrBO/gt4BDw==,type:str] + secretTemplates: + - name: ENC[AES256_GCM,data:GCTwnqz3qLWBltXkI1E=,iv:6s/89KUaymATUyyiavb1JQdndbvBY5XrBwdqg7Zp7nM=,tag:LcEyQU0/UvYWt7YCyGiFpw==,type:str] + labels: + label1: ENC[AES256_GCM,data:YKnixwbNsFPccmx7Kw==,iv:TQNNfHyvcJaXTnuNAi7iq/HHGpjtIN3SInxds1aWJpM=,tag:LCHNCjIQ8lrKRzlHIflYRA==,type:str] + annotations: + key1: ENC[AES256_GCM,data:IrcoTdCj0sS+tA==,iv:W5ccDu7jna7fP/ZfQ6cYaQX/uqU9PjKJ83PgJpHR9b0=,tag:4UDYI4WHXgipY8wXZu/NhA==,type:str] + stringData: + data-name0: ENC[AES256_GCM,data:t431CrKunuDACSw=,iv:pou2IIpBl6LeKloCC1yGzHA8Vkt/0Jo0nu8M4e+8XW0=,tag:kkuw1HXkSCS9f5K73MBEgw==,type:str] + data: + data-name1: ENC[AES256_GCM,data:p7ffMnDqVKj8Vog=,iv:KI07DuHBarC4du/sqrLus4o9s7o5knu/wu3W8ssO4e8=,tag:TgKXwVJJGEI9H5jWM5Ca4A==,type:str] + - name: ENC[AES256_GCM,data:isdJvbWonL593lfI4w==,iv:bpHG0fsIXWcmJ3fCDebKXeFGWNrHfHRWTQ86e+Dgruw=,tag:HmgDZLLssR+roPBSsSrizw==,type:str] + stringData: + token: ENC[AES256_GCM,data:QYXc7S8EHkSblo7RDW9Ovw==,iv:9lJcVQ5EJR+LYVFX/0OUJ+uZqQx0kiL2Kze8OJ3fu0M=,tag:QDpVKlSS1jj+OnWzpfCW2Q==,type:str] + - name: ENC[AES256_GCM,data:pHr2cwiFjGsIBZj+,iv:x1TkramaD0peRJe95n+r+ye5IWeeE630C0LwbVWJ154=,tag:7TiqbtURY7fn+9r2V7PlDA==,type:str] + type: ENC[AES256_GCM,data:8ZBm++dOCx4xlmPW4bZagHMVua5gj7v7GVkEtBRX,iv:Y8HYgfO8Ae9SY3WYF/BYhKY9n6KESwQEHMNUPZfQd9o=,tag:LqlUy6FLcYAtYEa8qtx5NQ==,type:str] + stringData: + .dockerconfigjson: ENC[AES256_GCM,data:1TmIvfP95WReEpGqF2/ukxkvyFVdYbO3gda+oAtNZqwRZw749qvU8koYsi012s1/yhutll5v3ldqUYtr4sNuVS7TFVy2/qZ+ryiBaI8qUxt+kOx85eyfp36pJolwQtdQPNanRTLLkV4mf1JzSYOG6WAokkQ=,iv:X1jzTyp+CzTIowxH6gl2cIInk892cuO9/5JUkuCJdqI=,tag:DbtJe3pRo8TMrBO/gt4BDw==,type:str] sops: - kms: [] - gcp_kms: [] - azure_kv: [] - hc_vault: [] - age: - - recipient: age1g867s7tcftkgkdraz3ezs8xk5c39x6l4thhekhp9s63qxz0m7cgs5kan9a - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBTZFJGdkRzeVJFdDVUVjVS - SmU0ekE0aGplVzhxZm5UTklzZnA3QlIwRzNNCjJha21CU0VEZkt3SHB0THlVZ1ZM - VnlBSEZpbmJZVnlyY1VCTjdXZEtOR2cKLS0tIHBhRkprelpsQTJZWGphYUtRSlhJ - ZnpFSDNYT0M3K294VmlBVitmN09nUlUKI+THCBdEkTnAElA3b0z4r8Nx1KcW7gks - H5xJwqzzNn5C+UMy+v+Qn2hzg07juISBTDVcLtBDggVrZOAsh8kTMQ== - -----END AGE ENCRYPTED FILE----- - lastmodified: "2023-04-18T15:02:34Z" - mac: ENC[AES256_GCM,data:Cpl1/GWn2LQivSo0qNTGyDxqCxm79DnomIpf1uDsoIuA5qqsluCUja0RLkEOm/fUD+UKzL8Muaqjo8+fbuKOvr4nfqaeARACPz377tdPEH55DHyg8Czv00OsxdHZ8C9BGeeSZr3YHDqQEKqQpK1zs7rBz/2adqD1SXrOFu+aiuQ=,iv:w+4DAXVAvD7IvDCBMTF+NfMRctp0dEWl+QsRJPsrd70=,tag:fWa0Sz3TlCQ2lIkVe6zE4Q==,type:str] - pgp: [] - encrypted_suffix: Templates - version: 3.7.3 + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age1g867s7tcftkgkdraz3ezs8xk5c39x6l4thhekhp9s63qxz0m7cgs5kan9a + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBTZFJGdkRzeVJFdDVUVjVS + SmU0ekE0aGplVzhxZm5UTklzZnA3QlIwRzNNCjJha21CU0VEZkt3SHB0THlVZ1ZM + VnlBSEZpbmJZVnlyY1VCTjdXZEtOR2cKLS0tIHBhRkprelpsQTJZWGphYUtRSlhJ + ZnpFSDNYT0M3K294VmlBVitmN09nUlUKI+THCBdEkTnAElA3b0z4r8Nx1KcW7gks + H5xJwqzzNn5C+UMy+v+Qn2hzg07juISBTDVcLtBDggVrZOAsh8kTMQ== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2023-04-18T15:02:34Z" + mac: ENC[AES256_GCM,data:Cpl1/GWn2LQivSo0qNTGyDxqCxm79DnomIpf1uDsoIuA5qqsluCUja0RLkEOm/fUD+UKzL8Muaqjo8+fbuKOvr4nfqaeARACPz377tdPEH55DHyg8Czv00OsxdHZ8C9BGeeSZr3YHDqQEKqQpK1zs7rBz/2adqD1SXrOFu+aiuQ=,iv:w+4DAXVAvD7IvDCBMTF+NfMRctp0dEWl+QsRJPsrd70=,tag:fWa0Sz3TlCQ2lIkVe6zE4Q==,type:str] + pgp: [] + encrypted_suffix: Templates + version: 3.7.3 ``` Ce fichier peut être commité et envoyé sur un dépôt git car le contenu est chiffré. -> A noter que chaque élément du secretTemplates donnera lieu à un objet Secret dans kubernetes une fois le secret déchiffrée lors du déploiement. +> A noter que chaque élément du secretTemplates donnera lieu à un objet Secret dans kubernetes une fois le secret déchiffrée lors du déploiement. Ainsi, dans l'exemple, le secret secret-exemple sera crée avec les données suivantes ```yaml data: @@ -109,16 +109,16 @@ data: Le secret peut alors être utilisé directement par les POD de façon classique, par exemple : ```yaml - spec: - containers: - - name: myContainer - image: myImage:MyTag - env: - - name: My_SECRET - valueFrom: - secretKeyRef: - name: secret-exemple - key: data-name0 +spec: + containers: + - name: myContainer + image: myImage:MyTag + env: + - name: My_SECRET + valueFrom: + secretKeyRef: + name: secret-exemple + key: data-name0 ``` ## Chiffrement partiel @@ -159,31 +159,31 @@ Le fichier de sorti aura le format suivant, on peut voir que seul la clé **pass apiVersion: isindir.github.com/v1alpha3 kind: SopsSecret metadata: - name: mysecret-sops + name: mysecret-sops spec: - secretTemplates: - - name: exemple - data: - password: ENC[AES256_GCM,data:0yl7pmw7,iv:EH29fOotz0gKKEGesOO2v7fwM8FPtBgpBpZQllnP9K0=,tag:GQVbRh6rhYCdquk2wOInzw==,type:str] - clearValue: ZGF0YS1jbGVhcg== + secretTemplates: + - name: exemple + data: + password: ENC[AES256_GCM,data:0yl7pmw7,iv:EH29fOotz0gKKEGesOO2v7fwM8FPtBgpBpZQllnP9K0=,tag:GQVbRh6rhYCdquk2wOInzw==,type:str] + clearValue: ZGF0YS1jbGVhcg== sops: - kms: [] - gcp_kms: [] - azure_kv: [] - hc_vault: [] - age: - - recipient: age1g867s7tcftkgkdraz3ezs8xk5c39x6l4thhekhp9s63qxz0m7cgs5kan9a - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBZU3d0Z2N6QytuaHZWTXBm - QlRlV2RCM2ZKZW1DZ0lLT0xQdjUxKzVGYlRrCnMrT0hINTdBYkZaMDZzYlVHci9w - TGRHcUIzcEZqZGdsYVdxcERGdE9xRmsKLS0tIGdBL0NSNDdRYVVHRFU2WUQxS1Fw - SG5sa1ZJRUNjOWY5QURpcHZrWDI2SjAKO8hY5sVJ4wixFzN+Q7QB8MEheizsmKrB - m5JPbGUHmC15/HzSb0o8UFGXoi2MeDMie8hMu+A8uqVIhiBUrga3FA== - -----END AGE ENCRYPTED FILE----- - lastmodified: "2023-04-20T14:31:45Z" - mac: ENC[AES256_GCM,data:17CYI5VKgxnc5Ae9dY/cwBu0d2hFKC+xdN5Y5vIIqdvXF6IOQKPQRwdNSXaLIjFWo9Xk+NP0nzAFbqyrIAR7hgGg5uWE0dAaWQw6NKgWvDIBWPU/Et2JuuBlbmny3cO//geij3XiODDAXxUg19XIDol0+f1Q5IPgPrtghKs6YC4=,iv:4YnMWSD23xRwNIiiAXMTM44ORq03J5dBNKkn9yE7bXw=,tag:Q+3SfVPTJjp777qlOwEEBg==,type:str] - pgp: [] - encrypted_regex: ^.*password.*$ - version: 3.7.3 + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age1g867s7tcftkgkdraz3ezs8xk5c39x6l4thhekhp9s63qxz0m7cgs5kan9a + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBZU3d0Z2N6QytuaHZWTXBm + QlRlV2RCM2ZKZW1DZ0lLT0xQdjUxKzVGYlRrCnMrT0hINTdBYkZaMDZzYlVHci9w + TGRHcUIzcEZqZGdsYVdxcERGdE9xRmsKLS0tIGdBL0NSNDdRYVVHRFU2WUQxS1Fw + SG5sa1ZJRUNjOWY5QURpcHZrWDI2SjAKO8hY5sVJ4wixFzN+Q7QB8MEheizsmKrB + m5JPbGUHmC15/HzSb0o8UFGXoi2MeDMie8hMu+A8uqVIhiBUrga3FA== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2023-04-20T14:31:45Z" + mac: ENC[AES256_GCM,data:17CYI5VKgxnc5Ae9dY/cwBu0d2hFKC+xdN5Y5vIIqdvXF6IOQKPQRwdNSXaLIjFWo9Xk+NP0nzAFbqyrIAR7hgGg5uWE0dAaWQw6NKgWvDIBWPU/Et2JuuBlbmny3cO//geij3XiODDAXxUg19XIDol0+f1Q5IPgPrtghKs6YC4=,iv:4YnMWSD23xRwNIiiAXMTM44ORq03J5dBNKkn9yE7bXw=,tag:Q+3SfVPTJjp777qlOwEEBg==,type:str] + pgp: [] + encrypted_regex: ^.*password.*$ + version: 3.7.3 ``` diff --git a/docs/guide/team.md b/docs/guide/team.md index e7d4264..6811d11 100644 --- a/docs/guide/team.md +++ b/docs/guide/team.md @@ -12,7 +12,7 @@ La page Equipe présente la liste des membres du projet : ![Menu](/img/team/members.png) -Depuis cette liste, il est possible de retirer une personne de la liste sur l'icone 'X' +Depuis cette liste, il est possible de retirer une personne de la liste sur l'icone 'X' ## Ajouter une personne au projet @@ -38,4 +38,3 @@ Une fois selectionner, lui attribuer les droits (sur ArgoCD): - rwd : droits de lecture, écriture et suppression sur l'environnement (visibilité du projet sur ArgoCD et modification des values et suppression des objets : pods etc.) > L'attribution de droits à un membre pour un environnement est une opération *nécessaire* pour donner accès à ArgoCD sur l'environnement concerné. - diff --git a/docs/installation/configuration.md b/docs/installation/configuration.md index 107fcff..6c3beef 100644 --- a/docs/installation/configuration.md +++ b/docs/installation/configuration.md @@ -118,7 +118,7 @@ spec: tag: v2.9.1 ingress: annotations: - route.openshift.io/termination: "edge" + route.openshift.io/termination: edge tls: type: tlsSecret tlsSecret: @@ -135,7 +135,7 @@ spec: storageSize: 5Gi proxy: enabled: true - host: "192.168.xx.xx" + host: 192.168.xx.xx http_proxy: http://192.168.xx.xx:3128/ https_proxy: http://192.168.xx.xx:3128/ no_proxy: .cluster.local,.svc,10.0.0.0/8,127.0.0.1,192.168.0.0/16,api.example.com,api-int.example.com,canary-openshift-ingress-canary.apps.example.com,console-openshift-console.apps.example.com,localhost,oauth-openshift.apps.example.com,svc.cluster.local,localdomain @@ -156,18 +156,18 @@ spec: values: injector: image: - repository: "docker.io/hashicorp/vault-k8s" - tag: "1.2.1" + repository: docker.io/hashicorp/vault-k8s + tag: 1.2.1 pullPolicy: IfNotPresent agentImage: - repository: "docker.io/hashicorp/vault" - tag: "1.14.0" + repository: docker.io/hashicorp/vault + tag: 1.14.0 server: image: - repository: "docker.io/hashicorp/vault" - tag: "1.14.0" + repository: docker.io/hashicorp/vault + tag: 1.14.0 pullPolicy: IfNotPresent - updateStrategyType: "RollingUpdate" + updateStrategyType: RollingUpdate ``` Les champs utilisables dans cette ressource de type **dsc** peuvent être décrits pour chaque outil à l'aide de la commande `kubectl explain`. Exemple avec argocd : @@ -193,4 +193,4 @@ Voici les liens vers les documentations de chart Helm pour les outils concernés - [SOPS](https://github.com/isindir/sops-secrets-operator/tree/master/chart/helm3/sops-secrets-operator) - [HashiCorp Vault](https://github.com/hashicorp/vault-helm) -S'agissant du gel des versions de charts ou d'images pour les outils en question, **nous vous invitons fortement à consulter la section détaillée [Gel des versions](#gel-des-versions)** située plus bas dans le présent document. +S'agissant du gel des versions de charts ou d'images pour les outils en question, **nous vous invitons fortement à consulter la section détaillée [Gel des versions](#gel-des-versions)** située plus bas dans le présent document. diff --git a/docs/installation/debug.md b/docs/installation/debug.md index 7dc7705..59ea6a3 100644 --- a/docs/installation/debug.md +++ b/docs/installation/debug.md @@ -29,4 +29,4 @@ Le playbook d'installation, en s'appuyant sur le role en question, s'assurera pr Si l'un ou l'autre de ces éléments sont absents du cluster, cela signifie que l'opérateur CloudNativePG n'est pas installé. Le rôle associé procédera donc à son installation. -**Attention !** Assurez-vous que si une précédente instance de CloudNativePG a été désinstallée du cluster elle l'a été proprement. En effet, si l'opérateur CloudNativePG avait déjà été installé auparavant, mais qu'il n'a pas été correctement désinstallé au préalable, alors il est possible que les deux ressources vérifiées par le role soient toujours présentes. Dans ce cas de figure, l'installation de Keycloak ou de SonarQube échouera car l'opérateur CloudNativePG n'aura pas été installé par le role. +**Attention !** Assurez-vous que si une précédente instance de CloudNativePG a été désinstallée du cluster elle l'a été proprement. En effet, si l'opérateur CloudNativePG avait déjà été installé auparavant, mais qu'il n'a pas été correctement désinstallé au préalable, alors il est possible que les deux ressources vérifiées par le role soient toujours présentes. Dans ce cas de figure, l'installation de Keycloak ou de SonarQube échouera car l'opérateur CloudNativePG n'aura pas été installé par le role. diff --git a/docs/installation/installation.md b/docs/installation/installation.md index 2fb8b1f..6995015 100644 --- a/docs/installation/installation.md +++ b/docs/installation/installation.md @@ -33,17 +33,17 @@ Pensez également à déclarer pour chaque outil **un `namespace` et un `subDoma Exemple pour Argo CD : ```yaml - argocd: - namespace: mynamespace-argocd - subDomain: argocd-perso - admin: - enabled: true - password: PasswordForEveryone - values: - image: - registry: docker.io - repository: bitnami/argo-cd - tag: 2.7.6-debian-11-r2 +argocd: + namespace: mynamespace-argocd + subDomain: argocd-perso + admin: + enabled: true + password: PasswordForEveryone + values: + image: + registry: docker.io + repository: bitnami/argo-cd + tag: 2.7.6-debian-11-r2 ``` Pour mémoire, les namespaces et subDomains par défaut, déclarés lors de la première installation du socle, peuvent être listés en se positionnant préalablement dans le répertoire socle, puis en affichant le fichier « config.yaml » du role socle-config : diff --git a/docs/installation/prerequisites.md b/docs/installation/prerequisites.md index f855223..7fe1754 100644 --- a/docs/installation/prerequisites.md +++ b/docs/installation/prerequisites.md @@ -1,7 +1,7 @@ # Prérequis Aujourd'hui l'installation de la plateforme Cloud π Native est testée uniquement sur un cluster OpenShift (version 4.X). -La compatibilité kubernetes sera effective dans une prochaine release. +La compatibilité kubernetes sera effective dans une prochaine release. Vous devrez disposer d'un **accès administrateur au cluster**. diff --git a/docs/installation/versions.md b/docs/installation/versions.md index b2ff9d0..f6561e5 100644 --- a/docs/installation/versions.md +++ b/docs/installation/versions.md @@ -47,16 +47,16 @@ Les tags dits "immutables" sont ceux qui possèdent un suffixe de type rXX, lequ Pour spécifier un tel tag, il nous suffira d'éditer la ressource `dsc` de configuration (par défaut ce sera la `dsc` nommée `conf-dso`) et de surcharger les "values" correspondantes du chart Helm, en ajoutant celles dont nous avons besoin. Exemple : ```yaml - argocd: - admin: - enabled: true - password: WeAreThePasswords - values: - image: - registry: docker.io - repository: bitnami/argo-cd - tag: 2.7.6-debian-11-r2 - imagePullPolicy: IfNotPresent +argocd: + admin: + enabled: true + password: WeAreThePasswords + values: + image: + registry: docker.io + repository: bitnami/argo-cd + tag: 2.7.6-debian-11-r2 + imagePullPolicy: IfNotPresent ``` Pour mémoire, les values utilisables sont disponibles ici : @@ -145,62 +145,62 @@ Les différents tags utilisables sont disponibles ici : Pour spécifier nos tags, il nous suffira d'éditer la ressource `dsc` de configuration (par défaut ce sera la `dsc` nommée `conf-dso`) et de surcharger les "values" correspondantes du chart Helm, en ajoutant celles dont nous avons besoin. Exemple, pour la version 1.13.1 du chart : ```yaml - harbor: - adminPassword: WhoWantsToPassForever - pvcRegistrySize: 50Gi - values: - nginx: +harbor: + adminPassword: WhoWantsToPassForever + pvcRegistrySize: 50Gi + values: + nginx: + image: + repository: docker.io/goharbor/nginx-photon + tag: v2.9.1 + portal: + image: + repository: docker.io/goharbor/harbor-portal + tag: v2.9.1 + core: + image: + repository: docker.io/goharbor/harbor-core + tag: v2.9.1 + jobservice: + image: + repository: docker.io/goharbor/harbor-jobservice + tag: v2.9.1 + registry: + registry: image: - repository: docker.io/goharbor/nginx-photon + repository: docker.io/goharbor/registry-photon tag: v2.9.1 - portal: + controller: image: - repository: docker.io/goharbor/harbor-portal + repository: docker.io/goharbor/harbor-registryctl tag: v2.9.1 - core: + trivy: + image: + repository: docker.io/goharbor/trivy-adapter-photon + tag: v2.9.1 + notary: + server: image: - repository: docker.io/goharbor/harbor-core + repository: docker.io/goharbor/notary-server-photon tag: v2.9.1 - jobservice: + signer: image: - repository: docker.io/goharbor/harbor-jobservice + repository: docker.io/goharbor/notary-signer-photon tag: v2.9.1 - registry: - registry: - image: - repository: docker.io/goharbor/registry-photon - tag: v2.9.1 - controller: - image: - repository: docker.io/goharbor/harbor-registryctl - tag: v2.9.1 - trivy: + database: + internal: image: - repository: docker.io/goharbor/trivy-adapter-photon + repository: docker.io/goharbor/harbor-db tag: v2.9.1 - notary: - server: - image: - repository: docker.io/goharbor/notary-server-photon - tag: v2.9.1 - signer: - image: - repository: docker.io/goharbor/notary-signer-photon - tag: v2.9.1 - database: - internal: - image: - repository: docker.io/goharbor/harbor-db - tag: v2.9.1 - redis: - internal: - image: - repository: docker.io/goharbor/redis-photon - tag: v2.9.1 - exporter: + redis: + internal: image: - repository: docker.io/goharbor/harbor-exporter + repository: docker.io/goharbor/redis-photon tag: v2.9.1 + exporter: + image: + repository: docker.io/goharbor/harbor-exporter + tag: v2.9.1 ``` Pour mémoire, les values utilisables sont disponibles et documentées ici : @@ -218,12 +218,12 @@ Les tags dits "immutables" sont ceux qui possèdent un suffixe de type rXX, lequ Pour spécifier un tel tag, il nous suffira d'éditer la ressource `dsc` de configuration (par défaut ce sera la `dsc` nommée `conf-dso`) et de surcharger les "values" correspondantes du chart Helm, en ajoutant celles dont nous avons besoin. Exemple : ```yaml - keycloak: - values: - image: - registry: docker.io - repository: bitnami/keycloak - tag: 19.0.3-debian-11-r22 +keycloak: + values: + image: + registry: docker.io + repository: bitnami/keycloak + tag: 19.0.3-debian-11-r22 ``` Pour mémoire, les values utilisables sont disponibles ici : @@ -249,9 +249,9 @@ Si toutefois vous souhaitez la modifier, les tags d'images utilisables sont disp Pour déployer une autre version, il suffira d'éditer la `dsc`, de préférence avec le fichier YAML que vous avez initialement utilisé pendant l'installation, puis modifier la section suivante en y indiquant la version d'image désirée au niveau du paramètre **imageTag**. Exemple : ```yaml - nexus: - storageSize: 25Gi - imageTag: 3.56.0 +nexus: + storageSize: 25Gi + imageTag: 3.56.0 ``` ## SonarQube Community Edition @@ -269,14 +269,14 @@ Il faudra juste leur ajouter le suffixe "-community" qui correspond à l'éditio Pour spécifier un tel tag, il nous suffira d'éditer la ressource `dsc` de configuration (par défaut ce sera la `dsc` nommée `conf-dso`) et de surcharger les "values" correspondantes du chart Helm, en ajoutant celles dont nous avons besoin. Exemple : ```yaml - sonarqube: - postgresPvcSize: 25Gi - values: - image: - registry: docker.io - repository: sonarqube - edition: community - tag: 9.9.2-{{ .Values.edition }} +sonarqube: + postgresPvcSize: 25Gi + values: + image: + registry: docker.io + repository: sonarqube + edition: community + tag: 9.9.2-{{ .Values.edition }} ``` ## SOPS @@ -286,11 +286,11 @@ Fixer la version d'image de SOPS sera **recommandé en production**. Pour spécifier cette version d'image, il nous suffira d'éditer la ressource `dsc` de configuration (par défaut ce sera la `dsc` nommée `conf-dso`) et de surcharger les "values" correspondantes du chart Helm, en ajoutant celles dont nous avons besoin. Exemple : ```yaml - sops: - namespace: mynamespace-sops - values: - image: - tag: 0.11.0 +sops: + namespace: mynamespace-sops + values: + image: + tag: 0.11.0 ``` Pour mémoire, les values utilisables sont disponibles et documentées ici : @@ -324,22 +324,22 @@ Les différents tags d'images utilisables sont disponibles ici : Pour spécifier nos tags, il nous suffira d'éditer la ressource `dsc` de configuration (par défaut ce sera la `dsc` nommée `conf-dso`) et de surcharger les "values" correspondantes du chart Helm, en ajoutant celles dont nous avons besoin. Exemple : ```yaml - vault: - values: - injector: - image: - repository: "docker.io/hashicorp/vault-k8s" - tag: "1.2.1" - pullPolicy: IfNotPresent - agentImage: - repository: "docker.io/hashicorp/vault" - tag: "1.14.0" - server: - image: - repository: "docker.io/hashicorp/vault" - tag: "1.14.0" - pullPolicy: IfNotPresent - updateStrategyType: "RollingUpdate" +vault: + values: + injector: + image: + repository: docker.io/hashicorp/vault-k8s + tag: 1.2.1 + pullPolicy: IfNotPresent + agentImage: + repository: docker.io/hashicorp/vault + tag: 1.14.0 + server: + image: + repository: docker.io/hashicorp/vault + tag: 1.14.0 + pullPolicy: IfNotPresent + updateStrategyType: RollingUpdate ``` -**Remarque importante** : En cas de tentative de mise à jour des versions d'images, dans la section `server` de vos values, le paramètre `updateStrategyType` doit impérativement être présent et positionné sur "RollingUpdate" pour que l'image du serveur Vault puisse éventuellement se mettre à jour avec le tag que vous avez indiqué. \ No newline at end of file +**Remarque importante** : En cas de tentative de mise à jour des versions d'images, dans la section `server` de vos values, le paramètre `updateStrategyType` doit impérativement être présent et positionné sur "RollingUpdate" pour que l'image du serveur Vault puisse éventuellement se mettre à jour avec le tag que vous avez indiqué. diff --git a/docs/platform/introduction.md b/docs/platform/introduction.md index 2972c66..29cd642 100644 --- a/docs/platform/introduction.md +++ b/docs/platform/introduction.md @@ -6,11 +6,11 @@ Les plateformes PaaS peuvent s'exécuter dans le cloud ou sur site. En ce qui co ## Description de la plateforme -Cloud π Native est composée d'une **plateforme de services Open Source** à destination des équipes DevSecOps. +Cloud π Native est composée d'une **plateforme de services Open Source** à destination des équipes DevSecOps. **La plateforme** comprend: -- Une [usine de logicielle](https://github.com/cloud-pi-native/socle) qui utilise plusieurs services. +- Une [usine de logicielle](https://github.com/cloud-pi-native/socle) qui utilise plusieurs services. - Une [console](https://github.com/cloud-pi-native/console) Web consommant ses services afin de construire et déployer vos ressources applicatives (projets, membres, environnements, etc). Il est aussi possible d'enregistrer des services supplémentaires grâce à son `architecture core / plugins`. Chaque plugin s'enregistre sur des hooks liés au cycle de vie du projet (création d'un projet, d'un environnement ou d'un dépôt, ajout d'un membre, etc...). Les plugins enregistrés recoivent l'ensemble des informations liées aux actions sur les projets par le biais du gestionnaire de plugins. L'ajout d'un nouveau plugin est détaillé [ici](https://github.com/cloud-pi-native/console/blob/main/misc/plugins.md) ## Architecture fonctionnelle de la plateforme @@ -35,7 +35,7 @@ Liste des services de la plateforme : ## Ambition -L'ambition de cette plateforme est de proposer aux équipes projets une offre de services large, complète déployée au sein d'un cloud souverain et permettant d'automatiser la construction et le déploiement de vos projets en assurant les standards de qualité et sécurité. +L'ambition de cette plateforme est de proposer aux équipes projets une offre de services large, complète déployée au sein d'un cloud souverain et permettant d'automatiser la construction et le déploiement de vos projets en assurant les standards de qualité et sécurité. Pour pouvoir manipuler les services de cette plateforme, la première étape consister à synchroniser le code applicatif depuis un repo externe accéssible depuis la plateforme. diff --git a/docs/platform/roadmap.md b/docs/platform/roadmap.md index 2bb57a6..93ddb75 100644 --- a/docs/platform/roadmap.md +++ b/docs/platform/roadmap.md @@ -1,3 +1,3 @@ # Feuille de route -:construction: *Disponible prochainement* :construction: \ No newline at end of file +:construction: *Disponible prochainement* :construction: diff --git a/docs/platform/skills-matrix.md b/docs/platform/skills-matrix.md index 1ff75de..a600d87 100644 --- a/docs/platform/skills-matrix.md +++ b/docs/platform/skills-matrix.md @@ -14,12 +14,11 @@ Cette page liste les technologies nécessaires à maitriser avant d'utiliser la | Openshift | **Conseillé** Comprendre les différences avec kubernetes | | GitOps/ArgoCD | **Conseillé** Connaitre l'utilisation d'ArgoCD | - -## Liens utiles +## Liens utiles - [Kubernetes Basics: Pods, Nodes, Containers, Deployments and Clusters](https://www.youtube.com/watch?v=B_X4l4HSgtc) - *video en anglais* - [Kubernetes in 5 mins](https://www.youtube.com/watch?v=PH-2FfFD2PU) - *video en anglais* - [Adapting Docker and Kubernetes containers to run on Red Hat OpenShift Container Platform](https://developers.redhat.com/blog/2020/10/26/adapting-docker-and-kubernetes-containers-to-run-on-red-hat-openshift-container-platform#) - *article en anglais* - [Building rootless containers for JavaScript front ends](https://developers.redhat.com/blog/2021/03/04/building-rootless-containers-for-javascript-front-ends#) - *article en anglais* - [What is GitOps?](https://about.gitlab.com/topics/gitops/) - article en anglais* -- [Appréhender le GitOps, le déploiement continu façon kube native](https://blog.wescale.fr/appr%C3%A9hender-le-gitops-le-d%C3%A9ploiement-continu-fa%C3%A7on-kube-native) \ No newline at end of file +- [Appréhender le GitOps, le déploiement continu façon kube native](https://blog.wescale.fr/appr%C3%A9hender-le-gitops-le-d%C3%A9ploiement-continu-fa%C3%A7on-kube-native) diff --git a/docs/public/examples/postgres.yaml b/docs/public/examples/postgres.yaml index a52bb9d..fcf45ad 100644 --- a/docs/public/examples/postgres.yaml +++ b/docs/public/examples/postgres.yaml @@ -29,7 +29,7 @@ apiVersion: apps/v1 kind: Deployment metadata: namespace: mynamespace - name: postgres-demo # Sets Deployment name + name: postgres-demo # Sets Deployment name spec: replicas: 1 strategy: @@ -45,13 +45,13 @@ spec: containers: - name: postgres image: bitnami/postgresql:14.9.0 - imagePullPolicy: "IfNotPresent" + imagePullPolicy: IfNotPresent ports: - - containerPort: 5432 # Exposes container port + - containerPort: 5432 # Exposes container port env: - - name: "POSTGRES_USER" - value: "demo_user" - - name: "POSTGRES_PASSWORD" + - name: POSTGRES_USER + value: demo_user + - name: POSTGRES_PASSWORD value: "My$ecrETPAss0rd*" - name: POSTGRES_DB value: demo @@ -62,8 +62,8 @@ spec: name: postgredb resources: limits: - memory: "512Mi" - cpu: "500m" + memory: 512Mi + cpu: 500m restartPolicy: Always volumes: - name: postgredb diff --git a/docs/services/artefacts.md b/docs/services/artefacts.md index 2aa8c3d..74b0d54 100644 --- a/docs/services/artefacts.md +++ b/docs/services/artefacts.md @@ -1,4 +1,4 @@ -# Artefects +# Artefects ## Nexus @@ -10,7 +10,6 @@ Il est mis à à disposition des projets afin de stocker les artefacts "intermé A noter que cette instance Nexus fait également *proxy* vers les différents repos publics (maven central, npm, composer, etc.) - ### Utilisation depuis la CI Pour utiliser le service Nexus pour vos projets Maven ou NPM, des variables d'environnements sont préconfigurées dans le service GitLab: @@ -34,9 +33,9 @@ Celui-ci est préconfiguré dans les templates GitLab CI et utilisable via l'exe ```yaml build_docker_back: variables: - WORKING_DIR: 'server' - IMAGE_NAMES: 'candilibv2-devops' - DOCKERFILE: 'server/Dockerfile-devops' + WORKING_DIR: server + IMAGE_NAMES: candilibv2-devops + DOCKERFILE: server/Dockerfile-devops TAG: $CI_COMMIT_BRANCH stage: build-docker extends: @@ -56,4 +55,4 @@ Exemple: `harbor.apps.c6.numerique-interieur.com/mi-monprojet/monimage-backend:v > *Les images publiées par la CI seront signées afin de garantir leur origine et harbor autorisera uniquement l'utilisation d'une image signée* -Harbor est également accessible aux utilisateurs afin de pouvoir vérifier les analyses de sécurité des images de conteneurs. +Harbor est également accessible aux utilisateurs afin de pouvoir vérifier les analyses de sécurité des images de conteneurs. diff --git a/docs/services/gitlab.md b/docs/services/gitlab.md index 7a3976c..f0d3354 100644 --- a/docs/services/gitlab.md +++ b/docs/services/gitlab.md @@ -36,7 +36,7 @@ Deux types de dépôts sont pris en comptes par l'offre Cloud π Native : - Dépôt applicatifs - Dépôt d'infrastructure applicatifs. -### Dépôts applicatifs et chaine de construction gitlab-ci +### Dépôts applicatifs et chaine de construction gitlab-ci Les dépôts applicatifs contiennent le code source de vos applications. @@ -44,7 +44,6 @@ Les projets présents sur la plateforme Cloud π Native sont paramétrés pour e Les projets applicatifs sont analysés et construits et les images de conteneurs construits sont analysées, pui déposées dans le registry d'images de conteneurs qui est Harbor. - ### Variables prédéfinies gitlab-ci DSO Un certains nombres de variables pré-définies, en plus des variables standards de GitLab : @@ -60,7 +59,7 @@ Un certains nombres de variables pré-définies, en plus des variables standards - VAULT_AUTH_PATH : PATH dans l'URL d'accès à VAULT pour l'authentification par jwt - VAULT_AUTH_ROLE : PATH dans l'URL d'accès à VAULT pour la récupération des roles depuis les appels de GitLab - VAULT_SERVER_URL : URL d'accès à l'instance Vault (gestionnaire de secrets) - + ### Dépôt source d'infrastructure applicatifs Suivant les principes *GitOps*, les déploiements sur l'orchestrateur du conteneurs (Celui de la plateforme Cloud π Native ou le votre) sont pilotés par un dépôt de code git contenant les manifests kubernetes, des charts **Helm** ou **Kustomize** . Ces dépôts de code sont nommés dépôts d'infrastructure permettent de déployer vos images de conteneurs, ainsi que vos objects kubernets (service, ingress, configmap ...) @@ -68,8 +67,6 @@ Suivant les principes *GitOps*, les déploiements sur l'orchestrateur du contene Ces dépôts sources sont utilisés par ArgoCD afin de déployer l'infrastructure applictive sur Kubernetes. Votre application est déployé dans un namespace dédié au projet et automatiquement provisionné par la console de la plateforme Cloud π Native. ## Schéma de fonctionnement -Le schéma ci-dessous présente le fonctionnement général : +Le schéma ci-dessous présente le fonctionnement général : ![gitlab-général](/img/gitlab.png) - - diff --git a/docs/services/gitops.md b/docs/services/gitops.md index ae5713e..a03e578 100644 --- a/docs/services/gitops.md +++ b/docs/services/gitops.md @@ -4,7 +4,7 @@ Pour le déploiement de votre infrastructure applicatif, l'usine logcielle de l'offre Cloud π Native vous propose le service GitOps [ArgoCD](https://argo-cd.readthedocs.io/en/stable/) en version communautaire. -Gitops est un modèle de workflow permettant provisionner son infrastructure à l'image d'un repo git assurant +Gitops est un modèle de workflow permettant provisionner son infrastructure à l'image d'un repo git assurant ansi la reproductibilité et le versionning. Ceci implique : - Toute l'infrastructure est gérée par du code, déposé sur un dépôt source GIT - Le dépôt source d'infrastructure GIT "pilote" les déploiements de l'infrastructure applicatif. @@ -32,12 +32,12 @@ Suivant le principe GitOps et afin de déployer une application ou la redéploye - Correction d'anomalie et modification du numéro de version (tag) sur le déploiement depuis le repo applicatif externe - Synchronisation des repos externes / internes - Re construction de l'application via le pipeline gitlab-ci sur la plateforme Cloud π Native - - Construction de l'image Docker et la publier dans le gestionnaire d'image de la plateforme Harbor. + - Construction de l'image Docker et la publier dans le gestionnaire d'image de la plateforme Harbor. - Modification du dépôt d'infrastructure afin de mettre en cohérence le tag de l'image à déployer - Synchronisation du dépôt externe d'infrastructure Il est possible d'automatiser ces différentes tâches comme suit : - - Utiliser l'identifiant de commit court (CI_COMMIT_SHORT_SHA) du repo applicatif comme tag d'image à construire + - Utiliser l'identifiant de commit court (CI_COMMIT_SHORT_SHA) du repo applicatif comme tag d'image à construire - Lors de la construction sur les repos externe, déclencher une étape permettant de modifier la référence de l'image à déployer sur le repo d'infra externe (kustomize ou helm values) avec l'identifiant du commit ci-dessus. - Utiliser des triggers depuis le repo de code applicatif externe (github Action, gitlab-ci, etc.) pour déclencher la synchronisation des repos vers gitlab-ci de la plateforme Cloud π Native. diff --git a/docs/services/sonarqube.md b/docs/services/sonarqube.md index a3c9788..8276b28 100644 --- a/docs/services/sonarqube.md +++ b/docs/services/sonarqube.md @@ -16,7 +16,7 @@ SonarQube est préconfiguré pour certains outils telsque npm et Maven, présent ```yaml test_front: variables: - WORKING_DIR: "src" + WORKING_DIR: src stage: test extends: - .node:sonar diff --git a/docs/services/vault.md b/docs/services/vault.md index 02d4638..c430ab7 100644 --- a/docs/services/vault.md +++ b/docs/services/vault.md @@ -10,7 +10,7 @@ Ainsi, les secrets gérés dans hashicorp Vault concernent, pour l'instant, les ## Organisation du Vault -Les secrets de la chaine DevSecOps sont stockés sur Vault sur un engine kv v2 (clé / valeur). Ces secrets sont traités de façon hiérarchique dans une arborescence : +Les secrets de la chaine DevSecOps sont stockés sur Vault sur un engine kv v2 (clé / valeur). Ces secrets sont traités de façon hiérarchique dans une arborescence : - / - projects/ diff --git a/helm/Chart.yaml b/helm/Chart.yaml index 8b17208..c9e6d5d 100644 --- a/helm/Chart.yaml +++ b/helm/Chart.yaml @@ -15,4 +15,4 @@ maintainers: deprecated: false annotations: {} version: 1.0.0 -appVersion: "6.0.0" # x-release-please-version +appVersion: 6.0.0 # x-release-please-version diff --git a/helm/values-dso.yaml b/helm/values-dso.yaml index 6f9bb31..8664cdb 100644 --- a/helm/values-dso.yaml +++ b/helm/values-dso.yaml @@ -22,14 +22,14 @@ docs: tag: latest podAnnotations: {} podSecurityContext: {} - # fsGroup: 2000 + # fsGroup: 2000 securityContext: {} - # capabilities: - # drop: - # - ALL - # readOnlyRootFilesystem: true - # runAsNonRoot: true - # runAsUser: 1000 + # capabilities: + # drop: + # - ALL + # readOnlyRootFilesystem: true + # runAsNonRoot: true + # runAsUser: 1000 container: port: 8080 env: {} diff --git a/helm/values.yaml b/helm/values.yaml index 02ac706..5d5cb02 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -19,14 +19,14 @@ docs: tag: latest podAnnotations: {} podSecurityContext: {} - # fsGroup: 2000 + # fsGroup: 2000 securityContext: {} - # capabilities: - # drop: - # - ALL - # readOnlyRootFilesystem: true - # runAsNonRoot: true - # runAsUser: 1000 + # capabilities: + # drop: + # - ALL + # readOnlyRootFilesystem: true + # runAsNonRoot: true + # runAsUser: 1000 container: port: 8080 env: {}