dockerfile-analyzer 0.4.2__cp315-cp315-win32.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.
@@ -0,0 +1,5 @@
1
+ from .dockerfile_analyzer import *
2
+
3
+ __doc__ = dockerfile_analyzer.__doc__
4
+ if hasattr(dockerfile_analyzer, "__all__"):
5
+ __all__ = dockerfile_analyzer.__all__
@@ -0,0 +1,126 @@
1
+ # flake8: noqa: PYI021
2
+ def analyze_dockerfile(body: str) -> Analysis:
3
+ """
4
+ Analyzes a Dockerfile and returns detailed analysis information.
5
+
6
+ Args:
7
+ dockerfile_content (str): The content of the Dockerfile to analyze
8
+
9
+ Returns:
10
+ Analysis: Stages, images, instruction counts, ARG/ENV/LABEL values,
11
+ and exposed ports. ``COPY --from`` and ``ADD --from`` indexes are
12
+ resolved to stages. External ``--from`` images are returned separately
13
+ from stage names.
14
+
15
+ Image references that do not contain a variable are lowercased.
16
+ ``${VAR}`` and ``$VAR`` are not expanded. ``EXPOSE`` values are raw
17
+ tokens, including protocol suffixes and ranges. ``stage_names`` lists
18
+ named stages only; ``final_stage`` is the last stage name, or None
19
+ when it is unnamed. A later ``ARG NAME`` without a value keeps an
20
+ earlier default.
21
+
22
+ ``args``, ``labels``, ``env_vars``, and ``exposed_ports`` are merged
23
+ across all stages. ``stages`` lists each stage with the values it sets
24
+ itself, and ``final_stage_info`` is the last ``Stage`` (None when
25
+ there are no stages).
26
+
27
+ Raises:
28
+ ValueError: If the dockerfile content is empty or invalid
29
+
30
+ Example:
31
+ >>> analysis = analyze_dockerfile('FROM ubuntu:20.04\nRUN echo hello')
32
+ >>> print(analysis.num_stages)
33
+ 1
34
+
35
+ """
36
+
37
+ from typing import Dict, List, Optional, Any
38
+
39
+ class Analysis:
40
+ """Analysis of one Dockerfile.
41
+
42
+ ``args``, ``labels``, ``env_vars``, and ``exposed_ports`` are merged across
43
+ all stages (``args`` also includes global ``ARG``s before the first
44
+ ``FROM``); a later stage's value for a key replaces an earlier one. Use
45
+ ``stages`` for the values each stage sets. ``final_stage`` is the last
46
+ stage's name (None when unnamed); ``final_stage_info`` is the last
47
+ ``Stage`` object, or None when there are no stages.
48
+ """
49
+
50
+ num_stages: int
51
+ images: List[Image]
52
+ stage_names: List[str]
53
+ final_stage: Optional[str]
54
+ copy_from_stages: List[str]
55
+ add_from_stages: List[str]
56
+ copy_from_images: List[Image]
57
+ add_from_images: List[Image]
58
+ multistage_analysis: MultistageAnalysis
59
+ exposed_ports: List[str]
60
+ instructions: InstructionStats
61
+ args: Dict[str, Optional[str]]
62
+ labels: Dict[str, str]
63
+ env_vars: Dict[str, str]
64
+ stages: List[Stage]
65
+
66
+ @property
67
+ def final_stage_info(self) -> Optional[Stage]: ...
68
+ def to_dict(self) -> Dict[str, Any]: ...
69
+ def __repr__(self) -> str: ...
70
+
71
+ class Stage:
72
+ """One build stage, from its ``FROM`` line to the next ``FROM``.
73
+
74
+ Values are the stage's own. Nothing is inherited from a parent stage, and
75
+ global ``ARG``s declared before the first ``FROM`` are not attributed to
76
+ any stage. ``parent_stage`` is set only when ``FROM`` names an earlier
77
+ stage; a later or unknown name is treated as an image.
78
+ """
79
+
80
+ index: int
81
+ name: Optional[str]
82
+ base_image: str
83
+ parent_stage: Optional[str]
84
+ platform: Optional[str]
85
+ args: Dict[str, Optional[str]]
86
+ env_vars: Dict[str, str]
87
+ labels: Dict[str, str]
88
+ exposed_ports: List[str]
89
+ user: Optional[str]
90
+ workdir: Optional[str]
91
+
92
+ def to_dict(self) -> Dict[str, Any]: ...
93
+ def __repr__(self) -> str: ...
94
+
95
+ class Image:
96
+ full: str
97
+ components: Optional[ImageComponents]
98
+
99
+ def to_dict(self) -> Dict[str, Any]: ...
100
+ def __repr__(self) -> str: ...
101
+
102
+ class ImageComponents:
103
+ registry: Optional[str]
104
+ name: str
105
+ tag: Optional[str]
106
+ digest: Optional[str]
107
+
108
+ def to_dict(self) -> Dict[str, Any]: ...
109
+ def __repr__(self) -> str: ...
110
+
111
+ class InstructionStats:
112
+ total_count: int
113
+ by_type: Dict[str, int]
114
+
115
+ def to_dict(self) -> Dict[str, Any]: ...
116
+ def __repr__(self) -> str: ...
117
+
118
+ class MultistageAnalysis:
119
+ is_multistage: bool
120
+ stages_used_as_base_images: List[str]
121
+ stages_copied_from: List[str]
122
+ stages_added_from: List[str]
123
+ unused_stages: List[str]
124
+
125
+ def to_dict(self) -> Dict[str, Any]: ...
126
+ def __repr__(self) -> str: ...
File without changes
@@ -0,0 +1,11 @@
1
+ Metadata-Version: 2.4
2
+ Name: dockerfile-analyzer
3
+ Version: 0.4.2
4
+ Classifier: Programming Language :: Rust
5
+ Classifier: Programming Language :: Python :: Implementation :: CPython
6
+ License-File: LICENSE
7
+ Summary: Analyzes Dockerfiles and provides comprehensive insights including stage information, base images, multistage build analysis, instruction statistics, environment variables, labels, arguments, and exposed ports.
8
+ License-Expression: MIT
9
+ Requires-Python: >=3.13
10
+ Project-URL: Homepage, https://github.com/societymartingale/dockerfile-analyzer
11
+ Project-URL: Issues, https://github.com/societymartingale/dockerfile-analyzer/issues
@@ -0,0 +1,9 @@
1
+ dockerfile_analyzer/__init__.py,sha256=7oadnBFnrrD6cdiLZkm_cFEg9hl3zwcZclXkPD328pU,159
2
+ dockerfile_analyzer/__init__.pyi,sha256=vZ2db_uLNykU57gSvUEGP2ADCgaQf8X6gJZPXH3rXEk,4188
3
+ dockerfile_analyzer/dockerfile_analyzer.cp315-win32.pyd,sha256=1iSLmu-2aR3czjbwQAWMK4Q6OXlZFeV40DuuIxN_B9g,927744
4
+ dockerfile_analyzer/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ dockerfile_analyzer-0.4.2.dist-info/METADATA,sha256=U4wVRaVQWQ3sQ0zFFXu1jHRuWv4o7vvHFI2bnvm5QZ4,631
6
+ dockerfile_analyzer-0.4.2.dist-info/WHEEL,sha256=EfmT5yHmSsKCMf88H0y_gDJxXP11dyYwZSLaX0aGPEg,93
7
+ dockerfile_analyzer-0.4.2.dist-info/licenses/LICENSE,sha256=TRWh6DmGcCueD1JJY6stu-V5s593i1aICZTvP1uo6LY,1095
8
+ dockerfile_analyzer-0.4.2.dist-info/sboms/dockerfile-analyzer.cyclonedx.json,sha256=lwygBtxd6cV_wLdyiTahs3PZg7Vo5k_v7zgfoDtxAlA,25168
9
+ dockerfile_analyzer-0.4.2.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: maturin (1.15.0)
3
+ Root-Is-Purelib: false
4
+ Tag: cp315-cp315-win32
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 societymartingale
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,815 @@
1
+ {
2
+ "bomFormat": "CycloneDX",
3
+ "specVersion": "1.5",
4
+ "version": 1,
5
+ "serialNumber": "urn:uuid:974541eb-927f-4951-b151-d572a680e53a",
6
+ "metadata": {
7
+ "timestamp": "2026-10-16T07:27:01.675231200Z",
8
+ "tools": [
9
+ {
10
+ "vendor": "CycloneDX",
11
+ "name": "cargo-cyclonedx",
12
+ "version": "0.5.9"
13
+ }
14
+ ],
15
+ "component": {
16
+ "type": "library",
17
+ "bom-ref": "path+file:///D:/a/dockerfile-analyzer/dockerfile-analyzer#0.4.2",
18
+ "name": "dockerfile-analyzer",
19
+ "version": "0.4.2",
20
+ "scope": "required",
21
+ "purl": "pkg:cargo/dockerfile-analyzer@0.4.2?download_url=file://.",
22
+ "components": [
23
+ {
24
+ "type": "library",
25
+ "bom-ref": "path+file:///D:/a/dockerfile-analyzer/dockerfile-analyzer#0.4.2 bin-target-0",
26
+ "name": "dockerfile_analyzer",
27
+ "version": "0.4.2",
28
+ "purl": "pkg:cargo/dockerfile-analyzer@0.4.2?download_url=file://.#src/lib.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#docker-image@0.2.1",
43
+ "author": "Markus Mayer",
44
+ "name": "docker-image",
45
+ "version": "0.2.1",
46
+ "description": "A simple, no_std-compatible Docker image reference parser with strict adherence to Docker's naming rules.",
47
+ "scope": "required",
48
+ "hashes": [
49
+ {
50
+ "alg": "SHA-256",
51
+ "content": "f40ed901b8f2157bafce6e96f39217f7b1a4af32d84266d251ed7c22ce001f0b"
52
+ }
53
+ ],
54
+ "licenses": [
55
+ {
56
+ "expression": "EUPL-1.2"
57
+ }
58
+ ],
59
+ "purl": "pkg:cargo/docker-image@0.2.1",
60
+ "externalReferences": [
61
+ {
62
+ "type": "website",
63
+ "url": "https://github.com/sunsided/docker-image-rs"
64
+ },
65
+ {
66
+ "type": "vcs",
67
+ "url": "https://github.com/sunsided/docker-image-rs"
68
+ }
69
+ ]
70
+ },
71
+ {
72
+ "type": "library",
73
+ "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#heck@0.5.0",
74
+ "name": "heck",
75
+ "version": "0.5.0",
76
+ "description": "heck is a case conversion library.",
77
+ "scope": "required",
78
+ "hashes": [
79
+ {
80
+ "alg": "SHA-256",
81
+ "content": "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
82
+ }
83
+ ],
84
+ "licenses": [
85
+ {
86
+ "expression": "MIT OR Apache-2.0"
87
+ }
88
+ ],
89
+ "purl": "pkg:cargo/heck@0.5.0",
90
+ "externalReferences": [
91
+ {
92
+ "type": "vcs",
93
+ "url": "https://github.com/withoutboats/heck"
94
+ }
95
+ ]
96
+ },
97
+ {
98
+ "type": "library",
99
+ "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#lazy_static@1.5.0",
100
+ "author": "Marvin Löbel <loebel.marvin@gmail.com>",
101
+ "name": "lazy_static",
102
+ "version": "1.5.0",
103
+ "description": "A macro for declaring lazily evaluated statics in Rust.",
104
+ "scope": "required",
105
+ "hashes": [
106
+ {
107
+ "alg": "SHA-256",
108
+ "content": "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
109
+ }
110
+ ],
111
+ "licenses": [
112
+ {
113
+ "expression": "MIT OR Apache-2.0"
114
+ }
115
+ ],
116
+ "purl": "pkg:cargo/lazy_static@1.5.0",
117
+ "externalReferences": [
118
+ {
119
+ "type": "documentation",
120
+ "url": "https://docs.rs/lazy_static"
121
+ },
122
+ {
123
+ "type": "vcs",
124
+ "url": "https://github.com/rust-lang-nursery/lazy-static.rs"
125
+ }
126
+ ]
127
+ },
128
+ {
129
+ "type": "library",
130
+ "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#libc@0.2.175",
131
+ "author": "The Rust Project Developers",
132
+ "name": "libc",
133
+ "version": "0.2.175",
134
+ "description": "Raw FFI bindings to platform libraries like libc.",
135
+ "scope": "required",
136
+ "hashes": [
137
+ {
138
+ "alg": "SHA-256",
139
+ "content": "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543"
140
+ }
141
+ ],
142
+ "licenses": [
143
+ {
144
+ "expression": "MIT OR Apache-2.0"
145
+ }
146
+ ],
147
+ "purl": "pkg:cargo/libc@0.2.175",
148
+ "externalReferences": [
149
+ {
150
+ "type": "vcs",
151
+ "url": "https://github.com/rust-lang/libc"
152
+ }
153
+ ]
154
+ },
155
+ {
156
+ "type": "library",
157
+ "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#once_cell@1.21.3",
158
+ "author": "Aleksey Kladov <aleksey.kladov@gmail.com>",
159
+ "name": "once_cell",
160
+ "version": "1.21.3",
161
+ "description": "Single assignment cells and lazy values.",
162
+ "scope": "required",
163
+ "hashes": [
164
+ {
165
+ "alg": "SHA-256",
166
+ "content": "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
167
+ }
168
+ ],
169
+ "licenses": [
170
+ {
171
+ "expression": "MIT OR Apache-2.0"
172
+ }
173
+ ],
174
+ "purl": "pkg:cargo/once_cell@1.21.3",
175
+ "externalReferences": [
176
+ {
177
+ "type": "documentation",
178
+ "url": "https://docs.rs/once_cell"
179
+ },
180
+ {
181
+ "type": "vcs",
182
+ "url": "https://github.com/matklad/once_cell"
183
+ }
184
+ ]
185
+ },
186
+ {
187
+ "type": "library",
188
+ "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#parse-dockerfile@0.1.8",
189
+ "name": "parse-dockerfile",
190
+ "version": "0.1.8",
191
+ "description": "Dockerfile parser, written in Rust. ",
192
+ "scope": "required",
193
+ "hashes": [
194
+ {
195
+ "alg": "SHA-256",
196
+ "content": "b6bf36e89d16b0fcc540dfe420c99d692c703c436f1ea605195bc0a95651d69e"
197
+ }
198
+ ],
199
+ "licenses": [
200
+ {
201
+ "expression": "Apache-2.0 OR MIT"
202
+ }
203
+ ],
204
+ "purl": "pkg:cargo/parse-dockerfile@0.1.8",
205
+ "externalReferences": [
206
+ {
207
+ "type": "vcs",
208
+ "url": "https://github.com/taiki-e/parse-dockerfile"
209
+ }
210
+ ]
211
+ },
212
+ {
213
+ "type": "library",
214
+ "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.97",
215
+ "author": "David Tolnay <dtolnay@gmail.com>, Alex Crichton <alex@alexcrichton.com>",
216
+ "name": "proc-macro2",
217
+ "version": "1.0.97",
218
+ "description": "A substitute implementation of the compiler's `proc_macro` API to decouple token-based libraries from the procedural macro use case.",
219
+ "scope": "required",
220
+ "hashes": [
221
+ {
222
+ "alg": "SHA-256",
223
+ "content": "d61789d7719defeb74ea5fe81f2fdfdbd28a803847077cecce2ff14e1472f6f1"
224
+ }
225
+ ],
226
+ "licenses": [
227
+ {
228
+ "expression": "MIT OR Apache-2.0"
229
+ }
230
+ ],
231
+ "purl": "pkg:cargo/proc-macro2@1.0.97",
232
+ "externalReferences": [
233
+ {
234
+ "type": "documentation",
235
+ "url": "https://docs.rs/proc-macro2"
236
+ },
237
+ {
238
+ "type": "vcs",
239
+ "url": "https://github.com/dtolnay/proc-macro2"
240
+ }
241
+ ]
242
+ },
243
+ {
244
+ "type": "library",
245
+ "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#pyo3-build-config@0.29.3",
246
+ "author": "PyO3 Project and Contributors <https://github.com/PyO3>",
247
+ "name": "pyo3-build-config",
248
+ "version": "0.29.3",
249
+ "description": "Build configuration for the PyO3 ecosystem",
250
+ "scope": "excluded",
251
+ "hashes": [
252
+ {
253
+ "alg": "SHA-256",
254
+ "content": "7b3fc0c4d08f6bb10e71fe39dfb9e2f59c6eb6854e22ec8092f50c69a4499adb"
255
+ }
256
+ ],
257
+ "licenses": [
258
+ {
259
+ "expression": "MIT OR Apache-2.0"
260
+ }
261
+ ],
262
+ "purl": "pkg:cargo/pyo3-build-config@0.29.3",
263
+ "externalReferences": [
264
+ {
265
+ "type": "website",
266
+ "url": "https://github.com/pyo3/pyo3"
267
+ },
268
+ {
269
+ "type": "vcs",
270
+ "url": "https://github.com/pyo3/pyo3"
271
+ }
272
+ ]
273
+ },
274
+ {
275
+ "type": "library",
276
+ "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#pyo3-ffi@0.29.3",
277
+ "author": "PyO3 Project and Contributors <https://github.com/PyO3>",
278
+ "name": "pyo3-ffi",
279
+ "version": "0.29.3",
280
+ "description": "Python-API bindings for the PyO3 ecosystem",
281
+ "scope": "required",
282
+ "hashes": [
283
+ {
284
+ "alg": "SHA-256",
285
+ "content": "dfc0b8e19df29aad7086cf977bb0c2a2f143e30567eb113e9cf72b62ca698330"
286
+ }
287
+ ],
288
+ "licenses": [
289
+ {
290
+ "expression": "MIT OR Apache-2.0"
291
+ }
292
+ ],
293
+ "purl": "pkg:cargo/pyo3-ffi@0.29.3",
294
+ "externalReferences": [
295
+ {
296
+ "type": "website",
297
+ "url": "https://github.com/pyo3/pyo3"
298
+ },
299
+ {
300
+ "type": "other",
301
+ "url": "python"
302
+ },
303
+ {
304
+ "type": "vcs",
305
+ "url": "https://github.com/pyo3/pyo3"
306
+ }
307
+ ]
308
+ },
309
+ {
310
+ "type": "library",
311
+ "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#pyo3-macros-backend@0.29.3",
312
+ "author": "PyO3 Project and Contributors <https://github.com/PyO3>",
313
+ "name": "pyo3-macros-backend",
314
+ "version": "0.29.3",
315
+ "description": "Code generation for PyO3 package",
316
+ "scope": "required",
317
+ "hashes": [
318
+ {
319
+ "alg": "SHA-256",
320
+ "content": "6143877a16e82b5a727b7127ff4cd86858a24a28d745d72f43e6f227c7b1bdb3"
321
+ }
322
+ ],
323
+ "licenses": [
324
+ {
325
+ "expression": "MIT OR Apache-2.0"
326
+ }
327
+ ],
328
+ "purl": "pkg:cargo/pyo3-macros-backend@0.29.3",
329
+ "externalReferences": [
330
+ {
331
+ "type": "website",
332
+ "url": "https://github.com/pyo3/pyo3"
333
+ },
334
+ {
335
+ "type": "vcs",
336
+ "url": "https://github.com/pyo3/pyo3"
337
+ }
338
+ ]
339
+ },
340
+ {
341
+ "type": "library",
342
+ "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#pyo3-macros@0.29.3",
343
+ "author": "PyO3 Project and Contributors <https://github.com/PyO3>",
344
+ "name": "pyo3-macros",
345
+ "version": "0.29.3",
346
+ "description": "Proc macros for PyO3 package",
347
+ "scope": "required",
348
+ "hashes": [
349
+ {
350
+ "alg": "SHA-256",
351
+ "content": "6100e8a4b5eba53afaa5ed078364851a0b2499c553a44c31026b929049b49dc6"
352
+ }
353
+ ],
354
+ "licenses": [
355
+ {
356
+ "expression": "MIT OR Apache-2.0"
357
+ }
358
+ ],
359
+ "purl": "pkg:cargo/pyo3-macros@0.29.3",
360
+ "externalReferences": [
361
+ {
362
+ "type": "website",
363
+ "url": "https://github.com/pyo3/pyo3"
364
+ },
365
+ {
366
+ "type": "vcs",
367
+ "url": "https://github.com/pyo3/pyo3"
368
+ }
369
+ ]
370
+ },
371
+ {
372
+ "type": "library",
373
+ "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#pyo3@0.29.3",
374
+ "author": "PyO3 Project and Contributors <https://github.com/PyO3>",
375
+ "name": "pyo3",
376
+ "version": "0.29.3",
377
+ "description": "Bindings to Python interpreter",
378
+ "scope": "required",
379
+ "hashes": [
380
+ {
381
+ "alg": "SHA-256",
382
+ "content": "700d18fa267b73b9b521fd7e13580e2f446916f176cacee1ab63fcc8191f1655"
383
+ }
384
+ ],
385
+ "licenses": [
386
+ {
387
+ "expression": "MIT OR Apache-2.0"
388
+ }
389
+ ],
390
+ "purl": "pkg:cargo/pyo3@0.29.3",
391
+ "externalReferences": [
392
+ {
393
+ "type": "documentation",
394
+ "url": "https://docs.rs/crate/pyo3/"
395
+ },
396
+ {
397
+ "type": "website",
398
+ "url": "https://github.com/pyo3/pyo3"
399
+ },
400
+ {
401
+ "type": "other",
402
+ "url": "pyo3-python"
403
+ },
404
+ {
405
+ "type": "vcs",
406
+ "url": "https://github.com/pyo3/pyo3"
407
+ }
408
+ ]
409
+ },
410
+ {
411
+ "type": "library",
412
+ "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.40",
413
+ "author": "David Tolnay <dtolnay@gmail.com>",
414
+ "name": "quote",
415
+ "version": "1.0.40",
416
+ "description": "Quasi-quoting macro quote!(...)",
417
+ "scope": "required",
418
+ "hashes": [
419
+ {
420
+ "alg": "SHA-256",
421
+ "content": "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
422
+ }
423
+ ],
424
+ "licenses": [
425
+ {
426
+ "expression": "MIT OR Apache-2.0"
427
+ }
428
+ ],
429
+ "purl": "pkg:cargo/quote@1.0.40",
430
+ "externalReferences": [
431
+ {
432
+ "type": "documentation",
433
+ "url": "https://docs.rs/quote/"
434
+ },
435
+ {
436
+ "type": "vcs",
437
+ "url": "https://github.com/dtolnay/quote"
438
+ }
439
+ ]
440
+ },
441
+ {
442
+ "type": "library",
443
+ "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#regex-automata@0.4.9",
444
+ "author": "The Rust Project Developers, Andrew Gallant <jamslam@gmail.com>",
445
+ "name": "regex-automata",
446
+ "version": "0.4.9",
447
+ "description": "Automata construction and matching using regular expressions.",
448
+ "scope": "required",
449
+ "hashes": [
450
+ {
451
+ "alg": "SHA-256",
452
+ "content": "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
453
+ }
454
+ ],
455
+ "licenses": [
456
+ {
457
+ "expression": "MIT OR Apache-2.0"
458
+ }
459
+ ],
460
+ "purl": "pkg:cargo/regex-automata@0.4.9",
461
+ "externalReferences": [
462
+ {
463
+ "type": "documentation",
464
+ "url": "https://docs.rs/regex-automata"
465
+ },
466
+ {
467
+ "type": "vcs",
468
+ "url": "https://github.com/rust-lang/regex/tree/master/regex-automata"
469
+ }
470
+ ]
471
+ },
472
+ {
473
+ "type": "library",
474
+ "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#regex-syntax@0.8.5",
475
+ "author": "The Rust Project Developers, Andrew Gallant <jamslam@gmail.com>",
476
+ "name": "regex-syntax",
477
+ "version": "0.8.5",
478
+ "description": "A regular expression parser.",
479
+ "scope": "required",
480
+ "hashes": [
481
+ {
482
+ "alg": "SHA-256",
483
+ "content": "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
484
+ }
485
+ ],
486
+ "licenses": [
487
+ {
488
+ "expression": "MIT OR Apache-2.0"
489
+ }
490
+ ],
491
+ "purl": "pkg:cargo/regex-syntax@0.8.5",
492
+ "externalReferences": [
493
+ {
494
+ "type": "documentation",
495
+ "url": "https://docs.rs/regex-syntax"
496
+ },
497
+ {
498
+ "type": "vcs",
499
+ "url": "https://github.com/rust-lang/regex/tree/master/regex-syntax"
500
+ }
501
+ ]
502
+ },
503
+ {
504
+ "type": "library",
505
+ "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#regex@1.11.1",
506
+ "author": "The Rust Project Developers, Andrew Gallant <jamslam@gmail.com>",
507
+ "name": "regex",
508
+ "version": "1.11.1",
509
+ "description": "An implementation of regular expressions for Rust. This implementation uses finite automata and guarantees linear time matching on all inputs. ",
510
+ "scope": "required",
511
+ "hashes": [
512
+ {
513
+ "alg": "SHA-256",
514
+ "content": "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
515
+ }
516
+ ],
517
+ "licenses": [
518
+ {
519
+ "expression": "MIT OR Apache-2.0"
520
+ }
521
+ ],
522
+ "purl": "pkg:cargo/regex@1.11.1",
523
+ "externalReferences": [
524
+ {
525
+ "type": "documentation",
526
+ "url": "https://docs.rs/regex"
527
+ },
528
+ {
529
+ "type": "website",
530
+ "url": "https://github.com/rust-lang/regex"
531
+ },
532
+ {
533
+ "type": "vcs",
534
+ "url": "https://github.com/rust-lang/regex"
535
+ }
536
+ ]
537
+ },
538
+ {
539
+ "type": "library",
540
+ "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#shlex@2.0.1",
541
+ "author": "comex <comexk@gmail.com>, Fenhl <fenhl@fenhl.net>, Adrian Taylor <adetaylor@chromium.org>, Alex Touchet <alextouchet@outlook.com>, Daniel Parks <dp+git@oxidized.org>, Garrett Berg <googberg@gmail.com>",
542
+ "name": "shlex",
543
+ "version": "2.0.1",
544
+ "description": "Split a string into shell words, like Python's shlex.",
545
+ "scope": "required",
546
+ "hashes": [
547
+ {
548
+ "alg": "SHA-256",
549
+ "content": "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba"
550
+ }
551
+ ],
552
+ "licenses": [
553
+ {
554
+ "expression": "MIT OR Apache-2.0"
555
+ }
556
+ ],
557
+ "purl": "pkg:cargo/shlex@2.0.1",
558
+ "externalReferences": [
559
+ {
560
+ "type": "vcs",
561
+ "url": "https://github.com/comex/rust-shlex"
562
+ }
563
+ ]
564
+ },
565
+ {
566
+ "type": "library",
567
+ "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#smallvec@1.15.1",
568
+ "author": "The Servo Project Developers",
569
+ "name": "smallvec",
570
+ "version": "1.15.1",
571
+ "description": "'Small vector' optimization: store up to a small number of items on the stack",
572
+ "scope": "required",
573
+ "hashes": [
574
+ {
575
+ "alg": "SHA-256",
576
+ "content": "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
577
+ }
578
+ ],
579
+ "licenses": [
580
+ {
581
+ "expression": "MIT OR Apache-2.0"
582
+ }
583
+ ],
584
+ "purl": "pkg:cargo/smallvec@1.15.1",
585
+ "externalReferences": [
586
+ {
587
+ "type": "documentation",
588
+ "url": "https://docs.rs/smallvec/"
589
+ },
590
+ {
591
+ "type": "vcs",
592
+ "url": "https://github.com/servo/rust-smallvec"
593
+ }
594
+ ]
595
+ },
596
+ {
597
+ "type": "library",
598
+ "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.105",
599
+ "author": "David Tolnay <dtolnay@gmail.com>",
600
+ "name": "syn",
601
+ "version": "2.0.105",
602
+ "description": "Parser for Rust source code",
603
+ "scope": "required",
604
+ "hashes": [
605
+ {
606
+ "alg": "SHA-256",
607
+ "content": "7bc3fcb250e53458e712715cf74285c1f889686520d79294a9ef3bd7aa1fc619"
608
+ }
609
+ ],
610
+ "licenses": [
611
+ {
612
+ "expression": "MIT OR Apache-2.0"
613
+ }
614
+ ],
615
+ "purl": "pkg:cargo/syn@2.0.105",
616
+ "externalReferences": [
617
+ {
618
+ "type": "documentation",
619
+ "url": "https://docs.rs/syn"
620
+ },
621
+ {
622
+ "type": "vcs",
623
+ "url": "https://github.com/dtolnay/syn"
624
+ }
625
+ ]
626
+ },
627
+ {
628
+ "type": "library",
629
+ "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#target-lexicon@0.13.4",
630
+ "author": "Dan Gohman <sunfish@mozilla.com>",
631
+ "name": "target-lexicon",
632
+ "version": "0.13.4",
633
+ "description": "LLVM target triple types",
634
+ "scope": "excluded",
635
+ "hashes": [
636
+ {
637
+ "alg": "SHA-256",
638
+ "content": "b1dd07eb858a2067e2f3c7155d54e929265c264e6f37efe3ee7a8d1b5a1dd0ba"
639
+ }
640
+ ],
641
+ "licenses": [
642
+ {
643
+ "expression": "Apache-2.0 WITH LLVM-exception"
644
+ }
645
+ ],
646
+ "purl": "pkg:cargo/target-lexicon@0.13.4",
647
+ "externalReferences": [
648
+ {
649
+ "type": "documentation",
650
+ "url": "https://docs.rs/target-lexicon/"
651
+ },
652
+ {
653
+ "type": "vcs",
654
+ "url": "https://github.com/bytecodealliance/target-lexicon"
655
+ }
656
+ ]
657
+ },
658
+ {
659
+ "type": "library",
660
+ "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#unicode-ident@1.0.18",
661
+ "author": "David Tolnay <dtolnay@gmail.com>",
662
+ "name": "unicode-ident",
663
+ "version": "1.0.18",
664
+ "description": "Determine whether characters have the XID_Start or XID_Continue properties according to Unicode Standard Annex #31",
665
+ "scope": "required",
666
+ "hashes": [
667
+ {
668
+ "alg": "SHA-256",
669
+ "content": "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
670
+ }
671
+ ],
672
+ "licenses": [
673
+ {
674
+ "expression": "(MIT OR Apache-2.0) AND Unicode-3.0"
675
+ }
676
+ ],
677
+ "purl": "pkg:cargo/unicode-ident@1.0.18",
678
+ "externalReferences": [
679
+ {
680
+ "type": "documentation",
681
+ "url": "https://docs.rs/unicode-ident"
682
+ },
683
+ {
684
+ "type": "vcs",
685
+ "url": "https://github.com/dtolnay/unicode-ident"
686
+ }
687
+ ]
688
+ }
689
+ ],
690
+ "dependencies": [
691
+ {
692
+ "ref": "path+file:///D:/a/dockerfile-analyzer/dockerfile-analyzer#0.4.2",
693
+ "dependsOn": [
694
+ "registry+https://github.com/rust-lang/crates.io-index#docker-image@0.2.1",
695
+ "registry+https://github.com/rust-lang/crates.io-index#parse-dockerfile@0.1.8",
696
+ "registry+https://github.com/rust-lang/crates.io-index#pyo3@0.29.3",
697
+ "registry+https://github.com/rust-lang/crates.io-index#shlex@2.0.1"
698
+ ]
699
+ },
700
+ {
701
+ "ref": "registry+https://github.com/rust-lang/crates.io-index#docker-image@0.2.1",
702
+ "dependsOn": [
703
+ "registry+https://github.com/rust-lang/crates.io-index#lazy_static@1.5.0",
704
+ "registry+https://github.com/rust-lang/crates.io-index#regex@1.11.1"
705
+ ]
706
+ },
707
+ {
708
+ "ref": "registry+https://github.com/rust-lang/crates.io-index#heck@0.5.0"
709
+ },
710
+ {
711
+ "ref": "registry+https://github.com/rust-lang/crates.io-index#lazy_static@1.5.0"
712
+ },
713
+ {
714
+ "ref": "registry+https://github.com/rust-lang/crates.io-index#libc@0.2.175"
715
+ },
716
+ {
717
+ "ref": "registry+https://github.com/rust-lang/crates.io-index#once_cell@1.21.3"
718
+ },
719
+ {
720
+ "ref": "registry+https://github.com/rust-lang/crates.io-index#parse-dockerfile@0.1.8",
721
+ "dependsOn": [
722
+ "registry+https://github.com/rust-lang/crates.io-index#smallvec@1.15.1"
723
+ ]
724
+ },
725
+ {
726
+ "ref": "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.97",
727
+ "dependsOn": [
728
+ "registry+https://github.com/rust-lang/crates.io-index#unicode-ident@1.0.18"
729
+ ]
730
+ },
731
+ {
732
+ "ref": "registry+https://github.com/rust-lang/crates.io-index#pyo3-build-config@0.29.3",
733
+ "dependsOn": [
734
+ "registry+https://github.com/rust-lang/crates.io-index#target-lexicon@0.13.4"
735
+ ]
736
+ },
737
+ {
738
+ "ref": "registry+https://github.com/rust-lang/crates.io-index#pyo3-ffi@0.29.3",
739
+ "dependsOn": [
740
+ "registry+https://github.com/rust-lang/crates.io-index#libc@0.2.175",
741
+ "registry+https://github.com/rust-lang/crates.io-index#pyo3-build-config@0.29.3"
742
+ ]
743
+ },
744
+ {
745
+ "ref": "registry+https://github.com/rust-lang/crates.io-index#pyo3-macros-backend@0.29.3",
746
+ "dependsOn": [
747
+ "registry+https://github.com/rust-lang/crates.io-index#heck@0.5.0",
748
+ "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.97",
749
+ "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.40",
750
+ "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.105"
751
+ ]
752
+ },
753
+ {
754
+ "ref": "registry+https://github.com/rust-lang/crates.io-index#pyo3-macros@0.29.3",
755
+ "dependsOn": [
756
+ "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.97",
757
+ "registry+https://github.com/rust-lang/crates.io-index#pyo3-macros-backend@0.29.3",
758
+ "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.40",
759
+ "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.105"
760
+ ]
761
+ },
762
+ {
763
+ "ref": "registry+https://github.com/rust-lang/crates.io-index#pyo3@0.29.3",
764
+ "dependsOn": [
765
+ "registry+https://github.com/rust-lang/crates.io-index#libc@0.2.175",
766
+ "registry+https://github.com/rust-lang/crates.io-index#once_cell@1.21.3",
767
+ "registry+https://github.com/rust-lang/crates.io-index#pyo3-build-config@0.29.3",
768
+ "registry+https://github.com/rust-lang/crates.io-index#pyo3-ffi@0.29.3",
769
+ "registry+https://github.com/rust-lang/crates.io-index#pyo3-macros@0.29.3"
770
+ ]
771
+ },
772
+ {
773
+ "ref": "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.40",
774
+ "dependsOn": [
775
+ "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.97"
776
+ ]
777
+ },
778
+ {
779
+ "ref": "registry+https://github.com/rust-lang/crates.io-index#regex-automata@0.4.9",
780
+ "dependsOn": [
781
+ "registry+https://github.com/rust-lang/crates.io-index#regex-syntax@0.8.5"
782
+ ]
783
+ },
784
+ {
785
+ "ref": "registry+https://github.com/rust-lang/crates.io-index#regex-syntax@0.8.5"
786
+ },
787
+ {
788
+ "ref": "registry+https://github.com/rust-lang/crates.io-index#regex@1.11.1",
789
+ "dependsOn": [
790
+ "registry+https://github.com/rust-lang/crates.io-index#regex-automata@0.4.9",
791
+ "registry+https://github.com/rust-lang/crates.io-index#regex-syntax@0.8.5"
792
+ ]
793
+ },
794
+ {
795
+ "ref": "registry+https://github.com/rust-lang/crates.io-index#shlex@2.0.1"
796
+ },
797
+ {
798
+ "ref": "registry+https://github.com/rust-lang/crates.io-index#smallvec@1.15.1"
799
+ },
800
+ {
801
+ "ref": "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.105",
802
+ "dependsOn": [
803
+ "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.97",
804
+ "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.40",
805
+ "registry+https://github.com/rust-lang/crates.io-index#unicode-ident@1.0.18"
806
+ ]
807
+ },
808
+ {
809
+ "ref": "registry+https://github.com/rust-lang/crates.io-index#target-lexicon@0.13.4"
810
+ },
811
+ {
812
+ "ref": "registry+https://github.com/rust-lang/crates.io-index#unicode-ident@1.0.18"
813
+ }
814
+ ]
815
+ }