├── .envrc ├── .github ├── FUNDING.yaml └── workflows │ ├── ci.yaml │ └── doc.yaml ├── .gitignore ├── LICENSE ├── default.nix ├── docs ├── .gitignore ├── .vitepress │ └── config.js ├── api.md ├── index.md ├── package-lock.json ├── package.json ├── public │ └── wrapper.svg ├── readme.md └── wm.data.js ├── flake.lock ├── flake.nix ├── modules ├── base.nix ├── build.nix ├── default.nix └── env-type.nix └── tests ├── gitconfig └── test-module.nix /.envrc: -------------------------------------------------------------------------------- 1 | use flake 2 | -------------------------------------------------------------------------------- /.github/FUNDING.yaml: -------------------------------------------------------------------------------- 1 | github: [viperML] 2 | -------------------------------------------------------------------------------- /.github/workflows/ci.yaml: -------------------------------------------------------------------------------- 1 | name: ci 2 | 3 | on: 4 | push: 5 | pull_request: 6 | workflow_dispatch: 7 | 8 | jobs: 9 | deploy: 10 | runs-on: ubuntu-latest 11 | 12 | permissions: 13 | pages: write 14 | id-token: write 15 | 16 | steps: 17 | - name: Checkout 18 | uses: actions/checkout@v3 19 | 20 | - name: Install Nix 21 | uses: DeterminateSystems/nix-installer-action@main 22 | 23 | - name: Install Magic Nix Cache 24 | uses: DeterminateSystems/magic-nix-cache-action@main 25 | 26 | - name: Check 27 | run: nix flake check -L 28 | 29 | - name: Show 30 | run: nix flake show 31 | -------------------------------------------------------------------------------- /.github/workflows/doc.yaml: -------------------------------------------------------------------------------- 1 | name: doc 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | paths: 8 | - 'docs/**' 9 | - 'modules/**' 10 | workflow_dispatch: 11 | 12 | permissions: 13 | id-token: write 14 | pages: write 15 | contents: write 16 | 17 | jobs: 18 | build: 19 | runs-on: ubuntu-latest 20 | 21 | environment: 22 | name: github-pages 23 | 24 | steps: 25 | - name: 📦 Install Nix 26 | uses: cachix/install-nix-action@master 27 | with: 28 | github_access_token: ${{ secrets.GITHUB_TOKEN }} 29 | extra_nix_config: | 30 | extra-experimental-features = nix-command flakes pipe-operators 31 | 32 | - name: 🏗️ Build 33 | run: nix build github:${{ github.repository }}#docs -L 34 | 35 | - name: 📤 Upload artifacts 36 | id: deployment 37 | uses: actions/upload-pages-artifact@v3 38 | with: 39 | path: ./result 40 | 41 | deploy: 42 | environment: 43 | name: github-pages 44 | url: ${{ steps.deployment.outputs.page_url }} 45 | runs-on: ubuntu-latest 46 | needs: build 47 | steps: 48 | - name: 🚀 Deploy to GitHub Pages 49 | id: deployment 50 | uses: actions/deploy-pages@v4 51 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *result* 2 | .direnv 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | EUROPEAN UNION PUBLIC LICENCE v. 1.2 2 | EUPL © the European Union 2007, 2016 3 | 4 | This European Union Public Licence (the ‘EUPL’) applies to the Work (as defined 5 | below) which is provided under the terms of this Licence. Any use of the Work, 6 | other than as authorised under this Licence is prohibited (to the extent such 7 | use is covered by a right of the copyright holder of the Work). 8 | 9 | The Work is provided under the terms of this Licence when the Licensor (as 10 | defined below) has placed the following notice immediately following the 11 | copyright notice for the Work: 12 | 13 | Licensed under the EUPL 14 | 15 | or has expressed by any other means his willingness to license under the EUPL. 16 | 17 | 1. Definitions 18 | 19 | In this Licence, the following terms have the following meaning: 20 | 21 | - ‘The Licence’: this Licence. 22 | 23 | - ‘The Original Work’: the work or software distributed or communicated by the 24 | Licensor under this Licence, available as Source Code and also as Executable 25 | Code as the case may be. 26 | 27 | - ‘Derivative Works’: the works or software that could be created by the 28 | Licensee, based upon the Original Work or modifications thereof. This Licence 29 | does not define the extent of modification or dependence on the Original Work 30 | required in order to classify a work as a Derivative Work; this extent is 31 | determined by copyright law applicable in the country mentioned in Article 15. 32 | 33 | - ‘The Work’: the Original Work or its Derivative Works. 34 | 35 | - ‘The Source Code’: the human-readable form of the Work which is the most 36 | convenient for people to study and modify. 37 | 38 | - ‘The Executable Code’: any code which has generally been compiled and which is 39 | meant to be interpreted by a computer as a program. 40 | 41 | - ‘The Licensor’: the natural or legal person that distributes or communicates 42 | the Work under the Licence. 43 | 44 | - ‘Contributor(s)’: any natural or legal person who modifies the Work under the 45 | Licence, or otherwise contributes to the creation of a Derivative Work. 46 | 47 | - ‘The Licensee’ or ‘You’: any natural or legal person who makes any usage of 48 | the Work under the terms of the Licence. 49 | 50 | - ‘Distribution’ or ‘Communication’: any act of selling, giving, lending, 51 | renting, distributing, communicating, transmitting, or otherwise making 52 | available, online or offline, copies of the Work or providing access to its 53 | essential functionalities at the disposal of any other natural or legal 54 | person. 55 | 56 | 2. Scope of the rights granted by the Licence 57 | 58 | The Licensor hereby grants You a worldwide, royalty-free, non-exclusive, 59 | sublicensable licence to do the following, for the duration of copyright vested 60 | in the Original Work: 61 | 62 | - use the Work in any circumstance and for all usage, 63 | - reproduce the Work, 64 | - modify the Work, and make Derivative Works based upon the Work, 65 | - communicate to the public, including the right to make available or display 66 | the Work or copies thereof to the public and perform publicly, as the case may 67 | be, the Work, 68 | - distribute the Work or copies thereof, 69 | - lend and rent the Work or copies thereof, 70 | - sublicense rights in the Work or copies thereof. 71 | 72 | Those rights can be exercised on any media, supports and formats, whether now 73 | known or later invented, as far as the applicable law permits so. 74 | 75 | In the countries where moral rights apply, the Licensor waives his right to 76 | exercise his moral right to the extent allowed by law in order to make effective 77 | the licence of the economic rights here above listed. 78 | 79 | The Licensor grants to the Licensee royalty-free, non-exclusive usage rights to 80 | any patents held by the Licensor, to the extent necessary to make use of the 81 | rights granted on the Work under this Licence. 82 | 83 | 3. Communication of the Source Code 84 | 85 | The Licensor may provide the Work either in its Source Code form, or as 86 | Executable Code. If the Work is provided as Executable Code, the Licensor 87 | provides in addition a machine-readable copy of the Source Code of the Work 88 | along with each copy of the Work that the Licensor distributes or indicates, in 89 | a notice following the copyright notice attached to the Work, a repository where 90 | the Source Code is easily and freely accessible for as long as the Licensor 91 | continues to distribute or communicate the Work. 92 | 93 | 4. Limitations on copyright 94 | 95 | Nothing in this Licence is intended to deprive the Licensee of the benefits from 96 | any exception or limitation to the exclusive rights of the rights owners in the 97 | Work, of the exhaustion of those rights or of other applicable limitations 98 | thereto. 99 | 100 | 5. Obligations of the Licensee 101 | 102 | The grant of the rights mentioned above is subject to some restrictions and 103 | obligations imposed on the Licensee. Those obligations are the following: 104 | 105 | Attribution right: The Licensee shall keep intact all copyright, patent or 106 | trademarks notices and all notices that refer to the Licence and to the 107 | disclaimer of warranties. The Licensee must include a copy of such notices and a 108 | copy of the Licence with every copy of the Work he/she distributes or 109 | communicates. The Licensee must cause any Derivative Work to carry prominent 110 | notices stating that the Work has been modified and the date of modification. 111 | 112 | Copyleft clause: If the Licensee distributes or communicates copies of the 113 | Original Works or Derivative Works, this Distribution or Communication will be 114 | done under the terms of this Licence or of a later version of this Licence 115 | unless the Original Work is expressly distributed only under this version of the 116 | Licence — for example by communicating ‘EUPL v. 1.2 only’. The Licensee 117 | (becoming Licensor) cannot offer or impose any additional terms or conditions on 118 | the Work or Derivative Work that alter or restrict the terms of the Licence. 119 | 120 | Compatibility clause: If the Licensee Distributes or Communicates Derivative 121 | Works or copies thereof based upon both the Work and another work licensed under 122 | a Compatible Licence, this Distribution or Communication can be done under the 123 | terms of this Compatible Licence. For the sake of this clause, ‘Compatible 124 | Licence’ refers to the licences listed in the appendix attached to this Licence. 125 | Should the Licensee's obligations under the Compatible Licence conflict with 126 | his/her obligations under this Licence, the obligations of the Compatible 127 | Licence shall prevail. 128 | 129 | Provision of Source Code: When distributing or communicating copies of the Work, 130 | the Licensee will provide a machine-readable copy of the Source Code or indicate 131 | a repository where this Source will be easily and freely available for as long 132 | as the Licensee continues to distribute or communicate the Work. 133 | 134 | Legal Protection: This Licence does not grant permission to use the trade names, 135 | trademarks, service marks, or names of the Licensor, except as required for 136 | reasonable and customary use in describing the origin of the Work and 137 | reproducing the content of the copyright notice. 138 | 139 | 6. Chain of Authorship 140 | 141 | The original Licensor warrants that the copyright in the Original Work granted 142 | hereunder is owned by him/her or licensed to him/her and that he/she has the 143 | power and authority to grant the Licence. 144 | 145 | Each Contributor warrants that the copyright in the modifications he/she brings 146 | to the Work are owned by him/her or licensed to him/her and that he/she has the 147 | power and authority to grant the Licence. 148 | 149 | Each time You accept the Licence, the original Licensor and subsequent 150 | Contributors grant You a licence to their contributions to the Work, under the 151 | terms of this Licence. 152 | 153 | 7. Disclaimer of Warranty 154 | 155 | The Work is a work in progress, which is continuously improved by numerous 156 | Contributors. It is not a finished work and may therefore contain defects or 157 | ‘bugs’ inherent to this type of development. 158 | 159 | For the above reason, the Work is provided under the Licence on an ‘as is’ basis 160 | and without warranties of any kind concerning the Work, including without 161 | limitation merchantability, fitness for a particular purpose, absence of defects 162 | or errors, accuracy, non-infringement of intellectual property rights other than 163 | copyright as stated in Article 6 of this Licence. 164 | 165 | This disclaimer of warranty is an essential part of the Licence and a condition 166 | for the grant of any rights to the Work. 167 | 168 | 8. Disclaimer of Liability 169 | 170 | Except in the cases of wilful misconduct or damages directly caused to natural 171 | persons, the Licensor will in no event be liable for any direct or indirect, 172 | material or moral, damages of any kind, arising out of the Licence or of the use 173 | of the Work, including without limitation, damages for loss of goodwill, work 174 | stoppage, computer failure or malfunction, loss of data or any commercial 175 | damage, even if the Licensor has been advised of the possibility of such damage. 176 | However, the Licensor will be liable under statutory product liability laws as 177 | far such laws apply to the Work. 178 | 179 | 9. Additional agreements 180 | 181 | While distributing the Work, You may choose to conclude an additional agreement, 182 | defining obligations or services consistent with this Licence. However, if 183 | accepting obligations, You may act only on your own behalf and on your sole 184 | responsibility, not on behalf of the original Licensor or any other Contributor, 185 | and only if You agree to indemnify, defend, and hold each Contributor harmless 186 | for any liability incurred by, or claims asserted against such Contributor by 187 | the fact You have accepted any warranty or additional liability. 188 | 189 | 10. Acceptance of the Licence 190 | 191 | The provisions of this Licence can be accepted by clicking on an icon ‘I agree’ 192 | placed under the bottom of a window displaying the text of this Licence or by 193 | affirming consent in any other similar way, in accordance with the rules of 194 | applicable law. Clicking on that icon indicates your clear and irrevocable 195 | acceptance of this Licence and all of its terms and conditions. 196 | 197 | Similarly, you irrevocably accept this Licence and all of its terms and 198 | conditions by exercising any rights granted to You by Article 2 of this Licence, 199 | such as the use of the Work, the creation by You of a Derivative Work or the 200 | Distribution or Communication by You of the Work or copies thereof. 201 | 202 | 11. Information to the public 203 | 204 | In case of any Distribution or Communication of the Work by means of electronic 205 | communication by You (for example, by offering to download the Work from a 206 | remote location) the distribution channel or media (for example, a website) must 207 | at least provide to the public the information requested by the applicable law 208 | regarding the Licensor, the Licence and the way it may be accessible, concluded, 209 | stored and reproduced by the Licensee. 210 | 211 | 12. Termination of the Licence 212 | 213 | The Licence and the rights granted hereunder will terminate automatically upon 214 | any breach by the Licensee of the terms of the Licence. 215 | 216 | Such a termination will not terminate the licences of any person who has 217 | received the Work from the Licensee under the Licence, provided such persons 218 | remain in full compliance with the Licence. 219 | 220 | 13. Miscellaneous 221 | 222 | Without prejudice of Article 9 above, the Licence represents the complete 223 | agreement between the Parties as to the Work. 224 | 225 | If any provision of the Licence is invalid or unenforceable under applicable 226 | law, this will not affect the validity or enforceability of the Licence as a 227 | whole. Such provision will be construed or reformed so as necessary to make it 228 | valid and enforceable. 229 | 230 | The European Commission may publish other linguistic versions or new versions of 231 | this Licence or updated versions of the Appendix, so far this is required and 232 | reasonable, without reducing the scope of the rights granted by the Licence. New 233 | versions of the Licence will be published with a unique version number. 234 | 235 | All linguistic versions of this Licence, approved by the European Commission, 236 | have identical value. Parties can take advantage of the linguistic version of 237 | their choice. 238 | 239 | 14. Jurisdiction 240 | 241 | Without prejudice to specific agreement between parties, 242 | 243 | - any litigation resulting from the interpretation of this License, arising 244 | between the European Union institutions, bodies, offices or agencies, as a 245 | Licensor, and any Licensee, will be subject to the jurisdiction of the Court 246 | of Justice of the European Union, as laid down in article 272 of the Treaty on 247 | the Functioning of the European Union, 248 | 249 | - any litigation arising between other parties and resulting from the 250 | interpretation of this License, will be subject to the exclusive jurisdiction 251 | of the competent court where the Licensor resides or conducts its primary 252 | business. 253 | 254 | 15. Applicable Law 255 | 256 | Without prejudice to specific agreement between parties, 257 | 258 | - this Licence shall be governed by the law of the European Union Member State 259 | where the Licensor has his seat, resides or has his registered office, 260 | 261 | - this licence shall be governed by Belgian law if the Licensor has no seat, 262 | residence or registered office inside a European Union Member State. 263 | 264 | Appendix 265 | 266 | ‘Compatible Licences’ according to Article 5 EUPL are: 267 | 268 | - GNU General Public License (GPL) v. 2, v. 3 269 | - GNU Affero General Public License (AGPL) v. 3 270 | - Open Software License (OSL) v. 2.1, v. 3.0 271 | - Eclipse Public License (EPL) v. 1.0 272 | - CeCILL v. 2.0, v. 2.1 273 | - Mozilla Public Licence (MPL) v. 2 274 | - GNU Lesser General Public Licence (LGPL) v. 2.1, v. 3 275 | - Creative Commons Attribution-ShareAlike v. 3.0 Unported (CC BY-SA 3.0) for 276 | works other than software 277 | - European Union Public Licence (EUPL) v. 1.1, v. 1.2 278 | - Québec Free and Open-Source Licence — Reciprocity (LiLiQ-R) or Strong 279 | Reciprocity (LiLiQ-R+). 280 | 281 | The European Commission may update this Appendix to later versions of the above 282 | licences without producing a new version of the EUPL, as long as they provide 283 | the rights granted in Article 2 of this Licence and protect the covered Source 284 | Code from exclusive appropriation. 285 | 286 | All other changes or additions to this Appendix require the production of a new 287 | EUPL version. -------------------------------------------------------------------------------- /default.nix: -------------------------------------------------------------------------------- 1 | {lib}: let 2 | eval = { 3 | pkgs, 4 | modules ? [], 5 | specialArgs ? {}, 6 | }: 7 | lib.evalModules { 8 | modules = 9 | [ 10 | ./modules 11 | ] 12 | ++ modules; 13 | specialArgs = {inherit pkgs;} // specialArgs; 14 | }; 15 | in { 16 | lib = { 17 | inherit eval; 18 | __functor = _: eval; 19 | build = args: (eval args).config.build.toplevel; 20 | }; 21 | } 22 | -------------------------------------------------------------------------------- /docs/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | cache 3 | -------------------------------------------------------------------------------- /docs/.vitepress/config.js: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | import { defineConfig } from "vitepress"; 3 | 4 | // https://vitepress.dev/reference/site-config 5 | export default defineConfig({ 6 | title: "wrapper-manager", 7 | description: "Post-modern configuration management", 8 | themeConfig: { 9 | // https://vitepress.dev/reference/default-theme-config 10 | // nav: [ 11 | // { text: "Home", link: "/" }, 12 | // { text: "Examples", link: "/markdown-examples" }, 13 | // ], 14 | 15 | sidebar: [ 16 | { 17 | text: "Sections", 18 | items: [ 19 | { text: "Read Me", link: "/readme" }, 20 | { text: "API", link: "/api" }, 21 | ], 22 | }, 23 | ], 24 | 25 | socialLinks: [ 26 | { icon: "github", link: "https://github.com/viperML/wrapper-manager" }, 27 | ], 28 | 29 | outline: "deep", 30 | logo: "/wrapper.svg", 31 | }, 32 | vite: { 33 | ssr: { 34 | noExternal: "easy-nix-documentation", 35 | }, 36 | }, 37 | }); 38 | -------------------------------------------------------------------------------- /docs/api.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: API 3 | --- 4 | 5 | # API Documentation 6 | 7 | The following are all the options that you can use in wrapper-manager. 8 | 9 | 10 | 14 | 15 | 16 | 17 | 18 | ## Outputs 19 | 20 | 21 | -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | # https://vitepress.dev/reference/default-theme-home-page 3 | layout: home 4 | 5 | hero: 6 | name: "wrapper-manager" 7 | text: "Post-modern configuration management" 8 | # tagline: My great project tagline 9 | actions: 10 | - theme: brand 11 | text: Read Me 12 | link: /readme 13 | - theme: alt 14 | text: API Reference 15 | link: /api 16 | 17 | image: 18 | src: /wrapper.svg 19 | alt: wrapper-manager 20 | 21 | features: 22 | - title: "⚙️ Customizability" 23 | details: "Tailor each wrapper to your unique environment with extensive options." 24 | - title: "🔄 Robust Wrapping" 25 | details: "Seamlessly integrate with Nix for reliable and reproducible builds." 26 | - title: "📁 Zero Configuration Files" 27 | details: "Eliminate the need for files in ~/.config by bundling configurations directly with your applications." 28 | --- 29 | 30 | 53 | -------------------------------------------------------------------------------- /docs/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "doc", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "doc", 9 | "version": "1.0.0", 10 | "devDependencies": { 11 | "easy-nix-documentation": "^1.1.0", 12 | "vitepress": "^1.6.3" 13 | } 14 | }, 15 | "node_modules/@algolia/autocomplete-core": { 16 | "version": "1.17.7", 17 | "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.7.tgz", 18 | "integrity": "sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==", 19 | "dev": true, 20 | "license": "MIT", 21 | "dependencies": { 22 | "@algolia/autocomplete-plugin-algolia-insights": "1.17.7", 23 | "@algolia/autocomplete-shared": "1.17.7" 24 | } 25 | }, 26 | "node_modules/@algolia/autocomplete-plugin-algolia-insights": { 27 | "version": "1.17.7", 28 | "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.7.tgz", 29 | "integrity": "sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==", 30 | "dev": true, 31 | "license": "MIT", 32 | "dependencies": { 33 | "@algolia/autocomplete-shared": "1.17.7" 34 | }, 35 | "peerDependencies": { 36 | "search-insights": ">= 1 < 3" 37 | } 38 | }, 39 | "node_modules/@algolia/autocomplete-preset-algolia": { 40 | "version": "1.17.7", 41 | "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.7.tgz", 42 | "integrity": "sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==", 43 | "dev": true, 44 | "license": "MIT", 45 | "dependencies": { 46 | "@algolia/autocomplete-shared": "1.17.7" 47 | }, 48 | "peerDependencies": { 49 | "@algolia/client-search": ">= 4.9.1 < 6", 50 | "algoliasearch": ">= 4.9.1 < 6" 51 | } 52 | }, 53 | "node_modules/@algolia/autocomplete-shared": { 54 | "version": "1.17.7", 55 | "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.7.tgz", 56 | "integrity": "sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==", 57 | "dev": true, 58 | "license": "MIT", 59 | "peerDependencies": { 60 | "@algolia/client-search": ">= 4.9.1 < 6", 61 | "algoliasearch": ">= 4.9.1 < 6" 62 | } 63 | }, 64 | "node_modules/@algolia/client-abtesting": { 65 | "version": "5.23.3", 66 | "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.23.3.tgz", 67 | "integrity": "sha512-yHI0hBwYcNPc+nJoHPTmmlP8pG6nstCEhpHaZQCDwLZhdMtNhd1hliZMCtLgNnvd1yKEgTt/ZDnTSdZLehfKdA==", 68 | "dev": true, 69 | "license": "MIT", 70 | "dependencies": { 71 | "@algolia/client-common": "5.23.3", 72 | "@algolia/requester-browser-xhr": "5.23.3", 73 | "@algolia/requester-fetch": "5.23.3", 74 | "@algolia/requester-node-http": "5.23.3" 75 | }, 76 | "engines": { 77 | "node": ">= 14.0.0" 78 | } 79 | }, 80 | "node_modules/@algolia/client-analytics": { 81 | "version": "5.23.3", 82 | "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.23.3.tgz", 83 | "integrity": "sha512-/70Ey+nZm4bRr2DcNrGU251YIn9lDu0g8xeP4jTCyunGRNFZ/d8hQAw9El34pcTpO1QDojJWAi6ywKIrUaks9w==", 84 | "dev": true, 85 | "license": "MIT", 86 | "dependencies": { 87 | "@algolia/client-common": "5.23.3", 88 | "@algolia/requester-browser-xhr": "5.23.3", 89 | "@algolia/requester-fetch": "5.23.3", 90 | "@algolia/requester-node-http": "5.23.3" 91 | }, 92 | "engines": { 93 | "node": ">= 14.0.0" 94 | } 95 | }, 96 | "node_modules/@algolia/client-common": { 97 | "version": "5.23.3", 98 | "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.23.3.tgz", 99 | "integrity": "sha512-fkpbPclIvaiyw3ADKRBCxMZhrNx/8//6DClfWGxeEiTJ0HEEYtHlqE6GjAkEJubz4v1ioCQkhZwMoFfFct2/vQ==", 100 | "dev": true, 101 | "license": "MIT", 102 | "engines": { 103 | "node": ">= 14.0.0" 104 | } 105 | }, 106 | "node_modules/@algolia/client-insights": { 107 | "version": "5.23.3", 108 | "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.23.3.tgz", 109 | "integrity": "sha512-TXc5Ve6QOCihWCTWY9N56CZxF1iovzpBWBUhQhy6JSiUfX3MXceV3saV+sXHQ1NVt2NKkyUfEspYHBsTrYzIDg==", 110 | "dev": true, 111 | "license": "MIT", 112 | "dependencies": { 113 | "@algolia/client-common": "5.23.3", 114 | "@algolia/requester-browser-xhr": "5.23.3", 115 | "@algolia/requester-fetch": "5.23.3", 116 | "@algolia/requester-node-http": "5.23.3" 117 | }, 118 | "engines": { 119 | "node": ">= 14.0.0" 120 | } 121 | }, 122 | "node_modules/@algolia/client-personalization": { 123 | "version": "5.23.3", 124 | "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.23.3.tgz", 125 | "integrity": "sha512-JlReruxxiw9LB53jF/BmvVV+c0thiWQUHRdgtbVIEusvRaiX1IdpWJSPQExEtBQ7VFg89nP8niCzWtA34ktKSA==", 126 | "dev": true, 127 | "license": "MIT", 128 | "dependencies": { 129 | "@algolia/client-common": "5.23.3", 130 | "@algolia/requester-browser-xhr": "5.23.3", 131 | "@algolia/requester-fetch": "5.23.3", 132 | "@algolia/requester-node-http": "5.23.3" 133 | }, 134 | "engines": { 135 | "node": ">= 14.0.0" 136 | } 137 | }, 138 | "node_modules/@algolia/client-query-suggestions": { 139 | "version": "5.23.3", 140 | "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.23.3.tgz", 141 | "integrity": "sha512-GDEExFMXwx0ScE0AZUA4F6ssztdJvGcXUkdWmWyt2hbYz43ukqmlVJqPaYgGmWdjJjvTx+dNF/hcinwWuXbCug==", 142 | "dev": true, 143 | "license": "MIT", 144 | "dependencies": { 145 | "@algolia/client-common": "5.23.3", 146 | "@algolia/requester-browser-xhr": "5.23.3", 147 | "@algolia/requester-fetch": "5.23.3", 148 | "@algolia/requester-node-http": "5.23.3" 149 | }, 150 | "engines": { 151 | "node": ">= 14.0.0" 152 | } 153 | }, 154 | "node_modules/@algolia/client-search": { 155 | "version": "5.23.3", 156 | "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.23.3.tgz", 157 | "integrity": "sha512-mwofV6tGo0oHt4BPi+S5eLC3wnhOa4A1OVgPxetTxZuetod+2W4cxKavUW2v/Ma5CABXPLooXX+g9E67umELZw==", 158 | "dev": true, 159 | "license": "MIT", 160 | "dependencies": { 161 | "@algolia/client-common": "5.23.3", 162 | "@algolia/requester-browser-xhr": "5.23.3", 163 | "@algolia/requester-fetch": "5.23.3", 164 | "@algolia/requester-node-http": "5.23.3" 165 | }, 166 | "engines": { 167 | "node": ">= 14.0.0" 168 | } 169 | }, 170 | "node_modules/@algolia/ingestion": { 171 | "version": "1.23.3", 172 | "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.23.3.tgz", 173 | "integrity": "sha512-Zxgmi7Hk4lI52YFphzzJekUqWxYxVjY2GrCpOxV+QiojvUi8Ru+knq6REcwLHFSwpwaDh2Th5pOefMpn4EkQCw==", 174 | "dev": true, 175 | "license": "MIT", 176 | "dependencies": { 177 | "@algolia/client-common": "5.23.3", 178 | "@algolia/requester-browser-xhr": "5.23.3", 179 | "@algolia/requester-fetch": "5.23.3", 180 | "@algolia/requester-node-http": "5.23.3" 181 | }, 182 | "engines": { 183 | "node": ">= 14.0.0" 184 | } 185 | }, 186 | "node_modules/@algolia/monitoring": { 187 | "version": "1.23.3", 188 | "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.23.3.tgz", 189 | "integrity": "sha512-zi/IqvsmFW4E5gMaovAE4KRbXQ+LDYpPGG1nHtfuD5u3SSuQ31fT1vX2zqb6PbPTlgJMEmMk91Mbb7fIKmbQUw==", 190 | "dev": true, 191 | "license": "MIT", 192 | "dependencies": { 193 | "@algolia/client-common": "5.23.3", 194 | "@algolia/requester-browser-xhr": "5.23.3", 195 | "@algolia/requester-fetch": "5.23.3", 196 | "@algolia/requester-node-http": "5.23.3" 197 | }, 198 | "engines": { 199 | "node": ">= 14.0.0" 200 | } 201 | }, 202 | "node_modules/@algolia/recommend": { 203 | "version": "5.23.3", 204 | "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.23.3.tgz", 205 | "integrity": "sha512-C9TwbT1zGwULLXGSUSB+G7o/30djacPmQcsTHepvT47PVfPr2ISK/5QVtUnjMU84LEP8uNjuPUeM4ZeWVJ2iuQ==", 206 | "dev": true, 207 | "license": "MIT", 208 | "dependencies": { 209 | "@algolia/client-common": "5.23.3", 210 | "@algolia/requester-browser-xhr": "5.23.3", 211 | "@algolia/requester-fetch": "5.23.3", 212 | "@algolia/requester-node-http": "5.23.3" 213 | }, 214 | "engines": { 215 | "node": ">= 14.0.0" 216 | } 217 | }, 218 | "node_modules/@algolia/requester-browser-xhr": { 219 | "version": "5.23.3", 220 | "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.23.3.tgz", 221 | "integrity": "sha512-/7oYeUhYzY0lls7WtkAURM6wy21/Wwmq9GdujW1MpoYVC0ATXXxwCiAfOpYL9xdWxLV0R3wjyD+yZEni+nboKg==", 222 | "dev": true, 223 | "license": "MIT", 224 | "dependencies": { 225 | "@algolia/client-common": "5.23.3" 226 | }, 227 | "engines": { 228 | "node": ">= 14.0.0" 229 | } 230 | }, 231 | "node_modules/@algolia/requester-fetch": { 232 | "version": "5.23.3", 233 | "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.23.3.tgz", 234 | "integrity": "sha512-r/4fKz4t+bSU1KdjRq+swdNvuGfJ0spV8aFTHPtcsF+1ZaN/VqmdXrTe5NkaZLSztFeMqKwZlJIVvE7VuGlFtw==", 235 | "dev": true, 236 | "license": "MIT", 237 | "dependencies": { 238 | "@algolia/client-common": "5.23.3" 239 | }, 240 | "engines": { 241 | "node": ">= 14.0.0" 242 | } 243 | }, 244 | "node_modules/@algolia/requester-node-http": { 245 | "version": "5.23.3", 246 | "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.23.3.tgz", 247 | "integrity": "sha512-UZiTNmUBQFPl3tUKuXaDd8BxEC0t0ny86wwW6XgwfM9IQf4PrzuMpvuOGIJMcCGlrNolZDEI0mcbz/tqRdKW7A==", 248 | "dev": true, 249 | "license": "MIT", 250 | "dependencies": { 251 | "@algolia/client-common": "5.23.3" 252 | }, 253 | "engines": { 254 | "node": ">= 14.0.0" 255 | } 256 | }, 257 | "node_modules/@babel/helper-string-parser": { 258 | "version": "7.25.9", 259 | "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", 260 | "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", 261 | "dev": true, 262 | "license": "MIT", 263 | "engines": { 264 | "node": ">=6.9.0" 265 | } 266 | }, 267 | "node_modules/@babel/helper-validator-identifier": { 268 | "version": "7.25.9", 269 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", 270 | "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", 271 | "dev": true, 272 | "license": "MIT", 273 | "engines": { 274 | "node": ">=6.9.0" 275 | } 276 | }, 277 | "node_modules/@babel/parser": { 278 | "version": "7.27.0", 279 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", 280 | "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", 281 | "dev": true, 282 | "license": "MIT", 283 | "dependencies": { 284 | "@babel/types": "^7.27.0" 285 | }, 286 | "bin": { 287 | "parser": "bin/babel-parser.js" 288 | }, 289 | "engines": { 290 | "node": ">=6.0.0" 291 | } 292 | }, 293 | "node_modules/@babel/types": { 294 | "version": "7.27.0", 295 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", 296 | "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", 297 | "dev": true, 298 | "license": "MIT", 299 | "dependencies": { 300 | "@babel/helper-string-parser": "^7.25.9", 301 | "@babel/helper-validator-identifier": "^7.25.9" 302 | }, 303 | "engines": { 304 | "node": ">=6.9.0" 305 | } 306 | }, 307 | "node_modules/@docsearch/css": { 308 | "version": "3.8.2", 309 | "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.8.2.tgz", 310 | "integrity": "sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==", 311 | "dev": true, 312 | "license": "MIT" 313 | }, 314 | "node_modules/@docsearch/js": { 315 | "version": "3.8.2", 316 | "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.8.2.tgz", 317 | "integrity": "sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ==", 318 | "dev": true, 319 | "license": "MIT", 320 | "dependencies": { 321 | "@docsearch/react": "3.8.2", 322 | "preact": "^10.0.0" 323 | } 324 | }, 325 | "node_modules/@docsearch/react": { 326 | "version": "3.8.2", 327 | "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.8.2.tgz", 328 | "integrity": "sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==", 329 | "dev": true, 330 | "license": "MIT", 331 | "dependencies": { 332 | "@algolia/autocomplete-core": "1.17.7", 333 | "@algolia/autocomplete-preset-algolia": "1.17.7", 334 | "@docsearch/css": "3.8.2", 335 | "algoliasearch": "^5.14.2" 336 | }, 337 | "peerDependencies": { 338 | "@types/react": ">= 16.8.0 < 19.0.0", 339 | "react": ">= 16.8.0 < 19.0.0", 340 | "react-dom": ">= 16.8.0 < 19.0.0", 341 | "search-insights": ">= 1 < 3" 342 | }, 343 | "peerDependenciesMeta": { 344 | "@types/react": { 345 | "optional": true 346 | }, 347 | "react": { 348 | "optional": true 349 | }, 350 | "react-dom": { 351 | "optional": true 352 | }, 353 | "search-insights": { 354 | "optional": true 355 | } 356 | } 357 | }, 358 | "node_modules/@esbuild/aix-ppc64": { 359 | "version": "0.21.5", 360 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", 361 | "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", 362 | "cpu": [ 363 | "ppc64" 364 | ], 365 | "dev": true, 366 | "license": "MIT", 367 | "optional": true, 368 | "os": [ 369 | "aix" 370 | ], 371 | "engines": { 372 | "node": ">=12" 373 | } 374 | }, 375 | "node_modules/@esbuild/android-arm": { 376 | "version": "0.21.5", 377 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", 378 | "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", 379 | "cpu": [ 380 | "arm" 381 | ], 382 | "dev": true, 383 | "license": "MIT", 384 | "optional": true, 385 | "os": [ 386 | "android" 387 | ], 388 | "engines": { 389 | "node": ">=12" 390 | } 391 | }, 392 | "node_modules/@esbuild/android-arm64": { 393 | "version": "0.21.5", 394 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", 395 | "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", 396 | "cpu": [ 397 | "arm64" 398 | ], 399 | "dev": true, 400 | "license": "MIT", 401 | "optional": true, 402 | "os": [ 403 | "android" 404 | ], 405 | "engines": { 406 | "node": ">=12" 407 | } 408 | }, 409 | "node_modules/@esbuild/android-x64": { 410 | "version": "0.21.5", 411 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", 412 | "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", 413 | "cpu": [ 414 | "x64" 415 | ], 416 | "dev": true, 417 | "license": "MIT", 418 | "optional": true, 419 | "os": [ 420 | "android" 421 | ], 422 | "engines": { 423 | "node": ">=12" 424 | } 425 | }, 426 | "node_modules/@esbuild/darwin-arm64": { 427 | "version": "0.21.5", 428 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", 429 | "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", 430 | "cpu": [ 431 | "arm64" 432 | ], 433 | "dev": true, 434 | "license": "MIT", 435 | "optional": true, 436 | "os": [ 437 | "darwin" 438 | ], 439 | "engines": { 440 | "node": ">=12" 441 | } 442 | }, 443 | "node_modules/@esbuild/darwin-x64": { 444 | "version": "0.21.5", 445 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", 446 | "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", 447 | "cpu": [ 448 | "x64" 449 | ], 450 | "dev": true, 451 | "license": "MIT", 452 | "optional": true, 453 | "os": [ 454 | "darwin" 455 | ], 456 | "engines": { 457 | "node": ">=12" 458 | } 459 | }, 460 | "node_modules/@esbuild/freebsd-arm64": { 461 | "version": "0.21.5", 462 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", 463 | "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", 464 | "cpu": [ 465 | "arm64" 466 | ], 467 | "dev": true, 468 | "license": "MIT", 469 | "optional": true, 470 | "os": [ 471 | "freebsd" 472 | ], 473 | "engines": { 474 | "node": ">=12" 475 | } 476 | }, 477 | "node_modules/@esbuild/freebsd-x64": { 478 | "version": "0.21.5", 479 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", 480 | "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", 481 | "cpu": [ 482 | "x64" 483 | ], 484 | "dev": true, 485 | "license": "MIT", 486 | "optional": true, 487 | "os": [ 488 | "freebsd" 489 | ], 490 | "engines": { 491 | "node": ">=12" 492 | } 493 | }, 494 | "node_modules/@esbuild/linux-arm": { 495 | "version": "0.21.5", 496 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", 497 | "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", 498 | "cpu": [ 499 | "arm" 500 | ], 501 | "dev": true, 502 | "license": "MIT", 503 | "optional": true, 504 | "os": [ 505 | "linux" 506 | ], 507 | "engines": { 508 | "node": ">=12" 509 | } 510 | }, 511 | "node_modules/@esbuild/linux-arm64": { 512 | "version": "0.21.5", 513 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", 514 | "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", 515 | "cpu": [ 516 | "arm64" 517 | ], 518 | "dev": true, 519 | "license": "MIT", 520 | "optional": true, 521 | "os": [ 522 | "linux" 523 | ], 524 | "engines": { 525 | "node": ">=12" 526 | } 527 | }, 528 | "node_modules/@esbuild/linux-ia32": { 529 | "version": "0.21.5", 530 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", 531 | "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", 532 | "cpu": [ 533 | "ia32" 534 | ], 535 | "dev": true, 536 | "license": "MIT", 537 | "optional": true, 538 | "os": [ 539 | "linux" 540 | ], 541 | "engines": { 542 | "node": ">=12" 543 | } 544 | }, 545 | "node_modules/@esbuild/linux-loong64": { 546 | "version": "0.21.5", 547 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", 548 | "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", 549 | "cpu": [ 550 | "loong64" 551 | ], 552 | "dev": true, 553 | "license": "MIT", 554 | "optional": true, 555 | "os": [ 556 | "linux" 557 | ], 558 | "engines": { 559 | "node": ">=12" 560 | } 561 | }, 562 | "node_modules/@esbuild/linux-mips64el": { 563 | "version": "0.21.5", 564 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", 565 | "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", 566 | "cpu": [ 567 | "mips64el" 568 | ], 569 | "dev": true, 570 | "license": "MIT", 571 | "optional": true, 572 | "os": [ 573 | "linux" 574 | ], 575 | "engines": { 576 | "node": ">=12" 577 | } 578 | }, 579 | "node_modules/@esbuild/linux-ppc64": { 580 | "version": "0.21.5", 581 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", 582 | "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", 583 | "cpu": [ 584 | "ppc64" 585 | ], 586 | "dev": true, 587 | "license": "MIT", 588 | "optional": true, 589 | "os": [ 590 | "linux" 591 | ], 592 | "engines": { 593 | "node": ">=12" 594 | } 595 | }, 596 | "node_modules/@esbuild/linux-riscv64": { 597 | "version": "0.21.5", 598 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", 599 | "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", 600 | "cpu": [ 601 | "riscv64" 602 | ], 603 | "dev": true, 604 | "license": "MIT", 605 | "optional": true, 606 | "os": [ 607 | "linux" 608 | ], 609 | "engines": { 610 | "node": ">=12" 611 | } 612 | }, 613 | "node_modules/@esbuild/linux-s390x": { 614 | "version": "0.21.5", 615 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", 616 | "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", 617 | "cpu": [ 618 | "s390x" 619 | ], 620 | "dev": true, 621 | "license": "MIT", 622 | "optional": true, 623 | "os": [ 624 | "linux" 625 | ], 626 | "engines": { 627 | "node": ">=12" 628 | } 629 | }, 630 | "node_modules/@esbuild/linux-x64": { 631 | "version": "0.21.5", 632 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", 633 | "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", 634 | "cpu": [ 635 | "x64" 636 | ], 637 | "dev": true, 638 | "license": "MIT", 639 | "optional": true, 640 | "os": [ 641 | "linux" 642 | ], 643 | "engines": { 644 | "node": ">=12" 645 | } 646 | }, 647 | "node_modules/@esbuild/netbsd-x64": { 648 | "version": "0.21.5", 649 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", 650 | "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", 651 | "cpu": [ 652 | "x64" 653 | ], 654 | "dev": true, 655 | "license": "MIT", 656 | "optional": true, 657 | "os": [ 658 | "netbsd" 659 | ], 660 | "engines": { 661 | "node": ">=12" 662 | } 663 | }, 664 | "node_modules/@esbuild/openbsd-x64": { 665 | "version": "0.21.5", 666 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", 667 | "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", 668 | "cpu": [ 669 | "x64" 670 | ], 671 | "dev": true, 672 | "license": "MIT", 673 | "optional": true, 674 | "os": [ 675 | "openbsd" 676 | ], 677 | "engines": { 678 | "node": ">=12" 679 | } 680 | }, 681 | "node_modules/@esbuild/sunos-x64": { 682 | "version": "0.21.5", 683 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", 684 | "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", 685 | "cpu": [ 686 | "x64" 687 | ], 688 | "dev": true, 689 | "license": "MIT", 690 | "optional": true, 691 | "os": [ 692 | "sunos" 693 | ], 694 | "engines": { 695 | "node": ">=12" 696 | } 697 | }, 698 | "node_modules/@esbuild/win32-arm64": { 699 | "version": "0.21.5", 700 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", 701 | "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", 702 | "cpu": [ 703 | "arm64" 704 | ], 705 | "dev": true, 706 | "license": "MIT", 707 | "optional": true, 708 | "os": [ 709 | "win32" 710 | ], 711 | "engines": { 712 | "node": ">=12" 713 | } 714 | }, 715 | "node_modules/@esbuild/win32-ia32": { 716 | "version": "0.21.5", 717 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", 718 | "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", 719 | "cpu": [ 720 | "ia32" 721 | ], 722 | "dev": true, 723 | "license": "MIT", 724 | "optional": true, 725 | "os": [ 726 | "win32" 727 | ], 728 | "engines": { 729 | "node": ">=12" 730 | } 731 | }, 732 | "node_modules/@esbuild/win32-x64": { 733 | "version": "0.21.5", 734 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", 735 | "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", 736 | "cpu": [ 737 | "x64" 738 | ], 739 | "dev": true, 740 | "license": "MIT", 741 | "optional": true, 742 | "os": [ 743 | "win32" 744 | ], 745 | "engines": { 746 | "node": ">=12" 747 | } 748 | }, 749 | "node_modules/@iconify-json/simple-icons": { 750 | "version": "1.2.31", 751 | "resolved": "https://registry.npmjs.org/@iconify-json/simple-icons/-/simple-icons-1.2.31.tgz", 752 | "integrity": "sha512-xBUPtvkcSAiXs9DfVtudhLddQtQYin3I3Ph/W5FNYA0oE6r2hmLB8TgOog9OjOt1Sxn3IB5+4n5+64DMf2xNmQ==", 753 | "dev": true, 754 | "license": "CC0-1.0", 755 | "dependencies": { 756 | "@iconify/types": "*" 757 | } 758 | }, 759 | "node_modules/@iconify/types": { 760 | "version": "2.0.0", 761 | "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", 762 | "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", 763 | "dev": true, 764 | "license": "MIT" 765 | }, 766 | "node_modules/@jridgewell/sourcemap-codec": { 767 | "version": "1.5.0", 768 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 769 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", 770 | "dev": true, 771 | "license": "MIT" 772 | }, 773 | "node_modules/@rollup/rollup-android-arm-eabi": { 774 | "version": "4.39.0", 775 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.39.0.tgz", 776 | "integrity": "sha512-lGVys55Qb00Wvh8DMAocp5kIcaNzEFTmGhfFd88LfaogYTRKrdxgtlO5H6S49v2Nd8R2C6wLOal0qv6/kCkOwA==", 777 | "cpu": [ 778 | "arm" 779 | ], 780 | "dev": true, 781 | "license": "MIT", 782 | "optional": true, 783 | "os": [ 784 | "android" 785 | ] 786 | }, 787 | "node_modules/@rollup/rollup-android-arm64": { 788 | "version": "4.39.0", 789 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.39.0.tgz", 790 | "integrity": "sha512-It9+M1zE31KWfqh/0cJLrrsCPiF72PoJjIChLX+rEcujVRCb4NLQ5QzFkzIZW8Kn8FTbvGQBY5TkKBau3S8cCQ==", 791 | "cpu": [ 792 | "arm64" 793 | ], 794 | "dev": true, 795 | "license": "MIT", 796 | "optional": true, 797 | "os": [ 798 | "android" 799 | ] 800 | }, 801 | "node_modules/@rollup/rollup-darwin-arm64": { 802 | "version": "4.39.0", 803 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.39.0.tgz", 804 | "integrity": "sha512-lXQnhpFDOKDXiGxsU9/l8UEGGM65comrQuZ+lDcGUx+9YQ9dKpF3rSEGepyeR5AHZ0b5RgiligsBhWZfSSQh8Q==", 805 | "cpu": [ 806 | "arm64" 807 | ], 808 | "dev": true, 809 | "license": "MIT", 810 | "optional": true, 811 | "os": [ 812 | "darwin" 813 | ] 814 | }, 815 | "node_modules/@rollup/rollup-darwin-x64": { 816 | "version": "4.39.0", 817 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.39.0.tgz", 818 | "integrity": "sha512-mKXpNZLvtEbgu6WCkNij7CGycdw9cJi2k9v0noMb++Vab12GZjFgUXD69ilAbBh034Zwn95c2PNSz9xM7KYEAQ==", 819 | "cpu": [ 820 | "x64" 821 | ], 822 | "dev": true, 823 | "license": "MIT", 824 | "optional": true, 825 | "os": [ 826 | "darwin" 827 | ] 828 | }, 829 | "node_modules/@rollup/rollup-freebsd-arm64": { 830 | "version": "4.39.0", 831 | "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.39.0.tgz", 832 | "integrity": "sha512-jivRRlh2Lod/KvDZx2zUR+I4iBfHcu2V/BA2vasUtdtTN2Uk3jfcZczLa81ESHZHPHy4ih3T/W5rPFZ/hX7RtQ==", 833 | "cpu": [ 834 | "arm64" 835 | ], 836 | "dev": true, 837 | "license": "MIT", 838 | "optional": true, 839 | "os": [ 840 | "freebsd" 841 | ] 842 | }, 843 | "node_modules/@rollup/rollup-freebsd-x64": { 844 | "version": "4.39.0", 845 | "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.39.0.tgz", 846 | "integrity": "sha512-8RXIWvYIRK9nO+bhVz8DwLBepcptw633gv/QT4015CpJ0Ht8punmoHU/DuEd3iw9Hr8UwUV+t+VNNuZIWYeY7Q==", 847 | "cpu": [ 848 | "x64" 849 | ], 850 | "dev": true, 851 | "license": "MIT", 852 | "optional": true, 853 | "os": [ 854 | "freebsd" 855 | ] 856 | }, 857 | "node_modules/@rollup/rollup-linux-arm-gnueabihf": { 858 | "version": "4.39.0", 859 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.39.0.tgz", 860 | "integrity": "sha512-mz5POx5Zu58f2xAG5RaRRhp3IZDK7zXGk5sdEDj4o96HeaXhlUwmLFzNlc4hCQi5sGdR12VDgEUqVSHer0lI9g==", 861 | "cpu": [ 862 | "arm" 863 | ], 864 | "dev": true, 865 | "license": "MIT", 866 | "optional": true, 867 | "os": [ 868 | "linux" 869 | ] 870 | }, 871 | "node_modules/@rollup/rollup-linux-arm-musleabihf": { 872 | "version": "4.39.0", 873 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.39.0.tgz", 874 | "integrity": "sha512-+YDwhM6gUAyakl0CD+bMFpdmwIoRDzZYaTWV3SDRBGkMU/VpIBYXXEvkEcTagw/7VVkL2vA29zU4UVy1mP0/Yw==", 875 | "cpu": [ 876 | "arm" 877 | ], 878 | "dev": true, 879 | "license": "MIT", 880 | "optional": true, 881 | "os": [ 882 | "linux" 883 | ] 884 | }, 885 | "node_modules/@rollup/rollup-linux-arm64-gnu": { 886 | "version": "4.39.0", 887 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.39.0.tgz", 888 | "integrity": "sha512-EKf7iF7aK36eEChvlgxGnk7pdJfzfQbNvGV/+l98iiMwU23MwvmV0Ty3pJ0p5WQfm3JRHOytSIqD9LB7Bq7xdQ==", 889 | "cpu": [ 890 | "arm64" 891 | ], 892 | "dev": true, 893 | "license": "MIT", 894 | "optional": true, 895 | "os": [ 896 | "linux" 897 | ] 898 | }, 899 | "node_modules/@rollup/rollup-linux-arm64-musl": { 900 | "version": "4.39.0", 901 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.39.0.tgz", 902 | "integrity": "sha512-vYanR6MtqC7Z2SNr8gzVnzUul09Wi1kZqJaek3KcIlI/wq5Xtq4ZPIZ0Mr/st/sv/NnaPwy/D4yXg5x0B3aUUA==", 903 | "cpu": [ 904 | "arm64" 905 | ], 906 | "dev": true, 907 | "license": "MIT", 908 | "optional": true, 909 | "os": [ 910 | "linux" 911 | ] 912 | }, 913 | "node_modules/@rollup/rollup-linux-loongarch64-gnu": { 914 | "version": "4.39.0", 915 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.39.0.tgz", 916 | "integrity": "sha512-NMRUT40+h0FBa5fb+cpxtZoGAggRem16ocVKIv5gDB5uLDgBIwrIsXlGqYbLwW8YyO3WVTk1FkFDjMETYlDqiw==", 917 | "cpu": [ 918 | "loong64" 919 | ], 920 | "dev": true, 921 | "license": "MIT", 922 | "optional": true, 923 | "os": [ 924 | "linux" 925 | ] 926 | }, 927 | "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { 928 | "version": "4.39.0", 929 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.39.0.tgz", 930 | "integrity": "sha512-0pCNnmxgduJ3YRt+D+kJ6Ai/r+TaePu9ZLENl+ZDV/CdVczXl95CbIiwwswu4L+K7uOIGf6tMo2vm8uadRaICQ==", 931 | "cpu": [ 932 | "ppc64" 933 | ], 934 | "dev": true, 935 | "license": "MIT", 936 | "optional": true, 937 | "os": [ 938 | "linux" 939 | ] 940 | }, 941 | "node_modules/@rollup/rollup-linux-riscv64-gnu": { 942 | "version": "4.39.0", 943 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.39.0.tgz", 944 | "integrity": "sha512-t7j5Zhr7S4bBtksT73bO6c3Qa2AV/HqiGlj9+KB3gNF5upcVkx+HLgxTm8DK4OkzsOYqbdqbLKwvGMhylJCPhQ==", 945 | "cpu": [ 946 | "riscv64" 947 | ], 948 | "dev": true, 949 | "license": "MIT", 950 | "optional": true, 951 | "os": [ 952 | "linux" 953 | ] 954 | }, 955 | "node_modules/@rollup/rollup-linux-riscv64-musl": { 956 | "version": "4.39.0", 957 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.39.0.tgz", 958 | "integrity": "sha512-m6cwI86IvQ7M93MQ2RF5SP8tUjD39Y7rjb1qjHgYh28uAPVU8+k/xYWvxRO3/tBN2pZkSMa5RjnPuUIbrwVxeA==", 959 | "cpu": [ 960 | "riscv64" 961 | ], 962 | "dev": true, 963 | "license": "MIT", 964 | "optional": true, 965 | "os": [ 966 | "linux" 967 | ] 968 | }, 969 | "node_modules/@rollup/rollup-linux-s390x-gnu": { 970 | "version": "4.39.0", 971 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.39.0.tgz", 972 | "integrity": "sha512-iRDJd2ebMunnk2rsSBYlsptCyuINvxUfGwOUldjv5M4tpa93K8tFMeYGpNk2+Nxl+OBJnBzy2/JCscGeO507kA==", 973 | "cpu": [ 974 | "s390x" 975 | ], 976 | "dev": true, 977 | "license": "MIT", 978 | "optional": true, 979 | "os": [ 980 | "linux" 981 | ] 982 | }, 983 | "node_modules/@rollup/rollup-linux-x64-gnu": { 984 | "version": "4.39.0", 985 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.39.0.tgz", 986 | "integrity": "sha512-t9jqYw27R6Lx0XKfEFe5vUeEJ5pF3SGIM6gTfONSMb7DuG6z6wfj2yjcoZxHg129veTqU7+wOhY6GX8wmf90dA==", 987 | "cpu": [ 988 | "x64" 989 | ], 990 | "dev": true, 991 | "license": "MIT", 992 | "optional": true, 993 | "os": [ 994 | "linux" 995 | ] 996 | }, 997 | "node_modules/@rollup/rollup-linux-x64-musl": { 998 | "version": "4.39.0", 999 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.39.0.tgz", 1000 | "integrity": "sha512-ThFdkrFDP55AIsIZDKSBWEt/JcWlCzydbZHinZ0F/r1h83qbGeenCt/G/wG2O0reuENDD2tawfAj2s8VK7Bugg==", 1001 | "cpu": [ 1002 | "x64" 1003 | ], 1004 | "dev": true, 1005 | "license": "MIT", 1006 | "optional": true, 1007 | "os": [ 1008 | "linux" 1009 | ] 1010 | }, 1011 | "node_modules/@rollup/rollup-win32-arm64-msvc": { 1012 | "version": "4.39.0", 1013 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.39.0.tgz", 1014 | "integrity": "sha512-jDrLm6yUtbOg2TYB3sBF3acUnAwsIksEYjLeHL+TJv9jg+TmTwdyjnDex27jqEMakNKf3RwwPahDIt7QXCSqRQ==", 1015 | "cpu": [ 1016 | "arm64" 1017 | ], 1018 | "dev": true, 1019 | "license": "MIT", 1020 | "optional": true, 1021 | "os": [ 1022 | "win32" 1023 | ] 1024 | }, 1025 | "node_modules/@rollup/rollup-win32-ia32-msvc": { 1026 | "version": "4.39.0", 1027 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.39.0.tgz", 1028 | "integrity": "sha512-6w9uMuza+LbLCVoNKL5FSLE7yvYkq9laSd09bwS0tMjkwXrmib/4KmoJcrKhLWHvw19mwU+33ndC69T7weNNjQ==", 1029 | "cpu": [ 1030 | "ia32" 1031 | ], 1032 | "dev": true, 1033 | "license": "MIT", 1034 | "optional": true, 1035 | "os": [ 1036 | "win32" 1037 | ] 1038 | }, 1039 | "node_modules/@rollup/rollup-win32-x64-msvc": { 1040 | "version": "4.39.0", 1041 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.39.0.tgz", 1042 | "integrity": "sha512-yAkUOkIKZlK5dl7u6dg897doBgLXmUHhIINM2c+sND3DZwnrdQkkSiDh7N75Ll4mM4dxSkYfXqU9fW3lLkMFug==", 1043 | "cpu": [ 1044 | "x64" 1045 | ], 1046 | "dev": true, 1047 | "license": "MIT", 1048 | "optional": true, 1049 | "os": [ 1050 | "win32" 1051 | ] 1052 | }, 1053 | "node_modules/@shikijs/core": { 1054 | "version": "2.5.0", 1055 | "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-2.5.0.tgz", 1056 | "integrity": "sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==", 1057 | "dev": true, 1058 | "license": "MIT", 1059 | "dependencies": { 1060 | "@shikijs/engine-javascript": "2.5.0", 1061 | "@shikijs/engine-oniguruma": "2.5.0", 1062 | "@shikijs/types": "2.5.0", 1063 | "@shikijs/vscode-textmate": "^10.0.2", 1064 | "@types/hast": "^3.0.4", 1065 | "hast-util-to-html": "^9.0.4" 1066 | } 1067 | }, 1068 | "node_modules/@shikijs/engine-javascript": { 1069 | "version": "2.5.0", 1070 | "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-2.5.0.tgz", 1071 | "integrity": "sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==", 1072 | "dev": true, 1073 | "license": "MIT", 1074 | "dependencies": { 1075 | "@shikijs/types": "2.5.0", 1076 | "@shikijs/vscode-textmate": "^10.0.2", 1077 | "oniguruma-to-es": "^3.1.0" 1078 | } 1079 | }, 1080 | "node_modules/@shikijs/engine-oniguruma": { 1081 | "version": "2.5.0", 1082 | "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-2.5.0.tgz", 1083 | "integrity": "sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==", 1084 | "dev": true, 1085 | "license": "MIT", 1086 | "dependencies": { 1087 | "@shikijs/types": "2.5.0", 1088 | "@shikijs/vscode-textmate": "^10.0.2" 1089 | } 1090 | }, 1091 | "node_modules/@shikijs/langs": { 1092 | "version": "2.5.0", 1093 | "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-2.5.0.tgz", 1094 | "integrity": "sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w==", 1095 | "dev": true, 1096 | "license": "MIT", 1097 | "dependencies": { 1098 | "@shikijs/types": "2.5.0" 1099 | } 1100 | }, 1101 | "node_modules/@shikijs/themes": { 1102 | "version": "2.5.0", 1103 | "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-2.5.0.tgz", 1104 | "integrity": "sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw==", 1105 | "dev": true, 1106 | "license": "MIT", 1107 | "dependencies": { 1108 | "@shikijs/types": "2.5.0" 1109 | } 1110 | }, 1111 | "node_modules/@shikijs/transformers": { 1112 | "version": "2.5.0", 1113 | "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-2.5.0.tgz", 1114 | "integrity": "sha512-SI494W5X60CaUwgi8u4q4m4s3YAFSxln3tzNjOSYqq54wlVgz0/NbbXEb3mdLbqMBztcmS7bVTaEd2w0qMmfeg==", 1115 | "dev": true, 1116 | "license": "MIT", 1117 | "dependencies": { 1118 | "@shikijs/core": "2.5.0", 1119 | "@shikijs/types": "2.5.0" 1120 | } 1121 | }, 1122 | "node_modules/@shikijs/types": { 1123 | "version": "2.5.0", 1124 | "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-2.5.0.tgz", 1125 | "integrity": "sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==", 1126 | "dev": true, 1127 | "license": "MIT", 1128 | "dependencies": { 1129 | "@shikijs/vscode-textmate": "^10.0.2", 1130 | "@types/hast": "^3.0.4" 1131 | } 1132 | }, 1133 | "node_modules/@shikijs/vscode-textmate": { 1134 | "version": "10.0.2", 1135 | "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", 1136 | "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", 1137 | "dev": true, 1138 | "license": "MIT" 1139 | }, 1140 | "node_modules/@types/estree": { 1141 | "version": "1.0.7", 1142 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", 1143 | "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", 1144 | "dev": true, 1145 | "license": "MIT" 1146 | }, 1147 | "node_modules/@types/hast": { 1148 | "version": "3.0.4", 1149 | "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", 1150 | "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", 1151 | "dev": true, 1152 | "license": "MIT", 1153 | "dependencies": { 1154 | "@types/unist": "*" 1155 | } 1156 | }, 1157 | "node_modules/@types/linkify-it": { 1158 | "version": "5.0.0", 1159 | "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", 1160 | "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", 1161 | "dev": true, 1162 | "license": "MIT" 1163 | }, 1164 | "node_modules/@types/markdown-it": { 1165 | "version": "14.1.2", 1166 | "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", 1167 | "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", 1168 | "dev": true, 1169 | "license": "MIT", 1170 | "dependencies": { 1171 | "@types/linkify-it": "^5", 1172 | "@types/mdurl": "^2" 1173 | } 1174 | }, 1175 | "node_modules/@types/mdast": { 1176 | "version": "4.0.4", 1177 | "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", 1178 | "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", 1179 | "dev": true, 1180 | "license": "MIT", 1181 | "dependencies": { 1182 | "@types/unist": "*" 1183 | } 1184 | }, 1185 | "node_modules/@types/mdurl": { 1186 | "version": "2.0.0", 1187 | "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", 1188 | "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", 1189 | "dev": true, 1190 | "license": "MIT" 1191 | }, 1192 | "node_modules/@types/node": { 1193 | "version": "22.14.0", 1194 | "resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.0.tgz", 1195 | "integrity": "sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==", 1196 | "dev": true, 1197 | "license": "MIT", 1198 | "dependencies": { 1199 | "undici-types": "~6.21.0" 1200 | } 1201 | }, 1202 | "node_modules/@types/unist": { 1203 | "version": "3.0.3", 1204 | "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", 1205 | "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", 1206 | "dev": true, 1207 | "license": "MIT" 1208 | }, 1209 | "node_modules/@types/web-bluetooth": { 1210 | "version": "0.0.21", 1211 | "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", 1212 | "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", 1213 | "dev": true, 1214 | "license": "MIT" 1215 | }, 1216 | "node_modules/@ungap/structured-clone": { 1217 | "version": "1.3.0", 1218 | "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", 1219 | "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", 1220 | "dev": true, 1221 | "license": "ISC" 1222 | }, 1223 | "node_modules/@vitejs/plugin-vue": { 1224 | "version": "5.2.3", 1225 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.3.tgz", 1226 | "integrity": "sha512-IYSLEQj4LgZZuoVpdSUCw3dIynTWQgPlaRP6iAvMle4My0HdYwr5g5wQAfwOeHQBmYwEkqF70nRpSilr6PoUDg==", 1227 | "dev": true, 1228 | "license": "MIT", 1229 | "engines": { 1230 | "node": "^18.0.0 || >=20.0.0" 1231 | }, 1232 | "peerDependencies": { 1233 | "vite": "^5.0.0 || ^6.0.0", 1234 | "vue": "^3.2.25" 1235 | } 1236 | }, 1237 | "node_modules/@vue/compiler-core": { 1238 | "version": "3.5.13", 1239 | "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz", 1240 | "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", 1241 | "dev": true, 1242 | "license": "MIT", 1243 | "dependencies": { 1244 | "@babel/parser": "^7.25.3", 1245 | "@vue/shared": "3.5.13", 1246 | "entities": "^4.5.0", 1247 | "estree-walker": "^2.0.2", 1248 | "source-map-js": "^1.2.0" 1249 | } 1250 | }, 1251 | "node_modules/@vue/compiler-dom": { 1252 | "version": "3.5.13", 1253 | "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", 1254 | "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", 1255 | "dev": true, 1256 | "license": "MIT", 1257 | "dependencies": { 1258 | "@vue/compiler-core": "3.5.13", 1259 | "@vue/shared": "3.5.13" 1260 | } 1261 | }, 1262 | "node_modules/@vue/compiler-sfc": { 1263 | "version": "3.5.13", 1264 | "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", 1265 | "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==", 1266 | "dev": true, 1267 | "license": "MIT", 1268 | "dependencies": { 1269 | "@babel/parser": "^7.25.3", 1270 | "@vue/compiler-core": "3.5.13", 1271 | "@vue/compiler-dom": "3.5.13", 1272 | "@vue/compiler-ssr": "3.5.13", 1273 | "@vue/shared": "3.5.13", 1274 | "estree-walker": "^2.0.2", 1275 | "magic-string": "^0.30.11", 1276 | "postcss": "^8.4.48", 1277 | "source-map-js": "^1.2.0" 1278 | } 1279 | }, 1280 | "node_modules/@vue/compiler-ssr": { 1281 | "version": "3.5.13", 1282 | "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz", 1283 | "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==", 1284 | "dev": true, 1285 | "license": "MIT", 1286 | "dependencies": { 1287 | "@vue/compiler-dom": "3.5.13", 1288 | "@vue/shared": "3.5.13" 1289 | } 1290 | }, 1291 | "node_modules/@vue/devtools-api": { 1292 | "version": "7.7.2", 1293 | "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.2.tgz", 1294 | "integrity": "sha512-1syn558KhyN+chO5SjlZIwJ8bV/bQ1nOVTG66t2RbG66ZGekyiYNmRO7X9BJCXQqPsFHlnksqvPhce2qpzxFnA==", 1295 | "dev": true, 1296 | "license": "MIT", 1297 | "dependencies": { 1298 | "@vue/devtools-kit": "^7.7.2" 1299 | } 1300 | }, 1301 | "node_modules/@vue/devtools-kit": { 1302 | "version": "7.7.2", 1303 | "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.2.tgz", 1304 | "integrity": "sha512-CY0I1JH3Z8PECbn6k3TqM1Bk9ASWxeMtTCvZr7vb+CHi+X/QwQm5F1/fPagraamKMAHVfuuCbdcnNg1A4CYVWQ==", 1305 | "dev": true, 1306 | "license": "MIT", 1307 | "dependencies": { 1308 | "@vue/devtools-shared": "^7.7.2", 1309 | "birpc": "^0.2.19", 1310 | "hookable": "^5.5.3", 1311 | "mitt": "^3.0.1", 1312 | "perfect-debounce": "^1.0.0", 1313 | "speakingurl": "^14.0.1", 1314 | "superjson": "^2.2.1" 1315 | } 1316 | }, 1317 | "node_modules/@vue/devtools-shared": { 1318 | "version": "7.7.2", 1319 | "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.2.tgz", 1320 | "integrity": "sha512-uBFxnp8gwW2vD6FrJB8JZLUzVb6PNRG0B0jBnHsOH8uKyva2qINY8PTF5Te4QlTbMDqU5K6qtJDr6cNsKWhbOA==", 1321 | "dev": true, 1322 | "license": "MIT", 1323 | "dependencies": { 1324 | "rfdc": "^1.4.1" 1325 | } 1326 | }, 1327 | "node_modules/@vue/reactivity": { 1328 | "version": "3.5.13", 1329 | "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.13.tgz", 1330 | "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==", 1331 | "dev": true, 1332 | "license": "MIT", 1333 | "dependencies": { 1334 | "@vue/shared": "3.5.13" 1335 | } 1336 | }, 1337 | "node_modules/@vue/runtime-core": { 1338 | "version": "3.5.13", 1339 | "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.13.tgz", 1340 | "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==", 1341 | "dev": true, 1342 | "license": "MIT", 1343 | "dependencies": { 1344 | "@vue/reactivity": "3.5.13", 1345 | "@vue/shared": "3.5.13" 1346 | } 1347 | }, 1348 | "node_modules/@vue/runtime-dom": { 1349 | "version": "3.5.13", 1350 | "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz", 1351 | "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==", 1352 | "dev": true, 1353 | "license": "MIT", 1354 | "dependencies": { 1355 | "@vue/reactivity": "3.5.13", 1356 | "@vue/runtime-core": "3.5.13", 1357 | "@vue/shared": "3.5.13", 1358 | "csstype": "^3.1.3" 1359 | } 1360 | }, 1361 | "node_modules/@vue/server-renderer": { 1362 | "version": "3.5.13", 1363 | "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.13.tgz", 1364 | "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==", 1365 | "dev": true, 1366 | "license": "MIT", 1367 | "dependencies": { 1368 | "@vue/compiler-ssr": "3.5.13", 1369 | "@vue/shared": "3.5.13" 1370 | }, 1371 | "peerDependencies": { 1372 | "vue": "3.5.13" 1373 | } 1374 | }, 1375 | "node_modules/@vue/shared": { 1376 | "version": "3.5.13", 1377 | "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", 1378 | "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==", 1379 | "dev": true, 1380 | "license": "MIT" 1381 | }, 1382 | "node_modules/@vueuse/core": { 1383 | "version": "12.8.2", 1384 | "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-12.8.2.tgz", 1385 | "integrity": "sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==", 1386 | "dev": true, 1387 | "license": "MIT", 1388 | "dependencies": { 1389 | "@types/web-bluetooth": "^0.0.21", 1390 | "@vueuse/metadata": "12.8.2", 1391 | "@vueuse/shared": "12.8.2", 1392 | "vue": "^3.5.13" 1393 | }, 1394 | "funding": { 1395 | "url": "https://github.com/sponsors/antfu" 1396 | } 1397 | }, 1398 | "node_modules/@vueuse/integrations": { 1399 | "version": "12.8.2", 1400 | "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-12.8.2.tgz", 1401 | "integrity": "sha512-fbGYivgK5uBTRt7p5F3zy6VrETlV9RtZjBqd1/HxGdjdckBgBM4ugP8LHpjolqTj14TXTxSK1ZfgPbHYyGuH7g==", 1402 | "dev": true, 1403 | "license": "MIT", 1404 | "dependencies": { 1405 | "@vueuse/core": "12.8.2", 1406 | "@vueuse/shared": "12.8.2", 1407 | "vue": "^3.5.13" 1408 | }, 1409 | "funding": { 1410 | "url": "https://github.com/sponsors/antfu" 1411 | }, 1412 | "peerDependencies": { 1413 | "async-validator": "^4", 1414 | "axios": "^1", 1415 | "change-case": "^5", 1416 | "drauu": "^0.4", 1417 | "focus-trap": "^7", 1418 | "fuse.js": "^7", 1419 | "idb-keyval": "^6", 1420 | "jwt-decode": "^4", 1421 | "nprogress": "^0.2", 1422 | "qrcode": "^1.5", 1423 | "sortablejs": "^1", 1424 | "universal-cookie": "^7" 1425 | }, 1426 | "peerDependenciesMeta": { 1427 | "async-validator": { 1428 | "optional": true 1429 | }, 1430 | "axios": { 1431 | "optional": true 1432 | }, 1433 | "change-case": { 1434 | "optional": true 1435 | }, 1436 | "drauu": { 1437 | "optional": true 1438 | }, 1439 | "focus-trap": { 1440 | "optional": true 1441 | }, 1442 | "fuse.js": { 1443 | "optional": true 1444 | }, 1445 | "idb-keyval": { 1446 | "optional": true 1447 | }, 1448 | "jwt-decode": { 1449 | "optional": true 1450 | }, 1451 | "nprogress": { 1452 | "optional": true 1453 | }, 1454 | "qrcode": { 1455 | "optional": true 1456 | }, 1457 | "sortablejs": { 1458 | "optional": true 1459 | }, 1460 | "universal-cookie": { 1461 | "optional": true 1462 | } 1463 | } 1464 | }, 1465 | "node_modules/@vueuse/metadata": { 1466 | "version": "12.8.2", 1467 | "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-12.8.2.tgz", 1468 | "integrity": "sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==", 1469 | "dev": true, 1470 | "license": "MIT", 1471 | "funding": { 1472 | "url": "https://github.com/sponsors/antfu" 1473 | } 1474 | }, 1475 | "node_modules/@vueuse/shared": { 1476 | "version": "12.8.2", 1477 | "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-12.8.2.tgz", 1478 | "integrity": "sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==", 1479 | "dev": true, 1480 | "license": "MIT", 1481 | "dependencies": { 1482 | "vue": "^3.5.13" 1483 | }, 1484 | "funding": { 1485 | "url": "https://github.com/sponsors/antfu" 1486 | } 1487 | }, 1488 | "node_modules/algoliasearch": { 1489 | "version": "5.23.3", 1490 | "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.23.3.tgz", 1491 | "integrity": "sha512-0JlUaY/hl3LrKvbidI5FysEi2ggAlcTHM8AHV2UsrJUXnNo8/lWBfhzc1b7o8bK3YZNiU26JtLyT9exoj5VBgA==", 1492 | "dev": true, 1493 | "license": "MIT", 1494 | "dependencies": { 1495 | "@algolia/client-abtesting": "5.23.3", 1496 | "@algolia/client-analytics": "5.23.3", 1497 | "@algolia/client-common": "5.23.3", 1498 | "@algolia/client-insights": "5.23.3", 1499 | "@algolia/client-personalization": "5.23.3", 1500 | "@algolia/client-query-suggestions": "5.23.3", 1501 | "@algolia/client-search": "5.23.3", 1502 | "@algolia/ingestion": "1.23.3", 1503 | "@algolia/monitoring": "1.23.3", 1504 | "@algolia/recommend": "5.23.3", 1505 | "@algolia/requester-browser-xhr": "5.23.3", 1506 | "@algolia/requester-fetch": "5.23.3", 1507 | "@algolia/requester-node-http": "5.23.3" 1508 | }, 1509 | "engines": { 1510 | "node": ">= 14.0.0" 1511 | } 1512 | }, 1513 | "node_modules/birpc": { 1514 | "version": "0.2.19", 1515 | "resolved": "https://registry.npmjs.org/birpc/-/birpc-0.2.19.tgz", 1516 | "integrity": "sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==", 1517 | "dev": true, 1518 | "license": "MIT", 1519 | "funding": { 1520 | "url": "https://github.com/sponsors/antfu" 1521 | } 1522 | }, 1523 | "node_modules/ccount": { 1524 | "version": "2.0.1", 1525 | "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", 1526 | "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", 1527 | "dev": true, 1528 | "license": "MIT", 1529 | "funding": { 1530 | "type": "github", 1531 | "url": "https://github.com/sponsors/wooorm" 1532 | } 1533 | }, 1534 | "node_modules/character-entities-html4": { 1535 | "version": "2.1.0", 1536 | "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", 1537 | "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", 1538 | "dev": true, 1539 | "license": "MIT", 1540 | "funding": { 1541 | "type": "github", 1542 | "url": "https://github.com/sponsors/wooorm" 1543 | } 1544 | }, 1545 | "node_modules/character-entities-legacy": { 1546 | "version": "3.0.0", 1547 | "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", 1548 | "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", 1549 | "dev": true, 1550 | "license": "MIT", 1551 | "funding": { 1552 | "type": "github", 1553 | "url": "https://github.com/sponsors/wooorm" 1554 | } 1555 | }, 1556 | "node_modules/comma-separated-tokens": { 1557 | "version": "2.0.3", 1558 | "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", 1559 | "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", 1560 | "dev": true, 1561 | "license": "MIT", 1562 | "funding": { 1563 | "type": "github", 1564 | "url": "https://github.com/sponsors/wooorm" 1565 | } 1566 | }, 1567 | "node_modules/copy-anything": { 1568 | "version": "3.0.5", 1569 | "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", 1570 | "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", 1571 | "dev": true, 1572 | "license": "MIT", 1573 | "dependencies": { 1574 | "is-what": "^4.1.8" 1575 | }, 1576 | "engines": { 1577 | "node": ">=12.13" 1578 | }, 1579 | "funding": { 1580 | "url": "https://github.com/sponsors/mesqueeb" 1581 | } 1582 | }, 1583 | "node_modules/csstype": { 1584 | "version": "3.1.3", 1585 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", 1586 | "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", 1587 | "dev": true, 1588 | "license": "MIT" 1589 | }, 1590 | "node_modules/dequal": { 1591 | "version": "2.0.3", 1592 | "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", 1593 | "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", 1594 | "dev": true, 1595 | "license": "MIT", 1596 | "engines": { 1597 | "node": ">=6" 1598 | } 1599 | }, 1600 | "node_modules/devlop": { 1601 | "version": "1.1.0", 1602 | "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", 1603 | "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", 1604 | "dev": true, 1605 | "license": "MIT", 1606 | "dependencies": { 1607 | "dequal": "^2.0.0" 1608 | }, 1609 | "funding": { 1610 | "type": "github", 1611 | "url": "https://github.com/sponsors/wooorm" 1612 | } 1613 | }, 1614 | "node_modules/easy-nix-documentation": { 1615 | "version": "1.3.0", 1616 | "resolved": "https://registry.npmjs.org/easy-nix-documentation/-/easy-nix-documentation-1.3.0.tgz", 1617 | "integrity": "sha512-Z7vJC1SwXqzMzUY2nyYXkLsvJpnelq8dgRtsHiNgVhj/0DQS5BTid89Gr0gpbSvfrA2cyvHrSoc5OKoBt6rXDA==", 1618 | "dev": true, 1619 | "license": "Apache-2.0", 1620 | "dependencies": { 1621 | "@types/node": "^22.13.5", 1622 | "vitepress": "^1.6.3", 1623 | "vue": "^3.5.13" 1624 | } 1625 | }, 1626 | "node_modules/emoji-regex-xs": { 1627 | "version": "1.0.0", 1628 | "resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz", 1629 | "integrity": "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==", 1630 | "dev": true, 1631 | "license": "MIT" 1632 | }, 1633 | "node_modules/entities": { 1634 | "version": "4.5.0", 1635 | "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", 1636 | "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", 1637 | "dev": true, 1638 | "license": "BSD-2-Clause", 1639 | "engines": { 1640 | "node": ">=0.12" 1641 | }, 1642 | "funding": { 1643 | "url": "https://github.com/fb55/entities?sponsor=1" 1644 | } 1645 | }, 1646 | "node_modules/esbuild": { 1647 | "version": "0.21.5", 1648 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", 1649 | "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", 1650 | "dev": true, 1651 | "hasInstallScript": true, 1652 | "license": "MIT", 1653 | "bin": { 1654 | "esbuild": "bin/esbuild" 1655 | }, 1656 | "engines": { 1657 | "node": ">=12" 1658 | }, 1659 | "optionalDependencies": { 1660 | "@esbuild/aix-ppc64": "0.21.5", 1661 | "@esbuild/android-arm": "0.21.5", 1662 | "@esbuild/android-arm64": "0.21.5", 1663 | "@esbuild/android-x64": "0.21.5", 1664 | "@esbuild/darwin-arm64": "0.21.5", 1665 | "@esbuild/darwin-x64": "0.21.5", 1666 | "@esbuild/freebsd-arm64": "0.21.5", 1667 | "@esbuild/freebsd-x64": "0.21.5", 1668 | "@esbuild/linux-arm": "0.21.5", 1669 | "@esbuild/linux-arm64": "0.21.5", 1670 | "@esbuild/linux-ia32": "0.21.5", 1671 | "@esbuild/linux-loong64": "0.21.5", 1672 | "@esbuild/linux-mips64el": "0.21.5", 1673 | "@esbuild/linux-ppc64": "0.21.5", 1674 | "@esbuild/linux-riscv64": "0.21.5", 1675 | "@esbuild/linux-s390x": "0.21.5", 1676 | "@esbuild/linux-x64": "0.21.5", 1677 | "@esbuild/netbsd-x64": "0.21.5", 1678 | "@esbuild/openbsd-x64": "0.21.5", 1679 | "@esbuild/sunos-x64": "0.21.5", 1680 | "@esbuild/win32-arm64": "0.21.5", 1681 | "@esbuild/win32-ia32": "0.21.5", 1682 | "@esbuild/win32-x64": "0.21.5" 1683 | } 1684 | }, 1685 | "node_modules/estree-walker": { 1686 | "version": "2.0.2", 1687 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 1688 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", 1689 | "dev": true, 1690 | "license": "MIT" 1691 | }, 1692 | "node_modules/focus-trap": { 1693 | "version": "7.6.4", 1694 | "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.6.4.tgz", 1695 | "integrity": "sha512-xx560wGBk7seZ6y933idtjJQc1l+ck+pI3sKvhKozdBV1dRZoKhkW5xoCaFv9tQiX5RH1xfSxjuNu6g+lmN/gw==", 1696 | "dev": true, 1697 | "license": "MIT", 1698 | "dependencies": { 1699 | "tabbable": "^6.2.0" 1700 | } 1701 | }, 1702 | "node_modules/fsevents": { 1703 | "version": "2.3.3", 1704 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 1705 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1706 | "dev": true, 1707 | "hasInstallScript": true, 1708 | "license": "MIT", 1709 | "optional": true, 1710 | "os": [ 1711 | "darwin" 1712 | ], 1713 | "engines": { 1714 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1715 | } 1716 | }, 1717 | "node_modules/hast-util-to-html": { 1718 | "version": "9.0.5", 1719 | "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", 1720 | "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", 1721 | "dev": true, 1722 | "license": "MIT", 1723 | "dependencies": { 1724 | "@types/hast": "^3.0.0", 1725 | "@types/unist": "^3.0.0", 1726 | "ccount": "^2.0.0", 1727 | "comma-separated-tokens": "^2.0.0", 1728 | "hast-util-whitespace": "^3.0.0", 1729 | "html-void-elements": "^3.0.0", 1730 | "mdast-util-to-hast": "^13.0.0", 1731 | "property-information": "^7.0.0", 1732 | "space-separated-tokens": "^2.0.0", 1733 | "stringify-entities": "^4.0.0", 1734 | "zwitch": "^2.0.4" 1735 | }, 1736 | "funding": { 1737 | "type": "opencollective", 1738 | "url": "https://opencollective.com/unified" 1739 | } 1740 | }, 1741 | "node_modules/hast-util-whitespace": { 1742 | "version": "3.0.0", 1743 | "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", 1744 | "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", 1745 | "dev": true, 1746 | "license": "MIT", 1747 | "dependencies": { 1748 | "@types/hast": "^3.0.0" 1749 | }, 1750 | "funding": { 1751 | "type": "opencollective", 1752 | "url": "https://opencollective.com/unified" 1753 | } 1754 | }, 1755 | "node_modules/hookable": { 1756 | "version": "5.5.3", 1757 | "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", 1758 | "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", 1759 | "dev": true, 1760 | "license": "MIT" 1761 | }, 1762 | "node_modules/html-void-elements": { 1763 | "version": "3.0.0", 1764 | "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", 1765 | "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", 1766 | "dev": true, 1767 | "license": "MIT", 1768 | "funding": { 1769 | "type": "github", 1770 | "url": "https://github.com/sponsors/wooorm" 1771 | } 1772 | }, 1773 | "node_modules/is-what": { 1774 | "version": "4.1.16", 1775 | "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", 1776 | "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", 1777 | "dev": true, 1778 | "license": "MIT", 1779 | "engines": { 1780 | "node": ">=12.13" 1781 | }, 1782 | "funding": { 1783 | "url": "https://github.com/sponsors/mesqueeb" 1784 | } 1785 | }, 1786 | "node_modules/magic-string": { 1787 | "version": "0.30.17", 1788 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", 1789 | "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", 1790 | "dev": true, 1791 | "license": "MIT", 1792 | "dependencies": { 1793 | "@jridgewell/sourcemap-codec": "^1.5.0" 1794 | } 1795 | }, 1796 | "node_modules/mark.js": { 1797 | "version": "8.11.1", 1798 | "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", 1799 | "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==", 1800 | "dev": true, 1801 | "license": "MIT" 1802 | }, 1803 | "node_modules/mdast-util-to-hast": { 1804 | "version": "13.2.0", 1805 | "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", 1806 | "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", 1807 | "dev": true, 1808 | "license": "MIT", 1809 | "dependencies": { 1810 | "@types/hast": "^3.0.0", 1811 | "@types/mdast": "^4.0.0", 1812 | "@ungap/structured-clone": "^1.0.0", 1813 | "devlop": "^1.0.0", 1814 | "micromark-util-sanitize-uri": "^2.0.0", 1815 | "trim-lines": "^3.0.0", 1816 | "unist-util-position": "^5.0.0", 1817 | "unist-util-visit": "^5.0.0", 1818 | "vfile": "^6.0.0" 1819 | }, 1820 | "funding": { 1821 | "type": "opencollective", 1822 | "url": "https://opencollective.com/unified" 1823 | } 1824 | }, 1825 | "node_modules/micromark-util-character": { 1826 | "version": "2.1.1", 1827 | "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", 1828 | "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", 1829 | "dev": true, 1830 | "funding": [ 1831 | { 1832 | "type": "GitHub Sponsors", 1833 | "url": "https://github.com/sponsors/unifiedjs" 1834 | }, 1835 | { 1836 | "type": "OpenCollective", 1837 | "url": "https://opencollective.com/unified" 1838 | } 1839 | ], 1840 | "license": "MIT", 1841 | "dependencies": { 1842 | "micromark-util-symbol": "^2.0.0", 1843 | "micromark-util-types": "^2.0.0" 1844 | } 1845 | }, 1846 | "node_modules/micromark-util-encode": { 1847 | "version": "2.0.1", 1848 | "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", 1849 | "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", 1850 | "dev": true, 1851 | "funding": [ 1852 | { 1853 | "type": "GitHub Sponsors", 1854 | "url": "https://github.com/sponsors/unifiedjs" 1855 | }, 1856 | { 1857 | "type": "OpenCollective", 1858 | "url": "https://opencollective.com/unified" 1859 | } 1860 | ], 1861 | "license": "MIT" 1862 | }, 1863 | "node_modules/micromark-util-sanitize-uri": { 1864 | "version": "2.0.1", 1865 | "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", 1866 | "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", 1867 | "dev": true, 1868 | "funding": [ 1869 | { 1870 | "type": "GitHub Sponsors", 1871 | "url": "https://github.com/sponsors/unifiedjs" 1872 | }, 1873 | { 1874 | "type": "OpenCollective", 1875 | "url": "https://opencollective.com/unified" 1876 | } 1877 | ], 1878 | "license": "MIT", 1879 | "dependencies": { 1880 | "micromark-util-character": "^2.0.0", 1881 | "micromark-util-encode": "^2.0.0", 1882 | "micromark-util-symbol": "^2.0.0" 1883 | } 1884 | }, 1885 | "node_modules/micromark-util-symbol": { 1886 | "version": "2.0.1", 1887 | "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", 1888 | "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", 1889 | "dev": true, 1890 | "funding": [ 1891 | { 1892 | "type": "GitHub Sponsors", 1893 | "url": "https://github.com/sponsors/unifiedjs" 1894 | }, 1895 | { 1896 | "type": "OpenCollective", 1897 | "url": "https://opencollective.com/unified" 1898 | } 1899 | ], 1900 | "license": "MIT" 1901 | }, 1902 | "node_modules/micromark-util-types": { 1903 | "version": "2.0.2", 1904 | "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", 1905 | "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", 1906 | "dev": true, 1907 | "funding": [ 1908 | { 1909 | "type": "GitHub Sponsors", 1910 | "url": "https://github.com/sponsors/unifiedjs" 1911 | }, 1912 | { 1913 | "type": "OpenCollective", 1914 | "url": "https://opencollective.com/unified" 1915 | } 1916 | ], 1917 | "license": "MIT" 1918 | }, 1919 | "node_modules/minisearch": { 1920 | "version": "7.1.2", 1921 | "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-7.1.2.tgz", 1922 | "integrity": "sha512-R1Pd9eF+MD5JYDDSPAp/q1ougKglm14uEkPMvQ/05RGmx6G9wvmLTrTI/Q5iPNJLYqNdsDQ7qTGIcNWR+FrHmA==", 1923 | "dev": true, 1924 | "license": "MIT" 1925 | }, 1926 | "node_modules/mitt": { 1927 | "version": "3.0.1", 1928 | "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", 1929 | "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", 1930 | "dev": true, 1931 | "license": "MIT" 1932 | }, 1933 | "node_modules/nanoid": { 1934 | "version": "3.3.11", 1935 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", 1936 | "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", 1937 | "dev": true, 1938 | "funding": [ 1939 | { 1940 | "type": "github", 1941 | "url": "https://github.com/sponsors/ai" 1942 | } 1943 | ], 1944 | "license": "MIT", 1945 | "bin": { 1946 | "nanoid": "bin/nanoid.cjs" 1947 | }, 1948 | "engines": { 1949 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1950 | } 1951 | }, 1952 | "node_modules/oniguruma-to-es": { 1953 | "version": "3.1.1", 1954 | "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-3.1.1.tgz", 1955 | "integrity": "sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==", 1956 | "dev": true, 1957 | "license": "MIT", 1958 | "dependencies": { 1959 | "emoji-regex-xs": "^1.0.0", 1960 | "regex": "^6.0.1", 1961 | "regex-recursion": "^6.0.2" 1962 | } 1963 | }, 1964 | "node_modules/perfect-debounce": { 1965 | "version": "1.0.0", 1966 | "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", 1967 | "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", 1968 | "dev": true, 1969 | "license": "MIT" 1970 | }, 1971 | "node_modules/picocolors": { 1972 | "version": "1.1.1", 1973 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 1974 | "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 1975 | "dev": true, 1976 | "license": "ISC" 1977 | }, 1978 | "node_modules/postcss": { 1979 | "version": "8.5.3", 1980 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", 1981 | "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", 1982 | "dev": true, 1983 | "funding": [ 1984 | { 1985 | "type": "opencollective", 1986 | "url": "https://opencollective.com/postcss/" 1987 | }, 1988 | { 1989 | "type": "tidelift", 1990 | "url": "https://tidelift.com/funding/github/npm/postcss" 1991 | }, 1992 | { 1993 | "type": "github", 1994 | "url": "https://github.com/sponsors/ai" 1995 | } 1996 | ], 1997 | "license": "MIT", 1998 | "dependencies": { 1999 | "nanoid": "^3.3.8", 2000 | "picocolors": "^1.1.1", 2001 | "source-map-js": "^1.2.1" 2002 | }, 2003 | "engines": { 2004 | "node": "^10 || ^12 || >=14" 2005 | } 2006 | }, 2007 | "node_modules/preact": { 2008 | "version": "10.26.5", 2009 | "resolved": "https://registry.npmjs.org/preact/-/preact-10.26.5.tgz", 2010 | "integrity": "sha512-fmpDkgfGU6JYux9teDWLhj9mKN55tyepwYbxHgQuIxbWQzgFg5vk7Mrrtfx7xRxq798ynkY4DDDxZr235Kk+4w==", 2011 | "dev": true, 2012 | "license": "MIT", 2013 | "funding": { 2014 | "type": "opencollective", 2015 | "url": "https://opencollective.com/preact" 2016 | } 2017 | }, 2018 | "node_modules/property-information": { 2019 | "version": "7.0.0", 2020 | "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.0.0.tgz", 2021 | "integrity": "sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==", 2022 | "dev": true, 2023 | "license": "MIT", 2024 | "funding": { 2025 | "type": "github", 2026 | "url": "https://github.com/sponsors/wooorm" 2027 | } 2028 | }, 2029 | "node_modules/regex": { 2030 | "version": "6.0.1", 2031 | "resolved": "https://registry.npmjs.org/regex/-/regex-6.0.1.tgz", 2032 | "integrity": "sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==", 2033 | "dev": true, 2034 | "license": "MIT", 2035 | "dependencies": { 2036 | "regex-utilities": "^2.3.0" 2037 | } 2038 | }, 2039 | "node_modules/regex-recursion": { 2040 | "version": "6.0.2", 2041 | "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", 2042 | "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", 2043 | "dev": true, 2044 | "license": "MIT", 2045 | "dependencies": { 2046 | "regex-utilities": "^2.3.0" 2047 | } 2048 | }, 2049 | "node_modules/regex-utilities": { 2050 | "version": "2.3.0", 2051 | "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", 2052 | "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", 2053 | "dev": true, 2054 | "license": "MIT" 2055 | }, 2056 | "node_modules/rfdc": { 2057 | "version": "1.4.1", 2058 | "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", 2059 | "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", 2060 | "dev": true, 2061 | "license": "MIT" 2062 | }, 2063 | "node_modules/rollup": { 2064 | "version": "4.39.0", 2065 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.39.0.tgz", 2066 | "integrity": "sha512-thI8kNc02yNvnmJp8dr3fNWJ9tCONDhp6TV35X6HkKGGs9E6q7YWCHbe5vKiTa7TAiNcFEmXKj3X/pG2b3ci0g==", 2067 | "dev": true, 2068 | "license": "MIT", 2069 | "dependencies": { 2070 | "@types/estree": "1.0.7" 2071 | }, 2072 | "bin": { 2073 | "rollup": "dist/bin/rollup" 2074 | }, 2075 | "engines": { 2076 | "node": ">=18.0.0", 2077 | "npm": ">=8.0.0" 2078 | }, 2079 | "optionalDependencies": { 2080 | "@rollup/rollup-android-arm-eabi": "4.39.0", 2081 | "@rollup/rollup-android-arm64": "4.39.0", 2082 | "@rollup/rollup-darwin-arm64": "4.39.0", 2083 | "@rollup/rollup-darwin-x64": "4.39.0", 2084 | "@rollup/rollup-freebsd-arm64": "4.39.0", 2085 | "@rollup/rollup-freebsd-x64": "4.39.0", 2086 | "@rollup/rollup-linux-arm-gnueabihf": "4.39.0", 2087 | "@rollup/rollup-linux-arm-musleabihf": "4.39.0", 2088 | "@rollup/rollup-linux-arm64-gnu": "4.39.0", 2089 | "@rollup/rollup-linux-arm64-musl": "4.39.0", 2090 | "@rollup/rollup-linux-loongarch64-gnu": "4.39.0", 2091 | "@rollup/rollup-linux-powerpc64le-gnu": "4.39.0", 2092 | "@rollup/rollup-linux-riscv64-gnu": "4.39.0", 2093 | "@rollup/rollup-linux-riscv64-musl": "4.39.0", 2094 | "@rollup/rollup-linux-s390x-gnu": "4.39.0", 2095 | "@rollup/rollup-linux-x64-gnu": "4.39.0", 2096 | "@rollup/rollup-linux-x64-musl": "4.39.0", 2097 | "@rollup/rollup-win32-arm64-msvc": "4.39.0", 2098 | "@rollup/rollup-win32-ia32-msvc": "4.39.0", 2099 | "@rollup/rollup-win32-x64-msvc": "4.39.0", 2100 | "fsevents": "~2.3.2" 2101 | } 2102 | }, 2103 | "node_modules/search-insights": { 2104 | "version": "2.17.3", 2105 | "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz", 2106 | "integrity": "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==", 2107 | "dev": true, 2108 | "license": "MIT", 2109 | "peer": true 2110 | }, 2111 | "node_modules/shiki": { 2112 | "version": "2.5.0", 2113 | "resolved": "https://registry.npmjs.org/shiki/-/shiki-2.5.0.tgz", 2114 | "integrity": "sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==", 2115 | "dev": true, 2116 | "license": "MIT", 2117 | "dependencies": { 2118 | "@shikijs/core": "2.5.0", 2119 | "@shikijs/engine-javascript": "2.5.0", 2120 | "@shikijs/engine-oniguruma": "2.5.0", 2121 | "@shikijs/langs": "2.5.0", 2122 | "@shikijs/themes": "2.5.0", 2123 | "@shikijs/types": "2.5.0", 2124 | "@shikijs/vscode-textmate": "^10.0.2", 2125 | "@types/hast": "^3.0.4" 2126 | } 2127 | }, 2128 | "node_modules/source-map-js": { 2129 | "version": "1.2.1", 2130 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", 2131 | "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", 2132 | "dev": true, 2133 | "license": "BSD-3-Clause", 2134 | "engines": { 2135 | "node": ">=0.10.0" 2136 | } 2137 | }, 2138 | "node_modules/space-separated-tokens": { 2139 | "version": "2.0.2", 2140 | "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", 2141 | "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", 2142 | "dev": true, 2143 | "license": "MIT", 2144 | "funding": { 2145 | "type": "github", 2146 | "url": "https://github.com/sponsors/wooorm" 2147 | } 2148 | }, 2149 | "node_modules/speakingurl": { 2150 | "version": "14.0.1", 2151 | "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", 2152 | "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", 2153 | "dev": true, 2154 | "license": "BSD-3-Clause", 2155 | "engines": { 2156 | "node": ">=0.10.0" 2157 | } 2158 | }, 2159 | "node_modules/stringify-entities": { 2160 | "version": "4.0.4", 2161 | "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", 2162 | "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", 2163 | "dev": true, 2164 | "license": "MIT", 2165 | "dependencies": { 2166 | "character-entities-html4": "^2.0.0", 2167 | "character-entities-legacy": "^3.0.0" 2168 | }, 2169 | "funding": { 2170 | "type": "github", 2171 | "url": "https://github.com/sponsors/wooorm" 2172 | } 2173 | }, 2174 | "node_modules/superjson": { 2175 | "version": "2.2.2", 2176 | "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.2.tgz", 2177 | "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", 2178 | "dev": true, 2179 | "license": "MIT", 2180 | "dependencies": { 2181 | "copy-anything": "^3.0.2" 2182 | }, 2183 | "engines": { 2184 | "node": ">=16" 2185 | } 2186 | }, 2187 | "node_modules/tabbable": { 2188 | "version": "6.2.0", 2189 | "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", 2190 | "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", 2191 | "dev": true, 2192 | "license": "MIT" 2193 | }, 2194 | "node_modules/trim-lines": { 2195 | "version": "3.0.1", 2196 | "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", 2197 | "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", 2198 | "dev": true, 2199 | "license": "MIT", 2200 | "funding": { 2201 | "type": "github", 2202 | "url": "https://github.com/sponsors/wooorm" 2203 | } 2204 | }, 2205 | "node_modules/undici-types": { 2206 | "version": "6.21.0", 2207 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", 2208 | "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", 2209 | "dev": true, 2210 | "license": "MIT" 2211 | }, 2212 | "node_modules/unist-util-is": { 2213 | "version": "6.0.0", 2214 | "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", 2215 | "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", 2216 | "dev": true, 2217 | "license": "MIT", 2218 | "dependencies": { 2219 | "@types/unist": "^3.0.0" 2220 | }, 2221 | "funding": { 2222 | "type": "opencollective", 2223 | "url": "https://opencollective.com/unified" 2224 | } 2225 | }, 2226 | "node_modules/unist-util-position": { 2227 | "version": "5.0.0", 2228 | "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", 2229 | "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", 2230 | "dev": true, 2231 | "license": "MIT", 2232 | "dependencies": { 2233 | "@types/unist": "^3.0.0" 2234 | }, 2235 | "funding": { 2236 | "type": "opencollective", 2237 | "url": "https://opencollective.com/unified" 2238 | } 2239 | }, 2240 | "node_modules/unist-util-stringify-position": { 2241 | "version": "4.0.0", 2242 | "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", 2243 | "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", 2244 | "dev": true, 2245 | "license": "MIT", 2246 | "dependencies": { 2247 | "@types/unist": "^3.0.0" 2248 | }, 2249 | "funding": { 2250 | "type": "opencollective", 2251 | "url": "https://opencollective.com/unified" 2252 | } 2253 | }, 2254 | "node_modules/unist-util-visit": { 2255 | "version": "5.0.0", 2256 | "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", 2257 | "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", 2258 | "dev": true, 2259 | "license": "MIT", 2260 | "dependencies": { 2261 | "@types/unist": "^3.0.0", 2262 | "unist-util-is": "^6.0.0", 2263 | "unist-util-visit-parents": "^6.0.0" 2264 | }, 2265 | "funding": { 2266 | "type": "opencollective", 2267 | "url": "https://opencollective.com/unified" 2268 | } 2269 | }, 2270 | "node_modules/unist-util-visit-parents": { 2271 | "version": "6.0.1", 2272 | "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", 2273 | "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", 2274 | "dev": true, 2275 | "license": "MIT", 2276 | "dependencies": { 2277 | "@types/unist": "^3.0.0", 2278 | "unist-util-is": "^6.0.0" 2279 | }, 2280 | "funding": { 2281 | "type": "opencollective", 2282 | "url": "https://opencollective.com/unified" 2283 | } 2284 | }, 2285 | "node_modules/vfile": { 2286 | "version": "6.0.3", 2287 | "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", 2288 | "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", 2289 | "dev": true, 2290 | "license": "MIT", 2291 | "dependencies": { 2292 | "@types/unist": "^3.0.0", 2293 | "vfile-message": "^4.0.0" 2294 | }, 2295 | "funding": { 2296 | "type": "opencollective", 2297 | "url": "https://opencollective.com/unified" 2298 | } 2299 | }, 2300 | "node_modules/vfile-message": { 2301 | "version": "4.0.2", 2302 | "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", 2303 | "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", 2304 | "dev": true, 2305 | "license": "MIT", 2306 | "dependencies": { 2307 | "@types/unist": "^3.0.0", 2308 | "unist-util-stringify-position": "^4.0.0" 2309 | }, 2310 | "funding": { 2311 | "type": "opencollective", 2312 | "url": "https://opencollective.com/unified" 2313 | } 2314 | }, 2315 | "node_modules/vite": { 2316 | "version": "5.4.18", 2317 | "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.18.tgz", 2318 | "integrity": "sha512-1oDcnEp3lVyHCuQ2YFelM4Alm2o91xNoMncRm1U7S+JdYfYOvbiGZ3/CxGttrOu2M/KcGz7cRC2DoNUA6urmMA==", 2319 | "dev": true, 2320 | "license": "MIT", 2321 | "dependencies": { 2322 | "esbuild": "^0.21.3", 2323 | "postcss": "^8.4.43", 2324 | "rollup": "^4.20.0" 2325 | }, 2326 | "bin": { 2327 | "vite": "bin/vite.js" 2328 | }, 2329 | "engines": { 2330 | "node": "^18.0.0 || >=20.0.0" 2331 | }, 2332 | "funding": { 2333 | "url": "https://github.com/vitejs/vite?sponsor=1" 2334 | }, 2335 | "optionalDependencies": { 2336 | "fsevents": "~2.3.3" 2337 | }, 2338 | "peerDependencies": { 2339 | "@types/node": "^18.0.0 || >=20.0.0", 2340 | "less": "*", 2341 | "lightningcss": "^1.21.0", 2342 | "sass": "*", 2343 | "sass-embedded": "*", 2344 | "stylus": "*", 2345 | "sugarss": "*", 2346 | "terser": "^5.4.0" 2347 | }, 2348 | "peerDependenciesMeta": { 2349 | "@types/node": { 2350 | "optional": true 2351 | }, 2352 | "less": { 2353 | "optional": true 2354 | }, 2355 | "lightningcss": { 2356 | "optional": true 2357 | }, 2358 | "sass": { 2359 | "optional": true 2360 | }, 2361 | "sass-embedded": { 2362 | "optional": true 2363 | }, 2364 | "stylus": { 2365 | "optional": true 2366 | }, 2367 | "sugarss": { 2368 | "optional": true 2369 | }, 2370 | "terser": { 2371 | "optional": true 2372 | } 2373 | } 2374 | }, 2375 | "node_modules/vitepress": { 2376 | "version": "1.6.3", 2377 | "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.6.3.tgz", 2378 | "integrity": "sha512-fCkfdOk8yRZT8GD9BFqusW3+GggWYZ/rYncOfmgcDtP3ualNHCAg+Robxp2/6xfH1WwPHtGpPwv7mbA3qomtBw==", 2379 | "dev": true, 2380 | "license": "MIT", 2381 | "dependencies": { 2382 | "@docsearch/css": "3.8.2", 2383 | "@docsearch/js": "3.8.2", 2384 | "@iconify-json/simple-icons": "^1.2.21", 2385 | "@shikijs/core": "^2.1.0", 2386 | "@shikijs/transformers": "^2.1.0", 2387 | "@shikijs/types": "^2.1.0", 2388 | "@types/markdown-it": "^14.1.2", 2389 | "@vitejs/plugin-vue": "^5.2.1", 2390 | "@vue/devtools-api": "^7.7.0", 2391 | "@vue/shared": "^3.5.13", 2392 | "@vueuse/core": "^12.4.0", 2393 | "@vueuse/integrations": "^12.4.0", 2394 | "focus-trap": "^7.6.4", 2395 | "mark.js": "8.11.1", 2396 | "minisearch": "^7.1.1", 2397 | "shiki": "^2.1.0", 2398 | "vite": "^5.4.14", 2399 | "vue": "^3.5.13" 2400 | }, 2401 | "bin": { 2402 | "vitepress": "bin/vitepress.js" 2403 | }, 2404 | "peerDependencies": { 2405 | "markdown-it-mathjax3": "^4", 2406 | "postcss": "^8" 2407 | }, 2408 | "peerDependenciesMeta": { 2409 | "markdown-it-mathjax3": { 2410 | "optional": true 2411 | }, 2412 | "postcss": { 2413 | "optional": true 2414 | } 2415 | } 2416 | }, 2417 | "node_modules/vue": { 2418 | "version": "3.5.13", 2419 | "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.13.tgz", 2420 | "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==", 2421 | "dev": true, 2422 | "license": "MIT", 2423 | "dependencies": { 2424 | "@vue/compiler-dom": "3.5.13", 2425 | "@vue/compiler-sfc": "3.5.13", 2426 | "@vue/runtime-dom": "3.5.13", 2427 | "@vue/server-renderer": "3.5.13", 2428 | "@vue/shared": "3.5.13" 2429 | }, 2430 | "peerDependencies": { 2431 | "typescript": "*" 2432 | }, 2433 | "peerDependenciesMeta": { 2434 | "typescript": { 2435 | "optional": true 2436 | } 2437 | } 2438 | }, 2439 | "node_modules/zwitch": { 2440 | "version": "2.0.4", 2441 | "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", 2442 | "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", 2443 | "dev": true, 2444 | "license": "MIT", 2445 | "funding": { 2446 | "type": "github", 2447 | "url": "https://github.com/sponsors/wooorm" 2448 | } 2449 | } 2450 | } 2451 | } 2452 | -------------------------------------------------------------------------------- /docs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "doc", 3 | "version": "1.0.0", 4 | "scripts": { 5 | "dev": "vitepress dev", 6 | "build": "vitepress build" 7 | }, 8 | "type": "module", 9 | "devDependencies": { 10 | "easy-nix-documentation": "^1.1.0", 11 | "vitepress": "^1.6.3" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /docs/public/wrapper.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/readme.md: -------------------------------------------------------------------------------- 1 |

