├── .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 |
14 |
15 |
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 |
--------------------------------------------------------------------------------