difftreelog
feat jrb
in: master
11 files changed
Cargo.lockdiffbeforeafterboth255 packageslockfile v4
Might be heavy and slow!
ahash
0.8.12crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75used byaho-corasick
1.1.4crates.io↘ 1↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301depends onaliasable
0.1.3crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fdused byalloca
0.4.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume5a7d05ea6aea7e9e64d25b9156ba2fee3fdd659e34e41063cd2fc7cd020d7f4depends onused byallocator-api2
0.2.21crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923anes
0.1.6crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299used byannotate-snippets
0.12.15crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum92570a3f9c98e7e84df84b71d0965ac99b1871fcd75a3773a3bd1bad13f64cf7used byannotated-string
0.3.0crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum298ed730801db3c02f2edba003c9420a0f57ea48d37fdc5601c536113668c059used byanstream
1.0.0crates.io↘ 7↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28ddepends onused byanstyle
1.0.14crates.io↘ 0↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000anstyle-parse
1.0.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130edepends onused byanstyle-query
1.1.5crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadcdepends onused byanstyle-wincon
3.0.11crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747dused byanyhow
1.0.102crates.io↘ 0↖ 10sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842car_archive_writer
0.5.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7eb93bbb63b9c227414f6eb3a0adfddca591a8ce1e9b60661bb08969b87e340bdepends onused byarraydeque
0.5.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7d902e3d592a523def97af8f317b08ce16b7ab854c1985a0c671e6f15cebc236used byautocfg
1.5.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8used bybase64
0.22.1crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6bitflags
2.11.1crates.io↘ 0↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3block-buffer
0.12.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumcdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790bedepends onused bybstr
1.12.1crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cabdepends onused bybumpalo
3.20.2crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcbdepends oncast
0.3.0crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5cc
1.2.61crates.io↘ 2↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd16d90359e986641506914ba71350897565610e87ce0ad9e6f28569db3dd5c6ddepends oncfg_aliases
0.2.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724used bycfg-if
1.0.4crates.io↘ 0↖ 13sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801ciborium
0.2.2crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0eused byciborium-io
0.2.2crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757ciborium-ll
0.2.2crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9depends onused byclap
4.6.1crates.io↘ 2↖ 7sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51depends onclap_builder
4.6.0crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069fused byclap_complete
4.6.3crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum660c0520455b1013b9bcb0393d5f643d7e4454fb69c915b8d6d2aa0e9a45acc3depends onused byclap_derive
4.6.1crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9used byclap_lex
1.1.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9used bycolorchoice
1.0.5crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570used byconsole
0.16.3crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd64e8af5551369d19cf50138de61f1c42074ab970f74e99be916646777f8fc87used byconsole_error_panic_hook
0.1.7crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbcdepends onused byconst-oid
0.10.2crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55cused bycountme
3.0.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7704b5fdd17b18ae31c4c1da5a2e0305a2bf17b5249300a9ee9ed7b72114c636used bycpufeatures
0.3.0crates.io↘ 1↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201depends oncriterion
0.8.2crates.io↘ 17↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum950046b2aa2492f9a536f5f4f9a3de7b9e2476e575e05bd6c333371add4d98f3depends onused bycriterion-plot
0.8.2crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd8d80a2f4f5b554395e47b5d8305bc3d27813bacb73493eb1001e8f76dae29eadepends onused bycrossbeam-deque
0.8.6crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51used bycrossbeam-epoch
0.9.18crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420edepends onused bycrossbeam-utils
0.8.21crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28crypto-common
0.2.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum77727bb15fa921304124b128af125e7e3b968275d1b108b379190264f4423710depends onused bydigest
0.11.3crates.io↘ 3↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2displaydoc
0.2.5crates.io↘ 3↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0depends ondprint-core
0.67.4crates.io↘ 7↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2c1d827947704a9495f705d6aeed270fa21a67f825f22902c28f38dc3af7a9aedepends ondrop_bomb
0.1.5crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9bda8e21c04aca2ae33ffc2fd8c23134f3cac46db123ba97bd9d3f3b8a4a85e1educe
0.6.0crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1d7bc049e1bd8cdeb31b68bbd586a9464ecf9f3944af3958a7a9d0f8b9799417either
1.15.0crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719encode_unicode
1.0.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0used byencoding_rs
0.8.35crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3depends onused byencoding_rs_io
0.1.7crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1cc3c5651fb62ab8aa3103998dade57efdd028544bd300516baa31840c252a83depends onused byenum-ordinalize
4.3.2crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4a1091a7bb1f8f2c4b28f1fe2cef4980ca2d410a3d727d67ecc3178c9b0800f0depends onused byenum-ordinalize-derive
4.3.2crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8ca9601fb2d62598ee17836250842873a413586e5d7ed88b356e38ddbb0ec631depends onused byequivalent
1.0.2crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0ferrno
0.3.14crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efebdepends onused byextension-trait
1.0.2crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdd65f1b59dd22d680c7a626cc4a000c1e03d241c51c3e034d2bc9f1e90734f9bdepends onused byfastrand
2.4.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6used byfind-msvc-tools
0.1.9crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582used byfnv
1.0.7crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1used byfoldhash
0.1.5crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2used byfoldhash
0.2.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdbused byform_urlencoded
1.2.2crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumcb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcfdepends onused bygetrandom
0.3.4crates.io↘ 6↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fdgetrandom
0.4.2crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555depends onused byglobset
0.4.18crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum52dfc19153a48bde0cbd630453615c8151bce3a5adfac7a0aebfbf0a1e1f57e3used bygranit-parser
0.0.2crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb7e736dfe3881c53a7dce0685eb18202d0d9fe6911782f9870946eb9ee89d778depends onused byhalf
2.7.1crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84bdepends onused byhashbrown
0.14.5crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1used byhashbrown
0.15.5crates.io↘ 3↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1hashbrown
0.17.0crates.io↘ 3↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51heck
0.4.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8used byheck
0.5.0crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55eahex
0.4.3crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70used byhi-doc
0.3.0crates.io↘ 9↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf70fb920ba34768415fb239d7d607486083bfc38ad35e3f1d558697f9f646f11depends onhi-doc-jumprope
1.2.1crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum236c25809a9c0a0249b3488feb57744e12aa64e4f3db851980eab303719c7bdddepends onused byhybrid-array
0.4.11crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum08d46837a0ed51fe95bd3b05de33cd64a1ee88fc797477ca48446872504507c5depends onicu_collections
2.2.0crates.io↘ 6↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191cicu_locale_core
2.2.0crates.io↘ 5↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29icu_normalizer
2.2.0crates.io↘ 6↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4depends onused byicu_normalizer_data
2.2.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumda3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38used byicu_properties
2.2.0crates.io↘ 6↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumbee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70dedepends onicu_properties_data
2.2.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14used byicu_provider
2.2.0crates.io↘ 7↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421depends onid-arena
2.3.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954used byidna
1.1.0crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4deused byidna_adapter
1.2.2crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumcb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714depends onused byindexmap
2.14.0crates.io↘ 4↖ 7sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9indoc
2.0.7crates.io↘ 1↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706depends oninsta
1.47.2crates.io↘ 6↖ 7sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7b4a6248eb93a4401ed2f37dfe8ea592d3cf05b7cf4f8efa867b6895af7e094eis_terminal_polyfill
1.70.2crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695used byitertools
0.13.0crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186depends onitertools
0.14.0crates.io↘ 1↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285depends onitoa
1.0.18crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682used byjrsonnet-cli
0.5.0-pre98workspace↘ 5↖ 2jrsonnet-deps
0.5.0-pre98workspace↘ 5↖ 0jrsonnet-evaluator
0.5.0-pre98workspace↘ 24↖ 7depends on- anyhow
1.0.102 - drop_bomb
0.1.5 - educe
0.6.0 - hi-doc
0.3.0 - insta
1.47.2 - jrsonnet-gcmodule
0.5.0 - jrsonnet-interner
0.5.0-pre98 - jrsonnet-ir
0.5.0-pre98 - jrsonnet-ir-parser
0.5.0-pre98 - jrsonnet-macros
0.5.0-pre98 - jrsonnet-peg-parser
0.5.0-pre98 - jrsonnet-types
0.5.0-pre98 - num-bigint
0.4.6 - pathdiff
0.2.3 - rustc-hash
2.1.2 - rustversion
1.0.22 - serde
1.0.228 - smallvec
1.15.1 - stacker
0.1.24 - static_assertions
1.1.0 - strip-ansi-escapes
0.2.1 - strsim
0.11.1 - thiserror
2.0.18 - wasm-bindgen
0.2.106
- anyhow
jrsonnet-fmt
0.5.0-pre98workspace↘ 6↖ 0jrsonnet-formatter
0.5.0-pre98workspace↘ 6↖ 2jrsonnet-gcmodule
0.5.0crates.io↘ 1↖ 12sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf65a6fdef5568ea2e3459dcad15979d7613f968cbacf722e1138ffe83d28ee24depends onjrsonnet-gcmodule-derive
0.5.0crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum829a23aa96f1afb78bbc9722e323ced7a0b75d9b89cec6bfbc709cf484e8a0a4depends onused byjrsonnet-interner
0.5.0-pre98workspace↘ 3↖ 3jrsonnet-ir
0.5.0-pre98workspace↘ 7↖ 7depends onjrsonnet-ir-parser
0.5.0-pre98workspace↘ 4↖ 2jrsonnet-lexer
0.5.0-pre98workspace↘ 1↖ 3jrsonnet-macros
0.5.0-pre98workspace↘ 4↖ 2jrsonnet-peg-parser
0.5.0-pre98workspace↘ 4↖ 1jrsonnet-rowan-parser
0.5.0-pre98workspace↘ 9↖ 1jrsonnet-stdlib
0.5.0-pre98workspace↘ 16↖ 4depends onjrsonnet-types
0.5.0-pre98workspace↘ 2↖ 2jrsonnet-web
0.5.0-pre98workspace↘ 13↖ 0js-sys
0.3.83crates.io↘ 2↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8depends onkeccak
0.2.0crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9e24a010dd405bd7ed803e5253182815b41bf2e6a80cc3bfc066658e03a198aadepends onused byleb128fmt
0.1.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2used bylibc
0.2.186crates.io↘ 0↖ 10sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66libjsonnet
0.5.0-pre98workspace↘ 5↖ 0linux-raw-sys
0.12.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53used bylitemap
0.8.2crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0used bylog
0.4.29crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897logos
0.16.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumeb2c55a318a87600ea870ff8c2012148b44bf18b74fad48d0f835c38c7d07c5fdepends onused bylogos-codegen
0.16.1crates.io↘ 6↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum58b3ffaa284e1350d017a57d04ada118c4583cf260c8fb01e0fe28a2e9cf8970used bylogos-derive
0.16.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum52d3a9855747c17eaf4383823f135220716ab49bea5fbea7dd42cc9a92f8aa31depends onused bylru
0.18.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8a860605968fce16869fd239cf4237a82f3ac470723415db603b0e8b6c8d4fb9depends onused bymd5
0.8.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumae960838283323069879657ca3de837e9f7bbb4c7bf6ea7f1b290d5e9476d2e0used bymemchr
2.8.0crates.io↘ 0↖ 8sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79mimalloc-sys
0.1.6crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4aa3cefb626f6ae3d0b2f71c5378c89d2b1d4d7bc246b0ca9a7ee61a4daad291depends onused bymimallocator
0.1.3crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2d44fe4ebf6b538fcf39d9975c2b90bb3232d1ba8e8bffeacd004f27b20c577adepends onnix
0.31.2crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5d6d0705320c1e6ba1d912b5e37cf18071b6c2e9b7fa8215a1e8a7651966f5d3used bynum-bigint
0.4.6crates.io↘ 3↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9num-integer
0.1.46crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858fdepends onused bynum-traits
0.2.19crates.io↘ 1↖ 7sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841depends onobject
0.37.3crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fedepends onused byonce_cell
1.21.4crates.io↘ 0↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50once_cell_polyfill
1.70.2crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4feused byoorandom
11.1.5crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41eused byouroboros
0.18.5crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1e0f050db9c44b97a94723127e6be766ac5c340c48f2c4bb3ffa11713744be59used byouroboros_macro
0.18.5crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3c7028bdd3d43083f6d8d4d5187680d0d3560d54df4cc9d752005268b41e64d0used bypage_size
0.6.0crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum30d5b2194ed13191c1999ae0704b7839fb18384fa22e49b57eeaa97d79ce40dadepends onused bypathdiff
0.2.3crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdf94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3peg
0.8.6crates.io↘ 2↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0aad070be5b63aa72103f2fcdd70a83adbd5e90112ce5b574171ff1c65501773depends onpeg-macros
0.8.6crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumddd8ef6825cae95355031ae26a99b616a2a21f22ba2de0197c43dfb05acbe7eeused bypeg-runtime
0.8.6crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7011d97b484a5ebdc4b1fdb3b12d5e4bbbea56e9d22b688f2e79e04b65a7d8a6used bypercent-encoding
2.3.2crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220used byplotters
0.3.7crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5aeb6f403d7a4911efb1e33402027fc44f29b5bf6def3effcc22d7bb75f2b747used byplotters-backend
0.3.7crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdf42e13c12958a16b3f7f4386b9ab1f3e7933914ecea48da7139435263a4172aplotters-svg
0.3.7crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum51bae2ac328883f7acdfea3d66a7c35751187f870bc81f94563733a154d7a670depends onused bypotential_utf
0.1.5crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564depends onused byppv-lite86
0.2.21crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9depends onused byprettyplease
0.2.37crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62bdepends onproc-macro2
1.0.106crates.io↘ 1↖ 25sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934depends onused by- clap_derive
4.6.1 - displaydoc
0.2.5 - educe
0.6.0 - enum-ordinalize-derive
4.3.2 - extension-trait
1.0.2 - jrsonnet-gcmodule-derive
0.5.0 - jrsonnet-macros
0.5.0-pre98 - logos-codegen
0.16.1 - ouroboros_macro
0.18.5 - peg-macros
0.8.6 - prettyplease
0.2.37 - proc-macro2-diagnostics
0.10.1 - quote
1.0.45 - serde_derive
1.0.228 - syn
2.0.117 - syn-dissect-closure
0.1.0 - synstructure
0.13.2 - thiserror-impl
2.0.18 - wasm-bindgen-macro-support
0.2.106 - wit-bindgen-rust-macro
0.51.0 - xtask
0.1.0 - yoke-derive
0.8.2 - zerocopy-derive
0.8.48 - zerofrom-derive
0.1.7 - zerovec-derive
0.11.3
- clap_derive
proc-macro2-diagnostics
0.10.1crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumaf066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8used bypsm
0.1.31crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum645dbe486e346d9b5de3ef16ede18c26e6c70ad97418f4874b8b1889d6e761eadepends onused byquote
1.0.45crates.io↘ 1↖ 24sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924depends onused by- clap_derive
4.6.1 - displaydoc
0.2.5 - educe
0.6.0 - enum-ordinalize-derive
4.3.2 - extension-trait
1.0.2 - jrsonnet-gcmodule-derive
0.5.0 - jrsonnet-macros
0.5.0-pre98 - logos-codegen
0.16.1 - ouroboros_macro
0.18.5 - peg-macros
0.8.6 - proc-macro2-diagnostics
0.10.1 - serde_derive
1.0.228 - syn
2.0.117 - syn-dissect-closure
0.1.0 - synstructure
0.13.2 - thiserror-impl
2.0.18 - wasm-bindgen-macro
0.2.106 - wasm-bindgen-macro-support
0.2.106 - wit-bindgen-rust-macro
0.51.0 - xtask
0.1.0 - yoke-derive
0.8.2 - zerocopy-derive
0.8.48 - zerofrom-derive
0.1.7 - zerovec-derive
0.11.3
- clap_derive
r-efi
5.3.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0fused byr-efi
6.0.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bfused byrand
0.9.4crates.io↘ 2↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76eadepends onrand_chacha
0.9.0crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cbdepends onused byrand_core
0.9.5crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83cdepends onused byrandom_color
1.1.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd635c5e80ae160390ac62ca027d2d06c94c1dc69e5c0a12f1e3a53664dc84966depends onused byrange-map
0.2.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum12a5a2d6c7039059af621472a4389be1215a816df61aa4d531cfe85264aee95fdepends onused byrayon
1.12.0crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumfb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926ddepends onused byrayon-core
1.13.0crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91used byregex
1.12.3crates.io↘ 4↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276regex-automata
0.4.14crates.io↘ 3↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8fregex-syntax
0.8.10crates.io↘ 0↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0arowan
0.16.1crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum417a3a9f582e349834051b8a10c8d71ca88da4211e4093528e36b9845f6b5f21rustc-hash
1.1.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2used byrustc-hash
2.1.2crates.io↘ 0↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dberustix
1.1.4crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190used byrustversion
1.0.22crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46dsame-file
1.0.6crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502depends onused bysemver
1.0.28crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cdserde
1.0.228crates.io↘ 2↖ 16sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9edepends onserde_core
1.0.228crates.io↘ 1↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67addepends onserde_derive
1.0.228crates.io↘ 3↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79depends onserde_json
1.0.149crates.io↘ 5↖ 7sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86serde-saphyr
0.0.26crates.io↘ 9↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdcc7fe48e34d02a97bc8e6253b8b91e5a47fe2c47eaacb5149cefbb69922eaf0depends onused bysha1
0.11.0crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumaacc4cc499359472b4abe1bf11d0b12e688af9a805fa5e3016f9a386dc2d0214depends onused bysha2
0.11.0crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4depends onused bysha3
0.11.0crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumbe176f1a57ce4e3d31c1a166222d9768de5954f811601fb7ca06fc8203905ce1depends onused bysimilar
2.7.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumbbbb5d9659141646ae647b42fe094daf6c6192d1620870b449d9557f748b2daaused bysmallvec
1.15.1crates.io↘ 0↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03stable_deref_trait
1.2.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596used bystacker
0.1.24crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum640c8cdd92b6b12f5bcb1803ca3bbf5ab96e5e6b6b96b9ab77dabe9e880b3190static_assertions
1.1.0crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543fstr_indices
0.4.4crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd08889ec5408683408db66ad89e0e1f93dff55c73a4ccc71c427d5b277ee47e6used bystrip-ansi-escapes
0.2.1crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2a8f8038e7e7969abb3f1b7c2a811225e9296da208539e0f79c5251d6cac0025depends onstrsim
0.11.1crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4fsyn
2.0.117crates.io↘ 3↖ 22sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99used by- clap_derive
4.6.1 - displaydoc
0.2.5 - educe
0.6.0 - enum-ordinalize-derive
4.3.2 - extension-trait
1.0.2 - jrsonnet-gcmodule-derive
0.5.0 - jrsonnet-macros
0.5.0-pre98 - logos-codegen
0.16.1 - ouroboros_macro
0.18.5 - prettyplease
0.2.37 - proc-macro2-diagnostics
0.10.1 - serde_derive
1.0.228 - syn-dissect-closure
0.1.0 - synstructure
0.13.2 - thiserror-impl
2.0.18 - wasm-bindgen-macro-support
0.2.106 - wit-bindgen-rust
0.51.0 - wit-bindgen-rust-macro
0.51.0 - yoke-derive
0.8.2 - zerocopy-derive
0.8.48 - zerofrom-derive
0.1.7 - zerovec-derive
0.11.3
- clap_derive
syn-dissect-closure
0.1.0crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum343bae741672e4b94421cbe93f9794ba9a061434272f7e3a29ff43be26be3ac9depends onused bysynstructure
0.13.2crates.io↘ 3↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2depends ontempfile
3.27.0crates.io↘ 5↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bdtext-size
1.1.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf18aa187839b2bdb1ad2fa35ead8c4c2976b64e4363c386d45ac0f7ee85c9233used bythiserror
2.0.18crates.io↘ 1↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4depends onthiserror-impl
2.0.18crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5depends onused bytinystr
0.8.3crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96ddepends onused bytinytemplate
1.2.1crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumbe4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bcdepends onused bytypenum
1.20.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43deused byungrammar
1.16.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma3e5df347f0bf3ec1d670aad6ca5c6a1859cd9ea61d2113125794654ccced68fused byunicode-box-drawing
0.3.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2a1f97719cf40224391201fc11e7f5b0cc0ba21416367cfc914e2d45af4e42efused byunicode-ident
1.0.24crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75unicode-width
0.2.2crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254unicode-xid
0.2.6crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853used byurl
2.5.8crates.io↘ 4↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eedutf8_iter
1.0.4crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6beutf8parse
0.2.2crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821version_check
0.9.5crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105avte
0.14.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum231fdcd7ef3037e8330d8e17e61011a2c244126acc0a982f4040ac3f9f0bc077depends onused bywalkdir
2.5.0crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4bdepends onused bywasip2
1.0.3+wasi-0.2.9crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6depends onused bywasip3
0.4.0+wasi-0.3.0-rc-2026-01-06crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5depends onused bywasm-bindgen
0.2.106crates.io↘ 5↖ 8sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fddepends onwasm-bindgen-futures
0.4.56crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum836d9622d604feee9e5de25ac10e3ea5f2d65b41eac0d9ce72eb5deae707ce7cused bywasm-bindgen-macro
0.2.106crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3used bywasm-bindgen-macro-support
0.2.106crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumcefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40used bywasm-encoder
0.244.0crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319depends onwasm-metadata
0.244.0crates.io↘ 4↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumbb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909wasmparser
0.244.0crates.io↘ 4↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028feweb-sys
0.3.83crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9b32828d774c412041098d182a8b38b16ea816958e07cf40eec2bc080ae137acdepends onwinapi
0.3.9crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419used bywinapi-i686-pc-windows-gnu
0.4.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6used bywinapi-util
0.1.11crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22depends onused bywinapi-x86_64-pc-windows-gnu
0.4.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183fused bywindows-link
0.2.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5used bywindows-sys
0.61.2crates.io↘ 1↖ 8sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fcdepends onwit-bindgen
0.51.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5depends onwit-bindgen
0.57.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536eused bywit-bindgen-core
0.51.0crates.io↘ 3↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dcdepends onwit-bindgen-rust
0.51.0crates.io↘ 8↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21depends onused bywit-bindgen-rust-macro
0.51.0crates.io↘ 7↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17adepends onused bywit-component
0.244.0crates.io↘ 11↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2depends onused bywit-parser
0.244.0crates.io↘ 10↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736depends onwriteable
0.6.3crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4xshell
0.2.7crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9e7290c623014758632efe00737145b6867b66292c42167f2ec381eb566a373ddepends onused byxshell-macros
0.2.7crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum32ac00cd3f8ec9c1d33fb3e7958a82df6989c42d747bd326c822b1d625283547used byxtask
0.1.0workspace↘ 9↖ 0yansi
1.0.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumcfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049yoke
0.8.2crates.io↘ 3↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumabe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9cayoke-derive
0.8.2crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumde844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858eused byzerocopy
0.8.48crates.io↘ 1↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumeed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9depends onzerocopy-derive
0.8.48crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4depends onused byzerofrom
0.1.7crates.io↘ 1↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum69faa1f2a1ea75661980b013019ed6687ed0e83d069bc1114e2cc74c6c04c4dfdepends onzerofrom-derive
0.1.7crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1used byzerotrie
0.2.4crates.io↘ 3↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bfdepends onzerovec
0.11.6crates.io↘ 3↖ 7sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239zerovec-derive
0.11.3crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555depends onused byzmij
1.0.21crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaaused by
478 packageslockfile v4
Might be heavy and slow!
adler2
2.0.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefaused byahash
0.8.12crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75used byaho-corasick
1.1.4crates.io↘ 1↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301depends onaliasable
0.1.3crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fdused byalloca
0.4.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume5a7d05ea6aea7e9e64d25b9156ba2fee3fdd659e34e41063cd2fc7cd020d7f4depends onused byallocator-api2
0.2.21crates.io↘ 0↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923anes
0.1.6crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299used byannotate-snippets
0.12.15crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum92570a3f9c98e7e84df84b71d0965ac99b1871fcd75a3773a3bd1bad13f64cf7used byannotated-string
0.3.0crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum298ed730801db3c02f2edba003c9420a0f57ea48d37fdc5601c536113668c059used byanstream
1.0.0crates.io↘ 7↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28ddepends onused byanstyle
1.0.14crates.io↘ 0↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000anstyle-parse
1.0.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130edepends onused byanstyle-query
1.1.5crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadcdepends onused byanstyle-wincon
3.0.11crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747dused byanyhow
1.0.102crates.io↘ 0↖ 10sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842car_archive_writer
0.5.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7eb93bbb63b9c227414f6eb3a0adfddca591a8ce1e9b60661bb08969b87e340bdepends onused byarc-swap
1.9.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6a3a1fd6f75306b68087b831f025c712524bcb19aad54e557b1129cfa0a2b207depends onused byarraydeque
0.5.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7d902e3d592a523def97af8f317b08ce16b7ab854c1985a0c671e6f15cebc236used byarrayvec
0.7.6crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50used byatomic-waker
1.1.2crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0used byautocfg
1.5.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8used byaws-lc-rs
1.16.3crates.io↘ 2↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0ec6fb3fe69024a75fa7e1bfb48aa6cf59706a101658ea01bfd33b2b248a038fdepends onaws-lc-sys
0.40.0crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf50037ee5e1e41e7b8f9d161680a725bd1626cb6f8c7e901f91f942850852fe7used bybase64
0.22.1crates.io↘ 0↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6bitflags
2.11.1crates.io↘ 0↖ 17sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3block-buffer
0.10.4crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71depends onused byblock-buffer
0.12.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumcdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790bedepends onused bybstr
1.12.1crates.io↘ 3↖ 39sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cabused by- gix-actor
0.41.0 - gix-archive
0.32.0 - gix-attributes
0.33.0 - gix-command
0.9.0 - gix-commitgraph
0.37.0 - gix-config
0.56.0 - gix-config-value
0.18.0 - gix-credentials
0.38.0 - gix-date
0.15.3 - gix-diff
0.63.0 - gix-dir
0.25.0 - gix-discover
0.51.0 - gix-error
0.2.3 - gix-filter
0.30.0 - gix-fs
0.21.1 - gix-glob
0.26.0 - gix-ignore
0.21.0 - gix-imara-diff
0.2.1 - gix-index
0.51.0 - gix-mailmap
0.33.0 - gix-merge
0.16.0 - gix-object
0.60.0 - gix-packetline
0.21.3 - gix-path
0.12.0 - gix-pathspec
0.18.0 - gix-protocol
0.61.0 - gix-quote
0.7.1 - gix-refspec
0.41.0 - gix-revision
0.45.0 - gix-shallow
0.12.0 - gix-status
0.30.0 - gix-submodule
0.30.0 - gix-transport
0.57.0 - gix-url
0.36.0 - gix-utils
0.3.2 - gix-validate
0.11.1 - gix-worktree
0.52.0 - gix-worktree-state
0.30.0 - globset
0.4.18
- gix-actor
bumpalo
3.20.2crates.io↘ 1↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcbdepends onbyteorder
1.5.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64bused bybytes
1.11.1crates.io↘ 0↖ 14sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33bytesize
2.3.1crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6bd91ee7b2422bcb158d90ef4d14f75ef67f340943fc4149891dcce8f8b972a3camino
1.2.2crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume629a66d692cb9ff1a1c664e41771b3dcaf961985a9774c0eb0bd1b51cf60a48depends onused bycast
0.3.0crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5cc
1.2.61crates.io↘ 4↖ 7sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd16d90359e986641506914ba71350897565610e87ce0ad9e6f28569db3dd5c6dcfg_aliases
0.2.1crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724cfg-if
1.0.4crates.io↘ 0↖ 22sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801used by- ahash
0.8.12 - console_error_panic_hook
0.1.7 - crc32fast
1.5.0 - dashmap
6.1.0 - encoding_rs
0.8.35 - filetime
0.2.27 - getrandom
0.2.17 - getrandom
0.3.4 - getrandom
0.4.2 - half
2.7.1 - jni
0.22.4 - keccak
0.2.0 - nix
0.31.2 - parking_lot_core
0.9.12 - ring
0.17.14 - sha1
0.10.6 - sha1
0.11.0 - sha2
0.11.0 - stacker
0.1.24 - thread_local
1.1.9 - wasm-bindgen
0.2.106 - wasm-bindgen-futures
0.4.56
- ahash
ciborium
0.2.2crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0eused byciborium-io
0.2.2crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757ciborium-ll
0.2.2crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9depends onused byclap
4.6.1crates.io↘ 2↖ 8sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51depends onclap_builder
4.6.0crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069fused byclap_complete
4.6.3crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum660c0520455b1013b9bcb0393d5f643d7e4454fb69c915b8d6d2aa0e9a45acc3depends onused byclap_derive
4.6.1crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9used byclap_lex
1.1.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9used byclru
0.6.3crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum197fd99cb113a8d5d9b6376f3aa817f32c1078f2343b714fff7d2ca44fdf67d5depends onused bycmake
0.1.58crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc0f78a02292a74a88ac736019ab962ece0bc380e3f977bf72e376c5d78ff0678depends onused bycolorchoice
1.0.5crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570used bycombine
4.6.7crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fddepends onused byconsole
0.16.3crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd64e8af5551369d19cf50138de61f1c42074ab970f74e99be916646777f8fc87used byconsole_error_panic_hook
0.1.7crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbcdepends onused byconst-oid
0.10.2crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55cused bycore-foundation
0.10.1crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6depends oncore-foundation-sys
0.8.7crates.io↘ 0↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888bcountme
3.0.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7704b5fdd17b18ae31c4c1da5a2e0305a2bf17b5249300a9ee9ed7b72114c636used bycpufeatures
0.2.17crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280depends onused bycpufeatures
0.3.0crates.io↘ 1↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201depends oncrc32fast
1.5.0crates.io↘ 1↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511depends oncriterion
0.8.2crates.io↘ 17↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum950046b2aa2492f9a536f5f4f9a3de7b9e2476e575e05bd6c333371add4d98f3depends onused bycriterion-plot
0.8.2crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd8d80a2f4f5b554395e47b5d8305bc3d27813bacb73493eb1001e8f76dae29eadepends onused bycrossbeam-channel
0.5.15crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2depends onused bycrossbeam-deque
0.8.6crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51used bycrossbeam-epoch
0.9.18crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420edepends onused bycrossbeam-utils
0.8.21crates.io↘ 0↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28crypto-common
0.1.7crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60adepends onused bycrypto-common
0.2.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum77727bb15fa921304124b128af125e7e3b968275d1b108b379190264f4423710depends onused bydashmap
6.1.0crates.io↘ 6↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cfdepends onused bydigest
0.10.7crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292depends onused bydigest
0.11.3crates.io↘ 3↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2directories
6.0.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum16f5094c54661b38d03bd7e50df373292118db60b585c08a411c6d840017fe7ddepends onused bydirs-sys
0.5.0crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fabused bydisplaydoc
0.2.5crates.io↘ 3↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0depends ondprint-core
0.67.4crates.io↘ 7↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2c1d827947704a9495f705d6aeed270fa21a67f825f22902c28f38dc3af7a9aedepends ondrop_bomb
0.1.5crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9bda8e21c04aca2ae33ffc2fd8c23134f3cac46db123ba97bd9d3f3b8a4a85e1dunce
1.0.5crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813educe
0.6.0crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1d7bc049e1bd8cdeb31b68bbd586a9464ecf9f3944af3958a7a9d0f8b9799417either
1.15.0crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719encode_unicode
1.0.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0used byencoding_rs
0.8.35crates.io↘ 1↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3depends onencoding_rs_io
0.1.7crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1cc3c5651fb62ab8aa3103998dade57efdd028544bd300516baa31840c252a83depends onused byenum-ordinalize
4.3.2crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4a1091a7bb1f8f2c4b28f1fe2cef4980ca2d410a3d727d67ecc3178c9b0800f0depends onused byenum-ordinalize-derive
4.3.2crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8ca9601fb2d62598ee17836250842873a413586e5d7ed88b356e38ddbb0ec631depends onused byequivalent
1.0.2crates.io↘ 0↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0ferrno
0.3.14crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efebdepends onextension-trait
1.0.2crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdd65f1b59dd22d680c7a626cc4a000c1e03d241c51c3e034d2bc9f1e90734f9bdepends onused byfaster-hex
0.10.0crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7223ae2d2f179b803433d9c830478527e92b8117eab39460edae7f1614d9fb73depends onfastrand
2.4.1crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6filetime
0.2.27crates.io↘ 3↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf98844151eee8917efc50bd9e8318cb963ae8b297431495d3f758616ea5c57dbdepends onfind-msvc-tools
0.1.9crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582used byflate2
1.1.9crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573cdepends onused byfnv
1.0.7crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1foldhash
0.1.5crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2used byfoldhash
0.2.0crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdbform_urlencoded
1.2.2crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumcb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcfdepends onused byfs_extra
1.3.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11cused byfutures-channel
0.3.32crates.io↘ 2↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1ddepends onfutures-core
0.3.32crates.io↘ 0↖ 9sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1dfutures-io
0.3.32crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumcecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718used byfutures-sink
0.3.32crates.io↘ 0↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893futures-task
0.3.32crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393used byfutures-util
0.3.32crates.io↘ 7↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6depends ongeneric-array
0.14.7crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9adepends ongetrandom
0.2.17crates.io↘ 5↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0used bygetrandom
0.3.4crates.io↘ 6↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fdgetrandom
0.4.2crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555depends onused bygix
0.83.0crates.io↘ 56↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6ce52001b946a6249d5d0d3011df0a042ac3f8a4d013460db6476577b0b9c567depends on- gix-actor
0.41.0 - gix-archive
0.32.0 - gix-attributes
0.33.0 - gix-blame
0.13.0 - gix-command
0.9.0 - gix-commitgraph
0.37.0 - gix-config
0.56.0 - gix-credentials
0.38.0 - gix-date
0.15.3 - gix-diff
0.63.0 - gix-dir
0.25.0 - gix-discover
0.51.0 - gix-error
0.2.3 - gix-features
0.48.0 - gix-filter
0.30.0 - gix-fs
0.21.1 - gix-glob
0.26.0 - gix-hash
0.25.0 - gix-hashtable
0.15.0 - gix-ignore
0.21.0 - gix-index
0.51.0 - gix-lock
23.0.0 - gix-mailmap
0.33.0 - gix-merge
0.16.0 - gix-negotiate
0.31.0 - gix-object
0.60.0 - gix-odb
0.80.0 - gix-pack
0.70.0 - gix-path
0.12.0 - gix-pathspec
0.18.0 - gix-prompt
0.15.0 - gix-protocol
0.61.0 - gix-ref
0.63.0 - gix-refspec
0.41.0 - gix-revision
0.45.0 - gix-revwalk
0.31.0 - gix-sec
0.14.0 - gix-shallow
0.12.0 - gix-status
0.30.0 - gix-submodule
0.30.0 - gix-tempfile
23.0.0 - gix-trace
0.1.19 - gix-transport
0.57.0 - gix-traverse
0.57.0 - gix-url
0.36.0 - gix-utils
0.3.2 - gix-validate
0.11.1 - gix-worktree
0.52.0 - gix-worktree-state
0.30.0 - gix-worktree-stream
0.32.0 - nonempty
0.12.0 - parking_lot
0.12.5 - regex
1.12.3 - signal-hook
0.4.4 - smallvec
1.15.1 - thiserror
2.0.18
used by- gix-actor
gix-actor
0.41.0crates.io↘ 3↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum272916673b83714734b15d4ef3c8b5f1ccddb15fea8ff548430b97c1ab7b7ed8depends ongix-archive
0.32.0crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9a20ec244b733338d4cb60e5e05eac700dab7fcc689647b1d1daa9396b119342used bygix-attributes
0.33.0crates.io↘ 9↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumfe17c5a1c0b6f2ef1476aa1d3222ea50cdff67608016613a58bfc3e078046000depends ongix-bitmap
0.3.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1ecbfc77ec6852294e341ecc305a490b59f2813e6ca42d79efda5099dcab1894depends onused bygix-blame
0.13.0crates.io↘ 12↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum14dab9a942ab54a9661ded7397c3bf927274e7afa94494db0d75cfcbde02ca0adepends onused bygix-chunk
0.7.1crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumedf288be9b60fe7231de03771faa292be1493d84786f68727e33ad1f91764320depends ongix-command
0.9.0crates.io↘ 5↖ 7sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum86335306511abe43d75c866d4b1f3d90932fe202edcd43e1314036333e7384d8gix-commitgraph
0.37.0crates.io↘ 6↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumfe3b5aa0f24e19028c261d229aeeedafcaaa52ebd71021cc15184620fc9d32ebgix-config
0.56.0crates.io↘ 10↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8c01848aebd21c67f6ba41f1de8efd46ae96df21f001954a3c9e1517e514d410depends onused bygix-config-value
0.18.0crates.io↘ 5↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum13b39ed39ee4c10a3b157f9fb94bac8098d9f8e56201f0cf7dee6c187416c4b2gix-credentials
0.38.0crates.io↘ 10↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum65ca11598b70811d7b16ff90945a6e57dfe521e85b744e51636965fe39cc8f60depends ongix-date
0.15.3crates.io↘ 5↖ 12sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb94cdae4eb4b0f4136e3d9b3aa2d2cd03cfb5bb9b636b31263aea2df86d41543gix-diff
0.63.0crates.io↘ 16↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdc08e0fa1a91ff5f24affeab052f198056645e1de004910bde7b82b50ea5982adepends ongix-dir
0.25.0crates.io↘ 12↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum32a0fc06e9e1e430cbf0a313666976d90f822f461a6525320427aa9b8af5236cdepends onused bygix-discover
0.51.0crates.io↘ 7↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum17852e6a501e688a1702b24ebe5b3761d4719455bc869fd29f38b0b859bcad34used bygix-error
0.2.3crates.io↘ 1↖ 15sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume207b971746ab724fccdfced2e4e19e854744611904a0195d3aa8fda8a110613depends ongix-features
0.48.0crates.io↘ 14↖ 15sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumaf375693ad5333d0a2c66b4c5b2cbe9ccc38e34f8e8bf24e4ae42c12307fdc4fdepends ongix-filter
0.30.0crates.io↘ 13↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdac917dbe9653c9b615d248db91907a365bd779750c9e1b457a9d9fdeece3a08depends ongix-fs
0.21.1crates.io↘ 6↖ 13sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1e1967daac9848757c47c2aef0c57bcadc1a897347f559778249bf286a536c86gix-glob
0.26.0crates.io↘ 4↖ 7sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum08bf29249a069bf2507f5964f80997f37b134d320ea348d66527726b9be2c38cgix-hash
0.25.0crates.io↘ 4↖ 22sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumbcf70d1e252337eed16360f8b8ebb71865ece58eab7954b39ce38b420de703d2used by- gix
0.83.0 - gix-blame
0.13.0 - gix-commitgraph
0.37.0 - gix-diff
0.63.0 - gix-filter
0.30.0 - gix-hashtable
0.15.0 - gix-index
0.51.0 - gix-merge
0.16.0 - gix-negotiate
0.31.0 - gix-object
0.60.0 - gix-odb
0.80.0 - gix-pack
0.70.0 - gix-protocol
0.61.0 - gix-ref
0.63.0 - gix-refspec
0.41.0 - gix-revision
0.45.0 - gix-revwalk
0.31.0 - gix-shallow
0.12.0 - gix-status
0.30.0 - gix-traverse
0.57.0 - gix-worktree
0.52.0 - gix-worktree-stream
0.32.0
- gix
gix-hashtable
0.15.0crates.io↘ 3↖ 7sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd33b455e07b3c16d3b2eeebc7b38d2dafcbf8a653de1138ef55d4c2a1fd0b08bgix-ignore
0.21.0crates.io↘ 5↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6bb13fbbeeafee943e52b61fcc88dfddf6a452fcaf0c4d0cdc8f218fa25bbec5gix-imara-diff
0.2.1crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum39eb0623e15e4cb83c02ce6a959e48fadd1ae3b715b36b5acc01816e01388c82depends ongix-index
0.51.0crates.io↘ 20↖ 7sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum54c3ef97ad08121e4327a6226bd63fed6b9e3c6b976d48bddd4356d9d41191dbdepends ongix-lock
23.0.0crates.io↘ 3↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum09b3bc074e5723027b482dcd9ab99d95804a53742f6de812d0172fbba4a186c1gix-mailmap
0.33.0crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum023d3a6561cbebe45b89e0764d48928ad970667076f16fa5889e6f86d8432086used bygix-merge
0.16.0crates.io↘ 18↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum74bbcdcc52b70a32f0a151b024dff9d0fcf56ee48f00d9503e735af9d99ea881depends onused bygix-negotiate
0.31.0crates.io↘ 6↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum103d42bfade1b8a96ca5005933127bdad461ce588d92422b2c2daa3ff20d780cdepends onused bygix-object
0.60.0crates.io↘ 11↖ 20sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma38075a95d7cc5df8afd38e72c617026c1456952207a4120a7f55a3fbf93b4d7depends onused by- gix
0.83.0 - gix-archive
0.32.0 - gix-blame
0.13.0 - gix-diff
0.63.0 - gix-dir
0.25.0 - gix-filter
0.30.0 - gix-index
0.51.0 - gix-merge
0.16.0 - gix-negotiate
0.31.0 - gix-odb
0.80.0 - gix-pack
0.70.0 - gix-protocol
0.61.0 - gix-ref
0.63.0 - gix-revision
0.45.0 - gix-revwalk
0.31.0 - gix-status
0.30.0 - gix-traverse
0.57.0 - gix-worktree
0.52.0 - gix-worktree-state
0.30.0 - gix-worktree-stream
0.32.0
- gix
gix-odb
0.80.0crates.io↘ 13↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumaeeda12a9663120418735ecdc1250d06eeab0be75700e47b3402a981331716badepends onused bygix-pack
0.70.0crates.io↘ 14↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdaf02e6f5c8f07a069c9ea5245f40d9b14856ada4086091dc99941b49002b4fadepends onused bygix-packetline
0.21.3crates.io↘ 4↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum362246df440ee691699f0664cbf7006a6ece477db6734222be95e4198e5656e6gix-path
0.12.0crates.io↘ 4↖ 26sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum671a6059e8a4c1b7f406e24716499cefa3926e060876fb1959ef225efeee346eused by- gix
0.83.0 - gix-attributes
0.33.0 - gix-command
0.9.0 - gix-config
0.56.0 - gix-config-value
0.18.0 - gix-credentials
0.38.0 - gix-diff
0.63.0 - gix-dir
0.25.0 - gix-discover
0.51.0 - gix-features
0.48.0 - gix-filter
0.30.0 - gix-fs
0.21.1 - gix-glob
0.26.0 - gix-ignore
0.21.0 - gix-merge
0.16.0 - gix-odb
0.80.0 - gix-pack
0.70.0 - gix-pathspec
0.18.0 - gix-ref
0.63.0 - gix-sec
0.14.0 - gix-status
0.30.0 - gix-submodule
0.30.0 - gix-url
0.36.0 - gix-worktree
0.52.0 - gix-worktree-state
0.30.0 - gix-worktree-stream
0.32.0
- gix
gix-pathspec
0.18.0crates.io↘ 7↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2a84a4f083dd70fb49f4377e13afa6d90df2daaa1c705c49d6ff1331fc7e8855depends ongix-prompt
0.15.0crates.io↘ 5↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume041a626c64cb69e4117fcdf80da8d0e454fba3b1f420412792d191f52251aeegix-protocol
0.61.0crates.io↘ 18↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumaa4bee82db63ec635996b96efae71cf467c155fa3f34a556184373224a26c4fddepends onused bygix-quote
0.7.1crates.io↘ 3↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6e97b73791a64bc0fa7dd2c5b3e551136115f97750b876ed1c952c7a7dbaf8bedepends ongix-ref
0.63.0crates.io↘ 12↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd8ba9cc15f558b274c99349b83130f5ec83459660828fde9718bbbb43a726167depends ongix-refspec
0.41.0crates.io↘ 8↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum61755b27d57edc8940a1b1593c8c61548ca8e4c02da1ed8d5bfeda9eb2a6b761depends ongix-revision
0.45.0crates.io↘ 11↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1fb5288fac706d3ea3e4e2ba9ec38b78743b8c02f422e18cb342299cfd6ab7e8depends ongix-revwalk
0.31.0crates.io↘ 8↖ 7sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum313813706b073a12ff7f9b2896bf3e6504cdac7cfbc97b1920114724705069f0depends ongix-sec
0.14.0crates.io↘ 4↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf5a3a2d3e504a238136751e646a6c028252286a0ea64ea9974bf0498633407c6gix-shallow
0.12.0crates.io↘ 5↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum29187305521bfacf4aefd284ab28dbfa9fb74abd39a5e63dd313b1baa5808c27used bygix-status
0.30.0crates.io↘ 15↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum68c6d2a8c521ffa205fe7e268c82e6d1378ba37cd826ca10ab6129fdc29a4b65depends onused bygix-submodule
0.30.0crates.io↘ 7↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9fd5fc8692890bd71a596e540fd4c364f8460eaa82c4eaaedebde6e1e3eb4d91depends onused bygix-tempfile
23.0.0crates.io↘ 7↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum691ea1e31435c7e7d4d04705ec9d1c0d9482c46b2acf512bc723939d8f0af7fbdepends ongix-trace
0.1.19crates.io↘ 0↖ 15sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6f23569e55f2ffaf958617353b9734a7d52a7c19c439eeaa5e3efc217fd2270egix-transport
0.57.0crates.io↘ 11↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumffd6a5c676b92d4ead5f5a2b2935024415dec69edc997b6090ca9cac010a3018depends onused bygix-traverse
0.57.0crates.io↘ 9↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma14b7052c0786676c03e71fcfde7d7f0f8e8316e642b5cec6bb3998719b2ce5cdepends ongix-url
0.36.0crates.io↘ 4↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum35842d099e813f6f6bba529e88d4670572149c3df79b7a412952259887721ecegix-utils
0.3.2crates.io↘ 3↖ 11sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4e477b4f07a6e8da4ba791c53c858102959703c60d70f199932010d5b94adb2cgix-validate
0.11.1crates.io↘ 1↖ 7sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume26ac2602b43eadfdca0560b81d3341944162a3c9f64ccdeef8fc501ad80dad5depends ongix-worktree
0.52.0crates.io↘ 10↖ 7sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd69955eb5e2910832f88d041964b809eee01dadd579237e0b55efec58fd406fddepends ongix-worktree-state
0.30.0crates.io↘ 10↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8a96dccbcf9e8fe0291c55f06e08da93ebb2e691c1311276f541eefcc6d70800depends onused bygix-worktree-stream
0.32.0crates.io↘ 10↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9a8444b8ed4662e1a0c97f3eceda29630001a1bbb2632201e50312623e594213depends onused byglobset
0.4.18crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum52dfc19153a48bde0cbd630453615c8151bce3a5adfac7a0aebfbf0a1e1f57e3used bygranit-parser
0.0.2crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb7e736dfe3881c53a7dce0685eb18202d0d9fe6911782f9870946eb9ee89d778depends onused byh2
0.4.14crates.io↘ 11↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum171fefbc92fe4a4de27e0698d6a5b392d6a0e333506bc49133760b3bcf948733depends onused byhalf
2.7.1crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84bdepends onused byhash32
0.3.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606depends onused byhashbrown
0.14.5crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1used byhashbrown
0.15.5crates.io↘ 3↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1hashbrown
0.16.1crates.io↘ 3↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100hashbrown
0.17.0crates.io↘ 3↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51heapless
0.8.0crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3faddepends onused byheck
0.4.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8used byheck
0.5.0crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55eahex
0.4.3crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70used byhi-doc
0.3.0crates.io↘ 9↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf70fb920ba34768415fb239d7d607486083bfc38ad35e3f1d558697f9f646f11depends onhi-doc-jumprope
1.2.1crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum236c25809a9c0a0249b3488feb57744e12aa64e4f3db851980eab303719c7bdddepends onused byhttp
1.4.0crates.io↘ 2↖ 8sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311adepends onhttp-body
1.0.1crates.io↘ 2↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184depends onhttp-body-util
0.1.3crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64aused byhttparse
1.10.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87used byhuman_format
1.2.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumeaec953f16e5bcf6b8a3cb3aa959b17e5577dbd2693e94554c462c08be22624bused byhybrid-array
0.4.11crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum08d46837a0ed51fe95bd3b05de33cd64a1ee88fc797477ca48446872504507c5depends onhyper
1.9.0crates.io↘ 13↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbccadepends onhyper-rustls
0.27.9crates.io↘ 7↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0fdepends onused byhyper-util
0.1.20crates.io↘ 15↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0depends onicu_collections
2.2.0crates.io↘ 6↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191cicu_locale_core
2.2.0crates.io↘ 5↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29icu_normalizer
2.2.0crates.io↘ 6↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4depends onused byicu_normalizer_data
2.2.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumda3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38used byicu_properties
2.2.0crates.io↘ 6↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumbee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70dedepends onicu_properties_data
2.2.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14used byicu_provider
2.2.0crates.io↘ 7↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421depends onid-arena
2.3.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954used byidna
1.1.0crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4deused byidna_adapter
1.2.2crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumcb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714depends onused byindexmap
2.14.0crates.io↘ 4↖ 9sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9indoc
2.0.7crates.io↘ 1↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706depends oninsta
1.47.2crates.io↘ 6↖ 7sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7b4a6248eb93a4401ed2f37dfe8ea592d3cf05b7cf4f8efa867b6895af7e094eio-close
0.3.7crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9cadcf447f06744f8ce713d2d6239bb5bde2c357a452397a9ed90c625da390bcdepends onused byipnet
2.12.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2used byis_terminal_polyfill
1.70.2crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695used byitertools
0.13.0crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186depends onitertools
0.14.0crates.io↘ 1↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285depends onitoa
1.0.18crates.io↘ 0↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682jiff
0.2.24crates.io↘ 7↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf00b5dbd620d61dfdcb6007c9c1f6054ebd75319f163d886a9055cec1155073ddepends onused byjiff-static
0.2.24crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume000de030ff8022ea1da3f466fbb0f3a809f5e51ed31f6dd931c35181ad8e6d7depends onused byjiff-tzdb
0.1.6crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc900ef84826f1338a557697dc8fc601df9ca9af4ac137c7fb61d4c6f2dfd3076used byjiff-tzdb-platform
0.1.3crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum875a5a69ac2bab1a891711cf5eccbec1ce0341ea805560dcd90b7a2e925132e8depends onused byjni
0.22.4crates.io↘ 9↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5efd9a482cf3a427f00d6b35f14332adc7902ce91efb778580e180ff90fa3498depends onjni-macros
0.22.4crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma00109accc170f0bdb141fed3e393c565b6f5e072365c3bd58f5b062591560a3used byjni-sys
0.4.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2depends onused byjni-sys-macros
0.4.1crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264depends onused byjobserver
0.1.34crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33depends onused byjrb
0.5.0-pre98workspace↘ 6↖ 0jrsonnet-cli
0.5.0-pre98workspace↘ 5↖ 2jrsonnet-deps
0.5.0-pre98workspace↘ 5↖ 0jrsonnet-evaluator
0.5.0-pre98workspace↘ 24↖ 7depends on- anyhow
1.0.102 - drop_bomb
0.1.5 - educe
0.6.0 - hi-doc
0.3.0 - insta
1.47.2 - jrsonnet-gcmodule
0.5.0 - jrsonnet-interner
0.5.0-pre98 - jrsonnet-ir
0.5.0-pre98 - jrsonnet-ir-parser
0.5.0-pre98 - jrsonnet-macros
0.5.0-pre98 - jrsonnet-peg-parser
0.5.0-pre98 - jrsonnet-types
0.5.0-pre98 - num-bigint
0.4.6 - pathdiff
0.2.3 - rustc-hash
2.1.2 - rustversion
1.0.22 - serde
1.0.228 - smallvec
1.15.1 - stacker
0.1.24 - static_assertions
1.1.0 - strip-ansi-escapes
0.2.1 - strsim
0.11.1 - thiserror
2.0.18 - wasm-bindgen
0.2.106
- anyhow
jrsonnet-fmt
0.5.0-pre98workspace↘ 6↖ 0jrsonnet-formatter
0.5.0-pre98workspace↘ 6↖ 2jrsonnet-gcmodule
0.5.0crates.io↘ 1↖ 12sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf65a6fdef5568ea2e3459dcad15979d7613f968cbacf722e1138ffe83d28ee24depends onjrsonnet-gcmodule-derive
0.5.0crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum829a23aa96f1afb78bbc9722e323ced7a0b75d9b89cec6bfbc709cf484e8a0a4depends onused byjrsonnet-interner
0.5.0-pre98workspace↘ 3↖ 3jrsonnet-ir
0.5.0-pre98workspace↘ 7↖ 7depends onjrsonnet-ir-parser
0.5.0-pre98workspace↘ 4↖ 2jrsonnet-lexer
0.5.0-pre98workspace↘ 1↖ 3jrsonnet-macros
0.5.0-pre98workspace↘ 4↖ 2jrsonnet-peg-parser
0.5.0-pre98workspace↘ 4↖ 1jrsonnet-pkg
0.5.0-pre98workspace↘ 11↖ 1jrsonnet-rowan-parser
0.5.0-pre98workspace↘ 9↖ 1jrsonnet-stdlib
0.5.0-pre98workspace↘ 16↖ 4depends onjrsonnet-types
0.5.0-pre98workspace↘ 2↖ 2jrsonnet-web
0.5.0-pre98workspace↘ 13↖ 0js-sys
0.3.83crates.io↘ 2↖ 7sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8depends onkeccak
0.2.0crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9e24a010dd405bd7ed803e5253182815b41bf2e6a80cc3bfc066658e03a198aadepends onused bykstring
2.0.2crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum558bf9508a558512042d3095138b1f7b8fe90c5467d94f9f1da28b3731c5dbd1depends onused bylazy_static
1.5.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumbbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66feused byleb128fmt
0.1.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2used bylibc
0.2.186crates.io↘ 0↖ 36sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66used by- cc
1.2.61 - console
0.16.3 - core-foundation
0.10.1 - cpufeatures
0.2.17 - cpufeatures
0.3.0 - dirs-sys
0.5.0 - errno
0.3.14 - filetime
0.2.27 - getrandom
0.2.17 - getrandom
0.3.4 - getrandom
0.4.2 - gix-config-value
0.18.0 - gix-features
0.48.0 - gix-index
0.51.0 - gix-sec
0.14.0 - gix-tempfile
23.0.0 - hyper-util
0.1.20 - io-close
0.3.7 - jobserver
0.1.34 - libredox
0.1.16 - memmap2
0.9.10 - mimalloc-sys
0.1.6 - mio
1.2.0 - nix
0.31.2 - page_size
0.6.0 - parking_lot_core
0.9.12 - quinn-udp
0.5.14 - ring
0.17.14 - rustix
1.1.4 - security-framework
3.7.0 - security-framework-sys
2.17.0 - signal-hook
0.4.4 - signal-hook-registry
1.4.8 - socket2
0.6.3 - stacker
0.1.24 - tokio
1.52.2
- cc
libjsonnet
0.5.0-pre98workspace↘ 5↖ 0libredox
0.1.16crates.io↘ 4↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume02f3bb43d335493c96bf3fd3a321600bf6bd07ed34bc64118e9293bdffea46clinux-raw-sys
0.12.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53used bylitemap
0.8.2crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0used bylock_api
0.4.14crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965depends onlog
0.4.29crates.io↘ 0↖ 9sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897logos
0.16.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumeb2c55a318a87600ea870ff8c2012148b44bf18b74fad48d0f835c38c7d07c5fdepends onused bylogos-codegen
0.16.1crates.io↘ 6↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum58b3ffaa284e1350d017a57d04ada118c4583cf260c8fb01e0fe28a2e9cf8970used bylogos-derive
0.16.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum52d3a9855747c17eaf4383823f135220716ab49bea5fbea7dd42cc9a92f8aa31depends onused bylru
0.18.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8a860605968fce16869fd239cf4237a82f3ac470723415db603b0e8b6c8d4fb9depends onused bylru-slab
0.1.2crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154used bymatchers
0.2.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9depends onused bymaybe-async
0.2.10crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5cf92c10c7e361d6b99666ec1c6f9805b0bea2c3bd8c78dc6fe98ac5bd78db11depends onused bymd5
0.8.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumae960838283323069879657ca3de837e9f7bbb4c7bf6ea7f1b290d5e9476d2e0used bymemchr
2.8.0crates.io↘ 0↖ 11sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79memmap2
0.9.10crates.io↘ 1↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum714098028fe011992e1c3962653c96b2d578c4b4bce9036e15ff220319b1e0e3depends onmimalloc-sys
0.1.6crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4aa3cefb626f6ae3d0b2f71c5378c89d2b1d4d7bc246b0ca9a7ee61a4daad291depends onused bymimallocator
0.1.3crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2d44fe4ebf6b538fcf39d9975c2b90bb3232d1ba8e8bffeacd004f27b20c577adepends onmime
0.3.17crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139aused byminiz_oxide
0.8.9crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316depends onused bymio
1.2.0crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1used bynix
0.31.2crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5d6d0705320c1e6ba1d912b5e37cf18071b6c2e9b7fa8215a1e8a7651966f5d3used bynonempty
0.12.0crates.io↘ 0↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9737e026353e5cd0736f98eddae28665118eb6f6600902a7f50db585621fecb6nu-ansi-term
0.50.3crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5depends onused bynum-bigint
0.4.6crates.io↘ 3↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9num-integer
0.1.46crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858fdepends onused bynum-traits
0.2.19crates.io↘ 1↖ 7sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841depends onobject
0.37.3crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fedepends onused byonce_cell
1.21.4crates.io↘ 0↖ 14sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50once_cell_polyfill
1.70.2crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4feused byoorandom
11.1.5crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41eused byopenssl-probe
0.2.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbeused byoption-ext
0.2.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7dused byouroboros
0.18.5crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1e0f050db9c44b97a94723127e6be766ac5c340c48f2c4bb3ffa11713744be59used byouroboros_macro
0.18.5crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3c7028bdd3d43083f6d8d4d5187680d0d3560d54df4cc9d752005268b41e64d0used bypage_size
0.6.0crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum30d5b2194ed13191c1999ae0704b7839fb18384fa22e49b57eeaa97d79ce40dadepends onused byparking_lot
0.12.5crates.io↘ 2↖ 9sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1adepends onparking_lot_core
0.9.12crates.io↘ 5↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1pathdiff
0.2.3crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdf94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3peg
0.8.6crates.io↘ 2↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0aad070be5b63aa72103f2fcdd70a83adbd5e90112ce5b574171ff1c65501773depends onpeg-macros
0.8.6crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumddd8ef6825cae95355031ae26a99b616a2a21f22ba2de0197c43dfb05acbe7eeused bypeg-runtime
0.8.6crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7011d97b484a5ebdc4b1fdb3b12d5e4bbbea56e9d22b688f2e79e04b65a7d8a6used bypercent-encoding
2.3.2crates.io↘ 0↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220pin-project-lite
0.2.17crates.io↘ 0↖ 11sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cdplain
0.2.3crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6used byplotters
0.3.7crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5aeb6f403d7a4911efb1e33402027fc44f29b5bf6def3effcc22d7bb75f2b747used byplotters-backend
0.3.7crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdf42e13c12958a16b3f7f4386b9ab1f3e7933914ecea48da7139435263a4172aplotters-svg
0.3.7crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum51bae2ac328883f7acdfea3d66a7c35751187f870bc81f94563733a154d7a670depends onused byportable-atomic
1.13.1crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49portable-atomic-util
0.2.7crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618depends onused bypotential_utf
0.1.5crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564depends onused byppv-lite86
0.2.21crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9depends onused byprettyplease
0.2.37crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62bdepends onproc-macro2
1.0.106crates.io↘ 1↖ 29sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934depends onused by- clap_derive
4.6.1 - displaydoc
0.2.5 - educe
0.6.0 - enum-ordinalize-derive
4.3.2 - extension-trait
1.0.2 - jiff-static
0.2.24 - jni-macros
0.22.4 - jrsonnet-gcmodule-derive
0.5.0 - jrsonnet-macros
0.5.0-pre98 - logos-codegen
0.16.1 - maybe-async
0.2.10 - ouroboros_macro
0.18.5 - peg-macros
0.8.6 - prettyplease
0.2.37 - proc-macro2-diagnostics
0.10.1 - quote
1.0.45 - serde_derive
1.0.228 - syn
2.0.117 - syn-dissect-closure
0.1.0 - synstructure
0.13.2 - thiserror-impl
2.0.18 - tracing-attributes
0.1.31 - wasm-bindgen-macro-support
0.2.106 - wit-bindgen-rust-macro
0.51.0 - xtask
0.1.0 - yoke-derive
0.8.2 - zerocopy-derive
0.8.48 - zerofrom-derive
0.1.7 - zerovec-derive
0.11.3
- clap_derive
proc-macro2-diagnostics
0.10.1crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumaf066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8used byprodash
31.0.0crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum962200e2d7d551451297d9fdce85138374019ada198e30ea9ede38034e27604cused bypsm
0.1.31crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum645dbe486e346d9b5de3ef16ede18c26e6c70ad97418f4874b8b1889d6e761eadepends onused byquinn
0.11.9crates.io↘ 12↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20depends onused byquinn-proto
0.11.14crates.io↘ 14↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098depends onused byquinn-udp
0.5.14crates.io↘ 6↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumaddec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbdused byquote
1.0.45crates.io↘ 1↖ 29sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924depends onused by- clap_derive
4.6.1 - displaydoc
0.2.5 - educe
0.6.0 - enum-ordinalize-derive
4.3.2 - extension-trait
1.0.2 - jiff-static
0.2.24 - jni-macros
0.22.4 - jni-sys-macros
0.4.1 - jrsonnet-gcmodule-derive
0.5.0 - jrsonnet-macros
0.5.0-pre98 - logos-codegen
0.16.1 - maybe-async
0.2.10 - ouroboros_macro
0.18.5 - peg-macros
0.8.6 - proc-macro2-diagnostics
0.10.1 - serde_derive
1.0.228 - syn
2.0.117 - syn-dissect-closure
0.1.0 - synstructure
0.13.2 - thiserror-impl
2.0.18 - tracing-attributes
0.1.31 - wasm-bindgen-macro
0.2.106 - wasm-bindgen-macro-support
0.2.106 - wit-bindgen-rust-macro
0.51.0 - xtask
0.1.0 - yoke-derive
0.8.2 - zerocopy-derive
0.8.48 - zerofrom-derive
0.1.7 - zerovec-derive
0.11.3
- clap_derive
r-efi
5.3.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0fused byr-efi
6.0.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bfused byrand
0.9.4crates.io↘ 2↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76eadepends onrand_chacha
0.9.0crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cbdepends onused byrand_core
0.9.5crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83cdepends onused byrandom_color
1.1.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd635c5e80ae160390ac62ca027d2d06c94c1dc69e5c0a12f1e3a53664dc84966depends onused byrange-map
0.2.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum12a5a2d6c7039059af621472a4389be1215a816df61aa4d531cfe85264aee95fdepends onused byrayon
1.12.0crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumfb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926ddepends onused byrayon-core
1.13.0crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91used byredox_syscall
0.5.18crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362ddepends onused byredox_syscall
0.7.5crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4666a1a60d8412eab19d94f6d13dcc9cea0a5ef4fdf6a5db306537413c661b1bdepends onused byredox_users
0.5.2crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127acused byregex
1.12.3crates.io↘ 4↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276regex-automata
0.4.14crates.io↘ 3↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8fregex-syntax
0.8.10crates.io↘ 0↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0areqwest
0.13.3crates.io↘ 32↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum62e0021ea2c22aed41653bc7e1419abb2c97e038ff2c33d0e1309e49a97deec0depends on- base64
0.22.1 - bytes
1.11.1 - encoding_rs
0.8.35 - futures-channel
0.3.32 - futures-core
0.3.32 - futures-util
0.3.32 - h2
0.4.14 - http
1.4.0 - http-body
1.0.1 - http-body-util
0.1.3 - hyper
1.9.0 - hyper-rustls
0.27.9 - hyper-util
0.1.20 - js-sys
0.3.83 - log
0.4.29 - mime
0.3.17 - percent-encoding
2.3.2 - pin-project-lite
0.2.17 - quinn
0.11.9 - rustls
0.23.40 - rustls-pki-types
1.14.1 - rustls-platform-verifier
0.7.0 - sync_wrapper
1.0.2 - tokio
1.52.2 - tokio-rustls
0.26.4 - tower
0.5.3 - tower-http
0.6.9 - tower-service
0.3.3 - url
2.5.8 - wasm-bindgen
0.2.106 - wasm-bindgen-futures
0.4.56 - web-sys
0.3.83
- base64
ring
0.17.14crates.io↘ 6↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7rowan
0.16.1crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum417a3a9f582e349834051b8a10c8d71ca88da4211e4093528e36b9845f6b5f21rustc_version
0.4.1crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumcfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92depends onrustc-hash
1.1.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2used byrustc-hash
2.1.2crates.io↘ 0↖ 7sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dberustix
1.1.4crates.io↘ 5↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190rustls
0.23.40crates.io↘ 6↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168bdepends onrustls-native-certs
0.8.3crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63rustls-pki-types
1.14.1crates.io↘ 2↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9depends onrustls-platform-verifier
0.7.0crates.io↘ 13↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum26d1e2536ce4f35f4846aa13bff16bd0ff40157cdb14cc056c7b14ba41233ba0depends onused byrustls-platform-verifier-android
0.1.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788frustls-webpki
0.103.13crates.io↘ 4↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756erustversion
1.0.22crates.io↘ 0↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46dsame-file
1.0.6crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502depends onused byschannel
0.1.29crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939depends onused byscopeguard
1.2.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49used bysecurity-framework
3.7.0crates.io↘ 5↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1ddepends onsecurity-framework-sys
2.17.0crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3depends onsemver
1.0.28crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cdserde
1.0.228crates.io↘ 2↖ 19sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9edepends onused by- bstr
1.12.1 - ciborium
0.2.2 - criterion
0.8.2 - dprint-core
0.67.4 - faster-hex
0.10.0 - indexmap
2.14.0 - jrb
0.5.0-pre98 - jrsonnet
0.5.0-pre98 - jrsonnet-evaluator
0.5.0-pre98 - jrsonnet-pkg
0.5.0-pre98 - jrsonnet-stdlib
0.5.0-pre98 - num-bigint
0.4.6 - serde-saphyr
0.0.26 - serde_json
1.0.149 - tests
0.1.0 - tinytemplate
1.2.1 - url
2.5.8 - wit-component
0.244.0 - wit-parser
0.244.0
- bstr
serde_core
1.0.228crates.io↘ 1↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67addepends onserde_derive
1.0.228crates.io↘ 3↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79depends onserde_json
1.0.149crates.io↘ 5↖ 9sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86serde-saphyr
0.0.26crates.io↘ 9↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdcc7fe48e34d02a97bc8e6253b8b91e5a47fe2c47eaacb5149cefbb69922eaf0depends onused bysha1
0.10.6crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6badepends onused bysha1
0.11.0crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumaacc4cc499359472b4abe1bf11d0b12e688af9a805fa5e3016f9a386dc2d0214depends onused bysha1-checked
0.10.0crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum89f599ac0c323ebb1c6082821a54962b839832b03984598375bff3975b804423depends onused bysha2
0.11.0crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4depends onused bysha3
0.11.0crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumbe176f1a57ce4e3d31c1a166222d9768de5954f811601fb7ca06fc8203905ce1depends onused bysharded-slab
0.1.7crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6depends onused byshell-words
1.1.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdc6fe69c597f9c37bfeeeeeb33da3530379845f10be461a66d16d03eca2ded77used bysignal-hook
0.4.4crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb2a0c28ca5908dbdbcd52e6fdaa00358ab88637f8ab33e1f188dd510eb44b53ddepends onused bysignal-hook-registry
1.4.8crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1bdepends onsimd_cesu8
1.1.1crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum94f90157bb87cddf702797c5dadfa0be7d266cdf49e22da2fcaa32eff75b2c33depends onused bysimd-adler32
0.3.9crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214used bysimdutf8
0.1.5crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76eused bysimilar
2.7.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumbbbb5d9659141646ae647b42fe094daf6c6192d1620870b449d9557f748b2daaused byslab
0.4.12crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5smallvec
1.15.1crates.io↘ 0↖ 21sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03used by- gix
0.83.0 - gix-attributes
0.33.0 - gix-blame
0.13.0 - gix-config
0.56.0 - gix-date
0.15.3 - gix-filter
0.30.0 - gix-index
0.51.0 - gix-object
0.60.0 - gix-pack
0.70.0 - gix-refspec
0.41.0 - gix-revwalk
0.31.0 - gix-traverse
0.57.0 - granit-parser
0.0.2 - hi-doc
0.3.0 - hyper
1.9.0 - icu_normalizer
2.2.0 - idna
1.1.0 - jrsonnet-evaluator
0.5.0-pre98 - parking_lot_core
0.9.12 - serde-saphyr
0.0.26 - tracing-subscriber
0.3.23
- gix
socket2
0.6.3crates.io↘ 2↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723edepends onstable_deref_trait
1.2.1crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596used bystacker
0.1.24crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum640c8cdd92b6b12f5bcb1803ca3bbf5ab96e5e6b6b96b9ab77dabe9e880b3190static_assertions
1.1.0crates.io↘ 0↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543fstr_indices
0.4.4crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd08889ec5408683408db66ad89e0e1f93dff55c73a4ccc71c427d5b277ee47e6used bystrip-ansi-escapes
0.2.1crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2a8f8038e7e7969abb3f1b7c2a811225e9296da208539e0f79c5251d6cac0025depends onstrsim
0.11.1crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4fsubtle
2.6.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292used bysyn
2.0.117crates.io↘ 3↖ 27sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99used by- clap_derive
4.6.1 - displaydoc
0.2.5 - educe
0.6.0 - enum-ordinalize-derive
4.3.2 - extension-trait
1.0.2 - jiff-static
0.2.24 - jni-macros
0.22.4 - jni-sys-macros
0.4.1 - jrsonnet-gcmodule-derive
0.5.0 - jrsonnet-macros
0.5.0-pre98 - logos-codegen
0.16.1 - maybe-async
0.2.10 - ouroboros_macro
0.18.5 - prettyplease
0.2.37 - proc-macro2-diagnostics
0.10.1 - serde_derive
1.0.228 - syn-dissect-closure
0.1.0 - synstructure
0.13.2 - thiserror-impl
2.0.18 - tracing-attributes
0.1.31 - wasm-bindgen-macro-support
0.2.106 - wit-bindgen-rust
0.51.0 - wit-bindgen-rust-macro
0.51.0 - yoke-derive
0.8.2 - zerocopy-derive
0.8.48 - zerofrom-derive
0.1.7 - zerovec-derive
0.11.3
- clap_derive
syn-dissect-closure
0.1.0crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum343bae741672e4b94421cbe93f9794ba9a061434272f7e3a29ff43be26be3ac9depends onused bysync_wrapper
1.0.2crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263depends onused bysynstructure
0.13.2crates.io↘ 3↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2depends ontempfile
3.27.0crates.io↘ 5↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bdtext-size
1.1.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf18aa187839b2bdb1ad2fa35ead8c4c2976b64e4363c386d45ac0f7ee85c9233used bythiserror
2.0.18crates.io↘ 1↖ 44sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4depends onused by- gix
0.83.0 - gix-attributes
0.33.0 - gix-blame
0.13.0 - gix-config
0.56.0 - gix-config-value
0.18.0 - gix-credentials
0.38.0 - gix-diff
0.63.0 - gix-dir
0.25.0 - gix-discover
0.51.0 - gix-features
0.48.0 - gix-filter
0.30.0 - gix-fs
0.21.1 - gix-hash
0.25.0 - gix-index
0.51.0 - gix-lock
23.0.0 - gix-merge
0.16.0 - gix-object
0.60.0 - gix-odb
0.80.0 - gix-pack
0.70.0 - gix-packetline
0.21.3 - gix-path
0.12.0 - gix-pathspec
0.18.0 - gix-prompt
0.15.0 - gix-protocol
0.61.0 - gix-ref
0.63.0 - gix-refspec
0.41.0 - gix-revwalk
0.31.0 - gix-shallow
0.12.0 - gix-status
0.30.0 - gix-submodule
0.30.0 - gix-transport
0.57.0 - gix-traverse
0.57.0 - gix-url
0.36.0 - gix-worktree-state
0.30.0 - jni
0.22.4 - jrsonnet
0.5.0-pre98 - jrsonnet-evaluator
0.5.0-pre98 - jrsonnet-fmt
0.5.0-pre98 - jrsonnet-ir
0.5.0-pre98 - jrsonnet-pkg
0.5.0-pre98 - jrsonnet-rowan-parser
0.5.0-pre98 - quinn
0.11.9 - quinn-proto
0.11.14 - redox_users
0.5.2
- gix
thiserror-impl
2.0.18crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5depends onused bythread_local
1.1.9crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185depends onused bytinystr
0.8.3crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96ddepends onused bytinytemplate
1.2.1crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumbe4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bcdepends onused bytinyvec
1.11.0crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3depends ontinyvec_macros
0.1.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20used bytokio
1.52.2crates.io↘ 6↖ 9sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum110a78583f19d5cdb2c5ccf321d1290344e71313c6c37d43520d386027d18386tokio-rustls
0.26.4crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61depends ontokio-util
0.7.18crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098used bytower
0.5.3crates.io↘ 7↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4depends onused bytower-http
0.6.9crates.io↘ 10↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma28f0d049ccfaa566e14e9663d304d8577427b368cb4710a20528690287a738bdepends onused bytower-layer
0.3.3crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780eused bytower-service
0.3.3crates.io↘ 0↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3tracing
0.1.44crates.io↘ 3↖ 8sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100tracing-attributes
0.1.31crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8dadepends onused bytracing-core
0.1.36crates.io↘ 2↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdb97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79adepends ontracing-log
0.2.0crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3used bytracing-subscriber
0.3.23crates.io↘ 10↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumcb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319depends onused bytyped-path
0.12.3crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8e28f89b80c87b8fb0cf04ab448d5dd0dd0ade2f8891bae878de66a75a28600eused bytypenum
1.20.0crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43deuluru
3.1.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7c8a2469e56e6e5095c82ccd3afb98dad95f7af7929aab6d8ba8d6e0f73657dadepends onused byungrammar
1.16.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma3e5df347f0bf3ec1d670aad6ca5c6a1859cd9ea61d2113125794654ccced68fused byunicode-bom
2.0.3crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7eec5d1121208364f6793f7d2e222bf75a915c19557537745b195b253dd64217unicode-box-drawing
0.3.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2a1f97719cf40224391201fc11e7f5b0cc0ba21416367cfc914e2d45af4e42efused byunicode-ident
1.0.24crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75unicode-normalization
0.1.25crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5fd4f6878c9cb28d874b009da9e8d183b5abc80117c40bbd187a1fde336be6e8depends onused byunicode-width
0.2.2crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254unicode-xid
0.2.6crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853used byuntrusted
0.9.0crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1url
2.5.8crates.io↘ 4↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eedutf8_iter
1.0.4crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6beutf8parse
0.2.2crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821valuable
0.1.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65used byversion_check
0.9.5crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105avte
0.14.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum231fdcd7ef3037e8330d8e17e61011a2c244126acc0a982f4040ac3f9f0bc077depends onused bywalkdir
2.5.0crates.io↘ 2↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4bdepends onwant
0.3.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumbfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0edepends onused bywasi
0.11.1+wasi-snapshot-preview1crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44bused bywasip2
1.0.3+wasi-0.2.9crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6depends onused bywasip3
0.4.0+wasi-0.3.0-rc-2026-01-06crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5depends onused bywasm-bindgen
0.2.106crates.io↘ 5↖ 11sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fddepends onwasm-bindgen-futures
0.4.56crates.io↘ 5↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum836d9622d604feee9e5de25ac10e3ea5f2d65b41eac0d9ce72eb5deae707ce7cwasm-bindgen-macro
0.2.106crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3used bywasm-bindgen-macro-support
0.2.106crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumcefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40used bywasm-encoder
0.244.0crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319depends onwasm-metadata
0.244.0crates.io↘ 4↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumbb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909wasmparser
0.244.0crates.io↘ 4↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028feweb-sys
0.3.83crates.io↘ 2↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9b32828d774c412041098d182a8b38b16ea816958e07cf40eec2bc080ae137acdepends onweb-time
1.1.0crates.io↘ 2↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bbdepends onwebpki-root-certs
1.0.7crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf31141ce3fc3e300ae89b78c0dd67f9708061d1d2eda54b8209346fd6be9a92cdepends onwinapi
0.3.9crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419used bywinapi-i686-pc-windows-gnu
0.4.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6used bywinapi-util
0.1.11crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22depends onused bywinapi-x86_64-pc-windows-gnu
0.4.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183fused bywindows_aarch64_gnullvm
0.52.6crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3used bywindows_aarch64_gnullvm
0.53.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53used bywindows_aarch64_msvc
0.52.6crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469used bywindows_aarch64_msvc
0.53.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006used bywindows_i686_gnu
0.52.6crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0bused bywindows_i686_gnu
0.53.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3used bywindows_i686_gnullvm
0.52.6crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66used bywindows_i686_gnullvm
0.53.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumfa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180cused bywindows_i686_msvc
0.52.6crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66used bywindows_i686_msvc
0.53.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2used bywindows_x86_64_gnu
0.52.6crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78used bywindows_x86_64_gnu
0.53.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499used bywindows_x86_64_gnullvm
0.52.6crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0dused bywindows_x86_64_gnullvm
0.53.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1used bywindows_x86_64_msvc
0.52.6crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ecused bywindows_x86_64_msvc
0.53.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650used bywindows-link
0.2.1crates.io↘ 0↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5windows-sys
0.52.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33ddepends onused bywindows-sys
0.60.2crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcbdepends onused bywindows-sys
0.61.2crates.io↘ 1↖ 17sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fcdepends onwindows-targets
0.52.6crates.io↘ 8↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973depends onused bywindows-targets
0.53.5crates.io↘ 9↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3depends onused bywit-bindgen
0.51.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5depends onwit-bindgen
0.57.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536eused bywit-bindgen-core
0.51.0crates.io↘ 3↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dcdepends onwit-bindgen-rust
0.51.0crates.io↘ 8↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21depends onused bywit-bindgen-rust-macro
0.51.0crates.io↘ 7↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17adepends onused bywit-component
0.244.0crates.io↘ 11↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2depends onused bywit-parser
0.244.0crates.io↘ 10↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736depends onwriteable
0.6.3crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4xshell
0.2.7crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9e7290c623014758632efe00737145b6867b66292c42167f2ec381eb566a373ddepends onused byxshell-macros
0.2.7crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum32ac00cd3f8ec9c1d33fb3e7958a82df6989c42d747bd326c822b1d625283547used byxtask
0.1.0workspace↘ 9↖ 0yansi
1.0.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumcfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049yoke
0.8.2crates.io↘ 3↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumabe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9cayoke-derive
0.8.2crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumde844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858eused byzerocopy
0.8.48crates.io↘ 1↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumeed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9depends onzerocopy-derive
0.8.48crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4depends onused byzerofrom
0.1.7crates.io↘ 1↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum69faa1f2a1ea75661980b013019ed6687ed0e83d069bc1114e2cc74c6c04c4dfdepends onzerofrom-derive
0.1.7crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1used byzeroize
1.8.2crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0zerotrie
0.2.4crates.io↘ 3↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bfdepends onzerovec
0.11.6crates.io↘ 3↖ 7sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239zerovec-derive
0.11.3crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555depends onused byzip
8.6.0crates.io↘ 6↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2d04a6b5381502aa6087c94c669499eb1602eb9c5e8198e534de571f7154809bused byzlib-rs
0.6.3crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3be3d40e40a133f9c916ee3f9f4fa2d9d63435b5fbe1bfc6d9dae0aa0ada1513zmij
1.0.21crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaaused byzopfli
0.8.3crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf05cd8797d63865425ff89b5c4a48804f35ba0ce8d125800027ad6017d2b5249used by
Cargo.tomldiffbeforeafterboth--- a/Cargo.toml
+++ b/Cargo.toml
@@ -30,6 +30,7 @@
jrsonnet-types = { path = "./crates/jrsonnet-types", version = "0.5.0-pre98" }
jrsonnet-formatter = { path = "./crates/jrsonnet-formatter", version = "0.5.0-pre98" }
jrsonnet-lexer = { path = "./crates/jrsonnet-lexer", version = "0.5.0-pre98" }
+jrsonnet-pkg = { path = "./crates/jrsonnet-pkg", version = "0.5.0-pre98" }
jrsonnet-gcmodule = { version = "0.5.0" }
# Diagnostics.
# hi-doc is my library, which handles text formatting very well, but isn't polished enough yet
@@ -116,6 +117,21 @@
console_error_panic_hook = "0.1"
getrandom = "0.3.4"
+# Bundler
+tracing = "0.1.44"
+tracing-subscriber = { version = "0.3.23", features = ["env-filter"] }
+reqwest = { version = "0.13", features = [
+ "blocking",
+ "rustls",
+], default-features = false }
+zip = { version = "8", default-features = false, features = ["deflate"] }
+directories = "6.0.0"
+gix = { version = "0.83.0", features = [
+ "blocking-network-client",
+ "blocking-http-transport-reqwest-rust-tls",
+] }
+camino = { version = "1.2.2", features = ["serde1"] }
+
[workspace.lints.rust]
unsafe_op_in_unsafe_fn = "deny"
cmds/jrb/Cargo.tomldiffbeforeafterboth--- /dev/null
+++ b/cmds/jrb/Cargo.toml
@@ -0,0 +1,20 @@
+[package]
+name = "jrb"
+description = "jsonnet package manager"
+authors.workspace = true
+edition.workspace = true
+license.workspace = true
+repository.workspace = true
+version.workspace = true
+
+[lints]
+workspace = true
+
+[dependencies]
+jrsonnet-pkg.workspace = true
+
+clap = { workspace = true, features = ["derive"] }
+serde = { workspace = true }
+serde_json.workspace = true
+tracing.workspace = true
+tracing-subscriber.workspace = true
cmds/jrb/src/main.rsdiffbeforeafterboth--- /dev/null
+++ b/cmds/jrb/src/main.rs
@@ -0,0 +1,222 @@
+use std::{
+ path::{Path, PathBuf},
+ process::exit,
+};
+
+use clap::{Parser, Subcommand};
+use jrsonnet_pkg::{
+ install,
+ jsonnet_bundler::{GitSource, JsonnetFile},
+};
+use tracing::{error, info, warn};
+
+#[derive(Parser)]
+#[clap(about = "A jsonnet package manager")]
+struct Opts {
+ /// The directory used to cache packages in.
+ #[clap(long, default_value = "vendor")]
+ jsonnetpkg_home: PathBuf,
+ #[clap(subcommand)]
+ command: Command,
+}
+
+#[derive(Subcommand)]
+enum Command {
+ /// Initialize a new empty jsonnetfile
+ Init,
+ /// Install new dependencies. Existing ones are silently skipped
+ Install {
+ /// Package URIs to install
+ uris: Vec<String>,
+ /// Show what would be done without making changes
+ #[clap(long)]
+ dry_run: bool,
+ },
+ /// Update all or specific dependencies
+ Update {
+ /// Package URIs to update (all if empty)
+ uris: Vec<String>,
+ /// Show what would be done without making changes
+ #[clap(long)]
+ dry_run: bool,
+ },
+ /// Remove dependencies by name
+ Remove {
+ /// Dependency names (matched against both canonical and legacy names)
+ names: Vec<String>,
+ /// Show what would be removed without making changes
+ #[clap(long)]
+ dry_run: bool,
+ },
+}
+
+const MANIFEST: &str = "jsonnetfile.json";
+const LOCKFILE: &str = "jsonnetfile.lock.json";
+
+fn load_manifest() -> JsonnetFile {
+ let path = Path::new(MANIFEST);
+ if path.exists() {
+ JsonnetFile::load(path).unwrap_or_else(|e| {
+ error!("failed to load {MANIFEST}: {e}");
+ exit(1);
+ })
+ } else {
+ JsonnetFile {
+ version: 1,
+ dependencies: Vec::new(),
+ legacy_imports: true,
+ }
+ }
+}
+
+fn save_json(path: &Path, value: &impl serde::Serialize) {
+ let json = serde_json::to_string_pretty(value).expect("serialization failed");
+ std::fs::write(path, format!("{json}\n")).unwrap_or_else(|e| {
+ error!("failed to write {}: {e}", path.display());
+ exit(1);
+ });
+}
+
+fn load_lockfile() -> Option<JsonnetFile> {
+ let path = Path::new(LOCKFILE);
+ if path.exists() {
+ Some(JsonnetFile::load(path).unwrap_or_else(|e| {
+ error!("failed to load {LOCKFILE}: {e}");
+ exit(1);
+ }))
+ } else {
+ None
+ }
+}
+
+fn do_install(
+ manifest: &JsonnetFile,
+ lock: Option<&JsonnetFile>,
+ vendor_dir: &Path,
+ dry_run: bool,
+) {
+ let new_lock = install::install(manifest, lock, vendor_dir, dry_run).unwrap_or_else(|e| {
+ error!("install failed: {e}");
+ exit(1);
+ });
+ if !dry_run {
+ save_json(Path::new(LOCKFILE), &new_lock);
+ }
+}
+
+fn main() {
+ tracing_subscriber::fmt().init();
+
+ let opts = Opts::parse();
+
+ match opts.command {
+ Command::Init => {
+ let path = Path::new(MANIFEST);
+ if path.exists() {
+ warn!("{MANIFEST} already exists");
+ exit(1);
+ }
+ let jf = JsonnetFile {
+ version: 1,
+ dependencies: Vec::new(),
+ legacy_imports: true,
+ };
+ save_json(path, &jf);
+ }
+ Command::Install { uris, dry_run } => {
+ let mut manifest = load_manifest();
+
+ for uri in &uris {
+ let dep = GitSource::parse(uri).unwrap_or_else(|| {
+ eprintln!("failed to parse URI: {uri}");
+ exit(1);
+ });
+ let is_new = !manifest.dependencies.iter().any(|d| {
+ std::mem::discriminant(&d.source) == std::mem::discriminant(&dep.source)
+ && d.canonical_name() == dep.canonical_name()
+ });
+ if is_new {
+ manifest.dependencies.push(dep);
+ }
+ }
+
+ if !uris.is_empty() {
+ save_json(Path::new(MANIFEST), &manifest);
+ }
+
+ let lock = load_lockfile();
+ do_install(&manifest, lock.as_ref(), &opts.jsonnetpkg_home, dry_run);
+ }
+ Command::Update { uris, dry_run } => {
+ let mut manifest = load_manifest();
+
+ if !uris.is_empty() {
+ for uri in &uris {
+ let dep = GitSource::parse(uri).unwrap_or_else(|| {
+ eprintln!("failed to parse URI: {uri}");
+ exit(1);
+ });
+ if let Some(existing) = manifest
+ .dependencies
+ .iter_mut()
+ .find(|d| d.canonical_name() == dep.canonical_name())
+ {
+ *existing = dep;
+ } else {
+ manifest.dependencies.push(dep);
+ }
+ }
+ save_json(Path::new(MANIFEST), &manifest);
+ }
+
+ do_install(&manifest, None, &opts.jsonnetpkg_home, dry_run);
+ }
+ Command::Remove { names, dry_run } => {
+ let mut manifest = load_manifest();
+
+ let matched: Vec<_> = manifest
+ .dependencies
+ .iter()
+ .filter(|dep| {
+ names.iter().any(|name| {
+ dep.canonical_name() == *name || dep.legacy_link_name() == *name
+ })
+ })
+ .cloned()
+ .collect::<Vec<_>>();
+
+ if matched.is_empty() {
+ eprintln!("no matching dependencies found");
+ exit(1);
+ }
+
+ for dep in &matched {
+ let canonical = dep.canonical_name();
+ let dir = opts.jsonnetpkg_home.join(&canonical);
+ let legacy = dep.legacy_link_name();
+ let link = opts.jsonnetpkg_home.join(&legacy);
+ if dry_run {
+ info!("would remove: {canonical} ({})", dir.display());
+ } else {
+ info!("removing: {canonical}");
+ if dir.exists() {
+ let _ = std::fs::remove_dir_all(&dir);
+ }
+ if link.symlink_metadata().is_ok() {
+ let _ = std::fs::remove_file(&link);
+ }
+ }
+ }
+
+ if !dry_run {
+ manifest.dependencies.retain(|dep| {
+ !names.iter().any(|name| {
+ dep.canonical_name() == *name || dep.legacy_link_name() == *name
+ })
+ });
+ save_json(Path::new(MANIFEST), &manifest);
+ save_json(Path::new(LOCKFILE), &manifest);
+ }
+ }
+ }
+}
crates/jrsonnet-pkg/Cargo.tomldiffbeforeafterboth--- /dev/null
+++ b/crates/jrsonnet-pkg/Cargo.toml
@@ -0,0 +1,30 @@
+[package]
+name = "jrsonnet-pkg"
+description = "jsonnet-bundler jsonnetfile parser and installer"
+authors.workspace = true
+edition.workspace = true
+license.workspace = true
+repository.workspace = true
+version.workspace = true
+
+[lints]
+workspace = true
+
+[dependencies]
+serde = { workspace = true, features = ["derive"] }
+serde_json.workspace = true
+thiserror.workspace = true
+tracing.workspace = true
+
+# Source url parser
+peg.workspace = true
+
+# Gix for git repos, reqwest + zip for github
+gix.workspace = true
+reqwest.workspace = true
+zip.workspace = true
+url.workspace = true
+camino.workspace = true
+
+# Global cache dir
+directories.workspace = true
crates/jrsonnet-pkg/src/install/accessor.rsdiffbeforeafterboth--- /dev/null
+++ b/crates/jrsonnet-pkg/src/install/accessor.rs
@@ -0,0 +1,132 @@
+use std::{
+ fs::File,
+ io::{self, Read},
+ result,
+ str::FromStr as _,
+ sync::Mutex,
+};
+
+use tracing::warn;
+use zip::{ZipArchive, result::ZipError};
+
+use crate::jsonnet_bundler::{SubDir, SubDirEscapeError};
+
+#[derive(thiserror::Error, Debug)]
+pub enum Error {
+ #[error(transparent)]
+ Zip(#[from] ZipError),
+ #[error("invalid prefixed archive")]
+ ZipInvalidPrefix,
+ #[error("zip io: {0}")]
+ ZipIo(io::Error),
+ #[error("subdir not found: {0}")]
+ SubDirNotFound(SubDir),
+ #[error(transparent)]
+ SubdirEscape(#[from] SubDirEscapeError),
+}
+type Result<T, E = Error> = result::Result<T, E>;
+
+pub trait SourceAccessor {}
+
+pub struct ZipFileAccessor {
+ archive: Mutex<ZipArchive<File>>,
+ // Github archives have top-level directory with repo name
+ prefix: SubDir,
+}
+
+impl ZipFileAccessor {
+ pub fn new_prefixed(file: File) -> Result<Self> {
+ let archive = ZipArchive::new(file)?;
+ let prefix = archive.name_for_index(0).ok_or(Error::ZipInvalidPrefix)?;
+
+ Ok(Self {
+ prefix: SubDir::from_str(prefix)?,
+ archive: Mutex::new(archive),
+ })
+ }
+ /// Read a file from inside the archive's logical root (after stripping the
+ /// github-style `<repo>-<sha>/` prefix).
+ #[allow(clippy::significant_drop_tightening, reason = "false-positive")]
+ pub fn read(&self, name: &SubDir) -> Result<Option<Vec<u8>>> {
+ let prefixed = self
+ .prefix
+ .join(name)
+ .expect("prefix and name are both subdirs");
+ let mut archive = self.archive.lock().expect("not poisoned");
+ let mut v = match archive.by_name(prefixed.as_str()) {
+ Ok(v) => v,
+ Err(ZipError::FileNotFound) => return Ok(None),
+ Err(e) => return Err(e.into()),
+ };
+ if !v.is_file() {
+ return Ok(None);
+ }
+ let mut out = Vec::new();
+ v.read_to_end(&mut out).map_err(Error::ZipIo)?;
+ Ok(Some(out))
+ }
+ #[allow(clippy::significant_drop_tightening, reason = "false-positive")]
+ pub fn iter<E>(
+ &self,
+ subdir: &SubDir,
+ cb: &mut dyn FnMut(SubDir, AccessorEntry) -> Result<(), E>,
+ ) -> Result<(), E>
+ where
+ E: From<Error>,
+ {
+ let mut archive = self.archive.lock().expect("not poisoned");
+ let len = archive.len();
+
+ let mut found = false;
+ for i in 0..len {
+ let mut entry = archive.by_index(i).map_err(Error::from)?;
+ let raw = entry.name();
+ let Ok(full_name) = SubDir::from_str(raw) else {
+ warn!("invalid zip entry name: {raw}");
+ continue;
+ };
+ // Peel off the github-archive top-level `<repo>-<sha>/` prefix.
+ let Some(in_repo) = full_name.strip_prefix(&self.prefix) else {
+ continue;
+ };
+ let Some(name) = in_repo.strip_prefix(subdir) else {
+ continue;
+ };
+ found = true;
+ if name.is_empty() && entry.is_dir() {
+ continue;
+ }
+
+ cb(
+ name.clone(),
+ if entry.is_dir() {
+ AccessorEntry::Dir
+ } else if entry.is_file() {
+ let mut data = Vec::new();
+ entry.read_to_end(&mut data).map_err(Error::ZipIo)?;
+ AccessorEntry::File(data)
+ } else {
+ // TODO: Symlinks?
+ panic!("unknown accessor entry type: {name:?}")
+ },
+ )?;
+ }
+
+ if !found {
+ return Err(Error::SubDirNotFound(subdir.clone()).into());
+ }
+
+ Ok(())
+ }
+ pub fn len(&self) -> usize {
+ self.archive.lock().expect("not poisoned").len()
+ }
+ pub fn is_empty(&self) -> bool {
+ self.len() == 0
+ }
+}
+
+pub enum AccessorEntry {
+ Dir,
+ File(Vec<u8>),
+}
crates/jrsonnet-pkg/src/install/git.rsdiffbeforeafterboth--- /dev/null
+++ b/crates/jrsonnet-pkg/src/install/git.rs
@@ -0,0 +1,212 @@
+#![allow(clippy::result_large_err)]
+
+use std::{collections::HashSet, fs, path::Path};
+
+use gix::{
+ bstr::{self, ByteSlice},
+ interrupt, progress,
+ remote::{self, ref_map},
+};
+use tracing::info;
+
+use super::{Error, LocalExtraction, ResolveResult, Result, VendorSource, cache_dir};
+use crate::jsonnet_bundler::{Dependency, GitSource, JsonnetFile, Source, SubDir};
+
+fn repo_cache_path(remote: &GitSource) -> Result<std::path::PathBuf> {
+ Ok(cache_dir("git")?.join(&remote.host).join(&remote.repo))
+}
+
+fn ensure_repo(remote: &GitSource) -> Result<gix::Repository> {
+ let cache_path = repo_cache_path(remote)?;
+
+ if cache_path.exists() {
+ if let Ok(repo) = gix::open(&cache_path) {
+ fetch_remote(&repo, &remote.remote())?;
+ return Ok(repo);
+ }
+ fs::remove_dir_all(&cache_path).map_err(|e| Error::Io(cache_path.clone(), e))?;
+ }
+
+ fs::create_dir_all(cache_path.parent().expect("has parent"))
+ .map_err(|e| Error::Io(cache_path.clone(), e))?;
+
+ let mut clone = gix::prepare_clone_bare(remote.remote(), &cache_path)?;
+ let (repo, _) = clone.fetch_only(progress::Discard, &interrupt::IS_INTERRUPTED)?;
+ fetch_remote(&repo, &remote.remote())?;
+
+ Ok(repo)
+}
+
+fn fetch_remote(repo: &gix::Repository, remote: &str) -> Result<(), Error> {
+ repo.remote_at(remote)?
+ .with_refspecs(["+refs/*:refs/*"], remote::Direction::Fetch)?
+ .connect(remote::Direction::Fetch)?
+ .prepare_fetch(progress::Discard, ref_map::Options::default())?
+ .receive(progress::Discard, &interrupt::IS_INTERRUPTED)?;
+ Ok(())
+}
+
+fn extract_tree(
+ repo: &gix::Repository,
+ tree: &gix::Tree<'_>,
+ subdir: &SubDir,
+ dest: &Path,
+) -> Result<(), Error> {
+ let target_tree;
+ let tree = if subdir.is_empty() {
+ tree
+ } else {
+ let mut t = tree.clone();
+ let entry = t
+ .peel_to_entry_by_path(subdir.as_path().as_std_path())?
+ .ok_or_else(|| Error::SubdirNotFound(subdir.to_string()))?;
+ target_tree = entry.object()?.into_tree();
+ &target_tree
+ };
+
+ let files = tree.traverse().breadthfirst.files()?;
+
+ for entry in &files {
+ if !entry.mode.is_blob() {
+ continue;
+ }
+ let rel_path = entry
+ .filepath
+ .to_str()
+ .map_err(|_| Error::InvalidPath(entry.filepath.to_string()))?;
+ let file_path = dest.join(rel_path);
+
+ if let Some(parent) = file_path.parent() {
+ fs::create_dir_all(parent).map_err(|e| Error::Io(parent.to_owned(), e))?;
+ }
+
+ let blob = repo.find_object(entry.oid)?;
+ fs::write(&file_path, &blob.data).map_err(|e| Error::Io(file_path, e))?;
+ }
+
+ Ok(())
+}
+
+fn resolve_version<'r>(repo: &'r gix::Repository, version: &str) -> Result<gix::Id<'r>> {
+ let spec: &bstr::BStr = version.into();
+ if let Ok(id) = repo.rev_parse_single(spec) {
+ return Ok(id);
+ }
+ for prefix in ["refs/heads/", "refs/tags/"] {
+ let refname = format!("{prefix}{version}");
+ if let Ok(r) = repo.find_reference(&refname) {
+ return Ok(r.into_fully_peeled_id()?);
+ }
+ }
+ Ok(repo.rev_parse_single(spec)?)
+}
+
+fn read_blob_at_path(
+ repo: &gix::Repository,
+ tree: &gix::Tree<'_>,
+ path: &SubDir,
+) -> Option<Vec<u8>> {
+ let mut t = tree.clone();
+ let entry = t
+ .peel_to_entry_by_path(path.as_path().as_std_path())
+ .ok()??;
+ let blob = repo.find_object(entry.oid()).ok()?;
+ Some(blob.data.clone())
+}
+
+fn collect_tree_deps(
+ repo: &gix::Repository,
+ tree: &gix::Tree<'_>,
+ dir: &SubDir,
+ git_deps: &mut Vec<Dependency>,
+ local_extractions: &mut Vec<LocalExtraction>,
+ visited: &mut HashSet<SubDir>,
+) {
+ if !visited.insert(dir.clone()) {
+ return;
+ }
+
+ let manifest_path = dir
+ .join("jsonnetfile.json")
+ .expect("appending a literal filename keeps it within parent");
+ let Some(data) = read_blob_at_path(repo, tree, &manifest_path) else {
+ return;
+ };
+ let Ok(manifest) = serde_json::from_slice::<JsonnetFile>(&data) else {
+ return;
+ };
+
+ for dep in manifest.dependencies {
+ match &dep.source {
+ Source::Git(_) => git_deps.push(dep),
+ Source::Local(local) => {
+ let Ok(child_dir) = local.resolve_under(dir) else {
+ info!("local source {local} escapes its package; skipping");
+ continue;
+ };
+ let name = child_dir
+ .file_name()
+ .map_or_else(|| local.to_string(), str::to_owned);
+ local_extractions.push(LocalExtraction {
+ tree_path: child_dir.clone(),
+ name,
+ });
+ collect_tree_deps(repo, tree, &child_dir, git_deps, local_extractions, visited);
+ }
+ }
+ }
+}
+
+pub(super) fn resolve(
+ git_source: &GitSource,
+ version: Option<&str>,
+) -> Result<ResolveResult, Error> {
+ info!("fetching via git: {}", git_source.remote());
+ let repo = ensure_repo(git_source)?;
+ let id = match version {
+ Some(v) => resolve_version(&repo, v)?,
+ None => repo.head_id()?,
+ };
+ let commit = repo.find_object(id)?.into_commit();
+ let tree = commit.tree()?;
+
+ let mut transitive_git_deps = Vec::new();
+ let mut local_extractions = Vec::new();
+ let mut visited = HashSet::new();
+ collect_tree_deps(
+ &repo,
+ &tree,
+ &git_source.subdir,
+ &mut transitive_git_deps,
+ &mut local_extractions,
+ &mut visited,
+ );
+
+ let repo_path = repo_cache_path(git_source)?;
+ let sha = id.to_string();
+
+ Ok(ResolveResult {
+ version: sha.clone(),
+ transitive_git_deps,
+ local_extractions,
+ source: VendorSource::GitTree {
+ repo_path,
+ commit_sha: sha,
+ subdir: git_source.subdir.clone(),
+ },
+ })
+}
+
+pub(super) fn extract(
+ repo_path: &Path,
+ commit_sha: &str,
+ subdir: &SubDir,
+ dest: &Path,
+) -> Result<(), Error> {
+ let repo = gix::open(repo_path)?;
+ let spec: &bstr::BStr = commit_sha.into();
+ let id = repo.rev_parse_single(spec)?;
+ let commit = repo.find_object(id)?.into_commit();
+ let tree = commit.tree()?;
+ extract_tree(&repo, &tree, subdir, dest)
+}
crates/jrsonnet-pkg/src/install/github.rsdiffbeforeafterboth--- /dev/null
+++ b/crates/jrsonnet-pkg/src/install/github.rs
@@ -0,0 +1,190 @@
+#![allow(clippy::result_large_err)]
+
+use std::{
+ collections::HashSet,
+ fs::{self, File},
+ io::Write as _,
+ path::{Path, PathBuf},
+};
+
+use reqwest::{blocking::Response, header};
+use tracing::{debug, info};
+
+use super::{
+ Error, LocalExtraction, ResolveResult, Result, VendorSource,
+ accessor::{AccessorEntry, ZipFileAccessor},
+};
+use crate::{
+ install::{PKG_USER_AGENT, cache_dir},
+ jsonnet_bundler::{Dependency, GitSource, JsonnetFile, Source, SubDir},
+};
+
+fn is_sha(s: &str) -> bool {
+ s.len() == 40 && s.bytes().all(|b| b.is_ascii_hexdigit())
+}
+
+fn commit_cache_path(source: &GitSource, sha: &str) -> Result<PathBuf> {
+ Ok(cache_dir("github")?
+ .join(source.plain_repo_name())
+ .join(format!("{sha}.zip")))
+}
+
+fn resolve_sha(source: &GitSource, version: &str) -> Result<String> {
+ let url = format!(
+ "https://api.github.com/repos/{}/commits/{}",
+ source.plain_repo_name(),
+ version
+ );
+ let response = reqwest::blocking::Client::new()
+ .get(&url)
+ .header(header::ACCEPT, "application/vnd.github.sha")
+ .header(header::USER_AGENT, PKG_USER_AGENT)
+ .send()
+ .and_then(Response::error_for_status)?;
+ let sha = response.text()?;
+ Ok(sha.trim().to_owned())
+}
+
+fn fetch_zip(source: &GitSource, sha: &str) -> Result<ZipFileAccessor> {
+ let cached = commit_cache_path(source, sha)?;
+ if cached.exists() {
+ debug!("using cached archive {}", cached.display());
+ return Ok(ZipFileAccessor::new_prefixed(
+ File::open(&cached).map_err(|e| Error::Io(cached.clone(), e))?,
+ )?);
+ }
+
+ let url = format!(
+ "https://github.com/{}/archive/{}.zip",
+ source.plain_repo_name(),
+ sha
+ );
+ info!("downloading {url}");
+
+ let bytes = reqwest::blocking::Client::new()
+ .get(&url)
+ .header(header::USER_AGENT, PKG_USER_AGENT)
+ .send()
+ .and_then(Response::error_for_status)?
+ .bytes()?;
+
+ if let Some(parent) = cached.parent() {
+ fs::create_dir_all(parent).map_err(|e| Error::Io(parent.to_owned(), e))?;
+ }
+ let mut downloaded = File::create_new(&cached).map_err(|e| Error::Io(cached.clone(), e))?;
+ downloaded
+ .write_all(&bytes)
+ .map_err(|e| Error::Io(cached.clone(), e))?;
+
+ Ok(ZipFileAccessor::new_prefixed(downloaded)?)
+}
+
+fn open_cached_zip(zip_path: &Path) -> Result<ZipFileAccessor> {
+ Ok(ZipFileAccessor::new_prefixed(
+ File::open(zip_path).map_err(|e| Error::Io(zip_path.to_owned(), e))?,
+ )?)
+}
+
+fn extract_subdir(archive: &ZipFileAccessor, subdir: &SubDir, dest: &Path) -> Result<()> {
+ archive.iter(subdir, &mut |name, entry| {
+ let target = dest.join(name);
+ match entry {
+ AccessorEntry::Dir => {
+ fs::create_dir_all(&target).map_err(|e| Error::Io(target, e))?;
+ }
+ AccessorEntry::File(data) => {
+ if let Some(parent) = target.parent() {
+ fs::create_dir_all(parent).map_err(|e| Error::Io(parent.to_owned(), e))?;
+ }
+ fs::write(&target, &data).map_err(|e| Error::Io(target, e))?;
+ }
+ }
+ Ok(())
+ })
+}
+
+fn collect_archive_deps(
+ archive: &ZipFileAccessor,
+ dir: &SubDir,
+ git_deps: &mut Vec<Dependency>,
+ local_extractions: &mut Vec<LocalExtraction>,
+ visited: &mut HashSet<SubDir>,
+) -> Result<()> {
+ if !visited.insert(dir.clone()) {
+ return Ok(());
+ }
+
+ let manifest_path = dir
+ .join("jsonnetfile.json")
+ .expect("appending a literal filename keeps it within parent");
+
+ let Some(data) = archive.read(&manifest_path)? else {
+ return Ok(());
+ };
+ let Ok(manifest) = serde_json::from_slice::<JsonnetFile>(&data) else {
+ return Ok(());
+ };
+
+ for dep in manifest.dependencies {
+ match &dep.source {
+ Source::Git(_) => git_deps.push(dep),
+ Source::Local(local) => {
+ let Ok(child_dir) = local.resolve_under(dir) else {
+ tracing::info!("local source {local} escapes its package; skipping");
+ continue;
+ };
+ let name = child_dir
+ .file_name()
+ .map_or_else(|| local.to_string(), str::to_owned);
+ local_extractions.push(LocalExtraction {
+ tree_path: child_dir.clone(),
+ name,
+ });
+ collect_archive_deps(archive, &child_dir, git_deps, local_extractions, visited)?;
+ }
+ }
+ }
+ Ok(())
+}
+
+pub(super) fn resolve(source: &GitSource, version: Option<&str>) -> Result<ResolveResult> {
+ let version_str = version.unwrap_or("HEAD");
+ let sha = if is_sha(version_str) {
+ version_str.to_owned()
+ } else {
+ let resolved = resolve_sha(source, version_str)?;
+ info!("resolved {version_str} to {resolved}");
+ resolved
+ };
+
+ let archive = fetch_zip(source, &sha)?;
+
+ let mut transitive_git_deps = Vec::new();
+ let mut local_extractions = Vec::new();
+ let mut visited = HashSet::new();
+ collect_archive_deps(
+ &archive,
+ &source.subdir,
+ &mut transitive_git_deps,
+ &mut local_extractions,
+ &mut visited,
+ )?;
+
+ let zip_path = commit_cache_path(source, &sha)?;
+
+ Ok(ResolveResult {
+ version: sha.clone(),
+ transitive_git_deps,
+ local_extractions,
+ source: VendorSource::GithubZip {
+ zip_path,
+ commit_sha: sha,
+ subdir: source.subdir.clone(),
+ },
+ })
+}
+
+pub(super) fn extract(zip_path: &Path, subdir: &SubDir, dest: &Path) -> Result<()> {
+ let archive = open_cached_zip(zip_path)?;
+ extract_subdir(&archive, subdir, dest)
+}
crates/jrsonnet-pkg/src/install/mod.rsdiffbeforeafterboth--- /dev/null
+++ b/crates/jrsonnet-pkg/src/install/mod.rs
@@ -0,0 +1,406 @@
+#![allow(clippy::result_large_err)]
+
+pub mod accessor;
+mod git;
+mod github;
+
+use std::{
+ collections::{BTreeMap, HashSet},
+ fs,
+ path::{Path, PathBuf},
+ result,
+};
+
+use camino::Utf8PathBuf;
+use tracing::info;
+
+use crate::jsonnet_bundler::{Dependency, GitScheme, GitSource, JsonnetFile, Source, SubDir};
+
+pub const PKG_USER_AGENT: &str = "jrsonnet-pkg (https://delta.rocks/jrsonnet)";
+
+pub fn cache_dir(subdir: &str) -> Result<std::path::PathBuf> {
+ Ok(directories::ProjectDirs::from("rocks", "delta", "jrsonnet")
+ .ok_or(Error::XdgUnavailable)?
+ .cache_dir()
+ .join(subdir))
+}
+
+pub(crate) struct LocalExtraction {
+ /// Path inside the parent repo's tree where this local source lives.
+ pub tree_path: SubDir,
+ pub name: String,
+}
+
+pub(crate) struct ResolveResult {
+ pub version: String,
+ pub transitive_git_deps: Vec<Dependency>,
+ pub local_extractions: Vec<LocalExtraction>,
+ pub source: VendorSource,
+}
+
+const VERSION_FILE: &str = ".version";
+
+/// How to populate a vendor path.
+pub enum VendorSource {
+ GitTree {
+ repo_path: PathBuf,
+ commit_sha: String,
+ subdir: SubDir,
+ },
+ GithubZip {
+ zip_path: PathBuf,
+ commit_sha: String,
+ subdir: SubDir,
+ },
+ Symlink(Utf8PathBuf),
+}
+
+impl VendorSource {
+ fn with_subdir(&self, new_subdir: SubDir) -> Self {
+ match self {
+ VendorSource::GitTree {
+ repo_path,
+ commit_sha,
+ ..
+ } => VendorSource::GitTree {
+ repo_path: repo_path.clone(),
+ commit_sha: commit_sha.clone(),
+ subdir: new_subdir,
+ },
+ VendorSource::GithubZip {
+ zip_path,
+ commit_sha,
+ ..
+ } => VendorSource::GithubZip {
+ zip_path: zip_path.clone(),
+ commit_sha: commit_sha.clone(),
+ subdir: new_subdir,
+ },
+ VendorSource::Symlink(target) => VendorSource::Symlink(target.clone()),
+ }
+ }
+}
+
+pub struct InstallPlan {
+ pub lock: JsonnetFile,
+ /// vendor-relative path -> how to obtain it.
+ pub entries: BTreeMap<Utf8PathBuf, VendorSource>,
+}
+
+pub fn install(
+ manifest: &JsonnetFile,
+ lock: Option<&JsonnetFile>,
+ vendor_dir: &Path,
+ dry_run: bool,
+) -> Result<JsonnetFile, Error> {
+ let plan = resolve(manifest, lock)?;
+ execute(&plan, vendor_dir, dry_run)?;
+ Ok(plan.lock)
+}
+
+pub fn resolve(manifest: &JsonnetFile, lock: Option<&JsonnetFile>) -> Result<InstallPlan, Error> {
+ let mut plan = InstallPlan {
+ lock: JsonnetFile {
+ version: manifest.version,
+ dependencies: Vec::new(),
+ legacy_imports: manifest.legacy_imports,
+ },
+ entries: BTreeMap::new(),
+ };
+ let mut installed = HashSet::new();
+
+ resolve_deps(
+ &manifest.dependencies,
+ lock,
+ manifest.legacy_imports,
+ &mut plan,
+ &mut installed,
+ )?;
+
+ Ok(plan)
+}
+
+fn is_up_to_date(dest: &Path, version: &str) -> bool {
+ fs::read_to_string(dest.join(VERSION_FILE)).is_ok_and(|v| v.trim() == version)
+}
+
+fn write_version(dest: &Path, version: &str) -> Result<(), Error> {
+ fs::write(dest.join(VERSION_FILE), format!("{version}\n"))
+ .map_err(|e| Error::Io(dest.join(VERSION_FILE), e))
+}
+
+pub fn execute(plan: &InstallPlan, vendor_dir: &Path, dry_run: bool) -> Result<(), Error> {
+ if !dry_run {
+ for (path, source) in &plan.entries {
+ let dest = vendor_dir.join(path);
+ match source {
+ VendorSource::GitTree {
+ repo_path,
+ commit_sha,
+ subdir,
+ } => {
+ if is_up_to_date(&dest, commit_sha) {
+ continue;
+ }
+ info!("extract {path}");
+ if dest.exists() {
+ fs::remove_dir_all(&dest).map_err(|e| Error::Io(dest.clone(), e))?;
+ }
+ fs::create_dir_all(&dest).map_err(|e| Error::Io(dest.clone(), e))?;
+ git::extract(repo_path, commit_sha, subdir, &dest)?;
+ write_version(&dest, commit_sha)?;
+ }
+ VendorSource::GithubZip {
+ zip_path,
+ commit_sha,
+ subdir,
+ } => {
+ if is_up_to_date(&dest, commit_sha) {
+ continue;
+ }
+ info!("extract {path}");
+ if dest.exists() {
+ fs::remove_dir_all(&dest).map_err(|e| Error::Io(dest.clone(), e))?;
+ }
+ fs::create_dir_all(&dest).map_err(|e| Error::Io(dest.clone(), e))?;
+ github::extract(zip_path, subdir, &dest)?;
+ write_version(&dest, commit_sha)?;
+ }
+ VendorSource::Symlink(_) => {}
+ }
+ }
+ for (path, source) in &plan.entries {
+ if let VendorSource::Symlink(target) = source {
+ let dest = vendor_dir.join(path);
+ if dest
+ .symlink_metadata()
+ .is_ok_and(|m| m.file_type().is_symlink())
+ {
+ if fs::read_link(&dest).is_ok_and(|t| t == target.as_std_path()) {
+ continue;
+ }
+ fs::remove_file(&dest).map_err(|e| Error::Io(dest.clone(), e))?;
+ }
+ info!("symlink {path} -> {target}");
+ std::os::unix::fs::symlink(target.as_std_path(), &dest)
+ .map_err(|e| Error::Io(dest.clone(), e))?;
+ }
+ }
+ }
+ prune(plan, vendor_dir, dry_run)?;
+ Ok(())
+}
+
+fn prune(plan: &InstallPlan, vendor_dir: &Path, dry_run: bool) -> Result<(), Error> {
+ if !vendor_dir.is_dir() {
+ return Ok(());
+ }
+ prune_recursive(plan, vendor_dir, vendor_dir, dry_run)
+}
+
+fn prune_recursive(
+ plan: &InstallPlan,
+ vendor_dir: &Path,
+ dir: &Path,
+ dry_run: bool,
+) -> Result<(), Error> {
+ let entries = fs::read_dir(dir).map_err(|e| Error::Io(dir.to_owned(), e))?;
+ for entry in entries {
+ let entry = entry.map_err(|e| Error::Io(dir.to_owned(), e))?;
+ let path = entry.path();
+ let rel = path
+ .strip_prefix(vendor_dir)
+ .expect("path is under vendor_dir");
+ let Ok(rel) = Utf8PathBuf::try_from(rel.to_owned()) else {
+ info!("prune (non-utf8) {}", rel.display());
+ continue;
+ };
+
+ if plan.entries.contains_key(&rel) {
+ continue;
+ }
+
+ let ft = entry.file_type().map_err(|e| Error::Io(path.clone(), e))?;
+ if ft.is_symlink() {
+ info!("prune {rel}");
+ if !dry_run {
+ fs::remove_file(&path).map_err(|e| Error::Io(path, e))?;
+ }
+ } else if ft.is_dir() {
+ let prefix: Utf8PathBuf = format!("{rel}/").into();
+ let has_descendants = plan
+ .entries
+ .range(prefix.clone()..)
+ .next()
+ .is_some_and(|(k, _)| k.starts_with(&prefix));
+ if has_descendants {
+ prune_recursive(plan, vendor_dir, &path, dry_run)?;
+ } else {
+ info!("prune {rel}");
+ if !dry_run {
+ fs::remove_dir_all(&path).map_err(|e| Error::Io(path, e))?;
+ }
+ }
+ } else {
+ info!("prune {rel}");
+ if !dry_run {
+ fs::remove_file(&path).map_err(|e| Error::Io(path, e))?;
+ }
+ }
+ }
+
+ if !dry_run
+ && dir != vendor_dir
+ && let Ok(mut entries) = fs::read_dir(dir)
+ && entries.next().is_none()
+ {
+ let _ = fs::remove_dir(dir);
+ }
+
+ Ok(())
+}
+
+fn resolve_one(git_source: &GitSource, version: Option<&str>) -> Result<ResolveResult, Error> {
+ if git_source.host == "github.com" && git_source.scheme == GitScheme::Https {
+ match github::resolve(git_source, version) {
+ Ok(result) => return Ok(result),
+ Err(e) => {
+ info!("github archive failed ({e}), falling back to git");
+ }
+ }
+ }
+ git::resolve(git_source, version)
+}
+
+fn locked_version<'a>(dep: &Dependency, lock: Option<&'a JsonnetFile>) -> Option<&'a str> {
+ let lock = lock?;
+ let key = dep.canonical_name();
+ lock.dependencies
+ .iter()
+ .find(|d| d.canonical_name() == key)
+ .and_then(|d| d.version.as_deref())
+}
+
+fn resolve_deps(
+ deps: &[Dependency],
+ lock: Option<&JsonnetFile>,
+ legacy_imports: bool,
+ plan: &mut InstallPlan,
+ installed: &mut HashSet<Utf8PathBuf>,
+) -> Result<(), Error> {
+ for dep in deps {
+ let Source::Git(git_source) = &dep.source else {
+ continue;
+ };
+
+ let canonical = dep.canonical_name();
+ if !installed.insert(canonical.clone()) {
+ continue;
+ }
+
+ let version = locked_version(dep, lock).or(dep.version.as_deref());
+
+ info!(
+ "resolving {canonical} (version: {})",
+ version.unwrap_or("<TBD>")
+ );
+
+ let result = resolve_one(git_source, version)?;
+
+ plan.lock.dependencies.push(Dependency {
+ source: dep.source.clone(),
+ version: Some(result.version),
+ sum: dep.sum.clone(),
+ name: dep.name.clone(),
+ single: dep.single,
+ });
+
+ let mut repo_base = Utf8PathBuf::from(git_source.host.as_str());
+ repo_base.push(git_source.plain_repo_name());
+
+ // Legacy symlink for the dep. Skipped if `legacyImports: false`, unless
+ // the user explicitly set `dep.name` (which is always honored).
+ if legacy_imports || dep.name.is_some() {
+ let legacy = Utf8PathBuf::from(dep.legacy_link_name());
+ if legacy != canonical {
+ plan.entries
+ .insert(legacy, VendorSource::Symlink(canonical.clone()));
+ }
+ }
+
+ for extraction in &result.local_extractions {
+ let extraction_canonical = repo_base.join(&extraction.tree_path);
+ plan.entries.insert(
+ extraction_canonical.clone(),
+ result.source.with_subdir(extraction.tree_path.clone()),
+ );
+ if legacy_imports {
+ let extraction_name = Utf8PathBuf::from(&extraction.name);
+ if extraction_name != extraction_canonical {
+ plan.entries
+ .insert(extraction_name, VendorSource::Symlink(extraction_canonical));
+ }
+ }
+ }
+
+ // Main entry (after local extractions used with_subdir)
+ plan.entries.insert(canonical, result.source);
+
+ resolve_deps(
+ &result.transitive_git_deps,
+ lock,
+ legacy_imports,
+ plan,
+ installed,
+ )?;
+ }
+
+ Ok(())
+}
+
+#[derive(Debug, thiserror::Error)]
+pub enum Error {
+ #[error("io error for {0}: {1}")]
+ Io(PathBuf, std::io::Error),
+ #[error("failed to discover xdg directories")]
+ XdgUnavailable,
+ #[error("git clone failed: {0}")]
+ GitClone(#[from] gix::clone::Error),
+ #[error(transparent)]
+ GitRemote(#[from] gix::remote::init::Error),
+ #[error(transparent)]
+ GitConnect(#[from] gix::remote::connect::Error),
+ #[error(transparent)]
+ GitFetchPrepare(#[from] gix::remote::fetch::prepare::Error),
+ #[error(transparent)]
+ GitRemoteFetch(#[from] gix::remote::fetch::Error),
+ #[error(transparent)]
+ GitCloneFetch(#[from] gix::clone::fetch::Error),
+ #[error(transparent)]
+ GitFindObject(#[from] gix::object::find::existing::Error),
+ #[error(transparent)]
+ GitTraverse(#[from] gix::traverse::tree::breadthfirst::Error),
+ #[error(transparent)]
+ GitHead(#[from] gix::reference::head_id::Error),
+ #[error(transparent)]
+ GitCommit(#[from] gix::object::commit::Error),
+ #[error(transparent)]
+ GitRevparse(#[from] gix::revision::spec::parse::single::Error),
+ #[error(transparent)]
+ GitRefspec(#[from] gix::refspec::parse::Error),
+ #[error(transparent)]
+ GitPeel(#[from] gix::reference::peel::Error),
+ #[error(transparent)]
+ GitOpen(#[from] gix::open::Error),
+ #[error("http error: {0}")]
+ Http(#[from] reqwest::Error),
+ #[error("zip error: {0}")]
+ Zip(Box<zip::result::ZipError>),
+ #[error(transparent)]
+ Accessor(#[from] accessor::Error),
+ #[error("unknown subdir: {0}")]
+ SubdirNotFound(String),
+ #[error("invalid path in tree: {0}")]
+ InvalidPath(String),
+}
+pub(crate) type Result<T, E = Error> = result::Result<T, E>;
crates/jrsonnet-pkg/src/jsonnet_bundler.rsdiffbeforeafterboth--- /dev/null
+++ b/crates/jrsonnet-pkg/src/jsonnet_bundler.rs
@@ -0,0 +1,883 @@
+use std::{fmt, path::Path, str::FromStr};
+
+use camino::{Utf8Component, Utf8Path, Utf8PathBuf};
+use serde::{Deserialize, Serialize, de};
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct JsonnetFile {
+ pub version: u32,
+ #[serde(default)]
+ pub dependencies: Vec<Dependency>,
+ #[serde(default = "legacy_imports_default", rename = "legacyImports")]
+ pub legacy_imports: bool,
+}
+
+fn legacy_imports_default() -> bool {
+ true
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct Dependency {
+ pub source: Source,
+ #[serde(default, skip_serializing_if = "Option::is_none")]
+ pub version: Option<String>,
+ #[serde(default, skip_serializing_if = "Option::is_none")]
+ pub sum: Option<String>,
+ #[serde(default, skip_serializing_if = "Option::is_none")]
+ pub name: Option<String>,
+ #[serde(default, skip_serializing_if = "is_false")]
+ pub single: bool,
+}
+
+#[allow(clippy::trivially_copy_pass_by_ref, reason = "serde")]
+fn is_false(v: &bool) -> bool {
+ !v
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+#[serde(rename_all = "lowercase")]
+pub enum Source {
+ Git(GitSource),
+ Local(LocalSource),
+}
+
+#[derive(Debug, Clone, PartialEq, Eq)]
+pub enum GitScheme {
+ Https,
+ Ssh,
+}
+
+/// Wrapper over `Utf8PathBuf`, ensuring it can't escape to either an absolute
+/// path or a parent directory.
+#[derive(Debug, Clone, Default, PartialEq, Eq, Hash, PartialOrd, Ord)]
+pub struct SubDir(Utf8PathBuf);
+
+#[derive(Debug, thiserror::Error)]
+#[error("subdir attempted to escape")]
+pub struct SubDirEscapeError;
+
+impl FromStr for SubDir {
+ type Err = SubDirEscapeError;
+ fn from_str(s: &str) -> Result<Self, Self::Err> {
+ Self::try_from(Utf8PathBuf::from(s))
+ }
+}
+impl TryFrom<Utf8PathBuf> for SubDir {
+ type Error = SubDirEscapeError;
+
+ fn try_from(buf: Utf8PathBuf) -> Result<Self, Self::Error> {
+ for ele in buf.components() {
+ match ele {
+ Utf8Component::Prefix(_) | Utf8Component::RootDir | Utf8Component::ParentDir => {
+ return Err(SubDirEscapeError);
+ }
+ Utf8Component::CurDir | Utf8Component::Normal(_) => {}
+ }
+ }
+ Ok(Self(buf))
+ }
+}
+
+impl SubDir {
+ pub fn empty() -> Self {
+ Self(Utf8PathBuf::new())
+ }
+ pub fn as_str(&self) -> &str {
+ self.0.as_str()
+ }
+ pub fn as_path(&self) -> &Utf8Path {
+ &self.0
+ }
+ pub fn into_inner(self) -> Utf8PathBuf {
+ self.0
+ }
+ pub fn join(&self, other: impl AsRef<Utf8Path>) -> Result<SubDir, SubDirEscapeError> {
+ SubDir::try_from(self.0.join(other))
+ }
+ pub fn strip_prefix(&self, prefix: &SubDir) -> Option<SubDir> {
+ Some(
+ SubDir::try_from(self.0.strip_prefix(&prefix.0).ok()?.to_owned())
+ .expect("stripping would not result in escape"),
+ )
+ }
+ pub fn is_empty(&self) -> bool {
+ self.0.as_str().is_empty()
+ }
+ pub fn file_name(&self) -> Option<&str> {
+ self.0.file_name()
+ }
+ /// Strip a trailing `.git` extension, if any.
+ #[must_use]
+ pub fn without_git_suffix(&self) -> SubDir {
+ let mut p = self.0.clone();
+ if p.extension() == Some("git") {
+ p.set_extension("");
+ }
+ SubDir(p)
+ }
+}
+impl AsRef<Utf8Path> for SubDir {
+ fn as_ref(&self) -> &Utf8Path {
+ &self.0
+ }
+}
+impl AsRef<Path> for SubDir {
+ fn as_ref(&self) -> &Path {
+ self.0.as_ref()
+ }
+}
+impl AsRef<str> for SubDir {
+ fn as_ref(&self) -> &str {
+ self.0.as_str()
+ }
+}
+impl fmt::Display for SubDir {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ write!(f, "{}", self.0)
+ }
+}
+impl PartialEq<str> for SubDir {
+ fn eq(&self, other: &str) -> bool {
+ self.0.as_str() == other
+ }
+}
+impl PartialEq<&str> for SubDir {
+ fn eq(&self, other: &&str) -> bool {
+ self.0.as_str() == *other
+ }
+}
+
+/// Wrapper over `String`, guaranteeing the value is a valid host: only ASCII
+/// alphanumerics, dashes and dots, with at least one segment.
+#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
+pub struct Hostname(String);
+
+#[derive(Debug, thiserror::Error)]
+#[error("invalid hostname")]
+pub struct InvalidHostnameError;
+
+impl FromStr for Hostname {
+ type Err = InvalidHostnameError;
+
+ fn from_str(s: &str) -> Result<Self, Self::Err> {
+ if s.is_empty() || s == "." || s == ".." {
+ return Err(InvalidHostnameError);
+ }
+ for seg in s.split('.') {
+ if seg.is_empty() {
+ return Err(InvalidHostnameError);
+ }
+ if !seg.bytes().all(|b| b.is_ascii_alphanumeric() || b == b'-') {
+ return Err(InvalidHostnameError);
+ }
+ }
+ Ok(Self(s.to_owned()))
+ }
+}
+
+impl Hostname {
+ pub fn as_str(&self) -> &str {
+ &self.0
+ }
+}
+impl AsRef<str> for Hostname {
+ fn as_ref(&self) -> &str {
+ &self.0
+ }
+}
+impl AsRef<Path> for Hostname {
+ fn as_ref(&self) -> &Path {
+ self.0.as_ref()
+ }
+}
+impl AsRef<Utf8Path> for Hostname {
+ fn as_ref(&self) -> &Utf8Path {
+ self.0.as_str().into()
+ }
+}
+impl fmt::Display for Hostname {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ f.write_str(&self.0)
+ }
+}
+impl PartialEq<str> for Hostname {
+ fn eq(&self, other: &str) -> bool {
+ self.0 == other
+ }
+}
+impl PartialEq<&str> for Hostname {
+ fn eq(&self, other: &&str) -> bool {
+ self.0 == *other
+ }
+}
+
+#[derive(Debug, Clone, PartialEq, Eq)]
+pub struct GitSource {
+ pub scheme: GitScheme,
+ pub host: Hostname,
+ /// Repo path relative to host: `user/repo[.git]` (or with subgroups).
+ pub repo: SubDir,
+ /// Subdirectory within the repo. Empty means the repo root.
+ pub subdir: SubDir,
+}
+
+/// A relative path that may climb out of its package via `..` parts, but only
+/// at the head - once you go down (`SubDir` portion) you can't go back up.
+///
+/// The total upward count is bounded only at resolution time, against the
+/// containing package's depth.
+#[derive(Debug, Clone, PartialEq, Eq)]
+pub struct LocalSource {
+ pub ups: usize,
+ pub dir: SubDir,
+}
+
+impl FromStr for LocalSource {
+ // Technically incorrect, as it only rejects mid-path ../'s...
+ type Err = SubDirEscapeError;
+
+ fn from_str(s: &str) -> Result<Self, Self::Err> {
+ let mut ups = 0usize;
+ let mut rest = s;
+ loop {
+ if let Some(r) = rest.strip_prefix("./") {
+ rest = r;
+ } else if rest == "." {
+ rest = "";
+ break;
+ } else if let Some(r) = rest.strip_prefix("../") {
+ ups = ups.checked_add(1).expect("can't be longer than s length");
+ rest = r;
+ } else if rest == ".." {
+ ups = ups.checked_add(1).expect("can't be longer than s length");
+ rest = "";
+ break;
+ } else {
+ break;
+ }
+ }
+ Ok(Self {
+ ups,
+ dir: SubDir::from_str(rest)?,
+ })
+ }
+}
+
+impl fmt::Display for LocalSource {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ let mut out = String::with_capacity(self.ups * 3 + self.dir.as_str().len());
+ for _ in 0..self.ups {
+ out.push_str("../");
+ }
+ out.push_str(self.dir.as_str());
+ if out.is_empty() {
+ out.push('.');
+ } else if out.ends_with('/') {
+ out.pop();
+ }
+ // TODO: I didn't finish
+ f.write_str(&out)
+ }
+}
+
+impl LocalSource {
+ pub fn resolve_under(&self, parent: &SubDir) -> Result<SubDir, SubDirEscapeError> {
+ let mut comps: Vec<&str> = parent.as_path().components().map(|c| c.as_str()).collect();
+ if self.ups > comps.len() {
+ return Err(SubDirEscapeError);
+ }
+ comps.truncate(comps.len() - self.ups);
+ let mut buf = Utf8PathBuf::from_iter(comps);
+ buf.push(self.dir.as_path());
+ SubDir::try_from(buf)
+ }
+}
+
+impl Serialize for LocalSource {
+ fn serialize<S: serde::Serializer>(&self, ser: S) -> Result<S::Ok, S::Error> {
+ #[derive(Serialize)]
+ struct JsonLocal<'a> {
+ directory: &'a str,
+ }
+ let rendered = self.to_string();
+ JsonLocal {
+ directory: &rendered,
+ }
+ .serialize(ser)
+ }
+}
+
+impl<'de> Deserialize<'de> for LocalSource {
+ fn deserialize<D: serde::Deserializer<'de>>(de: D) -> Result<Self, D::Error> {
+ #[derive(Deserialize)]
+ struct JsonLocal {
+ directory: String,
+ }
+ let j = JsonLocal::deserialize(de)?;
+ LocalSource::from_str(&j.directory)
+ .map_err(|e| de::Error::custom(format!("invalid local path {:?}: {e}", j.directory)))
+ }
+}
+
+impl GitSource {
+ /// Repo path with the trailing `.git` (if any) stripped.
+ pub fn plain_repo_name(&self) -> SubDir {
+ self.repo.without_git_suffix()
+ }
+
+ /// Canonical install path: `host/user/repo[/subdir]`.
+ pub fn name(&self) -> SubDir {
+ let mut p = Utf8PathBuf::from(self.host.as_str());
+ p.push(self.plain_repo_name());
+ if !self.subdir.is_empty() {
+ p.push(self.subdir.as_path());
+ }
+ SubDir::try_from(p).expect("host + subdirs is a valid SubDir")
+ }
+
+ /// Last path component of `repo[/subdir]`, used as the legacy symlink name.
+ pub fn legacy_name(&self) -> String {
+ self.name()
+ .file_name()
+ .expect("name has at least one component")
+ .to_owned()
+ }
+
+ /// Git remote URL for cloning.
+ pub fn remote(&self) -> String {
+ let host = self.host.as_str();
+ let repo = self.repo.as_str();
+ match self.scheme {
+ GitScheme::Ssh => format!("ssh://git@{host}/{repo}"),
+ GitScheme::Https => format!("https://{host}/{repo}"),
+ }
+ }
+
+ /// Parse a URI like `github.com/user/repo/subdir@version` into a
+ /// `Dependency`.
+ pub fn parse(uri: &str) -> Option<Dependency> {
+ git_uri::parse(uri).ok()
+ }
+}
+
+peg::parser! {
+ grammar git_uri() for str {
+ rule host_segment() = ['a'..='z' | 'A'..='Z' | '0'..='9' | '-']+;
+ rule host() -> Hostname
+ = s:$(host_segment()++".")
+ { Hostname::from_str(s).expect("grammar restricted to valid host chars") }
+
+ // User/repo path segments. `~` is allowed for Bitbucket personal repos.
+ rule path_segment() = ['a'..='z' | 'A'..='Z' | '0'..='9' | '_' | '-' | '~']+;
+ // Subdir segments allow dots (e.g. `ksonnet.beta.3`).
+ rule subdir_segment() = ['a'..='z' | 'A'..='Z' | '0'..='9' | '_' | '-' | '.']+;
+
+ // `user[/group...]/repo.git`
+ rule repo_dotgit() -> SubDir
+ = s:$(path_segment()++"/" ".git")
+ { SubDir::from_str(s).expect("grammar restricted to subpath chars") }
+ // `user/repo` (exactly two segments, no `.git`)
+ rule repo_simple() -> SubDir
+ = s:$(path_segment() "/" path_segment())
+ { SubDir::from_str(s).expect("grammar restricted to subpath chars") }
+
+ // Subdir starts with `/`. May be empty.
+ rule subdir() -> SubDir
+ = "/" s:$(subdir_segment() ** "/") "/"?
+ { SubDir::from_str(s).expect("grammar restricted to subdir chars") }
+ / { SubDir::empty() }
+
+ rule version() -> &'input str
+ = "@" v:$([_]+) { v }
+
+
+ // git@host:path.git[/subdir][@version] (SCP style)
+ rule scp_uri() -> Dependency
+ = "git@" h:host() ":" repo:repo_dotgit() subdir:subdir()
+ v:version()?
+ {
+ make_dep(GitScheme::Ssh, h, repo, subdir, v)
+ }
+
+ // ssh://git@host/path.git[/subdir][@version]
+ rule ssh_uri() -> Dependency
+ = "ssh://git@" h:host() "/" repo:repo_dotgit() subdir:subdir()
+ v:version()?
+ {
+ make_dep(GitScheme::Ssh, h, repo, subdir, v)
+ }
+
+ // [https://]host/path.git[/subdir][@version]
+ rule https_dotgit() -> Dependency
+ = "https://"? h:host() "/" repo:repo_dotgit() subdir:subdir()
+ v:version()?
+ {
+ make_dep(GitScheme::Https, h, repo, subdir, v)
+ }
+
+ // [https://]host/user/repo[/subdir[/...]][@version]
+ rule https_simple() -> Dependency
+ = "https://"? h:host() "/" repo:repo_simple() subdir:subdir()
+ v:version()?
+ {
+ make_dep(GitScheme::Https, h, repo, subdir, v)
+ }
+
+ pub rule parse() -> Dependency
+ = ssh_uri() / scp_uri() / https_dotgit() / https_simple()
+ }
+}
+
+fn make_dep(
+ scheme: GitScheme,
+ host: Hostname,
+ repo: SubDir,
+ subdir: SubDir,
+ version: Option<&str>,
+) -> Dependency {
+ Dependency {
+ source: Source::Git(GitSource {
+ scheme,
+ host,
+ repo,
+ subdir,
+ }),
+ version: version.map(str::to_owned),
+ sum: None,
+ name: None,
+ single: false,
+ }
+}
+
+impl Dependency {
+ /// Canonical install path for deduplication and vendor extraction.
+ pub fn canonical_name(&self) -> Utf8PathBuf {
+ match &self.source {
+ Source::Git(git) => git.name().into_inner(),
+ Source::Local(local) => Utf8PathBuf::from(local.to_string()),
+ }
+ }
+
+ /// Legacy symlink name: `dep.name` override, or last path component.
+ pub fn legacy_link_name(&self) -> String {
+ if let Some(name) = &self.name {
+ return name.clone();
+ }
+ match &self.source {
+ Source::Git(git) => git.legacy_name(),
+ Source::Local(local) => local
+ .dir
+ .file_name()
+ .map_or_else(|| local.to_string(), str::to_owned),
+ }
+ }
+}
+
+impl Serialize for GitSource {
+ fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
+ #[derive(Serialize)]
+ struct JsonGit<'a> {
+ remote: String,
+ #[serde(skip_serializing_if = "str::is_empty")]
+ subdir: &'a str,
+ }
+ JsonGit {
+ remote: self.remote(),
+ subdir: self.subdir.as_str(),
+ }
+ .serialize(serializer)
+ }
+}
+
+impl<'de> Deserialize<'de> for GitSource {
+ fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
+ #[derive(Deserialize)]
+ struct JsonGit {
+ remote: String,
+ #[serde(default)]
+ subdir: String,
+ }
+ let j = JsonGit::deserialize(deserializer)?;
+
+ let parsed = GitSource::parse(&j.remote)
+ .ok_or_else(|| de::Error::custom(format!("unable to parse git url {:?}", j.remote)))?;
+ let Source::Git(mut gs) = parsed.source else {
+ unreachable!()
+ };
+
+ if !j.subdir.is_empty() {
+ gs.subdir = SubDir::from_str(j.subdir.trim_start_matches('/'))
+ .map_err(|e| de::Error::custom(format!("invalid subdir {:?}: {e}", j.subdir)))?;
+ }
+
+ Ok(gs)
+ }
+}
+
+impl JsonnetFile {
+ pub fn load(path: &Path) -> Result<Self, Error> {
+ let data = std::fs::read(path).map_err(|e| Error::Io(path.to_owned(), e))?;
+ serde_json::from_slice(&data).map_err(Error::Json)
+ }
+}
+
+#[derive(Debug)]
+pub enum Error {
+ Io(std::path::PathBuf, std::io::Error),
+ Json(serde_json::Error),
+}
+impl std::fmt::Display for Error {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ match self {
+ Error::Io(path, e) => write!(f, "{}: {e}", path.display()),
+ Error::Json(e) => write!(f, "{e}"),
+ }
+ }
+}
+impl std::error::Error for Error {}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ fn host(s: &str) -> Hostname {
+ Hostname::from_str(s).expect("test host")
+ }
+ fn sd(s: &str) -> SubDir {
+ SubDir::from_str(s).expect("test subdir")
+ }
+
+ #[test]
+ fn parse_basic() {
+ let input = r#"{
+ "version": 1,
+ "dependencies": [
+ {
+ "source": {
+ "git": {
+ "remote": "https://github.com/grafana/jsonnet-libs.git",
+ "subdir": "grafana-builder"
+ }
+ },
+ "version": "54865853ebc1f901964e25a2e7a0e4d2cb6b9648",
+ "sum": "ELsYwK+kGdzX1mee2Yy+/b2mdO4Y503BOCDkFzwmGbE="
+ }
+ ],
+ "legacyImports": false
+ }"#;
+
+ let jf: JsonnetFile = serde_json::from_str(input).unwrap();
+ assert_eq!(jf.version, 1);
+ assert!(!jf.legacy_imports);
+ assert_eq!(jf.dependencies.len(), 1);
+
+ let dep = &jf.dependencies[0];
+ let Source::Git(git) = &dep.source else {
+ panic!("expected git source");
+ };
+ assert_eq!(git.host, "github.com");
+ assert_eq!(git.repo, "grafana/jsonnet-libs.git");
+ assert_eq!(git.subdir, "grafana-builder");
+ assert_eq!(
+ git.name(),
+ "github.com/grafana/jsonnet-libs/grafana-builder"
+ );
+ assert_eq!(git.legacy_name(), "grafana-builder");
+ assert_eq!(git.remote(), "https://github.com/grafana/jsonnet-libs.git");
+ assert_eq!(
+ dep.version.as_deref(),
+ Some("54865853ebc1f901964e25a2e7a0e4d2cb6b9648")
+ );
+ }
+
+ #[test]
+ fn parse_local_source() {
+ let input = r#"{
+ "version": 1,
+ "dependencies": [
+ {
+ "source": {
+ "local": { "directory": "../shared-lib" }
+ },
+ "version": ""
+ }
+ ]
+ }"#;
+
+ let jf: JsonnetFile = serde_json::from_str(input).unwrap();
+ let dep = &jf.dependencies[0];
+ let Source::Local(local) = &dep.source else {
+ panic!("expected local source");
+ };
+ assert_eq!(local.ups, 1);
+ assert_eq!(local.dir, "shared-lib");
+ assert_eq!(local.to_string(), "../shared-lib");
+ assert!(jf.legacy_imports);
+ }
+
+ #[test]
+ fn parse_uri_github_slug() {
+ let dep = GitSource::parse("github.com/ksonnet/ksonnet-lib/ksonnet.beta.3").unwrap();
+ let Source::Git(gs) = &dep.source else {
+ panic!()
+ };
+ assert_eq!(gs.scheme, GitScheme::Https);
+ assert_eq!(gs.host, "github.com");
+ assert_eq!(gs.repo, "ksonnet/ksonnet-lib");
+ assert_eq!(gs.subdir, "ksonnet.beta.3");
+ assert_eq!(dep.version, None);
+ assert_eq!(gs.remote(), "https://github.com/ksonnet/ksonnet-lib");
+ }
+
+ #[test]
+ fn parse_uri_ssh() {
+ let dep = GitSource::parse("ssh://git@example.com/user/repo.git/foobar@v1").unwrap();
+ let Source::Git(gs) = &dep.source else {
+ panic!()
+ };
+ assert_eq!(gs.scheme, GitScheme::Ssh);
+ assert_eq!(gs.host, "example.com");
+ assert_eq!(gs.repo, "user/repo.git");
+ assert_eq!(gs.subdir, "foobar");
+ assert_eq!(dep.version.as_deref(), Some("v1"));
+ assert_eq!(gs.remote(), "ssh://git@example.com/user/repo.git");
+ }
+
+ #[test]
+ fn parse_uri_scp() {
+ let dep = GitSource::parse("git@my.host:user/repo.git/foobar@v1").unwrap();
+ let Source::Git(gs) = &dep.source else {
+ panic!()
+ };
+ assert_eq!(gs.scheme, GitScheme::Ssh);
+ assert_eq!(gs.host, "my.host");
+ assert_eq!(gs.subdir, "foobar");
+ assert_eq!(dep.version.as_deref(), Some("v1"));
+ assert_eq!(gs.remote(), "ssh://git@my.host/user/repo.git");
+ }
+
+ #[test]
+ fn parse_uri_https_explicit() {
+ let dep = GitSource::parse("https://example.com/foo/bar").unwrap();
+ let Source::Git(gs) = &dep.source else {
+ panic!()
+ };
+ assert_eq!(gs.scheme, GitScheme::Https);
+ assert_eq!(gs.host, "example.com");
+ assert_eq!(gs.repo, "foo/bar");
+ assert_eq!(gs.subdir, "");
+ assert_eq!(gs.remote(), "https://example.com/foo/bar");
+ }
+
+ #[test]
+ fn parse_uri_no_scheme() {
+ let dep = GitSource::parse("example.com/foo/bar").unwrap();
+ let Source::Git(gs) = &dep.source else {
+ panic!()
+ };
+ assert_eq!(gs.scheme, GitScheme::Https);
+ assert_eq!(gs.host, "example.com");
+ assert_eq!(gs.remote(), "https://example.com/foo/bar");
+ }
+
+ #[test]
+ fn parse_uri_path_and_version() {
+ let dep = GitSource::parse("example.com/foo/bar/baz@bat").unwrap();
+ let Source::Git(gs) = &dep.source else {
+ panic!()
+ };
+ assert_eq!(gs.repo, "foo/bar");
+ assert_eq!(gs.subdir, "baz");
+ assert_eq!(dep.version.as_deref(), Some("bat"));
+ }
+
+ #[test]
+ fn parse_uri_version_only() {
+ let dep = GitSource::parse("example.com/foo/bar@baz").unwrap();
+ let Source::Git(gs) = &dep.source else {
+ panic!()
+ };
+ assert_eq!(gs.repo, "foo/bar");
+ assert_eq!(gs.subdir, "");
+ assert_eq!(dep.version.as_deref(), Some("baz"));
+ }
+
+ #[test]
+ fn parse_uri_deep_path() {
+ let dep = GitSource::parse("example.com/foo/bar/baz/bat").unwrap();
+ let Source::Git(gs) = &dep.source else {
+ panic!()
+ };
+ assert_eq!(gs.repo, "foo/bar");
+ assert_eq!(gs.subdir, "baz/bat");
+ }
+
+ #[test]
+ fn parse_uri_subgroups() {
+ let dep = GitSource::parse("example.com/group/subgroup/repository.git").unwrap();
+ let Source::Git(gs) = &dep.source else {
+ panic!()
+ };
+ assert_eq!(gs.repo, "group/subgroup/repository.git");
+ assert_eq!(gs.plain_repo_name(), "group/subgroup/repository");
+ assert_eq!(gs.subdir, "");
+ assert_eq!(
+ gs.remote(),
+ "https://example.com/group/subgroup/repository.git"
+ );
+ }
+
+ #[test]
+ fn parse_uri_subgroup_subdir() {
+ let dep = GitSource::parse("example.com/group/subgroup/repository.git/subdir").unwrap();
+ let Source::Git(gs) = &dep.source else {
+ panic!()
+ };
+ assert_eq!(gs.plain_repo_name(), "group/subgroup/repository");
+ assert_eq!(gs.subdir, "subdir");
+ }
+
+ #[test]
+ fn parse_uri_bitbucket_personal() {
+ let dep = GitSource::parse("bitbucket.org/~user/repository.git").unwrap();
+ let Source::Git(gs) = &dep.source else {
+ panic!()
+ };
+ assert_eq!(gs.host, "bitbucket.org");
+ assert_eq!(gs.repo, "~user/repository.git");
+ assert_eq!(gs.remote(), "https://bitbucket.org/~user/repository.git");
+ }
+
+ #[test]
+ fn name_with_subdir() {
+ let gs = GitSource {
+ scheme: GitScheme::Https,
+ host: host("github.com"),
+ repo: sd("ksonnet/ksonnet-lib"),
+ subdir: sd("ksonnet.beta.3"),
+ };
+ assert_eq!(gs.name(), "github.com/ksonnet/ksonnet-lib/ksonnet.beta.3");
+ assert_eq!(gs.legacy_name(), "ksonnet.beta.3");
+ }
+
+ #[test]
+ fn name_without_subdir() {
+ let gs = GitSource {
+ scheme: GitScheme::Https,
+ host: host("github.com"),
+ repo: sd("user/repo"),
+ subdir: SubDir::empty(),
+ };
+ assert_eq!(gs.name(), "github.com/user/repo");
+ assert_eq!(gs.legacy_name(), "repo");
+ }
+
+ #[test]
+ fn defaults() {
+ let input = r#"{ "version": 1 }"#;
+ let jf: JsonnetFile = serde_json::from_str(input).unwrap();
+ assert!(jf.dependencies.is_empty());
+ assert!(jf.legacy_imports);
+ }
+
+ #[test]
+ fn roundtrip() {
+ let jf = JsonnetFile {
+ version: 1,
+ dependencies: vec![Dependency {
+ source: Source::Git(GitSource {
+ scheme: GitScheme::Https,
+ host: host("github.com"),
+ repo: sd("user/repo"),
+ subdir: sd("lib"),
+ }),
+ version: Some("main".into()),
+ sum: None,
+ name: None,
+ single: false,
+ }],
+ legacy_imports: false,
+ };
+ let json = serde_json::to_string_pretty(&jf).unwrap();
+ let parsed: JsonnetFile = serde_json::from_str(&json).unwrap();
+ assert_eq!(parsed.dependencies.len(), 1);
+ let Source::Git(gs) = &parsed.dependencies[0].source else {
+ panic!()
+ };
+ assert_eq!(gs.host, "github.com");
+ assert_eq!(gs.repo, "user/repo");
+ assert_eq!(gs.subdir, "lib");
+ }
+
+ #[test]
+ fn hostname_rejects_slash() {
+ assert!(Hostname::from_str("foo/bar").is_err());
+ assert!(Hostname::from_str("").is_err());
+ assert!(Hostname::from_str(".").is_err());
+ assert!(Hostname::from_str("..").is_err());
+ assert!(Hostname::from_str(".foo").is_err());
+ assert!(Hostname::from_str("foo.").is_err());
+ assert!(Hostname::from_str("foo..bar").is_err());
+ assert!(Hostname::from_str("foo bar").is_err());
+ assert!(Hostname::from_str("foo.bar").is_ok());
+ }
+
+ #[test]
+ fn subdir_rejects_escape() {
+ assert!(SubDir::from_str("../foo").is_err());
+ assert!(SubDir::from_str("/foo").is_err());
+ assert!(SubDir::from_str("foo/../bar").is_err());
+ assert!(SubDir::from_str("foo/bar").is_ok());
+ assert!(SubDir::from_str("").is_ok());
+ }
+
+ #[test]
+ fn local_source_parse() {
+ let l = LocalSource::from_str("../shared-lib").unwrap();
+ assert_eq!(l.ups, 1);
+ assert_eq!(l.dir, "shared-lib");
+
+ let l = LocalSource::from_str("../../foo/bar").unwrap();
+ assert_eq!(l.ups, 2);
+ assert_eq!(l.dir, "foo/bar");
+
+ let l = LocalSource::from_str("./foo").unwrap();
+ assert_eq!(l.ups, 0);
+ assert_eq!(l.dir, "foo");
+
+ let l = LocalSource::from_str(".").unwrap();
+ assert_eq!(l.ups, 0);
+ assert!(l.dir.is_empty());
+
+ let l = LocalSource::from_str("..").unwrap();
+ assert_eq!(l.ups, 1);
+ assert!(l.dir.is_empty());
+
+ // Mid-path `..` is rejected.
+ assert!(LocalSource::from_str("foo/../bar").is_err());
+ // Absolute path is rejected.
+ assert!(LocalSource::from_str("/foo").is_err());
+ }
+
+ #[test]
+ fn local_source_render_roundtrip() {
+ for s in ["../shared-lib", "../../foo/bar", "foo", "."] {
+ assert_eq!(LocalSource::from_str(s).unwrap().to_string(), s);
+ }
+ }
+
+ #[test]
+ fn local_source_resolve_under() {
+ // `../foo` from `pkg/sub` lands at `pkg/foo`.
+ let l = LocalSource::from_str("../foo").unwrap();
+ assert_eq!(l.resolve_under(&sd("pkg/sub")).unwrap(), "pkg/foo");
+
+ // Plain `foo` from `pkg/sub` lands at `pkg/sub/foo`.
+ let l = LocalSource::from_str("foo").unwrap();
+ assert_eq!(l.resolve_under(&sd("pkg/sub")).unwrap(), "pkg/sub/foo");
+
+ // Too many `..` escapes the parent.
+ let l = LocalSource::from_str("../../../foo").unwrap();
+ assert!(l.resolve_under(&sd("pkg")).is_err());
+ }
+}
crates/jrsonnet-pkg/src/lib.rsdiffbeforeafterboth--- /dev/null
+++ b/crates/jrsonnet-pkg/src/lib.rs
@@ -0,0 +1,2 @@
+pub mod install;
+pub mod jsonnet_bundler;