2 |

3 | wrapper-manager 4 |

5 |

6 | 7 |

8 |

9 | Post-modern configuration management 10 |

11 |

12 | 13 | 16 | 17 | 22 | 23 | ```nix 24 | {pkgs, ...}: { 25 | # Build a custom nushell wrapper 26 | # that self-bundles its configuration and dependencies 27 | # ~/.config/nushell is not neeeded! 28 | wrappers.nushell = { 29 | basePackage = pkgs.nushell; 30 | flags = [ 31 | "--env-config" 32 | ./env.nu 33 | "--config" 34 | ./config.nu 35 | ]; 36 | env.STARSHIP_CONFIG.value = ../starship.toml; 37 | pathAdd = [ 38 | pkgs.starship 39 | pkgs.carapace 40 | ]; 41 | }; 42 | } 43 | ``` 44 | 45 | Result (nushell executable): 46 | 47 | ```bash 48 | #! /nix/store/51sszqz1d9kpx480scb1vllc00kxlx79-bash-5.2-p15/bin/bash -e 49 | export STARSHIP_CONFIG=${STARSHIP_CONFIG-'/nix/store/9gyqz7x765dgh6jvjgnsmiq1zp8lm2y8-starship.toml'} 50 | PATH=${PATH:+':'$PATH':'} 51 | PATH=${PATH/':''/nix/store/11hrc3lnzp8jyb3afmmy9h4m4c30jkgs-starship-1.15.0/bin'':'/':'} 52 | PATH='/nix/store/11hrc3lnzp8jyb3afmmy9h4m4c30jkgs-starship-1.15.0/bin'$PATH 53 | PATH=${PATH#':'} 54 | PATH=${PATH%':'} 55 | export PATH 56 | PATH=${PATH:+':'$PATH':'} 57 | PATH=${PATH/':''/nix/store/vzvxm72pj68fc0120fw1k67b73iaf6g9-carapace-0.25.1/bin'':'/':'} 58 | PATH='/nix/store/vzvxm72pj68fc0120fw1k67b73iaf6g9-carapace-0.25.1/bin'$PATH 59 | PATH=${PATH#':'} 60 | PATH=${PATH%':'} 61 | export PATH 62 | exec -a "$0" "/nix/store/k57j42qv2p1msgf9djsrzssnixlblw9v-nushell-0.82.0/bin/.nu-wrapped" --env-config /nix/store/zx7cc0fmr3gsbxfvdri8b1pnybsh8hd9-env.nu --config /nix/store/n4mdvfbcc81i9bhrakw7r6wnk4nygbdl-config.nu "$@" 63 | ``` 64 | 65 | --- 66 | 67 | Wrapper-manager is a Nix library that allows you to configure your favorite applications 68 | without adding files into ~/.config. 69 | This is done by creating wrapper scripts that set the appropriate environment variables, like PATH, 70 | or pass extra flags to the wrapped program. 71 | 72 | Nix offers very good reliability and reproducibility thanks to its read-only store. 73 | However, putting symlinks to it in your $HOME starts breaking this property. 74 | Because any program can tamper files in ~, the stability of your system is a bit 75 | more fragile. 76 | 77 | Wrapper-manager leverages the nixpkgs' functions `wrapProgram` and `symlinkJoin` to create wrappers 78 | around your applications, providing an easy-to use interface, and also getting 79 | around some of their shortcomings. 80 | 81 | 82 | ## **Module documentation** 83 | 84 | https://viperml.github.io/wrapper-manager/docs/module 85 | 86 | 87 | ## **Installation/usage** 88 | 89 | First, you need to instantiate wrapper-manager's lib. This can be done by pulling the WM flake, or by pulling the repo tarball directly. 90 | 91 | ### Flake 92 | 93 | ```nix 94 | # flake.nix 95 | { 96 | inputs = { 97 | nixpkgs.url = "..."; 98 | 99 | # Add the wrapper-manager flake 100 | wrapper-manager = { 101 | url = "github:viperML/wrapper-manager"; 102 | # WM's nixpkgs is only used for tests, you can safely drop this if needed. 103 | inputs.nixpkgs.follows = "nixpkgs"; 104 | }; 105 | }; 106 | 107 | outputs = {self, nixpkgs, wrapper-manager}: { ... }; 108 | } 109 | ``` 110 | 111 | ### Classic 112 | 113 | Wrapper-manager can be pulled in a classic (non-flake) setup for a dev-shell or NixOS configuration, like so: 114 | 115 | ```nix 116 | # shell.nix 117 | let 118 | pkgs = import {}; 119 | # optionally, pin a commit instead of using master 120 | wrapper-manager = import (builtins.fetchTarball "https://github.com/viperML/wrapper-manager/archive/refs/heads/master.tar.gz") { 121 | inherit (pkgs) lib; 122 | }; 123 | in 124 | mkShell { ..... } 125 | ``` 126 | 127 | ```nix 128 | # configuration.nix 129 | { config, pkgs, lib, ... }: let 130 | # optionally, pin a commit instead of using master 131 | wrapper-manager = import (builtins.fetchTarball "https://github.com/viperML/wrapper-manager/archive/refs/heads/master.tar.gz") { 132 | inherit (pkgs) lib; 133 | }; 134 | in { 135 | ..... 136 | } 137 | ``` 138 | 139 | 140 | ### Evaluating 141 | 142 | Now that you already have `wrapper-manager` in scope, you need to evaluate `wrapper-manager.lib`. The argument is an attrset with following elements: 143 | 144 | - `pkgs`: your nixpkgs instance used to bring `symlinkJoin` and `makeWrapper`, as well as passing it through the modules for convenience. 145 | - `modules`: a list of wrapper-manager modules. As with NixOS, a module can be passed as a path to a module or directly. A proper module is either an attrset, or a function to attrset. 146 | - `specialArgs` (optional): extra arguments passed to the module system. 147 | 148 | A convenience shorthand for `(wrapper-manager.lib {...}).config.build.toplevel` is available through: `wrapper-manager.lib.build {}`, which is probably what you want in 99% of the cases. 149 | 150 | ```nix 151 | # This expression outputs a package, which collects all wrappers. 152 | # You can add it to: 153 | # - environment.systemPackages 154 | # - home.packages 155 | # - mkShell { packages = [...]; } 156 | # - etc 157 | 158 | (wrapper-manager.lib.build { 159 | inherit pkgs; 160 | modules = [ 161 | ./my-module.nix 162 | { 163 | wrappers.foo = { ... }; 164 | } 165 | ]; 166 | }) 167 | # => «derivation /nix/store/...» 168 | ``` 169 | 170 | For example, if you want to use wrapper-manager in the context of a dev-shell, you can instantiate it directly like so: 171 | ```nix 172 | # pkgs and wrapper-manager in scope, see previous steps 173 | # ... 174 | mkShell { 175 | packages = [ 176 | 177 | (wrapper-manager.lib.build { 178 | inherit pkgs; 179 | modules = [{ 180 | wrappers.stack = { 181 | basePackage = pkgs.stack; 182 | flags = [ 183 | "--resolver" 184 | "lts" 185 | ]; 186 | env.NO_COLOR.value = "1"; 187 | }; 188 | }]; 189 | }) 190 | 191 | ]; 192 | } 193 | ``` 194 | 195 | 196 | ## **Configuration examples** 197 | 198 | These are some examples of wrapper-manager used in the wild. Feel free to PR yours. 199 | 200 | - https://github.com/viperML/dotfiles/tree/master/modules/wrapper-manager 201 | 202 | 203 | ## To-do's 204 | 205 | https://github.com/viperML/wrapper-manager/issues 206 | 207 | ## Changelog 208 | 209 | - 2024-08-24 210 | - Added `postBuild` option 211 | 212 | - 2024-08-14 213 | - Added `overrideAttrs` option 214 | 215 | - 2023-11-13 216 | - Added `prependFlags`, which maps to `--add-flags` 217 | - Added `appendFlags`, which maps to `--append-flags` 218 | - `flags` is now an alias to `prependFlags`, which uses `--add-flags` instead of `--append-flags` 219 | 220 | - 2023-11-06 221 | - Users can now pass their own `specialArgs` 222 | 223 | - 2023-10-05 224 | - Changed wrapper.name.env to be an attrset instead 225 | - Added the ability to unset a variable with wrapper.name.env.unset 226 | - Added the ability to disallow overriding a variable with wrapper.name.env.force 227 | - Changed the way wrapper.name.flags is handled so that every flag is escaped 228 | 229 | - 2023-08-12 230 | - Added wrappers.name.renames option. 231 | -------------------------------------------------------------------------------- /docs/wm.data.js: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | import { dirname } from "node:path"; 3 | import { fileURLToPath } from "node:url"; 4 | import { loadOptions, stripNixStore } from "easy-nix-documentation/loader"; 5 | import { env } from "node:process"; 6 | 7 | const var_name = "WRAPPER_MANAGER_OPTIONS_JSON"; 8 | 9 | export default { 10 | async load() { 11 | const built = env[var_name]; 12 | const settings = { 13 | mapDeclarations: (declaration) => { 14 | const relDecl = stripNixStore(declaration); 15 | return `<wrapper-manager/${relDecl}>`; 16 | }, 17 | }; 18 | if (built === undefined) { 19 | console.log(var_name, "not set, falling back with nix build"); 20 | const __dirname = dirname(fileURLToPath(import.meta.url)); 21 | return await loadOptions(`${__dirname}#optionsJSON`, settings); 22 | } else { 23 | return await loadOptions(built, settings); 24 | } 25 | }, 26 | }; 27 | -------------------------------------------------------------------------------- /flake.lock: -------------------------------------------------------------------------------- 1 | { 2 | "nodes": { 3 | "nixpkgs": { 4 | "locked": { 5 | "lastModified": 1743964447, 6 | "narHash": "sha256-nEo1t3Q0F+0jQ36HJfbJtiRU4OI+/0jX/iITURKe3EE=", 7 | "owner": "NixOS", 8 | "repo": "nixpkgs", 9 | "rev": "063dece00c5a77e4a0ea24e5e5a5bd75232806f8", 10 | "type": "github" 11 | }, 12 | "original": { 13 | "owner": "NixOS", 14 | "ref": "nixos-unstable", 15 | "repo": "nixpkgs", 16 | "type": "github" 17 | } 18 | }, 19 | "root": { 20 | "inputs": { 21 | "nixpkgs": "nixpkgs" 22 | } 23 | } 24 | }, 25 | "root": "root", 26 | "version": 7 27 | } 28 | -------------------------------------------------------------------------------- /flake.nix: -------------------------------------------------------------------------------- 1 | { 2 | inputs = { 3 | nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; 4 | }; 5 | 6 | outputs = 7 | { 8 | self, 9 | nixpkgs, 10 | }: 11 | let 12 | forAllSystems = 13 | function: 14 | nixpkgs.lib.genAttrs 15 | [ 16 | "x86_64-linux" 17 | "aarch64-linux" 18 | ] 19 | ( 20 | system: 21 | function ( 22 | import nixpkgs { 23 | inherit system; 24 | config.allowUnfree = true; 25 | } 26 | ) 27 | ); 28 | in 29 | (import ./default.nix { 30 | inherit (nixpkgs) lib; 31 | }) 32 | // { 33 | formatter = forAllSystems (pkgs: pkgs.alejandra); 34 | 35 | devShells = forAllSystems (pkgs: { 36 | default = pkgs.mkShell { 37 | packages = [ 38 | pkgs.nodejs 39 | ]; 40 | }; 41 | }); 42 | 43 | packages = forAllSystems (pkgs: { 44 | optionsJSON = 45 | (pkgs.nixosOptionsDoc { 46 | options = 47 | (self.lib { 48 | inherit pkgs; 49 | modules = [ ]; 50 | }).options; 51 | }).optionsJSON; 52 | 53 | docs = 54 | with pkgs; 55 | buildNpmPackage { 56 | name = "docs"; 57 | src = ./docs; 58 | npmDeps = importNpmLock { 59 | npmRoot = ./docs; 60 | }; 61 | 62 | inherit (importNpmLock) npmConfigHook; 63 | env.WRAPPER_MANAGER_OPTIONS_JSON = self.packages.${pkgs.system}.optionsJSON; 64 | 65 | buildPhase = '' 66 | runHook preBuild 67 | 68 | # Vitepress hangs when printing normally 69 | npm run build -- --base=/wrapper-manager/ 2>&1 | cat 70 | 71 | runHook postBuild 72 | ''; 73 | 74 | installPhase = '' 75 | runHook preInstall 76 | 77 | mv .vitepress/dist $out 78 | 79 | runHook postInstall 80 | ''; 81 | }; 82 | }); 83 | 84 | checks = forAllSystems ( 85 | pkgs: 86 | (self.lib { 87 | inherit pkgs; 88 | modules = [ ./tests/test-module.nix ]; 89 | specialArgs = { 90 | some-special-arg = "foo"; 91 | }; 92 | }).config.build.packages 93 | ); 94 | }; 95 | } 96 | -------------------------------------------------------------------------------- /modules/base.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | pkgs, 4 | ... 5 | }: 6 | let 7 | inherit (lib) 8 | mkOption 9 | types 10 | ; 11 | 12 | envToWrapperArg = 13 | _: 14 | { 15 | name, 16 | force, 17 | value, 18 | }: 19 | let 20 | unsetArg = 21 | if !force then 22 | (lib.warn '' 23 | ${ 24 | lib.showOption [ 25 | "env" 26 | name 27 | "value" 28 | ] 29 | } is null (indicating unsetting the variable), but ${ 30 | lib.showOption [ 31 | "env" 32 | name 33 | "force" 34 | ] 35 | } is false. This option will have no effect 36 | '' [ ]) 37 | else 38 | [ 39 | "--unset" 40 | name 41 | ]; 42 | setArg = 43 | let 44 | arg = if force then "--set" else "--set-default"; 45 | in 46 | [ 47 | arg 48 | name 49 | value 50 | ]; 51 | in 52 | if value == null then unsetArg else setArg; 53 | 54 | wrapperOpts = 55 | { config, ... }: 56 | { 57 | imports = [ 58 | (lib.mkAliasOptionModuleMD [ "flags" ] [ "prependFlags" ]) 59 | ]; 60 | 61 | options = { 62 | basePackage = mkOption { 63 | type = with types; package; 64 | description = '' 65 | Program to be wrapped. 66 | ''; 67 | example = lib.literalExpression "pkgs.nix"; 68 | }; 69 | 70 | extraPackages = mkOption { 71 | type = with types; listOf package; 72 | description = '' 73 | Extra packages to also wrap. 74 | ''; 75 | example = lib.literalExpression "[ pkgs.git-extras pkgs.delta ]"; 76 | default = [ ]; 77 | }; 78 | 79 | env = mkOption { 80 | # This is a hack to display a helpful error message to the user about the changed api. 81 | # Should be changed to just `attrsOf submodule` at some point. 82 | type = 83 | let 84 | inherit (lib) any isStringLike showOption; 85 | actualType = types.submodule ./env-type.nix; 86 | forgedType = actualType // { 87 | # There's special handling if this value is present which makes merging treat this type as any other submodule type, 88 | # so we lie about there being no sub-modules so that our `check` and `merge` get called. 89 | getSubModules = null; 90 | check = v: isStringLike v || actualType.check v; 91 | merge = 92 | loc: defs: 93 | if any (def: isStringLike def.value) defs then 94 | throw '' 95 | ${showOption loc} has been changed to an attribute set. 96 | Instead of assigning value directly, use ${showOption (loc ++ [ "value" ])} = ; 97 | '' 98 | else 99 | (actualType.merge loc defs); 100 | }; 101 | in 102 | types.attrsOf forgedType; 103 | description = '' 104 | Structured environment variables. 105 | ''; 106 | default = { }; 107 | example = { 108 | NIX_CONFIG.value = "allow-import-from-derivation = false"; 109 | }; 110 | }; 111 | 112 | prependFlags = mkOption { 113 | type = with types; listOf (coercedTo anything (x: "${x}") str); 114 | description = '' 115 | Prepend a flag to the invocation of the program, **before** any arguments passed to the wrapped executable. 116 | ''; 117 | default = [ ]; 118 | example = lib.literalExpression '' 119 | [ 120 | "--config" ./config.sh 121 | "--ascii" ./ascii 122 | ] 123 | ''; 124 | }; 125 | 126 | appendFlags = mkOption { 127 | type = with types; listOf (coercedTo anything (x: "${x}") str); 128 | description = '' 129 | Append a flag to the invocation of the program, **after** any arguments passed to the wrapped executable. 130 | ''; 131 | default = [ ]; 132 | example = lib.literalExpression '' 133 | [ 134 | "--config" ./config.sh 135 | "--ascii" ./ascii 136 | ] 137 | ''; 138 | }; 139 | 140 | pathAdd = mkOption { 141 | type = with types; listOf package; 142 | description = '' 143 | Packages to append to PATH. 144 | ''; 145 | default = [ ]; 146 | example = lib.literalExpression "[ pkgs.starship ]"; 147 | }; 148 | 149 | extraWrapperFlags = mkOption { 150 | type = with types; separatedString " "; 151 | description = '' 152 | Raw flags passed to makeWrapper. 153 | 154 | See upstream documentation for make-wrapper.sh : https://github.com/NixOS/nixpkgs/blob/master/pkgs/build-support/setup-hooks/make-wrapper.sh 155 | ''; 156 | default = ""; 157 | example = "--argv0 foo --set BAR value"; 158 | }; 159 | 160 | wrapped = mkOption { 161 | type = with types; package; 162 | readOnly = true; 163 | description = '' 164 | (Output) Final wrapped package. 165 | ''; 166 | }; 167 | 168 | renames = mkOption { 169 | type = with types; attrsOf str; 170 | description = '' 171 | Map of renames FROM = TO. Renames every binary /bin/FROM to /bin/TO, adjusting other 172 | necessary files. 173 | ''; 174 | default = { }; 175 | example = { 176 | "nvim" = "custom-nvim"; 177 | }; 178 | }; 179 | 180 | overrideAttrs = mkOption { 181 | type = with types; functionTo attrs; 182 | description = '' 183 | Function to override attributes from the final package. 184 | ''; 185 | default = lib.id; 186 | example = '' 187 | old: { 188 | pname = "''${old.pname}-wrapped"; 189 | } 190 | ''; 191 | }; 192 | 193 | postBuild = mkOption { 194 | type = with types; str; 195 | description = '' 196 | Extra fragment of bash to be run after the main wrapper-manager code. 197 | ''; 198 | default = ""; 199 | example = '' 200 | $out/bin/nvim -l ''${./check.lua} 201 | ''; 202 | }; 203 | }; 204 | 205 | config = { 206 | wrapped = 207 | let 208 | mkWrapper = 209 | basePackage: 210 | let 211 | hasMan = builtins.any (builtins.hasAttr "man") ([ basePackage ] ++ config.extraPackages); 212 | in 213 | ( 214 | ( 215 | (pkgs.symlinkJoin { 216 | inherit (basePackage) name; 217 | paths = [ basePackage ] ++ config.extraPackages; 218 | nativeBuildInputs = [ pkgs.makeWrapper ]; 219 | postBuild = 220 | let 221 | envArgs = lib.mapAttrsToList envToWrapperArg config.env; 222 | # Yes, the arguments are escaped later, yes, this is intended to "double escape", 223 | # so that they are escaped for wrapProgram and for the final binary too. 224 | prependFlagArgs = map (args: [ 225 | "--add-flags" 226 | (lib.escapeShellArg args) 227 | ]) config.prependFlags; 228 | appendFlagArgs = map (args: [ 229 | "--append-flags" 230 | (lib.escapeShellArg args) 231 | ]) config.appendFlags; 232 | pathArgs = map (p: [ 233 | "--prefix" 234 | "PATH" 235 | ":" 236 | "${p}/bin" 237 | ]) config.pathAdd; 238 | allArgs = lib.flatten (envArgs ++ prependFlagArgs ++ appendFlagArgs ++ pathArgs); 239 | in 240 | '' 241 | for file in $out/bin/*; do 242 | echo "Wrapping $file" 243 | wrapProgram \ 244 | $file \ 245 | ${lib.escapeShellArgs allArgs} \ 246 | ${config.extraWrapperFlags} 247 | done 248 | 249 | # Some derivations have nested symlinks here 250 | if [[ -d $out/share/applications && ! -w $out/share/applications ]]; then 251 | echo "Detected nested symlink, fixing" 252 | temp=$(mktemp -d) 253 | cp -v $out/share/applications/* $temp 254 | rm -vf $out/share/applications 255 | mkdir -pv $out/share/applications 256 | cp -v $temp/* $out/share/applications 257 | fi 258 | 259 | cd $out/bin 260 | for exe in *; do 261 | 262 | if false; then 263 | exit 2 264 | ${lib.concatStringsSep "\n" ( 265 | lib.mapAttrsToList (name: value: '' 266 | elif [[ $exe == ${lib.escapeShellArg name} ]]; then 267 | newexe=${lib.escapeShellArg value} 268 | mv -vf $exe $newexe 269 | '') config.renames 270 | )} 271 | else 272 | newexe=$exe 273 | fi 274 | 275 | # Fix .desktop files 276 | # This list of fixes might not be exhaustive 277 | for file in $out/share/applications/*; do 278 | echo "Fixing file=$file for exe=$exe" 279 | set -x 280 | trap "set +x" ERR 281 | sed -i "s#/nix/store/.*/bin/$exe #$out/bin/$newexe #" "$file" 282 | sed -i -E "s#Exec=$exe([[:space:]]*)#Exec=$out/bin/$newexe\1#g" "$file" 283 | sed -i -E "s#TryExec=$exe([[:space:]]*)#TryExec=$out/bin/$newexe\1#g" "$file" 284 | set +x 285 | done 286 | done 287 | 288 | ${lib.optionalString hasMan '' 289 | mkdir -p ''${!outputMan} 290 | ${lib.concatMapStringsSep "\n" ( 291 | # p: if lib.hasAttr "man" p then "${pkgs.xorg.lndir}/bin/lndir -silent ${p.man} $out" else "#" 292 | p: 293 | if p ? "man" then 294 | "${lib.getExe pkgs.xorg.lndir} -silent ${p.man} \${!outputMan}" 295 | else 296 | "echo \"No man output for ${lib.getName p}\"" 297 | ) ([ basePackage ] ++ config.extraPackages)} 298 | ''} 299 | 300 | ${config.postBuild} 301 | ''; 302 | passthru = (basePackage.passthru or { }) // { 303 | unwrapped = basePackage; 304 | }; 305 | outputs = [ 306 | "out" 307 | ] ++ (lib.optional hasMan "man"); 308 | meta = basePackage.meta // { 309 | outputsToInstall = [ 310 | "out" 311 | ] ++ (lib.optional hasMan "man"); 312 | }; 313 | }) 314 | // { 315 | override = newAttrs: mkWrapper (basePackage.override newAttrs); 316 | } 317 | ) 318 | ); 319 | in 320 | mkWrapper config.basePackage; 321 | }; 322 | }; 323 | in 324 | { 325 | options = { 326 | wrappers = mkOption { 327 | type = with types; attrsOf (submodule wrapperOpts); 328 | default = { }; 329 | description = '' 330 | Wrapper configuration. See the suboptions for configuration. 331 | ''; 332 | }; 333 | }; 334 | 335 | config = { 336 | }; 337 | } 338 | -------------------------------------------------------------------------------- /modules/build.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | pkgs, 4 | config, 5 | ... 6 | }: let 7 | inherit 8 | (lib) 9 | mkOption 10 | types 11 | ; 12 | in { 13 | options = { 14 | build = { 15 | toplevel = mkOption { 16 | type = with types; package; 17 | readOnly = true; 18 | description = '' 19 | (Output) Derivation that merges all the wrappers into a single package. 20 | ''; 21 | }; 22 | 23 | packages = mkOption { 24 | type = with types; attrsOf package; 25 | readOnly = true; 26 | description = '' 27 | (Output) Attribute set of name=pkg. Useful for adding them to a flake's packages output. 28 | ''; 29 | }; 30 | }; 31 | }; 32 | 33 | config = { 34 | build = { 35 | toplevel = pkgs.buildEnv { 36 | name = "wrapper-manager"; 37 | paths = builtins.attrValues config.build.packages; 38 | }; 39 | 40 | packages = builtins.mapAttrs (_: value: value.wrapped) config.wrappers; 41 | }; 42 | }; 43 | } 44 | -------------------------------------------------------------------------------- /modules/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./base.nix 4 | ./build.nix 5 | 6 | # ./git.nix 7 | ]; 8 | } 9 | -------------------------------------------------------------------------------- /modules/env-type.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | name, 5 | ... 6 | }: let 7 | inherit (lib) mkOption types; 8 | in { 9 | options = { 10 | name = mkOption { 11 | type = types.str; 12 | description = '' 13 | Name of the variable. 14 | ''; 15 | default = name; 16 | }; 17 | 18 | value = mkOption { 19 | type = let 20 | inherit (types) coercedTo anything str nullOr; 21 | strLike = coercedTo anything (x: "${x}") str; 22 | in 23 | nullOr strLike; 24 | description = '' 25 | Value of the variable to be set. 26 | Set to `null` to unset the variable. 27 | 28 | Note that any environment variable will be escaped. For example, `value = "$HOME"` 29 | will be converted to the literal `$HOME`, with its dollar sign. 30 | ''; 31 | }; 32 | 33 | force = mkOption { 34 | type = types.bool; 35 | description = '' 36 | Whether the value should be always set to the specified value. 37 | If set to `true`, the program will not inherit the value of the variable 38 | if it's already present in the environment. 39 | 40 | Setting it to false when unsetting a variable (value = null) 41 | will make the option have no effect. 42 | ''; 43 | default = config.value == null; 44 | defaultText = lib.literalMD "true if `value` is null, otherwise false"; 45 | }; 46 | }; 47 | } 48 | -------------------------------------------------------------------------------- /tests/gitconfig: -------------------------------------------------------------------------------- 1 | [core] 2 | pager=delta -------------------------------------------------------------------------------- /tests/test-module.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | lib, 4 | some-special-arg, 5 | config, 6 | ... 7 | }: 8 | { 9 | wrappers.hello = { 10 | env.FOO.value = "foo"; 11 | env.BAR.value = "bar"; 12 | basePackage = pkgs.hello; 13 | flags = [ 14 | "-g" 15 | some-special-arg 16 | ]; 17 | }; 18 | 19 | wrappers.neofetch = { 20 | basePackage = pkgs.neofetch.override { x11Support = false; }; 21 | flags = [ 22 | "--ascii_distro" 23 | "guix" 24 | ]; 25 | renames = { 26 | "neofetch" = "neofetch2"; 27 | }; 28 | }; 29 | 30 | wrappers.git = { 31 | basePackage = pkgs.git; 32 | extraPackages = [ pkgs.git-extras ]; 33 | env.GIT_CONFIG_GLOBAL.value = pkgs.writeText "gitconfig" (lib.fileContents ./gitconfig); 34 | }; 35 | 36 | wrappers.nushell = { 37 | basePackage = pkgs.nushell; 38 | pathAdd = [ pkgs.starship ]; 39 | }; 40 | 41 | wrappers.wezterm = { 42 | basePackage = pkgs.wezterm; 43 | renames = { 44 | "wezterm" = "wezterm2"; 45 | }; 46 | }; 47 | 48 | wrappers.neovim = { 49 | basePackage = pkgs.neovim; 50 | renames = { 51 | "nvim" = "nvim2"; 52 | }; 53 | }; 54 | 55 | wrappers.discord = { 56 | basePackage = pkgs.discord; 57 | flags = [ 58 | "--disable-gpu" 59 | ]; 60 | }; 61 | 62 | wrappers.hello-wrapped = { 63 | basePackage = pkgs.hello; 64 | overrideAttrs = old: { 65 | name = "hello-wrapped"; 66 | pname = "hello-wrapped-bad"; 67 | }; 68 | }; 69 | 70 | wrappers.git-minimal-custom = { 71 | basePackage = config.wrappers.git.wrapped.override { 72 | # Same as gitMinimal 73 | withManual = false; 74 | osxkeychainSupport = false; 75 | pythonSupport = false; 76 | perlSupport = false; 77 | withpcre2 = false; 78 | }; 79 | }; 80 | 81 | # Test for meta.outputsToInstall 82 | wrappers.pkg-config = { 83 | basePackage = pkgs.pkg-config; 84 | }; 85 | } 86 | --------------------------------------------------------------------------------