prehook 0.1.0__py3-none-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Binary file
@@ -0,0 +1,171 @@
1
+ Metadata-Version: 2.4
2
+ Name: prehook
3
+ Version: 0.1.0
4
+ Classifier: Development Status :: 3 - Alpha
5
+ Classifier: Environment :: Console
6
+ Classifier: Intended Audience :: Developers
7
+ Classifier: License :: OSI Approved :: MIT License
8
+ Classifier: Programming Language :: Rust
9
+ Classifier: Programming Language :: Python :: 3
10
+ Classifier: Topic :: Software Development :: Quality Assurance
11
+ Summary: Run git hooks as shell commands from pyproject.toml
12
+ Keywords: git,hooks,pre-commit,linter,formatter
13
+ Author-email: Christian Tanul <git@christiantanul.com>
14
+ License-Expression: MIT
15
+ Requires-Python: >=3.10
16
+ Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
17
+ Project-URL: Repository, https://github.com/scriptogre/prehook
18
+
19
+ # `prehook`
20
+
21
+ Run git hooks as shell commands from `pyproject.toml`.
22
+
23
+ ## Usage
24
+
25
+ 1. Add commands to `pyproject.toml`:
26
+
27
+ ```toml
28
+ [tool.prehook]
29
+ hooks = [
30
+ "uvx ruff check --fix",
31
+ "uvx ruff format",
32
+ ]
33
+ ```
34
+
35
+ 2. Install the git hooks:
36
+
37
+ ```sh
38
+ uvx prehook install
39
+ ```
40
+ _This creates a script in your `.git/hooks/`._
41
+
42
+ 3. `git commit -m "unfinished commit"`
43
+
44
+ To run hooks manually:
45
+
46
+ ```sh
47
+ uvx prehook run
48
+ ```
49
+
50
+ To uninstall:
51
+
52
+ ```sh
53
+ uvx prehook uninstall
54
+ ```
55
+
56
+ ## Why?
57
+
58
+ I've used `pre-commit` for a long time, and it's a great tool.
59
+
60
+ But for projects where I just need to run `ruff check` and `ruff format`, setting up a separate config file with repo URLs and rev hases felt like too much.
61
+
62
+ So I made this. Hooks live in `pyproject.toml`, and they're just shell commands.
63
+
64
+
65
+ ## Configuration
66
+
67
+ ### Simple form
68
+
69
+ Commands run in order. If any command exits non-zero, the commit is blocked.
70
+
71
+ ```toml
72
+ [tool.prehook]
73
+ hooks = [
74
+ "uvx ruff check --fix",
75
+ "uvx ruff format",
76
+ ]
77
+ ```
78
+
79
+ A single command works too:
80
+
81
+ ```toml
82
+ [tool.prehook]
83
+ hooks = ["just lint"]
84
+ ```
85
+
86
+ ### Full form
87
+
88
+ For naming, stages, or per-hook options:
89
+
90
+ ```toml
91
+ [tool.prehook]
92
+ hooks = [
93
+ { name = "lint", run = "uvx ruff check --fix" },
94
+ { name = "typecheck", run = "uvx pyright" },
95
+ { name = "format", run = "uvx ruff format" },
96
+ ]
97
+ ```
98
+
99
+ | Key | Default | Description |
100
+ |-----------|----------------------|----------------------------------|
101
+ | `run` | required | Command to execute. |
102
+ | `name` | derived from command | Label for output and `SKIP`. |
103
+ | `stages` | `["pre-commit"]` | Which git hook stages to run in. |
104
+ | `verbose` | `false` | Show output even on success. |
105
+
106
+ ### Global options
107
+
108
+ ```toml
109
+ [tool.prehook]
110
+ fail_fast = true
111
+ parallel = true
112
+ hooks = [...]
113
+ ```
114
+
115
+ | Key | Default | Description |
116
+ |-------------|---------|-----------------------------|
117
+ | `fail_fast` | `false` | Stop after first failure. |
118
+ | `parallel` | `false` | Run all hooks concurrently. |
119
+
120
+ ### Parallel mode
121
+
122
+ When `parallel = true`, all hooks run at the same time. If two commands must run in order (e.g. fix then format), combine them:
123
+
124
+ ```toml
125
+ [tool.prehook]
126
+ parallel = true
127
+ hooks = [
128
+ { name = "lint+format", run = "uvx ruff check --fix && uvx ruff format" },
129
+ { name = "typecheck", run = "uvx pyright" },
130
+ ]
131
+ ```
132
+
133
+ ### Stages
134
+
135
+ Hooks run on `pre-commit` by default. To run on other git hooks (e.g. `pre-push`), set `stages`:
136
+
137
+ ```toml
138
+ [tool.prehook]
139
+ hooks = [
140
+ { name = "lint", run = "uvx ruff check" },
141
+ { name = "test", run = "pytest", stages = ["pre-push"] },
142
+ ]
143
+ ```
144
+
145
+ `prehook install` detects all stages in your config and installs the right git hooks automatically.
146
+
147
+ ### Skipping hooks
148
+
149
+ Skip all hooks:
150
+
151
+ ```sh
152
+ git commit --no-verify -m "wip"
153
+ ```
154
+
155
+ Skip specific hooks by name:
156
+
157
+ ```sh
158
+ SKIP=typecheck git commit -m "wip"
159
+ SKIP=lint,typecheck git commit -m "wip"
160
+ ```
161
+
162
+ ## Alternatives
163
+
164
+ If this tool doesn't do what you need, these are worth a look:
165
+
166
+ | Tool | Config | What it does well |
167
+ |------------------------------------------------------|---------------------------|---------------------------------------------------------------------------|
168
+ | [pre-commit](https://pre-commit.com) | `.pre-commit-config.yaml` | Huge ecosystem of ready-made hooks, multi-language virtualenv management. |
169
+ | [lefthook](https://github.com/evilmartians/lefthook) | `lefthook.yml` | Fast, language-agnostic, great parallel execution. |
170
+ | [prek](https://github.com/j178/prek) | `prek.toml` | Compatible with pre-commit configs, written in Rust, parallel execution. |
171
+
@@ -0,0 +1,5 @@
1
+ prehook-0.1.0.data/scripts/prehook.exe,sha256=mMKdyHeKfN24o3Q5Vcwtf3XC5-_N9DaK_LCnww1SsSU,617472
2
+ prehook-0.1.0.dist-info/METADATA,sha256=s884slOq2_95bkMSCMB4hqlJA5396FQg10W0h9KKgNY,4744
3
+ prehook-0.1.0.dist-info/WHEEL,sha256=T1DkkvVlw1bn9taKYXZyic2iz5lp4CFExsOlxcRDXDI,94
4
+ prehook-0.1.0.dist-info/sboms/prehook.cyclonedx.json,sha256=Z8g1zOdiYa7NGFcrIY7Gy-b1e6R4yZPn8PdaaEjLc6I,18699
5
+ prehook-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: maturin (1.14.0)
3
+ Root-Is-Purelib: false
4
+ Tag: py3-none-win_amd64
@@ -0,0 +1,608 @@
1
+ {
2
+ "bomFormat": "CycloneDX",
3
+ "specVersion": "1.5",
4
+ "version": 1,
5
+ "serialNumber": "urn:uuid:90effdeb-05f1-4578-a200-d9bbc851803a",
6
+ "metadata": {
7
+ "timestamp": "2026-06-13T16:19:35.229899000Z",
8
+ "tools": [
9
+ {
10
+ "vendor": "CycloneDX",
11
+ "name": "cargo-cyclonedx",
12
+ "version": "0.5.9"
13
+ }
14
+ ],
15
+ "component": {
16
+ "type": "application",
17
+ "bom-ref": "path+file:///D:/a/prehook/prehook#0.1.0",
18
+ "name": "prehook",
19
+ "version": "0.1.0",
20
+ "scope": "required",
21
+ "purl": "pkg:cargo/prehook@0.1.0?download_url=file://.",
22
+ "components": [
23
+ {
24
+ "type": "application",
25
+ "bom-ref": "path+file:///D:/a/prehook/prehook#0.1.0 bin-target-0",
26
+ "name": "prehook",
27
+ "version": "0.1.0",
28
+ "purl": "pkg:cargo/prehook@0.1.0?download_url=file://.#src/main.rs"
29
+ }
30
+ ]
31
+ },
32
+ "properties": [
33
+ {
34
+ "name": "cdx:rustc:sbom:target:all_targets",
35
+ "value": "true"
36
+ }
37
+ ]
38
+ },
39
+ "components": [
40
+ {
41
+ "type": "library",
42
+ "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#equivalent@1.0.2",
43
+ "name": "equivalent",
44
+ "version": "1.0.2",
45
+ "description": "Traits for key comparison in maps.",
46
+ "scope": "required",
47
+ "hashes": [
48
+ {
49
+ "alg": "SHA-256",
50
+ "content": "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
51
+ }
52
+ ],
53
+ "licenses": [
54
+ {
55
+ "expression": "Apache-2.0 OR MIT"
56
+ }
57
+ ],
58
+ "purl": "pkg:cargo/equivalent@1.0.2",
59
+ "externalReferences": [
60
+ {
61
+ "type": "vcs",
62
+ "url": "https://github.com/indexmap-rs/equivalent"
63
+ }
64
+ ]
65
+ },
66
+ {
67
+ "type": "library",
68
+ "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#hashbrown@0.17.1",
69
+ "name": "hashbrown",
70
+ "version": "0.17.1",
71
+ "description": "A Rust port of Google's SwissTable hash map",
72
+ "scope": "required",
73
+ "hashes": [
74
+ {
75
+ "alg": "SHA-256",
76
+ "content": "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a"
77
+ }
78
+ ],
79
+ "licenses": [
80
+ {
81
+ "expression": "MIT OR Apache-2.0"
82
+ }
83
+ ],
84
+ "purl": "pkg:cargo/hashbrown@0.17.1",
85
+ "externalReferences": [
86
+ {
87
+ "type": "vcs",
88
+ "url": "https://github.com/rust-lang/hashbrown"
89
+ }
90
+ ]
91
+ },
92
+ {
93
+ "type": "library",
94
+ "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#indexmap@2.14.0",
95
+ "name": "indexmap",
96
+ "version": "2.14.0",
97
+ "description": "A hash table with consistent order and fast iteration.",
98
+ "scope": "required",
99
+ "hashes": [
100
+ {
101
+ "alg": "SHA-256",
102
+ "content": "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9"
103
+ }
104
+ ],
105
+ "licenses": [
106
+ {
107
+ "expression": "Apache-2.0 OR MIT"
108
+ }
109
+ ],
110
+ "purl": "pkg:cargo/indexmap@2.14.0",
111
+ "externalReferences": [
112
+ {
113
+ "type": "documentation",
114
+ "url": "https://docs.rs/indexmap/"
115
+ },
116
+ {
117
+ "type": "vcs",
118
+ "url": "https://github.com/indexmap-rs/indexmap"
119
+ }
120
+ ]
121
+ },
122
+ {
123
+ "type": "library",
124
+ "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.106",
125
+ "author": "David Tolnay <dtolnay@gmail.com>, Alex Crichton <alex@alexcrichton.com>",
126
+ "name": "proc-macro2",
127
+ "version": "1.0.106",
128
+ "description": "A substitute implementation of the compiler's `proc_macro` API to decouple token-based libraries from the procedural macro use case.",
129
+ "scope": "required",
130
+ "hashes": [
131
+ {
132
+ "alg": "SHA-256",
133
+ "content": "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
134
+ }
135
+ ],
136
+ "licenses": [
137
+ {
138
+ "expression": "MIT OR Apache-2.0"
139
+ }
140
+ ],
141
+ "purl": "pkg:cargo/proc-macro2@1.0.106",
142
+ "externalReferences": [
143
+ {
144
+ "type": "documentation",
145
+ "url": "https://docs.rs/proc-macro2"
146
+ },
147
+ {
148
+ "type": "vcs",
149
+ "url": "https://github.com/dtolnay/proc-macro2"
150
+ }
151
+ ]
152
+ },
153
+ {
154
+ "type": "library",
155
+ "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45",
156
+ "author": "David Tolnay <dtolnay@gmail.com>",
157
+ "name": "quote",
158
+ "version": "1.0.45",
159
+ "description": "Quasi-quoting macro quote!(...)",
160
+ "scope": "required",
161
+ "hashes": [
162
+ {
163
+ "alg": "SHA-256",
164
+ "content": "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
165
+ }
166
+ ],
167
+ "licenses": [
168
+ {
169
+ "expression": "MIT OR Apache-2.0"
170
+ }
171
+ ],
172
+ "purl": "pkg:cargo/quote@1.0.45",
173
+ "externalReferences": [
174
+ {
175
+ "type": "documentation",
176
+ "url": "https://docs.rs/quote/"
177
+ },
178
+ {
179
+ "type": "vcs",
180
+ "url": "https://github.com/dtolnay/quote"
181
+ }
182
+ ]
183
+ },
184
+ {
185
+ "type": "library",
186
+ "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#serde@1.0.228",
187
+ "author": "Erick Tryzelaar <erick.tryzelaar@gmail.com>, David Tolnay <dtolnay@gmail.com>",
188
+ "name": "serde",
189
+ "version": "1.0.228",
190
+ "description": "A generic serialization/deserialization framework",
191
+ "scope": "required",
192
+ "hashes": [
193
+ {
194
+ "alg": "SHA-256",
195
+ "content": "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
196
+ }
197
+ ],
198
+ "licenses": [
199
+ {
200
+ "expression": "MIT OR Apache-2.0"
201
+ }
202
+ ],
203
+ "purl": "pkg:cargo/serde@1.0.228",
204
+ "externalReferences": [
205
+ {
206
+ "type": "documentation",
207
+ "url": "https://docs.rs/serde"
208
+ },
209
+ {
210
+ "type": "website",
211
+ "url": "https://serde.rs"
212
+ },
213
+ {
214
+ "type": "vcs",
215
+ "url": "https://github.com/serde-rs/serde"
216
+ }
217
+ ]
218
+ },
219
+ {
220
+ "type": "library",
221
+ "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#serde_core@1.0.228",
222
+ "author": "Erick Tryzelaar <erick.tryzelaar@gmail.com>, David Tolnay <dtolnay@gmail.com>",
223
+ "name": "serde_core",
224
+ "version": "1.0.228",
225
+ "description": "Serde traits only, with no support for derive -- use the `serde` crate instead",
226
+ "scope": "required",
227
+ "hashes": [
228
+ {
229
+ "alg": "SHA-256",
230
+ "content": "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
231
+ }
232
+ ],
233
+ "licenses": [
234
+ {
235
+ "expression": "MIT OR Apache-2.0"
236
+ }
237
+ ],
238
+ "purl": "pkg:cargo/serde_core@1.0.228",
239
+ "externalReferences": [
240
+ {
241
+ "type": "documentation",
242
+ "url": "https://docs.rs/serde_core"
243
+ },
244
+ {
245
+ "type": "website",
246
+ "url": "https://serde.rs"
247
+ },
248
+ {
249
+ "type": "vcs",
250
+ "url": "https://github.com/serde-rs/serde"
251
+ }
252
+ ]
253
+ },
254
+ {
255
+ "type": "library",
256
+ "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#serde_derive@1.0.228",
257
+ "author": "Erick Tryzelaar <erick.tryzelaar@gmail.com>, David Tolnay <dtolnay@gmail.com>",
258
+ "name": "serde_derive",
259
+ "version": "1.0.228",
260
+ "description": "Macros 1.1 implementation of #[derive(Serialize, Deserialize)]",
261
+ "scope": "required",
262
+ "hashes": [
263
+ {
264
+ "alg": "SHA-256",
265
+ "content": "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
266
+ }
267
+ ],
268
+ "licenses": [
269
+ {
270
+ "expression": "MIT OR Apache-2.0"
271
+ }
272
+ ],
273
+ "purl": "pkg:cargo/serde_derive@1.0.228",
274
+ "externalReferences": [
275
+ {
276
+ "type": "documentation",
277
+ "url": "https://serde.rs/derive.html"
278
+ },
279
+ {
280
+ "type": "website",
281
+ "url": "https://serde.rs"
282
+ },
283
+ {
284
+ "type": "vcs",
285
+ "url": "https://github.com/serde-rs/serde"
286
+ }
287
+ ]
288
+ },
289
+ {
290
+ "type": "library",
291
+ "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#serde_spanned@1.1.1",
292
+ "name": "serde_spanned",
293
+ "version": "1.1.1",
294
+ "description": "Serde-compatible spanned Value",
295
+ "scope": "required",
296
+ "hashes": [
297
+ {
298
+ "alg": "SHA-256",
299
+ "content": "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26"
300
+ }
301
+ ],
302
+ "licenses": [
303
+ {
304
+ "expression": "MIT OR Apache-2.0"
305
+ }
306
+ ],
307
+ "purl": "pkg:cargo/serde_spanned@1.1.1",
308
+ "externalReferences": [
309
+ {
310
+ "type": "vcs",
311
+ "url": "https://github.com/toml-rs/toml"
312
+ }
313
+ ]
314
+ },
315
+ {
316
+ "type": "library",
317
+ "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.117",
318
+ "author": "David Tolnay <dtolnay@gmail.com>",
319
+ "name": "syn",
320
+ "version": "2.0.117",
321
+ "description": "Parser for Rust source code",
322
+ "scope": "required",
323
+ "hashes": [
324
+ {
325
+ "alg": "SHA-256",
326
+ "content": "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
327
+ }
328
+ ],
329
+ "licenses": [
330
+ {
331
+ "expression": "MIT OR Apache-2.0"
332
+ }
333
+ ],
334
+ "purl": "pkg:cargo/syn@2.0.117",
335
+ "externalReferences": [
336
+ {
337
+ "type": "documentation",
338
+ "url": "https://docs.rs/syn"
339
+ },
340
+ {
341
+ "type": "vcs",
342
+ "url": "https://github.com/dtolnay/syn"
343
+ }
344
+ ]
345
+ },
346
+ {
347
+ "type": "library",
348
+ "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#toml@1.1.2+spec-1.1.0",
349
+ "name": "toml",
350
+ "version": "1.1.2+spec-1.1.0",
351
+ "description": "A native Rust encoder and decoder of TOML-formatted files and streams. Provides implementations of the standard Serialize/Deserialize traits for TOML data to facilitate deserializing and serializing Rust structures. ",
352
+ "scope": "required",
353
+ "hashes": [
354
+ {
355
+ "alg": "SHA-256",
356
+ "content": "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee"
357
+ }
358
+ ],
359
+ "licenses": [
360
+ {
361
+ "expression": "MIT OR Apache-2.0"
362
+ }
363
+ ],
364
+ "purl": "pkg:cargo/toml@1.1.2+spec-1.1.0",
365
+ "externalReferences": [
366
+ {
367
+ "type": "vcs",
368
+ "url": "https://github.com/toml-rs/toml"
369
+ }
370
+ ]
371
+ },
372
+ {
373
+ "type": "library",
374
+ "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#toml_datetime@1.1.1+spec-1.1.0",
375
+ "name": "toml_datetime",
376
+ "version": "1.1.1+spec-1.1.0",
377
+ "description": "A TOML-compatible datetime type",
378
+ "scope": "required",
379
+ "hashes": [
380
+ {
381
+ "alg": "SHA-256",
382
+ "content": "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7"
383
+ }
384
+ ],
385
+ "licenses": [
386
+ {
387
+ "expression": "MIT OR Apache-2.0"
388
+ }
389
+ ],
390
+ "purl": "pkg:cargo/toml_datetime@1.1.1+spec-1.1.0",
391
+ "externalReferences": [
392
+ {
393
+ "type": "vcs",
394
+ "url": "https://github.com/toml-rs/toml"
395
+ }
396
+ ]
397
+ },
398
+ {
399
+ "type": "library",
400
+ "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#toml_parser@1.1.2+spec-1.1.0",
401
+ "name": "toml_parser",
402
+ "version": "1.1.2+spec-1.1.0",
403
+ "description": "Yet another format-preserving TOML parser.",
404
+ "scope": "required",
405
+ "hashes": [
406
+ {
407
+ "alg": "SHA-256",
408
+ "content": "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526"
409
+ }
410
+ ],
411
+ "licenses": [
412
+ {
413
+ "expression": "MIT OR Apache-2.0"
414
+ }
415
+ ],
416
+ "purl": "pkg:cargo/toml_parser@1.1.2+spec-1.1.0",
417
+ "externalReferences": [
418
+ {
419
+ "type": "vcs",
420
+ "url": "https://github.com/toml-rs/toml"
421
+ }
422
+ ]
423
+ },
424
+ {
425
+ "type": "library",
426
+ "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#toml_writer@1.1.1+spec-1.1.0",
427
+ "name": "toml_writer",
428
+ "version": "1.1.1+spec-1.1.0",
429
+ "description": "A low-level interface for writing out TOML ",
430
+ "scope": "required",
431
+ "hashes": [
432
+ {
433
+ "alg": "SHA-256",
434
+ "content": "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db"
435
+ }
436
+ ],
437
+ "licenses": [
438
+ {
439
+ "expression": "MIT OR Apache-2.0"
440
+ }
441
+ ],
442
+ "purl": "pkg:cargo/toml_writer@1.1.1+spec-1.1.0",
443
+ "externalReferences": [
444
+ {
445
+ "type": "vcs",
446
+ "url": "https://github.com/toml-rs/toml"
447
+ }
448
+ ]
449
+ },
450
+ {
451
+ "type": "library",
452
+ "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#unicode-ident@1.0.24",
453
+ "author": "David Tolnay <dtolnay@gmail.com>",
454
+ "name": "unicode-ident",
455
+ "version": "1.0.24",
456
+ "description": "Determine whether characters have the XID_Start or XID_Continue properties according to Unicode Standard Annex #31",
457
+ "scope": "required",
458
+ "hashes": [
459
+ {
460
+ "alg": "SHA-256",
461
+ "content": "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
462
+ }
463
+ ],
464
+ "licenses": [
465
+ {
466
+ "expression": "(MIT OR Apache-2.0) AND Unicode-3.0"
467
+ }
468
+ ],
469
+ "purl": "pkg:cargo/unicode-ident@1.0.24",
470
+ "externalReferences": [
471
+ {
472
+ "type": "documentation",
473
+ "url": "https://docs.rs/unicode-ident"
474
+ },
475
+ {
476
+ "type": "vcs",
477
+ "url": "https://github.com/dtolnay/unicode-ident"
478
+ }
479
+ ]
480
+ },
481
+ {
482
+ "type": "library",
483
+ "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#winnow@1.0.3",
484
+ "name": "winnow",
485
+ "version": "1.0.3",
486
+ "description": "A byte-oriented, zero-copy, parser combinators library",
487
+ "scope": "required",
488
+ "hashes": [
489
+ {
490
+ "alg": "SHA-256",
491
+ "content": "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1"
492
+ }
493
+ ],
494
+ "licenses": [
495
+ {
496
+ "expression": "MIT"
497
+ }
498
+ ],
499
+ "purl": "pkg:cargo/winnow@1.0.3",
500
+ "externalReferences": [
501
+ {
502
+ "type": "vcs",
503
+ "url": "https://github.com/winnow-rs/winnow"
504
+ }
505
+ ]
506
+ }
507
+ ],
508
+ "dependencies": [
509
+ {
510
+ "ref": "path+file:///D:/a/prehook/prehook#0.1.0",
511
+ "dependsOn": [
512
+ "registry+https://github.com/rust-lang/crates.io-index#serde@1.0.228",
513
+ "registry+https://github.com/rust-lang/crates.io-index#toml@1.1.2+spec-1.1.0"
514
+ ]
515
+ },
516
+ {
517
+ "ref": "registry+https://github.com/rust-lang/crates.io-index#equivalent@1.0.2"
518
+ },
519
+ {
520
+ "ref": "registry+https://github.com/rust-lang/crates.io-index#hashbrown@0.17.1"
521
+ },
522
+ {
523
+ "ref": "registry+https://github.com/rust-lang/crates.io-index#indexmap@2.14.0",
524
+ "dependsOn": [
525
+ "registry+https://github.com/rust-lang/crates.io-index#equivalent@1.0.2",
526
+ "registry+https://github.com/rust-lang/crates.io-index#hashbrown@0.17.1",
527
+ "registry+https://github.com/rust-lang/crates.io-index#serde_core@1.0.228"
528
+ ]
529
+ },
530
+ {
531
+ "ref": "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.106",
532
+ "dependsOn": [
533
+ "registry+https://github.com/rust-lang/crates.io-index#unicode-ident@1.0.24"
534
+ ]
535
+ },
536
+ {
537
+ "ref": "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45",
538
+ "dependsOn": [
539
+ "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.106"
540
+ ]
541
+ },
542
+ {
543
+ "ref": "registry+https://github.com/rust-lang/crates.io-index#serde@1.0.228",
544
+ "dependsOn": [
545
+ "registry+https://github.com/rust-lang/crates.io-index#serde_core@1.0.228",
546
+ "registry+https://github.com/rust-lang/crates.io-index#serde_derive@1.0.228"
547
+ ]
548
+ },
549
+ {
550
+ "ref": "registry+https://github.com/rust-lang/crates.io-index#serde_core@1.0.228"
551
+ },
552
+ {
553
+ "ref": "registry+https://github.com/rust-lang/crates.io-index#serde_derive@1.0.228",
554
+ "dependsOn": [
555
+ "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.106",
556
+ "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45",
557
+ "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.117"
558
+ ]
559
+ },
560
+ {
561
+ "ref": "registry+https://github.com/rust-lang/crates.io-index#serde_spanned@1.1.1",
562
+ "dependsOn": [
563
+ "registry+https://github.com/rust-lang/crates.io-index#serde_core@1.0.228"
564
+ ]
565
+ },
566
+ {
567
+ "ref": "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.117",
568
+ "dependsOn": [
569
+ "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.106",
570
+ "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45",
571
+ "registry+https://github.com/rust-lang/crates.io-index#unicode-ident@1.0.24"
572
+ ]
573
+ },
574
+ {
575
+ "ref": "registry+https://github.com/rust-lang/crates.io-index#toml@1.1.2+spec-1.1.0",
576
+ "dependsOn": [
577
+ "registry+https://github.com/rust-lang/crates.io-index#indexmap@2.14.0",
578
+ "registry+https://github.com/rust-lang/crates.io-index#serde_core@1.0.228",
579
+ "registry+https://github.com/rust-lang/crates.io-index#serde_spanned@1.1.1",
580
+ "registry+https://github.com/rust-lang/crates.io-index#toml_datetime@1.1.1+spec-1.1.0",
581
+ "registry+https://github.com/rust-lang/crates.io-index#toml_parser@1.1.2+spec-1.1.0",
582
+ "registry+https://github.com/rust-lang/crates.io-index#toml_writer@1.1.1+spec-1.1.0",
583
+ "registry+https://github.com/rust-lang/crates.io-index#winnow@1.0.3"
584
+ ]
585
+ },
586
+ {
587
+ "ref": "registry+https://github.com/rust-lang/crates.io-index#toml_datetime@1.1.1+spec-1.1.0",
588
+ "dependsOn": [
589
+ "registry+https://github.com/rust-lang/crates.io-index#serde_core@1.0.228"
590
+ ]
591
+ },
592
+ {
593
+ "ref": "registry+https://github.com/rust-lang/crates.io-index#toml_parser@1.1.2+spec-1.1.0",
594
+ "dependsOn": [
595
+ "registry+https://github.com/rust-lang/crates.io-index#winnow@1.0.3"
596
+ ]
597
+ },
598
+ {
599
+ "ref": "registry+https://github.com/rust-lang/crates.io-index#toml_writer@1.1.1+spec-1.1.0"
600
+ },
601
+ {
602
+ "ref": "registry+https://github.com/rust-lang/crates.io-index#unicode-ident@1.0.24"
603
+ },
604
+ {
605
+ "ref": "registry+https://github.com/rust-lang/crates.io-index#winnow@1.0.3"
606
+ }
607
+ ]
608
+ }