From b87c61609630161e8c09610aa883399ad4968609 Mon Sep 17 00:00:00 2001 From: Will Killian Date: Mon, 29 Jun 2026 10:35:46 -0400 Subject: [PATCH 01/14] feat: configure dynamic plugins through CLI Signed-off-by: Will Killian --- ATTRIBUTIONS-Rust.md | 14280 ++++++++++------ Cargo.lock | 265 +- README.md | 7 +- about.toml | 1 + crates/cli/Cargo.toml | 4 +- crates/cli/README.md | 5 + crates/cli/src/config.rs | 2 +- crates/cli/src/plugins.rs | 383 +- crates/cli/src/plugins/config_io.rs | 480 +- crates/cli/src/plugins/dynamic_editor.rs | 839 + crates/cli/src/plugins/editor_model.rs | 70 +- crates/cli/src/plugins/lifecycle.rs | 27 + crates/cli/src/plugins/schema.rs | 1416 ++ crates/cli/src/pricing.rs | 55 +- crates/cli/tests/coverage/launcher_tests.rs | 5 +- .../tests/coverage/plugins_lifecycle_tests.rs | 152 + crates/cli/tests/coverage/plugins_tests.rs | 447 +- crates/cli/tests/coverage/pricing_tests.rs | 55 + crates/core/src/plugin/dynamic/manifest.rs | 89 +- .../core/tests/unit/plugin_dynamic_tests.rs | 210 + deny.toml | 1 + docs/build-plugins/basic-guide.mdx | 7 + .../plugin-configuration-files.mdx | 66 +- examples/rust-native-plugin/README.md | 12 + .../rust-native-plugin/config.schema.json | 39 + examples/rust-native-plugin/relay-plugin.toml | 5 +- skills/nemo-relay-build-plugin/SKILL.md | 7 + 27 files changed, 13138 insertions(+), 5791 deletions(-) create mode 100644 crates/cli/src/plugins/dynamic_editor.rs create mode 100644 crates/cli/src/plugins/schema.rs create mode 100644 examples/rust-native-plugin/config.schema.json diff --git a/ATTRIBUTIONS-Rust.md b/ATTRIBUTIONS-Rust.md index 7f8a2084b..c5e65d0f1 100644 --- a/ATTRIBUTIONS-Rust.md +++ b/ATTRIBUTIONS-Rust.md @@ -9,6 +9,215 @@ This project uses the following third-party libraries. Each library is open-sour This file is automatically generated. Please do not edit it directly. Regenerate with `./scripts/generate_attributions.sh rust`. +## ahash - 0.8.12 +**Repository URL**: https://github.com/tkaitchuck/ahash +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +``` + ## aho-corasick - 1.1.4 **Repository URL**: https://github.com/BurntSushi/aho-corasick **License Type(s)**: MIT @@ -38,6 +247,87 @@ THE SOFTWARE. ``` +## allocator-api2 - 0.2.21 +**Repository URL**: https://github.com/zakarumych/allocator-api2 +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + +To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +``` + ## android_system_properties - 0.1.5 **Repository URL**: https://github.com/nical/android_system_properties **License Type(s)**: Apache-2.0 @@ -2912,217 +3202,8 @@ limitations under the License. ``` -## bitflags - 2.11.0 -**Repository URL**: https://github.com/bitflags/bitflags -**License Type(s)**: Apache-2.0 -### License: https://spdx.org/licenses/Apache-2.0.html -``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -``` - -## block-buffer - 0.10.4 -**Repository URL**: https://github.com/RustCrypto/utils +## bit-set - 0.8.0 +**Repository URL**: https://github.com/contain-rs/bit-set **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -3320,7 +3401,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -3330,8 +3411,8 @@ limitations under the License. ``` -## block-buffer - 0.12.0 -**Repository URL**: https://github.com/RustCrypto/utils +## bit-vec - 0.8.0 +**Repository URL**: https://github.com/contain-rs/bit-vec **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -3529,7 +3610,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -3539,8 +3620,8 @@ limitations under the License. ``` -## bumpalo - 3.20.2 -**Repository URL**: https://github.com/fitzgen/bumpalo +## bitflags - 2.11.0 +**Repository URL**: https://github.com/bitflags/bitflags **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -3748,41 +3829,8 @@ limitations under the License. ``` -## bytes - 1.11.1 -**Repository URL**: https://github.com/tokio-rs/bytes -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -Copyright (c) 2018 Carl Lerche - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - -``` - -## cast - 0.3.0 -**Repository URL**: https://github.com/japaric/cast.rs +## block-buffer - 0.10.4 +**Repository URL**: https://github.com/RustCrypto/utils **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -3980,7 +4028,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -3990,389 +4038,8 @@ limitations under the License. ``` -## cbindgen - 0.29.2 -**Repository URL**: https://github.com/mozilla/cbindgen -**License Type(s)**: MPL-2.0 -### License: https://spdx.org/licenses/MPL-2.0.html -``` -Mozilla Public License Version 2.0 -================================== - -1. Definitions --------------- - -1.1. "Contributor" - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -1.2. "Contributor Version" - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -1.3. "Contribution" - means Covered Software of a particular Contributor. - -1.4. "Covered Software" - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -1.5. "Incompatible With Secondary Licenses" - means - - (a) that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or - - (b) that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -1.6. "Executable Form" - means any form of the work other than Source Code Form. - -1.7. "Larger Work" - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -1.8. "License" - means this document. - -1.9. "Licensable" - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -1.10. "Modifications" - means any of the following: - - (a) any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or - - (b) any new file in Source Code Form that contains any Covered - Software. - -1.11. "Patent Claims" of a Contributor - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -1.12. "Secondary License" - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -1.13. "Source Code Form" - means the form of the work preferred for making modifications. - -1.14. "You" (or "Your") - means an individual or a legal entity exercising rights under this - License. For legal entities, "You" includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, "control" means (a) the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or (b) ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - -2. License Grants and Conditions --------------------------------- - -2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -(a) under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and - -(b) under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -(a) for any code that a Contributor has removed from Covered Software; - or - -(b) for infringements caused by: (i) Your and any other third party's - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - -(c) under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - -3. Responsibilities -------------------- - -3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -(a) such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -(b) You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - -4. Inability to Comply Due to Statute or Regulation ---------------------------------------------------- - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: (a) comply with -the terms of this License to the maximum extent possible; and (b) -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - -5. Termination --------------- - -5.1. The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated (a) provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and (b) on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -5.2. If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -5.3. In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - -************************************************************************ -* * -* 6. Disclaimer of Warranty * -* ------------------------- * -* * -* Covered Software is provided under this License on an "as is" * -* basis, without warranty of any kind, either expressed, implied, or * -* statutory, including, without limitation, warranties that the * -* Covered Software is free of defects, merchantable, fit for a * -* particular purpose or non-infringing. The entire risk as to the * -* quality and performance of the Covered Software is with You. * -* Should any Covered Software prove defective in any respect, You * -* (not any Contributor) assume the cost of any necessary servicing, * -* repair, or correction. This disclaimer of warranty constitutes an * -* essential part of this License. No use of any Covered Software is * -* authorized under this License except under this disclaimer. * -* * -************************************************************************ - -************************************************************************ -* * -* 7. Limitation of Liability * -* -------------------------- * -* * -* Under no circumstances and under no legal theory, whether tort * -* (including negligence), contract, or otherwise, shall any * -* Contributor, or anyone who distributes Covered Software as * -* permitted above, be liable to You for any direct, indirect, * -* special, incidental, or consequential damages of any character * -* including, without limitation, damages for lost profits, loss of * -* goodwill, work stoppage, computer failure or malfunction, or any * -* and all other commercial damages or losses, even if such party * -* shall have been informed of the possibility of such damages. This * -* limitation of liability shall not apply to liability for death or * -* personal injury resulting from such party's negligence to the * -* extent applicable law prohibits such limitation. Some * -* jurisdictions do not allow the exclusion or limitation of * -* incidental or consequential damages, so this exclusion and * -* limitation may not apply to You. * -* * -************************************************************************ - -8. Litigation -------------- - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - -9. Miscellaneous ----------------- - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - -10. Versions of the License ---------------------------- - -10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary -Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -Exhibit A - Source Code Form License Notice -------------------------------------------- - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - "Incompatible With Secondary Licenses" Notice ---------------------------------------------------------- - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. - -``` - -## cc - 1.2.60 -**Repository URL**: https://github.com/rust-lang/cc-rs +## block-buffer - 0.12.0 +**Repository URL**: https://github.com/RustCrypto/utils **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -4570,7 +4237,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -4580,8 +4247,33 @@ limitations under the License. ``` -## cfg-if - 1.0.4 -**Repository URL**: https://github.com/rust-lang/cfg-if +## borrow-or-share - 0.2.4 +**Repository URL**: https://github.com/yescallop/borrow-or-share +**License Type(s)**: MIT-0 +### License: https://spdx.org/licenses/MIT-0.html +``` +MIT No Attribution + +Copyright 2024 Scallop Ye + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +``` + +## bumpalo - 3.20.2 +**Repository URL**: https://github.com/fitzgen/bumpalo **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -4789,274 +4481,253 @@ limitations under the License. ``` -## cfg_aliases - 0.2.1 -**Repository URL**: https://github.com/katharostech/cfg_aliases -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -### License File: LICENSE +## bytecount - 0.6.9 +**Repository URL**: https://github.com/llogiq/bytecount +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html ``` -MIT License + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ -Copyright (c) 2020 Katharos Technology + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + 1. Definitions. -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -``` + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. -## chacha20 - 0.10.0 -**Repository URL**: https://github.com/RustCrypto/stream-ciphers -**License Type(s)**: Apache-2.0 -### License: https://spdx.org/licenses/Apache-2.0.html -``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. -1. Definitions. + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. + END OF TERMS AND CONDITIONS -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. + APPENDIX: How to apply the Apache License to your work. -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. + Copyright {yyyy} {name of copyright owner} -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at -END OF TERMS AND CONDITIONS + http://www.apache.org/licenses/LICENSE-2.0 -APPENDIX: How to apply the Apache License to your work. + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. +``` -Copyright [yyyy] [name of copyright owner] +## bytes - 1.11.1 +**Repository URL**: https://github.com/tokio-rs/bytes +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright (c) 2018 Carl Lerche -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: - http://www.apache.org/licenses/LICENSE-2.0 +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. ``` -## chrono - 0.4.44 -**Repository URL**: https://github.com/chronotope/chrono +## cast - 0.3.0 +**Repository URL**: https://github.com/japaric/cast.rs **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` -Rust-chrono is dual-licensed under The MIT License [1] and -Apache 2.0 License [2]. Copyright (c) 2014--2026, Kang Seonghoon and -contributors. - -Nota Bene: This is same as the Rust Project's own license. - - -[1]: , which is reproduced below: - -~~~~ -The MIT License (MIT) - -Copyright (c) 2014, Kang Seonghoon. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -~~~~ - - -[2]: , which is reproduced below: - -~~~~ Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -5258,1101 +4929,1322 @@ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -~~~~ - ``` -## clap - 4.6.0 -**Repository URL**: https://github.com/clap-rs/clap -**License Type(s)**: Apache-2.0 -### License: https://spdx.org/licenses/Apache-2.0.html +## cbindgen - 0.29.2 +**Repository URL**: https://github.com/mozilla/cbindgen +**License Type(s)**: MPL-2.0 +### License: https://spdx.org/licenses/MPL-2.0.html ``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ +Mozilla Public License Version 2.0 +================================== - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION +1. Definitions +-------------- - 1. Definitions. +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. +1.3. "Contribution" + means Covered Software of a particular Contributor. - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. +1.5. "Incompatible With Secondary Licenses" + means - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). +1.6. "Executable Form" + means any form of the work other than Source Code Form. - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." +1.8. "License" + means this document. - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. +1.10. "Modifications" + means any of the following: - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: + (b) any new file in Source Code Form that contains any Covered + Software. - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and +1.13. "Source Code Form" + means the form of the work preferred for making modifications. - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. +2. License Grants and Conditions +-------------------------------- - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. +2.1. Grants - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. +2.2. Effective Date - END OF TERMS AND CONDITIONS +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. - APPENDIX: How to apply the Apache License to your work. +2.3. Limitations on Grant Scope - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: - Copyright {yyyy} {name of copyright owner} +(a) for any code that a Contributor has removed from Covered Software; + or - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or - http://www.apache.org/licenses/LICENSE-2.0 +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). +2.4. Subsequent Licenses -``` +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). -## clap_builder - 4.6.0 -**Repository URL**: https://github.com/clap-rs/clap -**License Type(s)**: Apache-2.0 -### License: https://spdx.org/licenses/Apache-2.0.html -``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ +2.5. Representation - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. - 1. Definitions. +2.6. Fair Use - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. +2.7. Conditions - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. +3. Responsibilities +------------------- - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. +3.1. Distribution of Source Form - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). +3.2. Distribution of Executable Form - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. +If You distribute Covered Software in Executable Form then: - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. +3.3. Distribution of a Larger Work - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: +3.4. Notices - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and +3.5. Application of Additional Terms - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. +5. Termination +-------------- - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ - END OF TERMS AND CONDITIONS +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ - APPENDIX: How to apply the Apache License to your work. +8. Litigation +------------- - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. - Copyright {yyyy} {name of copyright owner} +9. Miscellaneous +---------------- - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. - http://www.apache.org/licenses/LICENSE-2.0 +10. Versions of the License +--------------------------- - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +10.1. New Versions +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. -``` +10.2. Effect of New Versions -## clap_complete - 4.6.5 -**Repository URL**: https://github.com/clap-rs/clap -**License Type(s)**: Apache-2.0 -### License: https://spdx.org/licenses/Apache-2.0.html -``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION +10.3. Modified Versions - 1. Definitions. +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. +Exhibit A - Source Code Form License Notice +------------------------------------------- - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. +You may add additional accurate notices of copyright ownership. - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." +``` - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. +## cc - 1.2.60 +**Repository URL**: https://github.com/rust-lang/cc-rs +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. +1. Definitions. - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. - END OF TERMS AND CONDITIONS +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. - APPENDIX: How to apply the Apache License to your work. +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and - Copyright {yyyy} {name of copyright owner} + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and - http://www.apache.org/licenses/LICENSE-2.0 + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. -``` +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. -## clap_derive - 4.6.0 -**Repository URL**: https://github.com/clap-rs/clap -**License Type(s)**: Apache-2.0 -### License: https://spdx.org/licenses/Apache-2.0.html -``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. - 1. Definitions. +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. +END OF TERMS AND CONDITIONS - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. +APPENDIX: How to apply the Apache License to your work. - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. +Copyright [yyyy] [name of copyright owner] - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. + http://www.apache.org/licenses/LICENSE-2.0 - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. +``` - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." +## cfg-if - 1.0.4 +**Repository URL**: https://github.com/rust-lang/cfg-if +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. +1. Definitions. - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. - APPENDIX: How to apply the Apache License to your work. +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and - Copyright {yyyy} {name of copyright owner} + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and - http://www.apache.org/licenses/LICENSE-2.0 + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. -``` +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. -## clap_lex - 1.1.0 -**Repository URL**: https://github.com/clap-rs/clap -**License Type(s)**: Apache-2.0 -### License: https://spdx.org/licenses/Apache-2.0.html -``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. - 1. Definitions. +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. +END OF TERMS AND CONDITIONS - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. +APPENDIX: How to apply the Apache License to your work. - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. +Copyright [yyyy] [name of copyright owner] - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. + http://www.apache.org/licenses/LICENSE-2.0 - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. +``` - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." +## cfg_aliases - 0.2.1 +**Repository URL**: https://github.com/katharostech/cfg_aliases +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +### License File: LICENSE +``` +MIT License - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. +Copyright (c) 2020 Katharos Technology - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +``` - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and +## chacha20 - 0.10.0 +**Repository URL**: https://github.com/RustCrypto/stream-ciphers +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and +1. Definitions. - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). - END OF TERMS AND CONDITIONS + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. - APPENDIX: How to apply the Apache License to your work. + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. - Copyright {yyyy} {name of copyright owner} +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. - http://www.apache.org/licenses/LICENSE-2.0 +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and -``` + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and -## colorchoice - 1.0.5 -**Repository URL**: https://github.com/rust-cli/anstyle.git -**License Type(s)**: Apache-2.0 -### License: https://spdx.org/licenses/Apache-2.0.html -``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. - 1. Definitions. +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. +END OF TERMS AND CONDITIONS - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. +APPENDIX: How to apply the Apache License to your work. - "Work" shall mean the work of authorship, whether in Source or + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +``` + +## chrono - 0.4.44 +**Repository URL**: https://github.com/chronotope/chrono +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Rust-chrono is dual-licensed under The MIT License [1] and +Apache 2.0 License [2]. Copyright (c) 2014--2026, Kang Seonghoon and +contributors. + +Nota Bene: This is same as the Rust Project's own license. + + +[1]: , which is reproduced below: + +~~~~ +The MIT License (MIT) + +Copyright (c) 2014, Kang Seonghoon. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +~~~~ + + +[2]: , which is reproduced below: + +~~~~ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +~~~~ + + +``` + +## clap - 4.6.0 +**Repository URL**: https://github.com/clap-rs/clap +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). @@ -6493,68 +6385,2461 @@ limitations under the License. incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - END OF TERMS AND CONDITIONS + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +``` + +## clap_builder - 4.6.0 +**Repository URL**: https://github.com/clap-rs/clap +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +``` + +## clap_complete - 4.6.5 +**Repository URL**: https://github.com/clap-rs/clap +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +``` + +## clap_derive - 4.6.0 +**Repository URL**: https://github.com/clap-rs/clap +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +``` + +## clap_lex - 1.1.0 +**Repository URL**: https://github.com/clap-rs/clap +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +``` + +## colorchoice - 1.0.5 +**Repository URL**: https://github.com/rust-cli/anstyle.git +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +``` + +## combine - 4.6.7 +**Repository URL**: https://github.com/Marwes/combine +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2015 Markus Westerlind + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +``` + +## concurrent-queue - 2.5.0 +**Repository URL**: https://github.com/smol-rs/concurrent-queue +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +``` + +## console - 0.15.11 +**Repository URL**: https://github.com/console-rs/console +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2017 Armin Ronacher + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +``` + +## console - 0.16.3 +**Repository URL**: https://github.com/console-rs/console +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2017 Armin Ronacher + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +``` + +## const-oid - 0.10.2 +**Repository URL**: https://github.com/RustCrypto/formats +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +``` + +## convert_case - 0.6.0 +**Repository URL**: https://github.com/rutrum/convert-case +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2020 David Purdum + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +``` + +## core-foundation - 0.10.1 +**Repository URL**: https://github.com/servo/core-foundation-rs +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +``` + +## core-foundation-sys - 0.8.7 +**Repository URL**: https://github.com/servo/core-foundation-rs +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +``` + +## cpufeatures - 0.2.17 +**Repository URL**: https://github.com/RustCrypto/utils +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +``` + +## cpufeatures - 0.3.0 +**Repository URL**: https://github.com/RustCrypto/utils +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and - APPENDIX: How to apply the Apache License to your work. + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. - Copyright {yyyy} {name of copyright owner} + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. - http://www.apache.org/licenses/LICENSE-2.0 +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. -``` +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. -## combine - 4.6.7 -**Repository URL**: https://github.com/Marwes/combine -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -The MIT License (MIT) +END OF TERMS AND CONDITIONS -Copyright (c) 2015 Markus Westerlind +APPENDIX: How to apply the Apache License to your work. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. +Copyright [yyyy] [name of copyright owner] -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. ``` -## concurrent-queue - 2.5.0 -**Repository URL**: https://github.com/smol-rs/concurrent-queue +## crossbeam-utils - 0.8.21 +**Repository URL**: https://github.com/crossbeam-rs/crossbeam **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -6762,68 +9047,8 @@ limitations under the License. ``` -## console - 0.15.11 -**Repository URL**: https://github.com/console-rs/console -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -The MIT License (MIT) - -Copyright (c) 2017 Armin Ronacher - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -``` - -## console - 0.16.3 -**Repository URL**: https://github.com/console-rs/console -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -The MIT License (MIT) - -Copyright (c) 2017 Armin Ronacher - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -``` - -## const-oid - 0.10.2 -**Repository URL**: https://github.com/RustCrypto/formats +## crypto-common - 0.1.7 +**Repository URL**: https://github.com/RustCrypto/traits **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -7031,37 +9256,8 @@ limitations under the License. ``` -## convert_case - 0.6.0 -**Repository URL**: https://github.com/rutrum/convert-case -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -MIT License - -Copyright (c) 2020 David Purdum - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -``` - -## core-foundation - 0.10.1 -**Repository URL**: https://github.com/servo/core-foundation-rs +## crypto-common - 0.2.1 +**Repository URL**: https://github.com/RustCrypto/traits **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -7259,7 +9455,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -7269,8 +9465,277 @@ limitations under the License. ``` -## core-foundation-sys - 0.8.7 -**Repository URL**: https://github.com/servo/core-foundation-rs +## ctor - 0.2.9 +**Repository URL**: https://github.com/mmastrac/rust-ctor +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +``` + +## data-encoding - 2.11.0 +**Repository URL**: https://github.com/ia0/data-encoding +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2015-2020 Julien Cretin +Copyright (c) 2017-2020 Google Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +``` + +## dialoguer - 0.11.0 +**Repository URL**: https://github.com/console-rs/dialoguer +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2017 Armin Ronacher + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +``` + +## digest - 0.10.7 +**Repository URL**: https://github.com/RustCrypto/traits **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -7468,7 +9933,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -7478,8 +9943,8 @@ limitations under the License. ``` -## cpufeatures - 0.2.17 -**Repository URL**: https://github.com/RustCrypto/utils +## digest - 0.11.2 +**Repository URL**: https://github.com/RustCrypto/traits **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -7687,8 +10152,8 @@ limitations under the License. ``` -## cpufeatures - 0.3.0 -**Repository URL**: https://github.com/RustCrypto/utils +## displaydoc - 0.2.5 +**Repository URL**: https://github.com/yaahc/displaydoc **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -7886,7 +10351,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -7896,8 +10361,89 @@ limitations under the License. ``` -## crossbeam-utils - 0.8.21 -**Repository URL**: https://github.com/crossbeam-rs/crossbeam +## dyn-clone - 1.0.20 +**Repository URL**: https://github.com/dtolnay/dyn-clone +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + +To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +``` + +## either - 1.15.0 +**Repository URL**: https://github.com/rayon-rs/either **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -8105,8 +10651,247 @@ limitations under the License. ``` -## crypto-common - 0.1.7 -**Repository URL**: https://github.com/RustCrypto/traits +## email_address - 0.2.9 +**Repository URL**: https://github.com/johnstonskj/rust-email_address.git +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2019 Simon Johnston + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +``` + +## encode_unicode - 1.0.0 +**Repository URL**: https://github.com/tormol/encode_unicode +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +``` + +## equivalent - 1.0.2 +**Repository URL**: https://github.com/indexmap-rs/equivalent **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -8304,7 +11089,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -8314,8 +11099,8 @@ limitations under the License. ``` -## crypto-common - 0.2.1 -**Repository URL**: https://github.com/RustCrypto/traits +## errno - 0.3.14 +**Repository URL**: https://github.com/lambda-fairy/rust-errno **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -8513,7 +11298,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -8523,277 +11308,8 @@ limitations under the License. ``` -## ctor - 0.2.9 -**Repository URL**: https://github.com/mmastrac/rust-ctor -**License Type(s)**: Apache-2.0 -### License: https://spdx.org/licenses/Apache-2.0.html -``` -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -``` - -## data-encoding - 2.11.0 -**Repository URL**: https://github.com/ia0/data-encoding -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -The MIT License (MIT) - -Copyright (c) 2015-2020 Julien Cretin -Copyright (c) 2017-2020 Google Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -``` - -## dialoguer - 0.11.0 -**Repository URL**: https://github.com/console-rs/dialoguer -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -The MIT License (MIT) - -Copyright (c) 2017 Armin Ronacher - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -``` - -## digest - 0.10.7 -**Repository URL**: https://github.com/RustCrypto/traits +## event-listener - 5.4.1 +**Repository URL**: https://github.com/smol-rs/event-listener **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -8991,7 +11507,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -9001,8 +11517,8 @@ limitations under the License. ``` -## digest - 0.11.2 -**Repository URL**: https://github.com/RustCrypto/traits +## event-listener-strategy - 0.5.4 +**Repository URL**: https://github.com/smol-rs/event-listener-strategy **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -9200,7 +11716,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -9210,8 +11726,37 @@ limitations under the License. ``` -## displaydoc - 0.2.5 -**Repository URL**: https://github.com/yaahc/displaydoc +## fancy-regex - 0.18.0 +**Repository URL**: https://github.com/fancy-regex/fancy-regex +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License + +Copyright 2015 The Fancy Regex Authors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +``` + +## fastrand - 2.4.1 +**Repository URL**: https://github.com/smol-rs/fastrand **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -9419,89 +11964,8 @@ limitations under the License. ``` -## dyn-clone - 1.0.20 -**Repository URL**: https://github.com/dtolnay/dyn-clone -**License Type(s)**: Apache-2.0 -### License: https://spdx.org/licenses/Apache-2.0.html -``` -Apache License -Version 2.0, January 2004 -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - - (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - - You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - -To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -``` - -## either - 1.15.0 -**Repository URL**: https://github.com/rayon-rs/either +## find-msvc-tools - 0.1.9 +**Repository URL**: https://github.com/rust-lang/cc-rs **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -9709,218 +12173,8 @@ limitations under the License. ``` -## encode_unicode - 1.0.0 -**Repository URL**: https://github.com/tormol/encode_unicode -**License Type(s)**: Apache-2.0 -### License: https://spdx.org/licenses/Apache-2.0.html -``` - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -``` - -## equivalent - 1.0.2 -**Repository URL**: https://github.com/indexmap-rs/equivalent +## fixedbitset - 0.5.7 +**Repository URL**: https://github.com/petgraph/fixedbitset **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -10128,8 +12382,36 @@ limitations under the License. ``` -## errno - 0.3.14 -**Repository URL**: https://github.com/lambda-fairy/rust-errno +## fluent-uri - 0.4.1 +**Repository URL**: https://github.com/yescallop/fluent-uri-rs +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2024 Scallop Ye + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +``` + +## fnv - 1.0.7 +**Repository URL**: https://github.com/servo/rust-fnv **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -10337,8 +12619,60 @@ limitations under the License. ``` -## event-listener - 5.4.1 -**Repository URL**: https://github.com/smol-rs/event-listener +## foldhash - 0.1.5 +**Repository URL**: https://github.com/orlp/foldhash +**License Type(s)**: Zlib +### License: https://spdx.org/licenses/Zlib.html +``` +Copyright (c) 2024 Orson Peters + +This software is provided 'as-is', without any express or implied warranty. In +no event will the authors be held liable for any damages arising from the use of +this software. + +Permission is granted to anyone to use this software for any purpose, including +commercial applications, and to alter it and redistribute it freely, subject to +the following restrictions: + +1. The origin of this software must not be misrepresented; you must not claim + that you wrote the original software. If you use this software in a product, + an acknowledgment in the product documentation would be appreciated but is + not required. + +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + +3. This notice may not be removed or altered from any source distribution. +``` + +## foldhash - 0.2.0 +**Repository URL**: https://github.com/orlp/foldhash +**License Type(s)**: Zlib +### License: https://spdx.org/licenses/Zlib.html +``` +Copyright (c) 2024 Orson Peters + +This software is provided 'as-is', without any express or implied warranty. In +no event will the authors be held liable for any damages arising from the use of +this software. + +Permission is granted to anyone to use this software for any purpose, including +commercial applications, and to alter it and redistribute it freely, subject to +the following restrictions: + +1. The origin of this software must not be misrepresented; you must not claim + that you wrote the original software. If you use this software in a product, + an acknowledgment in the product documentation would be appreciated but is + not required. + +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + +3. This notice may not be removed or altered from any source distribution. +``` + +## form_urlencoded - 1.2.2 +**Repository URL**: https://github.com/servo/rust-url **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -10546,8 +12880,8 @@ limitations under the License. ``` -## event-listener-strategy - 0.5.4 -**Repository URL**: https://github.com/smol-rs/event-listener-strategy +## fraction - 0.15.4 +**Repository URL**: https://github.com/dnsl48/fraction.git **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -10755,8 +13089,8 @@ limitations under the License. ``` -## fastrand - 2.4.1 -**Repository URL**: https://github.com/smol-rs/fastrand +## futures - 0.3.32 +**Repository URL**: https://github.com/rust-lang/futures-rs **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -10948,7 +13282,8 @@ APPENDIX: How to apply the Apache License to your work. same "printed page" as the copyright notice for easier identification within third-party archives. -Copyright [yyyy] [name of copyright owner] +Copyright (c) 2016 Alex Crichton +Copyright (c) 2017 The Tokio Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -10964,8 +13299,8 @@ limitations under the License. ``` -## find-msvc-tools - 0.1.9 -**Repository URL**: https://github.com/rust-lang/cc-rs +## futures-channel - 0.3.32 +**Repository URL**: https://github.com/rust-lang/futures-rs **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -11157,7 +13492,8 @@ APPENDIX: How to apply the Apache License to your work. same "printed page" as the copyright notice for easier identification within third-party archives. -Copyright [yyyy] [name of copyright owner] +Copyright (c) 2016 Alex Crichton +Copyright (c) 2017 The Tokio Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -11173,8 +13509,8 @@ limitations under the License. ``` -## fixedbitset - 0.5.7 -**Repository URL**: https://github.com/petgraph/fixedbitset +## futures-core - 0.3.32 +**Repository URL**: https://github.com/rust-lang/futures-rs **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -11366,7 +13702,8 @@ APPENDIX: How to apply the Apache License to your work. same "printed page" as the copyright notice for easier identification within third-party archives. -Copyright [yyyy] [name of copyright owner] +Copyright (c) 2016 Alex Crichton +Copyright (c) 2017 The Tokio Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -11382,8 +13719,218 @@ limitations under the License. ``` -## fnv - 1.0.7 -**Repository URL**: https://github.com/servo/rust-fnv +## futures-executor - 0.3.32 +**Repository URL**: https://github.com/rust-lang/futures-rs +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright (c) 2016 Alex Crichton +Copyright (c) 2017 The Tokio Authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +``` + +## futures-io - 0.3.32 +**Repository URL**: https://github.com/rust-lang/futures-rs **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -11575,7 +14122,8 @@ APPENDIX: How to apply the Apache License to your work. same "printed page" as the copyright notice for easier identification within third-party archives. -Copyright [yyyy] [name of copyright owner] +Copyright (c) 2016 Alex Crichton +Copyright (c) 2017 The Tokio Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -11591,34 +14139,218 @@ limitations under the License. ``` -## foldhash - 0.1.5 -**Repository URL**: https://github.com/orlp/foldhash -**License Type(s)**: Zlib -### License: https://spdx.org/licenses/Zlib.html +## futures-macro - 0.3.32 +**Repository URL**: https://github.com/rust-lang/futures-rs +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html ``` -Copyright (c) 2024 Orson Peters + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ -This software is provided 'as-is', without any express or implied warranty. In -no event will the authors be held liable for any damages arising from the use of -this software. +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -Permission is granted to anyone to use this software for any purpose, including -commercial applications, and to alter it and redistribute it freely, subject to -the following restrictions: +1. Definitions. -1. The origin of this software must not be misrepresented; you must not claim - that you wrote the original software. If you use this software in a product, - an acknowledgment in the product documentation would be appreciated but is - not required. + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright (c) 2016 Alex Crichton +Copyright (c) 2017 The Tokio Authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. -3. This notice may not be removed or altered from any source distribution. ``` -## form_urlencoded - 1.2.2 -**Repository URL**: https://github.com/servo/rust-url +## futures-sink - 0.3.32 +**Repository URL**: https://github.com/rust-lang/futures-rs **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -11810,7 +14542,8 @@ APPENDIX: How to apply the Apache License to your work. same "printed page" as the copyright notice for easier identification within third-party archives. -Copyright [yyyy] [name of copyright owner] +Copyright (c) 2016 Alex Crichton +Copyright (c) 2017 The Tokio Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -11826,7 +14559,7 @@ limitations under the License. ``` -## futures - 0.3.32 +## futures-task - 0.3.32 **Repository URL**: https://github.com/rust-lang/futures-rs **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html @@ -12036,7 +14769,7 @@ limitations under the License. ``` -## futures-channel - 0.3.32 +## futures-util - 0.3.32 **Repository URL**: https://github.com/rust-lang/futures-rs **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html @@ -12246,14 +14979,42 @@ limitations under the License. ``` -## futures-core - 0.3.32 -**Repository URL**: https://github.com/rust-lang/futures-rs +## generic-array - 0.14.7 +**Repository URL**: https://github.com/fizyk20/generic-array.git +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +The MIT License (MIT) + +Copyright (c) 2015 Bartłomiej Kamiński + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +``` + +## getrandom - 0.2.17 +**Repository URL**: https://github.com/rust-random/getrandom **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` Apache License Version 2.0, January 2004 - http://www.apache.org/licenses/ + https://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION @@ -12439,14 +15200,13 @@ APPENDIX: How to apply the Apache License to your work. same "printed page" as the copyright notice for easier identification within third-party archives. -Copyright (c) 2016 Alex Crichton -Copyright (c) 2017 The Tokio Authors +Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -12456,14 +15216,14 @@ limitations under the License. ``` -## futures-executor - 0.3.32 -**Repository URL**: https://github.com/rust-lang/futures-rs +## getrandom - 0.3.4 +**Repository URL**: https://github.com/rust-random/getrandom **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` Apache License Version 2.0, January 2004 - http://www.apache.org/licenses/ + https://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION @@ -12649,14 +15409,13 @@ APPENDIX: How to apply the Apache License to your work. same "printed page" as the copyright notice for easier identification within third-party archives. -Copyright (c) 2016 Alex Crichton -Copyright (c) 2017 The Tokio Authors +Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -12666,14 +15425,14 @@ limitations under the License. ``` -## futures-io - 0.3.32 -**Repository URL**: https://github.com/rust-lang/futures-rs +## getrandom - 0.4.2 +**Repository URL**: https://github.com/rust-random/getrandom **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` Apache License Version 2.0, January 2004 - http://www.apache.org/licenses/ + https://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION @@ -12859,14 +15618,13 @@ APPENDIX: How to apply the Apache License to your work. same "printed page" as the copyright notice for easier identification within third-party archives. -Copyright (c) 2016 Alex Crichton -Copyright (c) 2017 The Tokio Authors +Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -12876,218 +15634,41 @@ limitations under the License. ``` -## futures-macro - 0.3.32 -**Repository URL**: https://github.com/rust-lang/futures-rs -**License Type(s)**: Apache-2.0 -### License: https://spdx.org/licenses/Apache-2.0.html +## h2 - 0.4.13 +**Repository URL**: https://github.com/hyperium/h2 +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html ``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright (c) 2016 Alex Crichton -Copyright (c) 2017 The Tokio Authors +Copyright (c) 2017 h2 authors -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: - http://www.apache.org/licenses/LICENSE-2.0 +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. ``` -## futures-sink - 0.3.32 -**Repository URL**: https://github.com/rust-lang/futures-rs +## hashbrown - 0.15.5 +**Repository URL**: https://github.com/rust-lang/hashbrown **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -13279,8 +15860,7 @@ APPENDIX: How to apply the Apache License to your work. same "printed page" as the copyright notice for easier identification within third-party archives. -Copyright (c) 2016 Alex Crichton -Copyright (c) 2017 The Tokio Authors +Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -13296,8 +15876,8 @@ limitations under the License. ``` -## futures-task - 0.3.32 -**Repository URL**: https://github.com/rust-lang/futures-rs +## hashbrown - 0.16.1 +**Repository URL**: https://github.com/rust-lang/hashbrown **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -13489,8 +16069,7 @@ APPENDIX: How to apply the Apache License to your work. same "printed page" as the copyright notice for easier identification within third-party archives. -Copyright (c) 2016 Alex Crichton -Copyright (c) 2017 The Tokio Authors +Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -13506,8 +16085,8 @@ limitations under the License. ``` -## futures-util - 0.3.32 -**Repository URL**: https://github.com/rust-lang/futures-rs +## hashbrown - 0.17.0 +**Repository URL**: https://github.com/rust-lang/hashbrown **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -13688,244 +16267,6 @@ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION END OF TERMS AND CONDITIONS -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright (c) 2016 Alex Crichton -Copyright (c) 2017 The Tokio Authors - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -``` - -## generic-array - 0.14.7 -**Repository URL**: https://github.com/fizyk20/generic-array.git -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -The MIT License (MIT) - -Copyright (c) 2015 Bartłomiej Kamiński - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -``` - -## getrandom - 0.2.17 -**Repository URL**: https://github.com/rust-random/getrandom -**License Type(s)**: Apache-2.0 -### License: https://spdx.org/licenses/Apache-2.0.html -``` - Apache License - Version 2.0, January 2004 - https://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following @@ -13943,7 +16284,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -13953,14 +16294,14 @@ limitations under the License. ``` -## getrandom - 0.3.4 -**Repository URL**: https://github.com/rust-random/getrandom +## heck - 0.5.0 +**Repository URL**: https://github.com/withoutboats/heck **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` Apache License Version 2.0, January 2004 - https://www.apache.org/licenses/ + http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION @@ -14152,7 +16493,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -14161,15 +16502,15 @@ See the License for the specific language governing permissions and limitations under the License. ``` - -## getrandom - 0.4.2 -**Repository URL**: https://github.com/rust-random/getrandom + +## http - 1.4.0 +**Repository URL**: https://github.com/hyperium/http **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` Apache License Version 2.0, January 2004 - https://www.apache.org/licenses/ + http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION @@ -14355,13 +16696,13 @@ APPENDIX: How to apply the Apache License to your work. same "printed page" as the copyright notice for easier identification within third-party archives. -Copyright [yyyy] [name of copyright owner] +Copyright 2017 http-rs authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -14371,12 +16712,12 @@ limitations under the License. ``` -## h2 - 0.4.13 -**Repository URL**: https://github.com/hyperium/h2 +## http-body - 1.0.1 +**Repository URL**: https://github.com/hyperium/http-body **License Type(s)**: MIT ### License: https://spdx.org/licenses/MIT.html ``` -Copyright (c) 2017 h2 authors +Copyright (c) 2019-2024 Sean McArthur & Hyper Contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated @@ -14404,8 +16745,41 @@ DEALINGS IN THE SOFTWARE. ``` -## hashbrown - 0.15.5 -**Repository URL**: https://github.com/rust-lang/hashbrown +## http-body-util - 0.1.3 +**Repository URL**: https://github.com/hyperium/http-body +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright (c) 2019-2025 Sean McArthur & Hyper Contributors + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +``` + +## httparse - 1.10.1 +**Repository URL**: https://github.com/seanmonstar/httparse **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -14613,8 +16987,427 @@ limitations under the License. ``` -## hashbrown - 0.17.0 -**Repository URL**: https://github.com/rust-lang/hashbrown +## httpdate - 1.0.3 +**Repository URL**: https://github.com/pyfisch/httpdate +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, +and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by +the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all +other entities that control, are controlled by, or are under common +control with that entity. For the purposes of this definition, +"control" means (i) the power, direct or indirect, to cause the +direction or management of such entity, whether by contract or +otherwise, or (ii) ownership of fifty percent (50%) or more of the +outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity +exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, +including but not limited to software source code, documentation +source, and configuration files. + +"Object" form shall mean any form resulting from mechanical +transformation or translation of a Source form, including but +not limited to compiled object code, generated documentation, +and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or +Object form, made available under the License, as indicated by a +copyright notice that is included in or attached to the work +(an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object +form, that is based on (or derived from) the Work and for which the +editorial revisions, annotations, elaborations, or other modifications +represent, as a whole, an original work of authorship. For the purposes +of this License, Derivative Works shall not include works that remain +separable from, or merely link (or bind by name) to the interfaces of, +the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including +the original version of the Work and any modifications or additions +to that Work or Derivative Works thereof, that is intentionally +submitted to Licensor for inclusion in the Work by the copyright owner +or by an individual or Legal Entity authorized to submit on behalf of +the copyright owner. For the purposes of this definition, "submitted" +means any form of electronic, verbal, or written communication sent +to the Licensor or its representatives, including but not limited to +communication on electronic mailing lists, source code control systems, +and issue tracking systems that are managed by, or on behalf of, the +Licensor for the purpose of discussing and improving the Work, but +excluding communication that is conspicuously marked or otherwise +designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity +on behalf of whom a Contribution has been received by Licensor and +subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of +this License, each Contributor hereby grants to You a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable +copyright license to reproduce, prepare Derivative Works of, +publicly display, publicly perform, sublicense, and distribute the +Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of +this License, each Contributor hereby grants to You a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable +(except as stated in this section) patent license to make, have made, +use, offer to sell, sell, import, and otherwise transfer the Work, +where such license applies only to those patent claims licensable +by such Contributor that are necessarily infringed by their +Contribution(s) alone or by combination of their Contribution(s) +with the Work to which such Contribution(s) was submitted. If You +institute patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that the Work +or a Contribution incorporated within the Work constitutes direct +or contributory patent infringement, then any patent licenses +granted to You under this License for that Work shall terminate +as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the +Work or Derivative Works thereof in any medium, with or without +modifications, and in Source or Object form, provided that You +meet the following conditions: + +(a) You must give any other recipients of the Work or +Derivative Works a copy of this License; and + +(b) You must cause any modified files to carry prominent notices +stating that You changed the files; and + +(c) You must retain, in the Source form of any Derivative Works +that You distribute, all copyright, patent, trademark, and +attribution notices from the Source form of the Work, +excluding those notices that do not pertain to any part of +the Derivative Works; and + +(d) If the Work includes a "NOTICE" text file as part of its +distribution, then any Derivative Works that You distribute must +include a readable copy of the attribution notices contained +within such NOTICE file, excluding those notices that do not +pertain to any part of the Derivative Works, in at least one +of the following places: within a NOTICE text file distributed +as part of the Derivative Works; within the Source form or +documentation, if provided along with the Derivative Works; or, +within a display generated by the Derivative Works, if and +wherever such third-party notices normally appear. The contents +of the NOTICE file are for informational purposes only and +do not modify the License. You may add Your own attribution +notices within Derivative Works that You distribute, alongside +or as an addendum to the NOTICE text from the Work, provided +that such additional attribution notices cannot be construed +as modifying the License. + +You may add Your own copyright statement to Your modifications and +may provide additional or different license terms and conditions +for use, reproduction, or distribution of Your modifications, or +for any such Derivative Works as a whole, provided Your use, +reproduction, and distribution of the Work otherwise complies with +the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, +any Contribution intentionally submitted for inclusion in the Work +by You to the Licensor shall be under the terms and conditions of +this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify +the terms of any separate license agreement you may have executed +with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade +names, trademarks, service marks, or product names of the Licensor, +except as required for reasonable and customary use in describing the +origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or +agreed to in writing, Licensor provides the Work (and each +Contributor provides its Contributions) on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +implied, including, without limitation, any warranties or conditions +of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A +PARTICULAR PURPOSE. You are solely responsible for determining the +appropriateness of using or redistributing the Work and assume any +risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, +whether in tort (including negligence), contract, or otherwise, +unless required by applicable law (such as deliberate and grossly +negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, +incidental, or consequential damages of any character arising as a +result of this License or out of the use or inability to use the +Work (including but not limited to damages for loss of goodwill, +work stoppage, computer failure or malfunction, or any and all +other commercial damages or losses), even if such Contributor +has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing +the Work or Derivative Works thereof, You may choose to offer, +and charge a fee for, acceptance of support, warranty, indemnity, +or other liability obligations and/or rights consistent with this +License. However, in accepting such obligations, You may act only +on Your own behalf and on Your sole responsibility, not on behalf +of any other Contributor, and only if You agree to indemnify, +defend, and hold each Contributor harmless for any liability +incurred by, or claims asserted against, such Contributor by reason +of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + +To apply the Apache License to your work, attach the following +boilerplate notice, with the fields enclosed by brackets "[]" +replaced with your own identifying information. (Don't include +the brackets!) The text should be enclosed in the appropriate +comment syntax for the file format. We also recommend that a +file or class name and description of purpose be included on the +same "printed page" as the copyright notice for easier +identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +``` + +## humantime - 2.3.0 +**Repository URL**: https://github.com/chronotope/humantime +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +``` + +## hybrid-array - 0.4.10 +**Repository URL**: https://github.com/RustCrypto/hybrid-array **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -14812,7 +17605,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -14822,8 +17615,35 @@ limitations under the License. ``` -## heck - 0.5.0 -**Repository URL**: https://github.com/withoutboats/heck +## hyper - 1.9.0 +**Repository URL**: https://github.com/hyperium/hyper +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright (c) 2014-2026 Sean McArthur + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +``` + +## hyper-rustls - 0.27.9 +**Repository URL**: https://github.com/rustls/hyper-rustls **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -15031,8 +17851,8 @@ limitations under the License. ``` -## http - 1.4.0 -**Repository URL**: https://github.com/hyperium/http +## hyper-timeout - 0.5.2 +**Repository URL**: https://github.com/hjr3/hyper-timeout **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -15224,7 +18044,7 @@ APPENDIX: How to apply the Apache License to your work. same "printed page" as the copyright notice for easier identification within third-party archives. -Copyright 2017 http-rs authors +Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -15240,74 +18060,35 @@ limitations under the License. ``` -## http-body - 1.0.1 -**Repository URL**: https://github.com/hyperium/http-body -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -Copyright (c) 2019-2024 Sean McArthur & Hyper Contributors - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - -``` - -## http-body-util - 0.1.3 -**Repository URL**: https://github.com/hyperium/http-body +## hyper-util - 0.1.20 +**Repository URL**: https://github.com/hyperium/hyper-util **License Type(s)**: MIT ### License: https://spdx.org/licenses/MIT.html ``` -Copyright (c) 2019-2025 Sean McArthur & Hyper Contributors +Copyright (c) 2023-2025 Sean McArthur -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. ``` -## httparse - 1.10.1 -**Repository URL**: https://github.com/seanmonstar/httparse +## iana-time-zone - 0.1.65 +**Repository URL**: https://github.com/strawlab/iana-time-zone **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -15461,481 +18242,62 @@ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -``` - -## httpdate - 1.0.3 -**Repository URL**: https://github.com/pyfisch/httpdate -**License Type(s)**: Apache-2.0 -### License: https://spdx.org/licenses/Apache-2.0.html -``` -Apache License -Version 2.0, January 2004 -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, -and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by -the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all -other entities that control, are controlled by, or are under common -control with that entity. For the purposes of this definition, -"control" means (i) the power, direct or indirect, to cause the -direction or management of such entity, whether by contract or -otherwise, or (ii) ownership of fifty percent (50%) or more of the -outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity -exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, -including but not limited to software source code, documentation -source, and configuration files. - -"Object" form shall mean any form resulting from mechanical -transformation or translation of a Source form, including but -not limited to compiled object code, generated documentation, -and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or -Object form, made available under the License, as indicated by a -copyright notice that is included in or attached to the work -(an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object -form, that is based on (or derived from) the Work and for which the -editorial revisions, annotations, elaborations, or other modifications -represent, as a whole, an original work of authorship. For the purposes -of this License, Derivative Works shall not include works that remain -separable from, or merely link (or bind by name) to the interfaces of, -the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including -the original version of the Work and any modifications or additions -to that Work or Derivative Works thereof, that is intentionally -submitted to Licensor for inclusion in the Work by the copyright owner -or by an individual or Legal Entity authorized to submit on behalf of -the copyright owner. For the purposes of this definition, "submitted" -means any form of electronic, verbal, or written communication sent -to the Licensor or its representatives, including but not limited to -communication on electronic mailing lists, source code control systems, -and issue tracking systems that are managed by, or on behalf of, the -Licensor for the purpose of discussing and improving the Work, but -excluding communication that is conspicuously marked or otherwise -designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity -on behalf of whom a Contribution has been received by Licensor and -subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of -this License, each Contributor hereby grants to You a perpetual, -worldwide, non-exclusive, no-charge, royalty-free, irrevocable -copyright license to reproduce, prepare Derivative Works of, -publicly display, publicly perform, sublicense, and distribute the -Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of -this License, each Contributor hereby grants to You a perpetual, -worldwide, non-exclusive, no-charge, royalty-free, irrevocable -(except as stated in this section) patent license to make, have made, -use, offer to sell, sell, import, and otherwise transfer the Work, -where such license applies only to those patent claims licensable -by such Contributor that are necessarily infringed by their -Contribution(s) alone or by combination of their Contribution(s) -with the Work to which such Contribution(s) was submitted. If You -institute patent litigation against any entity (including a -cross-claim or counterclaim in a lawsuit) alleging that the Work -or a Contribution incorporated within the Work constitutes direct -or contributory patent infringement, then any patent licenses -granted to You under this License for that Work shall terminate -as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the -Work or Derivative Works thereof in any medium, with or without -modifications, and in Source or Object form, provided that You -meet the following conditions: - -(a) You must give any other recipients of the Work or -Derivative Works a copy of this License; and - -(b) You must cause any modified files to carry prominent notices -stating that You changed the files; and - -(c) You must retain, in the Source form of any Derivative Works -that You distribute, all copyright, patent, trademark, and -attribution notices from the Source form of the Work, -excluding those notices that do not pertain to any part of -the Derivative Works; and - -(d) If the Work includes a "NOTICE" text file as part of its -distribution, then any Derivative Works that You distribute must -include a readable copy of the attribution notices contained -within such NOTICE file, excluding those notices that do not -pertain to any part of the Derivative Works, in at least one -of the following places: within a NOTICE text file distributed -as part of the Derivative Works; within the Source form or -documentation, if provided along with the Derivative Works; or, -within a display generated by the Derivative Works, if and -wherever such third-party notices normally appear. The contents -of the NOTICE file are for informational purposes only and -do not modify the License. You may add Your own attribution -notices within Derivative Works that You distribute, alongside -or as an addendum to the NOTICE text from the Work, provided -that such additional attribution notices cannot be construed -as modifying the License. - -You may add Your own copyright statement to Your modifications and -may provide additional or different license terms and conditions -for use, reproduction, or distribution of Your modifications, or -for any such Derivative Works as a whole, provided Your use, -reproduction, and distribution of the Work otherwise complies with -the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, -any Contribution intentionally submitted for inclusion in the Work -by You to the Licensor shall be under the terms and conditions of -this License, without any additional terms or conditions. -Notwithstanding the above, nothing herein shall supersede or modify -the terms of any separate license agreement you may have executed -with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade -names, trademarks, service marks, or product names of the Licensor, -except as required for reasonable and customary use in describing the -origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or -agreed to in writing, Licensor provides the Work (and each -Contributor provides its Contributions) on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -implied, including, without limitation, any warranties or conditions -of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A -PARTICULAR PURPOSE. You are solely responsible for determining the -appropriateness of using or redistributing the Work and assume any -risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, -whether in tort (including negligence), contract, or otherwise, -unless required by applicable law (such as deliberate and grossly -negligent acts) or agreed to in writing, shall any Contributor be -liable to You for damages, including any direct, indirect, special, -incidental, or consequential damages of any character arising as a -result of this License or out of the use or inability to use the -Work (including but not limited to damages for loss of goodwill, -work stoppage, computer failure or malfunction, or any and all -other commercial damages or losses), even if such Contributor -has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing -the Work or Derivative Works thereof, You may choose to offer, -and charge a fee for, acceptance of support, warranty, indemnity, -or other liability obligations and/or rights consistent with this -License. However, in accepting such obligations, You may act only -on Your own behalf and on Your sole responsibility, not on behalf -of any other Contributor, and only if You agree to indemnify, -defend, and hold each Contributor harmless for any liability -incurred by, or claims asserted against, such Contributor by reason -of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - -To apply the Apache License to your work, attach the following -boilerplate notice, with the fields enclosed by brackets "[]" -replaced with your own identifying information. (Don't include -the brackets!) The text should be enclosed in the appropriate -comment syntax for the file format. We also recommend that a -file or class name and description of purpose be included on the -same "printed page" as the copyright notice for easier -identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -``` - -## humantime - 2.3.0 -**Repository URL**: https://github.com/chronotope/humantime -**License Type(s)**: Apache-2.0 -### License: https://spdx.org/licenses/Apache-2.0.html -``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. + risks associated with Your exercise of permissions under this License. - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. - END OF TERMS AND CONDITIONS +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. - APPENDIX: How to apply the Apache License to your work. +END OF TERMS AND CONDITIONS - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. +APPENDIX: How to apply the Apache License to your work. - Copyright {yyyy} {name of copyright owner} + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at +Copyright 2020 Andrew Straw - http://www.apache.org/licenses/LICENSE-2.0 +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. ``` -## hybrid-array - 0.4.10 -**Repository URL**: https://github.com/RustCrypto/hybrid-array +## iana-time-zone-haiku - 0.1.2 +**Repository URL**: https://github.com/strawlab/iana-time-zone **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -16127,13 +18489,13 @@ APPENDIX: How to apply the Apache License to your work. same "printed page" as the copyright notice for easier identification within third-party archives. -Copyright [yyyy] [name of copyright owner] +Copyright 2020 Andrew Straw Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -16143,37 +18505,389 @@ limitations under the License. ``` -## hyper - 1.9.0 -**Repository URL**: https://github.com/hyperium/hyper -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html +## icu_collections - 2.2.0 +**Repository URL**: https://github.com/unicode-org/icu4x +**License Type(s)**: Unicode-3.0 +### License: https://spdx.org/licenses/Unicode-3.0.html ``` -Copyright (c) 2014-2026 Sean McArthur +UNICODE LICENSE V3 -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +COPYRIGHT AND PERMISSION NOTICE -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. +Copyright © 2020-2024 Unicode, Inc. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. +NOTICE TO USER: Carefully read the following legal agreement. BY +DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR +SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE +TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT +DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of data files and any associated documentation (the "Data Files") or +software and any associated documentation (the "Software") to deal in the +Data Files or Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, and/or sell +copies of the Data Files or Software, and to permit persons to whom the +Data Files or Software are furnished to do so, provided that either (a) +this copyright and permission notice appear with all copies of the Data +Files or Software, or (b) this copyright and permission notice appear in +associated Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +THIRD PARTY RIGHTS. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE +BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, +OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA +FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder shall +not be used in advertising or otherwise to promote the sale, use or other +dealings in these Data Files or Software without prior written +authorization of the copyright holder. + +SPDX-License-Identifier: Unicode-3.0 + +— + +Portions of ICU4X may have been adapted from ICU4C and/or ICU4J. +ICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others. ``` -## hyper-rustls - 0.27.9 -**Repository URL**: https://github.com/rustls/hyper-rustls -**License Type(s)**: Apache-2.0 -### License: https://spdx.org/licenses/Apache-2.0.html +## icu_locale_core - 2.2.0 +**Repository URL**: https://github.com/unicode-org/icu4x +**License Type(s)**: Unicode-3.0 +### License: https://spdx.org/licenses/Unicode-3.0.html +``` +UNICODE LICENSE V3 + +COPYRIGHT AND PERMISSION NOTICE + +Copyright © 2020-2024 Unicode, Inc. + +NOTICE TO USER: Carefully read the following legal agreement. BY +DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR +SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE +TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT +DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of data files and any associated documentation (the "Data Files") or +software and any associated documentation (the "Software") to deal in the +Data Files or Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, and/or sell +copies of the Data Files or Software, and to permit persons to whom the +Data Files or Software are furnished to do so, provided that either (a) +this copyright and permission notice appear with all copies of the Data +Files or Software, or (b) this copyright and permission notice appear in +associated Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +THIRD PARTY RIGHTS. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE +BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, +OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA +FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder shall +not be used in advertising or otherwise to promote the sale, use or other +dealings in these Data Files or Software without prior written +authorization of the copyright holder. + +SPDX-License-Identifier: Unicode-3.0 + +— + +Portions of ICU4X may have been adapted from ICU4C and/or ICU4J. +ICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others. + +``` + +## icu_normalizer - 2.2.0 +**Repository URL**: https://github.com/unicode-org/icu4x +**License Type(s)**: Unicode-3.0 +### License: https://spdx.org/licenses/Unicode-3.0.html +``` +UNICODE LICENSE V3 + +COPYRIGHT AND PERMISSION NOTICE + +Copyright © 2020-2024 Unicode, Inc. + +NOTICE TO USER: Carefully read the following legal agreement. BY +DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR +SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE +TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT +DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of data files and any associated documentation (the "Data Files") or +software and any associated documentation (the "Software") to deal in the +Data Files or Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, and/or sell +copies of the Data Files or Software, and to permit persons to whom the +Data Files or Software are furnished to do so, provided that either (a) +this copyright and permission notice appear with all copies of the Data +Files or Software, or (b) this copyright and permission notice appear in +associated Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +THIRD PARTY RIGHTS. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE +BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, +OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA +FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder shall +not be used in advertising or otherwise to promote the sale, use or other +dealings in these Data Files or Software without prior written +authorization of the copyright holder. + +SPDX-License-Identifier: Unicode-3.0 + +— + +Portions of ICU4X may have been adapted from ICU4C and/or ICU4J. +ICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others. + +``` + +## icu_normalizer_data - 2.2.0 +**Repository URL**: https://github.com/unicode-org/icu4x +**License Type(s)**: Unicode-3.0 +### License: https://spdx.org/licenses/Unicode-3.0.html +``` +UNICODE LICENSE V3 + +COPYRIGHT AND PERMISSION NOTICE + +Copyright © 2020-2024 Unicode, Inc. + +NOTICE TO USER: Carefully read the following legal agreement. BY +DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR +SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE +TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT +DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of data files and any associated documentation (the "Data Files") or +software and any associated documentation (the "Software") to deal in the +Data Files or Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, and/or sell +copies of the Data Files or Software, and to permit persons to whom the +Data Files or Software are furnished to do so, provided that either (a) +this copyright and permission notice appear with all copies of the Data +Files or Software, or (b) this copyright and permission notice appear in +associated Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +THIRD PARTY RIGHTS. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE +BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, +OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA +FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder shall +not be used in advertising or otherwise to promote the sale, use or other +dealings in these Data Files or Software without prior written +authorization of the copyright holder. + +SPDX-License-Identifier: Unicode-3.0 + +— + +Portions of ICU4X may have been adapted from ICU4C and/or ICU4J. +ICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others. + +``` + +## icu_properties - 2.2.0 +**Repository URL**: https://github.com/unicode-org/icu4x +**License Type(s)**: Unicode-3.0 +### License: https://spdx.org/licenses/Unicode-3.0.html +``` +UNICODE LICENSE V3 + +COPYRIGHT AND PERMISSION NOTICE + +Copyright © 2020-2024 Unicode, Inc. + +NOTICE TO USER: Carefully read the following legal agreement. BY +DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR +SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE +TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT +DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of data files and any associated documentation (the "Data Files") or +software and any associated documentation (the "Software") to deal in the +Data Files or Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, and/or sell +copies of the Data Files or Software, and to permit persons to whom the +Data Files or Software are furnished to do so, provided that either (a) +this copyright and permission notice appear with all copies of the Data +Files or Software, or (b) this copyright and permission notice appear in +associated Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +THIRD PARTY RIGHTS. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE +BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, +OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA +FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder shall +not be used in advertising or otherwise to promote the sale, use or other +dealings in these Data Files or Software without prior written +authorization of the copyright holder. + +SPDX-License-Identifier: Unicode-3.0 + +— + +Portions of ICU4X may have been adapted from ICU4C and/or ICU4J. +ICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others. + +``` + +## icu_properties_data - 2.2.0 +**Repository URL**: https://github.com/unicode-org/icu4x +**License Type(s)**: Unicode-3.0 +### License: https://spdx.org/licenses/Unicode-3.0.html +``` +UNICODE LICENSE V3 + +COPYRIGHT AND PERMISSION NOTICE + +Copyright © 2020-2024 Unicode, Inc. + +NOTICE TO USER: Carefully read the following legal agreement. BY +DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR +SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE +TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT +DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of data files and any associated documentation (the "Data Files") or +software and any associated documentation (the "Software") to deal in the +Data Files or Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, and/or sell +copies of the Data Files or Software, and to permit persons to whom the +Data Files or Software are furnished to do so, provided that either (a) +this copyright and permission notice appear with all copies of the Data +Files or Software, or (b) this copyright and permission notice appear in +associated Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +THIRD PARTY RIGHTS. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE +BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, +OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA +FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder shall +not be used in advertising or otherwise to promote the sale, use or other +dealings in these Data Files or Software without prior written +authorization of the copyright holder. + +SPDX-License-Identifier: Unicode-3.0 + +— + +Portions of ICU4X may have been adapted from ICU4C and/or ICU4J. +ICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others. + +``` + +## icu_provider - 2.2.0 +**Repository URL**: https://github.com/unicode-org/icu4x +**License Type(s)**: Unicode-3.0 +### License: https://spdx.org/licenses/Unicode-3.0.html +``` +UNICODE LICENSE V3 + +COPYRIGHT AND PERMISSION NOTICE + +Copyright © 2020-2024 Unicode, Inc. + +NOTICE TO USER: Carefully read the following legal agreement. BY +DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR +SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE +TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT +DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of data files and any associated documentation (the "Data Files") or +software and any associated documentation (the "Software") to deal in the +Data Files or Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, and/or sell +copies of the Data Files or Software, and to permit persons to whom the +Data Files or Software are furnished to do so, provided that either (a) +this copyright and permission notice appear with all copies of the Data +Files or Software, or (b) this copyright and permission notice appear in +associated Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +THIRD PARTY RIGHTS. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE +BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, +OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA +FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder shall +not be used in advertising or otherwise to promote the sale, use or other +dealings in these Data Files or Software without prior written +authorization of the copyright holder. + +SPDX-License-Identifier: Unicode-3.0 + +— + +Portions of ICU4X may have been adapted from ICU4C and/or ICU4J. +ICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others. + +``` + +## id-arena - 2.3.0 +**Repository URL**: https://github.com/fitzgen/id-arena +**License Type(s)**: MIT/Apache-2.0 +### License: https://spdx.org/licenses/ +### License File: LICENSE-APACHE ``` Apache License Version 2.0, January 2004 @@ -16376,11 +19090,39 @@ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. +``` +### License File: LICENSE-MIT ``` +Copyright (c) 2014 Alex Crichton -## hyper-timeout - 0.5.2 -**Repository URL**: https://github.com/hjr3/hyper-timeout +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. +``` + +## idna - 1.1.0 +**Repository URL**: https://github.com/servo/rust-url/ **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -16588,35 +19330,8 @@ limitations under the License. ``` -## hyper-util - 0.1.20 -**Repository URL**: https://github.com/hyperium/hyper-util -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -Copyright (c) 2023-2025 Sean McArthur - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -``` - -## iana-time-zone - 0.1.65 -**Repository URL**: https://github.com/strawlab/iana-time-zone +## idna_adapter - 1.2.1 +**Repository URL**: https://github.com/hsivonen/idna_adapter **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -16808,7 +19523,7 @@ APPENDIX: How to apply the Apache License to your work. same "printed page" as the copyright notice for easier identification within third-party archives. -Copyright 2020 Andrew Straw +Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -16824,8 +19539,8 @@ limitations under the License. ``` -## iana-time-zone-haiku - 0.1.2 -**Repository URL**: https://github.com/strawlab/iana-time-zone +## indexmap - 2.14.0 +**Repository URL**: https://github.com/indexmap-rs/indexmap **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -17017,7 +19732,7 @@ APPENDIX: How to apply the Apache License to your work. same "printed page" as the copyright notice for easier identification within third-party archives. -Copyright 2020 Andrew Straw +Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17033,389 +19748,639 @@ limitations under the License. ``` -## icu_collections - 2.2.0 -**Repository URL**: https://github.com/unicode-org/icu4x -**License Type(s)**: Unicode-3.0 -### License: https://spdx.org/licenses/Unicode-3.0.html +## ipnet - 2.12.0 +**Repository URL**: https://github.com/krisprice/ipnet +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html ``` -UNICODE LICENSE V3 + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ -COPYRIGHT AND PERMISSION NOTICE + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -Copyright © 2020-2024 Unicode, Inc. + 1. Definitions. -NOTICE TO USER: Carefully read the following legal agreement. BY -DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR -SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE -TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT -DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. -Permission is hereby granted, free of charge, to any person obtaining a -copy of data files and any associated documentation (the "Data Files") or -software and any associated documentation (the "Software") to deal in the -Data Files or Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, and/or sell -copies of the Data Files or Software, and to permit persons to whom the -Data Files or Software are furnished to do so, provided that either (a) -this copyright and permission notice appear with all copies of the Data -Files or Software, or (b) this copyright and permission notice appear in -associated Documentation. + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. -THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF -THIRD PARTY RIGHTS. + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. -IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE -BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, -OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA -FILES OR SOFTWARE. + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. -Except as contained in this notice, the name of a copyright holder shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in these Data Files or Software without prior written -authorization of the copyright holder. + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. -SPDX-License-Identifier: Unicode-3.0 + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. -— + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). -Portions of ICU4X may have been adapted from ICU4C and/or ICU4J. -ICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others. + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. -``` + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." -## icu_locale_core - 2.2.0 -**Repository URL**: https://github.com/unicode-org/icu4x -**License Type(s)**: Unicode-3.0 -### License: https://spdx.org/licenses/Unicode-3.0.html -``` -UNICODE LICENSE V3 + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. -COPYRIGHT AND PERMISSION NOTICE + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. -Copyright © 2020-2024 Unicode, Inc. + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. -NOTICE TO USER: Carefully read the following legal agreement. BY -DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR -SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE -TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT -DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: -Permission is hereby granted, free of charge, to any person obtaining a -copy of data files and any associated documentation (the "Data Files") or -software and any associated documentation (the "Software") to deal in the -Data Files or Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, and/or sell -copies of the Data Files or Software, and to permit persons to whom the -Data Files or Software are furnished to do so, provided that either (a) -this copyright and permission notice appear with all copies of the Data -Files or Software, or (b) this copyright and permission notice appear in -associated Documentation. + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and -THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF -THIRD PARTY RIGHTS. + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and -IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE -BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, -OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA -FILES OR SOFTWARE. + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and -Except as contained in this notice, the name of a copyright holder shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in these Data Files or Software without prior written -authorization of the copyright holder. + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. -SPDX-License-Identifier: Unicode-3.0 + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. -— + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. -Portions of ICU4X may have been adapted from ICU4C and/or ICU4J. -ICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others. + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2017 Juniper Networks, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. ``` -## icu_normalizer - 2.2.0 -**Repository URL**: https://github.com/unicode-org/icu4x -**License Type(s)**: Unicode-3.0 -### License: https://spdx.org/licenses/Unicode-3.0.html +## iri-string - 0.7.12 +**Repository URL**: https://github.com/lo48576/iri-string +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html ``` -UNICODE LICENSE V3 -COPYRIGHT AND PERMISSION NOTICE + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." -Copyright © 2020-2024 Unicode, Inc. + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. -NOTICE TO USER: Carefully read the following legal agreement. BY -DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR -SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE -TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT -DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. -Permission is hereby granted, free of charge, to any person obtaining a -copy of data files and any associated documentation (the "Data Files") or -software and any associated documentation (the "Software") to deal in the -Data Files or Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, and/or sell -copies of the Data Files or Software, and to permit persons to whom the -Data Files or Software are furnished to do so, provided that either (a) -this copyright and permission notice appear with all copies of the Data -Files or Software, or (b) this copyright and permission notice appear in -associated Documentation. + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. -THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF -THIRD PARTY RIGHTS. + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: -IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE -BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, -OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA -FILES OR SOFTWARE. + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and -Except as contained in this notice, the name of a copyright holder shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in these Data Files or Software without prior written -authorization of the copyright holder. + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and -SPDX-License-Identifier: Unicode-3.0 + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and -— + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. -Portions of ICU4X may have been adapted from ICU4C and/or ICU4J. -ICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others. + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. -``` + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. -## icu_normalizer_data - 2.2.0 -**Repository URL**: https://github.com/unicode-org/icu4x -**License Type(s)**: Unicode-3.0 -### License: https://spdx.org/licenses/Unicode-3.0.html -``` -UNICODE LICENSE V3 + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. -COPYRIGHT AND PERMISSION NOTICE + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. -Copyright © 2020-2024 Unicode, Inc. + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. -NOTICE TO USER: Carefully read the following legal agreement. BY -DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR -SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE -TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT -DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. -Permission is hereby granted, free of charge, to any person obtaining a -copy of data files and any associated documentation (the "Data Files") or -software and any associated documentation (the "Software") to deal in the -Data Files or Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, and/or sell -copies of the Data Files or Software, and to permit persons to whom the -Data Files or Software are furnished to do so, provided that either (a) -this copyright and permission notice appear with all copies of the Data -Files or Software, or (b) this copyright and permission notice appear in -associated Documentation. + END OF TERMS AND CONDITIONS -THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF -THIRD PARTY RIGHTS. + APPENDIX: How to apply the Apache License to your work. -IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE -BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, -OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA -FILES OR SOFTWARE. + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. -Except as contained in this notice, the name of a copyright holder shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in these Data Files or Software without prior written -authorization of the copyright holder. + Copyright [yyyy] [name of copyright owner] -SPDX-License-Identifier: Unicode-3.0 + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at -— + http://www.apache.org/licenses/LICENSE-2.0 -Portions of ICU4X may have been adapted from ICU4C and/or ICU4J. -ICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others. + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. ``` -## icu_properties - 2.2.0 -**Repository URL**: https://github.com/unicode-org/icu4x -**License Type(s)**: Unicode-3.0 -### License: https://spdx.org/licenses/Unicode-3.0.html +## is_terminal_polyfill - 1.70.2 +**Repository URL**: https://github.com/polyfill-rs/is_terminal_polyfill +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html ``` -UNICODE LICENSE V3 - -COPYRIGHT AND PERMISSION NOTICE + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ -Copyright © 2020-2024 Unicode, Inc. + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -NOTICE TO USER: Carefully read the following legal agreement. BY -DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR -SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE -TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT -DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. + 1. Definitions. -Permission is hereby granted, free of charge, to any person obtaining a -copy of data files and any associated documentation (the "Data Files") or -software and any associated documentation (the "Software") to deal in the -Data Files or Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, and/or sell -copies of the Data Files or Software, and to permit persons to whom the -Data Files or Software are furnished to do so, provided that either (a) -this copyright and permission notice appear with all copies of the Data -Files or Software, or (b) this copyright and permission notice appear in -associated Documentation. + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. -THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF -THIRD PARTY RIGHTS. + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. -IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE -BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, -OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA -FILES OR SOFTWARE. + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. -Except as contained in this notice, the name of a copyright holder shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in these Data Files or Software without prior written -authorization of the copyright holder. + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. -SPDX-License-Identifier: Unicode-3.0 + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. -— + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. -Portions of ICU4X may have been adapted from ICU4C and/or ICU4J. -ICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others. + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). -``` + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. -## icu_properties_data - 2.2.0 -**Repository URL**: https://github.com/unicode-org/icu4x -**License Type(s)**: Unicode-3.0 -### License: https://spdx.org/licenses/Unicode-3.0.html -``` -UNICODE LICENSE V3 + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." -COPYRIGHT AND PERMISSION NOTICE + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. -Copyright © 2020-2024 Unicode, Inc. + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. -NOTICE TO USER: Carefully read the following legal agreement. BY -DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR -SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE -TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT -DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. -Permission is hereby granted, free of charge, to any person obtaining a -copy of data files and any associated documentation (the "Data Files") or -software and any associated documentation (the "Software") to deal in the -Data Files or Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, and/or sell -copies of the Data Files or Software, and to permit persons to whom the -Data Files or Software are furnished to do so, provided that either (a) -this copyright and permission notice appear with all copies of the Data -Files or Software, or (b) this copyright and permission notice appear in -associated Documentation. + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: -THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF -THIRD PARTY RIGHTS. + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and -IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE -BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, -OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA -FILES OR SOFTWARE. + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and -Except as contained in this notice, the name of a copyright holder shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in these Data Files or Software without prior written -authorization of the copyright holder. + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and -SPDX-License-Identifier: Unicode-3.0 + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. -— + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. -Portions of ICU4X may have been adapted from ICU4C and/or ICU4J. -ICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others. + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. -``` + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. -## icu_provider - 2.2.0 -**Repository URL**: https://github.com/unicode-org/icu4x -**License Type(s)**: Unicode-3.0 -### License: https://spdx.org/licenses/Unicode-3.0.html -``` -UNICODE LICENSE V3 + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. -COPYRIGHT AND PERMISSION NOTICE + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. -Copyright © 2020-2024 Unicode, Inc. + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. -NOTICE TO USER: Carefully read the following legal agreement. BY -DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR -SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE -TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT -DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. + END OF TERMS AND CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining a -copy of data files and any associated documentation (the "Data Files") or -software and any associated documentation (the "Software") to deal in the -Data Files or Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, and/or sell -copies of the Data Files or Software, and to permit persons to whom the -Data Files or Software are furnished to do so, provided that either (a) -this copyright and permission notice appear with all copies of the Data -Files or Software, or (b) this copyright and permission notice appear in -associated Documentation. + APPENDIX: How to apply the Apache License to your work. -THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF -THIRD PARTY RIGHTS. + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. -IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE -BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, -OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA -FILES OR SOFTWARE. + Copyright {yyyy} {name of copyright owner} -Except as contained in this notice, the name of a copyright holder shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in these Data Files or Software without prior written -authorization of the copyright holder. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at -SPDX-License-Identifier: Unicode-3.0 + http://www.apache.org/licenses/LICENSE-2.0 -— + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. -Portions of ICU4X may have been adapted from ICU4C and/or ICU4J. -ICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others. ``` -## id-arena - 2.3.0 -**Repository URL**: https://github.com/fitzgen/id-arena -**License Type(s)**: MIT/Apache-2.0 -### License: https://spdx.org/licenses/ -### License File: LICENSE-APACHE +## itertools - 0.14.0 +**Repository URL**: https://github.com/rust-itertools/itertools +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html ``` Apache License Version 2.0, January 2004 @@ -17618,39 +20583,92 @@ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + ``` -### License File: LICENSE-MIT +## itoa - 1.0.18 +**Repository URL**: https://github.com/dtolnay/itoa +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html ``` -Copyright (c) 2014 Alex Crichton +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + +To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. ``` -## idna - 1.1.0 -**Repository URL**: https://github.com/servo/rust-url/ +## js-sys - 0.3.95 +**Repository URL**: https://github.com/wasm-bindgen/wasm-bindgen/tree/master/crates/js-sys **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -17858,8 +20876,37 @@ limitations under the License. ``` -## idna_adapter - 1.2.1 -**Repository URL**: https://github.com/hsivonen/idna_adapter +## jsonschema - 0.46.6 +**Repository URL**: https://github.com/Stranger6667/jsonschema +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2020-2026 Dmitry Dygalo + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +``` + +## lazy_static - 1.5.0 +**Repository URL**: https://github.com/rust-lang-nursery/lazy-static.rs **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -18067,10 +21114,11 @@ limitations under the License. ``` -## indexmap - 2.14.0 -**Repository URL**: https://github.com/indexmap-rs/indexmap -**License Type(s)**: Apache-2.0 -### License: https://spdx.org/licenses/Apache-2.0.html +## leb128fmt - 0.1.0 +**Repository URL**: https://github.com/bluk/leb128fmt +**License Type(s)**: MIT OR Apache-2.0 +### License: https://spdx.org/licenses/ +### License File: LICENSE-APACHE ``` Apache License Version 2.0, January 2004 @@ -18273,640 +21321,427 @@ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - ``` -## ipnet - 2.12.0 -**Repository URL**: https://github.com/krisprice/ipnet -**License Type(s)**: Apache-2.0 -### License: https://spdx.org/licenses/Apache-2.0.html +### License File: LICENSE-MIT ``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. +``` - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. +## libc - 0.2.185 +**Repository URL**: https://github.com/rust-lang/libc +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ - END OF TERMS AND CONDITIONS +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - APPENDIX: How to apply the Apache License to your work. +1. Definitions. - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - Copyright 2017 Juniper Networks, Inc. +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - http://www.apache.org/licenses/LICENSE-2.0 +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. -``` +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. -## iri-string - 0.7.12 -**Repository URL**: https://github.com/lo48576/iri-string -**License Type(s)**: Apache-2.0 -### License: https://spdx.org/licenses/Apache-2.0.html -``` +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - 1. Definitions. +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and +END OF TERMS AND CONDITIONS - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and +APPENDIX: How to apply the Apache License to your work. - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and +To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. +Copyright [yyyy] [name of copyright owner] - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. +http://www.apache.org/licenses/LICENSE-2.0 - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. +``` - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. +## libloading - 0.8.9 +**Repository URL**: https://github.com/nagisa/rust_libloading/ +**License Type(s)**: ISC +### License: https://spdx.org/licenses/ISC.html +``` +Copyright © 2015, Simonas Kazlauskas - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. +Permission to use, copy, modify, and/or distribute this software for any purpose with or without +fee is hereby granted, provided that the above copyright notice and this permission notice appear +in all copies. - END OF TERMS AND CONDITIONS +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS +SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE +AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. - APPENDIX: How to apply the Apache License to your work. +``` - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. +## libm - 0.2.16 +**Repository URL**: https://github.com/rust-lang/compiler-builtins +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License - Copyright [yyyy] [name of copyright owner] +Copyright (c) - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and +associated documentation files (the "Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the +following conditions: - http://www.apache.org/licenses/LICENSE-2.0 +The above copyright notice and this permission notice shall be included in all copies or substantial +portions of the Software. - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT +LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO +EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. ``` -## is_terminal_polyfill - 1.70.2 -**Repository URL**: https://github.com/polyfill-rs/is_terminal_polyfill +## linux-raw-sys - 0.12.1 +**Repository URL**: https://github.com/sunfishcode/linux-raw-sys **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - 1. Definitions. +1. Definitions. - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and +END OF TERMS AND CONDITIONS - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and +APPENDIX: How to apply the Apache License to your work. - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. +Copyright [yyyy] [name of copyright owner] - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. + http://www.apache.org/licenses/LICENSE-2.0 - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. +``` - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. +## litemap - 0.8.2 +**Repository URL**: https://github.com/unicode-org/icu4x +**License Type(s)**: Unicode-3.0 +### License: https://spdx.org/licenses/Unicode-3.0.html +``` +UNICODE LICENSE V3 - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. +COPYRIGHT AND PERMISSION NOTICE - END OF TERMS AND CONDITIONS +Copyright © 2020-2024 Unicode, Inc. - APPENDIX: How to apply the Apache License to your work. +NOTICE TO USER: Carefully read the following legal agreement. BY +DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR +SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE +TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT +DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. +Permission is hereby granted, free of charge, to any person obtaining a +copy of data files and any associated documentation (the "Data Files") or +software and any associated documentation (the "Software") to deal in the +Data Files or Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, and/or sell +copies of the Data Files or Software, and to permit persons to whom the +Data Files or Software are furnished to do so, provided that either (a) +this copyright and permission notice appear with all copies of the Data +Files or Software, or (b) this copyright and permission notice appear in +associated Documentation. - Copyright {yyyy} {name of copyright owner} +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +THIRD PARTY RIGHTS. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE +BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, +OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA +FILES OR SOFTWARE. - http://www.apache.org/licenses/LICENSE-2.0 +Except as contained in this notice, the name of a copyright holder shall +not be used in advertising or otherwise to promote the sale, use or other +dealings in these Data Files or Software without prior written +authorization of the copyright holder. - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +SPDX-License-Identifier: Unicode-3.0 + +— +Portions of ICU4X may have been adapted from ICU4C and/or ICU4J. +ICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others. ``` -## itertools - 0.14.0 -**Repository URL**: https://github.com/rust-itertools/itertools +## lock_api - 0.4.14 +**Repository URL**: https://github.com/Amanieu/parking_lot **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -19114,70 +21949,198 @@ limitations under the License. ``` -## itoa - 1.0.18 -**Repository URL**: https://github.com/dtolnay/itoa +## log - 0.4.29 +**Repository URL**: https://github.com/rust-lang/log **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` -Apache License -Version 2.0, January 2004 -http://www.apache.org/licenses/ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: - (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and - (b) You must cause any modified files to carry prominent notices stating that You changed the files; and + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and - (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and - (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. - You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. -To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. Copyright [yyyy] [name of copyright owner] @@ -19185,7 +22148,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at -http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -19195,217 +22158,318 @@ limitations under the License. ``` -## js-sys - 0.3.95 -**Repository URL**: https://github.com/wasm-bindgen/wasm-bindgen/tree/master/crates/js-sys -**License Type(s)**: Apache-2.0 -### License: https://spdx.org/licenses/Apache-2.0.html +## lru-slab - 0.1.2 +**Repository URL**: https://github.com/Ralith/lru-slab +**License Type(s)**: MIT OR Apache-2.0 OR Zlib +### License: https://spdx.org/licenses/ +### License File: LICENSE-APACHE ``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. -1. Definitions. + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. + END OF TERMS AND CONDITIONS - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. + APPENDIX: How to apply the Apache License to your work. - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. + Copyright [yyyy] [name of copyright owner] - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. + http://www.apache.org/licenses/LICENSE-2.0 - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +``` - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. +### License File: LICENSE-MIT +``` +Copyright (c) 2024 The lru-slab Developers -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +``` - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and +### License File: LICENSE-ZLIB +``` +Copyright (c) 2024 The lru-slab Developers - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and +This software is provided 'as-is', without any express or implied warranty. In +no event will the authors be held liable for any damages arising from the use of +this software. - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and +Permission is granted to anyone to use this software for any purpose, including +commercial applications, and to alter it and redistribute it freely, subject to +the following restrictions: - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. +1. The origin of this software must not be misrepresented; you must not claim + that you wrote the original software. If you use this software in a product, an + acknowledgment in the product documentation would be appreciated but is not + required. - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. +3. This notice may not be removed or altered from any source distribution. +``` -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. +## matchit - 0.8.4 +**Repository URL**: https://github.com/ibraheemdev/matchit +**License Type(s)**: BSD-3-Clause +### License: https://spdx.org/licenses/BSD-3-Clause.html +``` +BSD 3-Clause License -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. +Copyright (c) 2013, Julien Schmidt +All rights reserved. -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. -END OF TERMS AND CONDITIONS +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. -APPENDIX: How to apply the Apache License to your work. +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -Copyright [yyyy] [name of copyright owner] +``` -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at +## matchit - 0.8.4 +**Repository URL**: https://github.com/ibraheemdev/matchit +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License - http://www.apache.org/licenses/LICENSE-2.0 +Copyright (c) 2022 Ibraheem Ahmed -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. ``` -## leb128fmt - 0.1.0 -**Repository URL**: https://github.com/bluk/leb128fmt +## md-5 - 0.10.6 +**Repository URL**: https://github.com/RustCrypto/hashes **License Type(s)**: MIT OR Apache-2.0 ### License: https://spdx.org/licenses/ ### License File: LICENSE-APACHE @@ -19604,7 +22668,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -19615,6 +22679,10 @@ limitations under the License. ### License File: LICENSE-MIT ``` +Copyright (c) 2006-2009 Graydon Hoare +Copyright (c) 2009-2013 Mozilla Foundation +Copyright (c) 2016 Artyom Pavlov + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the @@ -19640,135 +22708,64 @@ IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ``` -## libc - 0.2.185 -**Repository URL**: https://github.com/rust-lang/libc -**License Type(s)**: Apache-2.0 -### License: https://spdx.org/licenses/Apache-2.0.html +## memchr - 2.8.0 +**Repository URL**: https://github.com/BurntSushi/memchr +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html ``` -Apache License -Version 2.0, January 2004 -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - - (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - - You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - -To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +The MIT License (MIT) -``` +Copyright (c) 2015 Andrew Gallant -## libloading - 0.8.9 -**Repository URL**: https://github.com/nagisa/rust_libloading/ -**License Type(s)**: ISC -### License: https://spdx.org/licenses/ISC.html -``` -Copyright © 2015, Simonas Kazlauskas +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: -Permission to use, copy, modify, and/or distribute this software for any purpose with or without -fee is hereby granted, provided that the above copyright notice and this permission notice appear -in all copies. +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS -SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, -NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. ``` -## libm - 0.2.16 -**Repository URL**: https://github.com/rust-lang/compiler-builtins +## micromap - 0.3.0 +**Repository URL**: https://github.com/yegor256/micromap **License Type(s)**: MIT ### License: https://spdx.org/licenses/MIT.html ``` -MIT License - -Copyright (c) +Copyright (c) 2023-2026 Yegor Bugayenko -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and -associated documentation files (the "Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the -following conditions: +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all copies or substantial -portions of the Software. +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT -LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO -EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -USE OR OTHER DEALINGS IN THE SOFTWARE. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. ``` -## linux-raw-sys - 0.12.1 -**Repository URL**: https://github.com/sunfishcode/linux-raw-sys +## mime - 0.3.17 +**Repository URL**: https://github.com/hyperium/mime **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -19958,80 +22955,26 @@ APPENDIX: How to apply the Apache License to your work. comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -``` - -## litemap - 0.8.2 -**Repository URL**: https://github.com/unicode-org/icu4x -**License Type(s)**: Unicode-3.0 -### License: https://spdx.org/licenses/Unicode-3.0.html -``` -UNICODE LICENSE V3 - -COPYRIGHT AND PERMISSION NOTICE - -Copyright © 2020-2024 Unicode, Inc. - -NOTICE TO USER: Carefully read the following legal agreement. BY -DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR -SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE -TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT -DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of data files and any associated documentation (the "Data Files") or -software and any associated documentation (the "Software") to deal in the -Data Files or Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, and/or sell -copies of the Data Files or Software, and to permit persons to whom the -Data Files or Software are furnished to do so, provided that either (a) -this copyright and permission notice appear with all copies of the Data -Files or Software, or (b) this copyright and permission notice appear in -associated Documentation. - -THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF -THIRD PARTY RIGHTS. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE -BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, -OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA -FILES OR SOFTWARE. + identification within third-party archives. -Except as contained in this notice, the name of a copyright holder shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in these Data Files or Software without prior written -authorization of the copyright holder. +Copyright [yyyy] [name of copyright owner] -SPDX-License-Identifier: Unicode-3.0 +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at -— + http://www.apache.org/licenses/LICENSE-2.0 -Portions of ICU4X may have been adapted from ICU4C and/or ICU4J. -ICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others. +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. ``` -## lock_api - 0.4.14 -**Repository URL**: https://github.com/Amanieu/parking_lot +## minicov - 0.3.8 +**Repository URL**: https://github.com/Amanieu/minicov **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -20239,8 +23182,35 @@ limitations under the License. ``` -## log - 0.4.29 -**Repository URL**: https://github.com/rust-lang/log +## mio - 1.2.0 +**Repository URL**: https://github.com/tokio-rs/mio +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +Copyright (c) 2014 Carl Lerche and other MIO contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +``` + +## multimap - 0.10.1 +**Repository URL**: https://github.com/havarnov/multimap **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -20448,321 +23418,170 @@ limitations under the License. ``` -## lru-slab - 0.1.2 -**Repository URL**: https://github.com/Ralith/lru-slab -**License Type(s)**: MIT OR Apache-2.0 OR Zlib -### License: https://spdx.org/licenses/ -### License File: LICENSE-APACHE +## napi - 2.16.17 +**Repository URL**: https://github.com/napi-rs/napi-rs +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html ``` +MIT License - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. +Copyright (c) - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and +associated documentation files (the "Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the +following conditions: - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. +The above copyright notice and this permission notice shall be included in all copies or substantial +portions of the Software. - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT +LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO +EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. - END OF TERMS AND CONDITIONS +``` - APPENDIX: How to apply the Apache License to your work. +## napi-build - 2.3.1 +**Repository URL**: https://github.com/napi-rs/napi-rs +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. +Copyright (c) - Copyright [yyyy] [name of copyright owner] +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and +associated documentation files (the "Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the +following conditions: - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at +The above copyright notice and this permission notice shall be included in all copies or substantial +portions of the Software. - http://www.apache.org/licenses/LICENSE-2.0 +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT +LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO +EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ``` -### License File: LICENSE-MIT +## napi-derive - 2.16.13 +**Repository URL**: https://github.com/napi-rs/napi-rs +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html ``` -Copyright (c) 2024 The lru-slab Developers +MIT License -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +Copyright (c) -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and +associated documentation files (the "Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial +portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT +LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO +EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ``` -### License File: LICENSE-ZLIB +## napi-derive-backend - 1.0.75 +**Repository URL**: https://github.com/napi-rs/napi-rs +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html ``` -Copyright (c) 2024 The lru-slab Developers +MIT License -This software is provided 'as-is', without any express or implied warranty. In -no event will the authors be held liable for any damages arising from the use of -this software. +Copyright (c) -Permission is granted to anyone to use this software for any purpose, including -commercial applications, and to alter it and redistribute it freely, subject to -the following restrictions: +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and +associated documentation files (the "Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the +following conditions: -1. The origin of this software must not be misrepresented; you must not claim - that you wrote the original software. If you use this software in a product, an - acknowledgment in the product documentation would be appreciated but is not - required. +The above copyright notice and this permission notice shall be included in all copies or substantial +portions of the Software. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT +LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO +EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. -3. This notice may not be removed or altered from any source distribution. ``` -## matchit - 0.8.4 -**Repository URL**: https://github.com/ibraheemdev/matchit -**License Type(s)**: BSD-3-Clause -### License: https://spdx.org/licenses/BSD-3-Clause.html +## napi-sys - 2.4.0 +**Repository URL**: https://github.com/napi-rs/napi-rs +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html ``` -BSD 3-Clause License - -Copyright (c) 2013, Julien Schmidt -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: +MIT License -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. +Copyright (c) -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and +associated documentation files (the "Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the +following conditions: -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. +The above copyright notice and this permission notice shall be included in all copies or substantial +portions of the Software. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT +LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO +EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. ``` -## matchit - 0.8.4 -**Repository URL**: https://github.com/ibraheemdev/matchit +## nu-ansi-term - 0.50.3 +**Repository URL**: https://github.com/nushell/nu-ansi-term **License Type(s)**: MIT ### License: https://spdx.org/licenses/MIT.html ``` -MIT License - -Copyright (c) 2022 Ibraheem Ahmed - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +The MIT License (MIT) + +Copyright (c) 2014 Benjamin Sago +Copyright (c) 2021-2022 The Nushell Project Developers + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. ``` -## md-5 - 0.10.6 -**Repository URL**: https://github.com/RustCrypto/hashes -**License Type(s)**: MIT OR Apache-2.0 -### License: https://spdx.org/licenses/ -### License File: LICENSE-APACHE +## num - 0.4.3 +**Repository URL**: https://github.com/rust-num/num +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html ``` Apache License Version 2.0, January 2004 @@ -20958,77 +23777,18 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -``` - -### License File: LICENSE-MIT -``` -Copyright (c) 2006-2009 Graydon Hoare -Copyright (c) 2009-2013 Mozilla Foundation -Copyright (c) 2016 Artyom Pavlov - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. -``` - -## memchr - 2.8.0 -**Repository URL**: https://github.com/BurntSushi/memchr -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -The MIT License (MIT) - -Copyright (c) 2015 Andrew Gallant - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. ``` -## mime - 0.3.17 -**Repository URL**: https://github.com/hyperium/mime +## num-bigint - 0.4.6 +**Repository URL**: https://github.com/rust-num/num-bigint **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -21236,8 +23996,89 @@ limitations under the License. ``` -## minicov - 0.3.8 -**Repository URL**: https://github.com/Amanieu/minicov +## num-cmp - 0.1.0 +**Repository URL**: https://github.com/lifthrasiir/num-cmp +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + +To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +``` + +## num-complex - 0.4.6 +**Repository URL**: https://github.com/rust-num/num-complex **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -21445,35 +24286,8 @@ limitations under the License. ``` -## mio - 1.2.0 -**Repository URL**: https://github.com/tokio-rs/mio -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -Copyright (c) 2014 Carl Lerche and other MIO contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -``` - -## multimap - 0.10.1 -**Repository URL**: https://github.com/havarnov/multimap +## num-integer - 0.1.46 +**Repository URL**: https://github.com/rust-num/num-integer **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -21681,168 +24495,8 @@ limitations under the License. ``` -## napi - 2.16.17 -**Repository URL**: https://github.com/napi-rs/napi-rs -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and -associated documentation files (the "Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the -following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial -portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT -LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO -EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -USE OR OTHER DEALINGS IN THE SOFTWARE. - -``` - -## napi-build - 2.3.1 -**Repository URL**: https://github.com/napi-rs/napi-rs -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and -associated documentation files (the "Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the -following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial -portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT -LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO -EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -USE OR OTHER DEALINGS IN THE SOFTWARE. - -``` - -## napi-derive - 2.16.13 -**Repository URL**: https://github.com/napi-rs/napi-rs -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and -associated documentation files (the "Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the -following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial -portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT -LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO -EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -USE OR OTHER DEALINGS IN THE SOFTWARE. - -``` - -## napi-derive-backend - 1.0.75 -**Repository URL**: https://github.com/napi-rs/napi-rs -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and -associated documentation files (the "Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the -following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial -portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT -LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO -EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -USE OR OTHER DEALINGS IN THE SOFTWARE. - -``` - -## napi-sys - 2.4.0 -**Repository URL**: https://github.com/napi-rs/napi-rs -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and -associated documentation files (the "Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the -following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial -portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT -LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO -EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -USE OR OTHER DEALINGS IN THE SOFTWARE. - -``` - -## nu-ansi-term - 0.50.3 -**Repository URL**: https://github.com/nushell/nu-ansi-term -**License Type(s)**: MIT -### License: https://spdx.org/licenses/MIT.html -``` -The MIT License (MIT) - -Copyright (c) 2014 Benjamin Sago -Copyright (c) 2021-2022 The Nushell Project Developers - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -``` - -## num-bigint - 0.4.6 -**Repository URL**: https://github.com/rust-num/num-bigint +## num-iter - 0.1.45 +**Repository URL**: https://github.com/rust-num/num-iter **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -22050,8 +24704,8 @@ limitations under the License. ``` -## num-integer - 0.1.46 -**Repository URL**: https://github.com/rust-num/num-integer +## num-rational - 0.4.2 +**Repository URL**: https://github.com/rust-num/num-rational **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` @@ -23855,6 +26509,34 @@ DEALINGS IN THE SOFTWARE. ``` +## outref - 0.5.2 +**Repository URL**: https://github.com/Nugine/outref +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2022 Nugine + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +``` + ## parking - 2.2.1 **Repository URL**: https://github.com/smol-rs/parking **License Type(s)**: Apache-2.0 @@ -29224,6 +31906,197 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ``` +## ref-cast - 1.0.25 +**Repository URL**: https://github.com/dtolnay/ref-cast +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + +To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +``` + +## ref-cast-impl - 1.0.25 +**Repository URL**: https://github.com/dtolnay/ref-cast +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + +To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +``` + +## referencing - 0.46.6 +**Repository URL**: https://github.com/Stranger6667/jsonschema +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) 2020-2026 Dmitry Dygalo + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +``` + ## regex - 1.12.3 **Repository URL**: https://github.com/rust-lang/regex **License Type(s)**: Apache-2.0 @@ -39420,7 +42293,215 @@ APPENDIX: How to apply the Apache License to your work. same "printed page" as the copyright notice for easier identification within third-party archives. -Copyright 2014 Paho Lurie-Gregg +Copyright 2014 Paho Lurie-Gregg + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +``` + +## unicase - 2.9.0 +**Repository URL**: https://github.com/seanmonstar/unicase +**License Type(s)**: Apache-2.0 +### License: https://spdx.org/licenses/Apache-2.0.html +``` + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -39433,214 +42514,215 @@ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + ``` -## unicase - 2.9.0 -**Repository URL**: https://github.com/seanmonstar/unicase +## unicode-general-category - 1.1.0 +**Repository URL**: https://github.com/yeslogic/unicode-general-category **License Type(s)**: Apache-2.0 ### License: https://spdx.org/licenses/Apache-2.0.html ``` - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -1. Definitions. + 1. Definitions. - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. -END OF TERMS AND CONDITIONS + END OF TERMS AND CONDITIONS -APPENDIX: How to apply the Apache License to your work. + APPENDIX: How to apply the Apache License to your work. - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. -Copyright [yyyy] [name of copyright owner] + Copyright {yyyy} {name of copyright owner} -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. ``` @@ -41270,6 +44352,32 @@ limitations under the License. ``` +## uuid-simd - 0.8.0 +**Repository URL**: https://github.com/Nugine/simd +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and +associated documentation files (the "Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial +portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT +LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO +EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. + +``` + ## version_check - 0.9.5 **Repository URL**: https://github.com/SergioBenitez/version_check **License Type(s)**: Apache-2.0 @@ -41479,6 +44587,32 @@ limitations under the License. ``` +## vsimd - 0.8.0 +**Repository URL**: https://github.com/Nugine/simd +**License Type(s)**: MIT +### License: https://spdx.org/licenses/MIT.html +``` +MIT License + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and +associated documentation files (the "Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial +portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT +LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO +EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. + +``` + ## walkdir - 2.5.0 **Repository URL**: https://github.com/BurntSushi/walkdir **License Type(s)**: MIT diff --git a/Cargo.lock b/Cargo.lock index 87581d293..c31f76695 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,20 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "ahash" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" +dependencies = [ + "cfg-if", + "getrandom 0.3.4", + "once_cell", + "serde", + "version_check", + "zerocopy", +] + [[package]] name = "aho-corasick" version = "1.1.4" @@ -11,6 +25,12 @@ dependencies = [ "memchr", ] +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + [[package]] name = "android_system_properties" version = "0.1.5" @@ -214,6 +234,21 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "bit-set" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + [[package]] name = "bitflags" version = "2.11.0" @@ -241,12 +276,24 @@ dependencies = [ "hybrid-array", ] +[[package]] +name = "borrow-or-share" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc0b364ead1874514c8c2855ab558056ebfeb775653e7ae45ff72f28f8f3166c" + [[package]] name = "bumpalo" version = "3.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" +[[package]] +name = "bytecount" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175812e0be2bccb6abe50bb8d566126198344f707e304f45c648fd8f2cc0365e" + [[package]] name = "bytes" version = "1.11.1" @@ -527,6 +574,7 @@ dependencies = [ "console 0.15.11", "shell-words", "thiserror 1.0.69", + "zeroize", ] [[package]] @@ -573,6 +621,15 @@ version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +[[package]] +name = "email_address" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e079f19b08ca6239f47f8ba8509c11cf3ea30095831f7fed61441475edd8c449" +dependencies = [ + "serde", +] + [[package]] name = "encode_unicode" version = "1.0.0" @@ -616,6 +673,17 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "fancy-regex" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1e1dacd0d2082dfcf1351c4bdd566bbe89a2b263235a2b50058f1e130a47277" +dependencies = [ + "bit-set", + "regex-automata", + "regex-syntax", +] + [[package]] name = "fastrand" version = "2.4.1" @@ -634,6 +702,17 @@ version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" +[[package]] +name = "fluent-uri" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc74ac4d8359ae70623506d512209619e5cf8f347124910440dbc221714b328e" +dependencies = [ + "borrow-or-share", + "ref-cast", + "serde", +] + [[package]] name = "fnv" version = "1.0.7" @@ -646,6 +725,12 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + [[package]] name = "form_urlencoded" version = "1.2.2" @@ -655,6 +740,16 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "fraction" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e076045bb43dac435333ed5f04caf35c7463631d0dae2deb2638d94dd0a5b872" +dependencies = [ + "lazy_static", + "num", +] + [[package]] name = "futures" version = "0.3.32" @@ -819,7 +914,18 @@ version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ - "foldhash", + "foldhash 0.1.5", +] + +[[package]] +name = "hashbrown" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash 0.2.0", ] [[package]] @@ -1162,6 +1268,39 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "jsonschema" +version = "0.46.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8374249b1bdce1c1773a09fa294347e19e4bfeb86d845c2d8ebaf8a8dbf11233" +dependencies = [ + "ahash", + "bytecount", + "data-encoding", + "email_address", + "fancy-regex", + "fraction", + "getrandom 0.3.4", + "idna", + "itoa", + "num-cmp", + "num-traits", + "percent-encoding", + "referencing", + "regex", + "regex-syntax", + "serde", + "serde_json", + "unicode-general-category", + "uuid-simd", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + [[package]] name = "leb128fmt" version = "0.1.0" @@ -1245,6 +1384,12 @@ version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" +[[package]] +name = "micromap" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a86d3146ed3995b5913c414f6664344b9617457320782e64f0bb44afd49d74" + [[package]] name = "mime" version = "0.3.17" @@ -1417,11 +1562,13 @@ dependencies = [ "futures-util", "http", "http-body-util", + "jsonschema", "nemo-relay", "nemo-relay-adaptive", "nemo-relay-pii-redaction", "opentelemetry", "opentelemetry_sdk", + "regex", "reqwest", "ring", "rustls", @@ -1590,6 +1737,20 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + [[package]] name = "num-bigint" version = "0.4.6" @@ -1600,6 +1761,21 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-cmp" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63335b2e2c34fae2fb0aa2cecfd9f0832a1e24b3b32ecec612c3426d46dc8aaa" + +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + [[package]] name = "num-integer" version = "0.1.46" @@ -1609,6 +1785,28 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + [[package]] name = "num-traits" version = "0.2.19" @@ -1774,6 +1972,12 @@ dependencies = [ "serde", ] +[[package]] +name = "outref" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a80800c0488c3a21695ea981a54918fbb37abf04f4d0720c453632255e2ff0e" + [[package]] name = "parking" version = "2.2.1" @@ -2277,6 +2481,43 @@ dependencies = [ "bitflags", ] +[[package]] +name = "ref-cast" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "referencing" +version = "0.46.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65a910f9d63351f9c9d7dc3053d02b214ea3a005917140c70087d7b59cbc5bb1" +dependencies = [ + "ahash", + "fluent-uri", + "getrandom 0.3.4", + "hashbrown 0.16.1", + "itoa", + "micromap", + "parking_lot", + "percent-encoding", + "serde_json", +] + [[package]] name = "regex" version = "1.12.3" @@ -3227,6 +3468,12 @@ version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" +[[package]] +name = "unicode-general-category" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b993bddc193ae5bd0d623b49ec06ac3e9312875fdae725a975c51db1cc1677f" + [[package]] name = "unicode-ident" version = "1.0.24" @@ -3305,12 +3552,28 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "uuid-simd" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b082222b4f6619906941c17eb2297fff4c2fb96cb60164170522942a200bd8" +dependencies = [ + "outref", + "vsimd", +] + [[package]] name = "version_check" version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "vsimd" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64" + [[package]] name = "walkdir" version = "2.5.0" diff --git a/README.md b/README.md index 3ac820acc..28e76c713 100644 --- a/README.md +++ b/README.md @@ -71,9 +71,10 @@ nemo-relay plugins edit --project ``` The editor creates or updates the nearest project plugin file at -`.nemo-relay/plugins.toml`. In the menu: +`.nemo-relay/plugins.toml`. In the top-level menu, select **Observability**, +then configure these sections: -1. Enable the `Observability` component. +1. Toggle the Observability component on. 2. Open `ATOF`, toggle the section `[on]` Optionally set: @@ -85,7 +86,7 @@ The editor creates or updates the nearest project plugin file at Optionally set: - `output_directory` to `.nemo-relay/atif` - `filename_template` to `trajectory-{session_id}.json` -4. Press `p` to preview the generated TOML. +4. Return to the top-level menu and press `p` to preview the generated TOML. 5. Press `s` to save. > [!NOTE] diff --git a/about.toml b/about.toml index 847c1d97a..3a8135a2e 100644 --- a/about.toml +++ b/about.toml @@ -11,6 +11,7 @@ accepted = [ "BSL-1.0", "ISC", "MIT", + "MIT-0", "MPL-2.0", "Unicode-3.0", "Zlib", diff --git a/crates/cli/Cargo.toml b/crates/cli/Cargo.toml index 07e1087b9..449177b84 100644 --- a/crates/cli/Cargo.toml +++ b/crates/cli/Cargo.toml @@ -38,8 +38,10 @@ console = "0.16" futures-util = "0.3" http = "1" http-body-util = "0.1" -dialoguer = { version = "0.11", default-features = false } +dialoguer = { version = "0.11", default-features = false, features = ["password"] } +jsonschema = { version = "0.46.6", default-features = false } reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls-native-roots-no-provider", "stream"] } +regex = "1" ring = "0.17" rustls = { version = "0.23", default-features = false, features = ["ring", "std", "tls12"] } serde = { version = "1", features = ["derive"] } diff --git a/crates/cli/README.md b/crates/cli/README.md index ee1847d8e..c52dd9c71 100644 --- a/crates/cli/README.md +++ b/crates/cli/README.md @@ -111,6 +111,11 @@ plugin config with: nemo-relay plugins edit ``` +The top-level editor menu contains one entry per supported built-in, followed by +the dynamic plugin references in the selected physical `plugins.toml`. Dynamic +plugins with a manifest-declared JSON Schema provide structured field controls. +Other dynamic plugins use a raw JSON object editor. + The canonical plugin file is `plugins.toml`; user config lives at `~/.config/nemo-relay/plugins.toml` or `$XDG_CONFIG_HOME/nemo-relay/plugins.toml`. Project config lives at diff --git a/crates/cli/src/config.rs b/crates/cli/src/config.rs index ca2b3c84a..74856485a 100644 --- a/crates/cli/src/config.rs +++ b/crates/cli/src/config.rs @@ -209,7 +209,7 @@ pub(crate) struct PluginJsonContext<'a> { /// Plugin configuration subcommands. #[derive(Debug, Clone, Subcommand)] pub(crate) enum PluginsSubcommand { - /// Interactively create or edit built-in plugin configuration in `plugins.toml`. + /// Interactively create or edit built-in and dynamic plugin configuration. Edit(PluginsEditCommand), /// Register a manifest-backed dynamic plugin in `plugins.toml`. Add(PluginsAddCommand), diff --git a/crates/cli/src/plugins.rs b/crates/cli/src/plugins.rs index b3108bc51..ba8ab8e65 100644 --- a/crates/cli/src/plugins.rs +++ b/crates/cli/src/plugins.rs @@ -10,22 +10,24 @@ use std::io::IsTerminal; use std::path::Path; -use console::{Key, Term, style}; +use console::{Key, Term, style, truncate_str}; use dialoguer::theme::ColorfulTheme; use dialoguer::{Input, Select}; use nemo_relay::config_editor::{EditorFieldKind, EditorFieldSpec}; -use nemo_relay::plugin::PluginConfig; use serde_json::{Value, json}; use crate::config::PluginsEditCommand; use crate::error::CliError; pub(crate) mod config_io; +mod dynamic_editor; mod editor_model; pub(crate) mod lifecycle; pub(crate) mod policy; +pub(crate) mod schema; use self::config_io::*; +use self::dynamic_editor::*; use self::editor_model::*; #[derive(Debug, Clone, Copy, PartialEq, Eq)] @@ -88,39 +90,47 @@ fn configured_label(configured: bool, label: impl AsRef) -> String { } fn print_save_success(path: &Path) { - println!(" {} Saved {}", style("✔").green(), path.display()); + println!( + " {} Saved {}", + style("✔").green(), + single_line_text(&path.display().to_string()) + ); } pub(crate) fn edit(command: PluginsEditCommand) -> Result<(), CliError> { ensure_tty()?; let scope = target_scope(&command.scope)?; let path = target_path(scope)?; - let mut config = read_plugin_config(&path)?; - ensure_observability_component(&mut config)?; - ensure_adaptive_component(&mut config)?; - let mut components = editable_components(&config)?; + let mut document = PluginConfigDocument::read(&path)?; + ensure_observability_component(document.config_mut())?; + ensure_adaptive_component(document.config_mut())?; + let mut components = editable_components(document.config())?; + let mut dynamic_plugins = load_dynamic_plugin_states(&document)?; let theme = ColorfulTheme::default(); crate::banner::print_intro(); - println!(" Editing plugin config at {}", path.display()); - println!(" Tip: ↑/↓ or j/k to move, SPACE/ENTER to select, p to preview, s to save."); + println!( + " Editing plugin config at {}", + single_line_text(&path.display().to_string()) + ); + println!(" Tip: ↑/↓ or j/k to move, PageUp/PageDown to scroll, SPACE/ENTER to select."); println!(); let mut selected_index = 0; loop { - let (items, actions) = plugin_menu_items(&components, &path); - println!(); - for component in &components { - println!("{}: {}", component.label(), component.summary()); - } + let dynamic_rows = dynamic_plugins + .iter() + .map(|plugin| (plugin.label().to_owned(), plugin.menu_summary())) + .collect::>(); + let (items, actions) = plugin_menu_items(&components, &dynamic_rows, &path); let selection = prompt_menu(&theme, "plugins.toml", &items, selected_index)?; if let Some(selected) = menu_response_index(&selection) { selected_index = selected; } if handle_menu_response( &theme, - &path, - &mut config, + &mut document, &mut components, + &mut dynamic_plugins, &actions, selection, )? == EditLoopControl::Finish @@ -132,25 +142,27 @@ pub(crate) fn edit(command: PluginsEditCommand) -> Result<(), CliError> { fn handle_menu_response( theme: &ColorfulTheme, - path: &Path, - config: &mut PluginConfig, + document: &mut PluginConfigDocument, components: &mut [EditableComponent], + dynamic_plugins: &mut [DynamicPluginEditorState], actions: &[MenuAction], selection: MenuResponse, ) -> Result { match selection { MenuResponse::Selected(selection) => handle_menu_action( theme, - path, - config, + document, components, + dynamic_plugins, actions.get(selection).copied(), ), MenuResponse::Shortcut(MenuShortcut::Preview, _) => { - preview_components(config, components)?; + preview_document(document, components, dynamic_plugins)?; Ok(EditLoopControl::Continue) } - MenuResponse::Shortcut(MenuShortcut::Save, _) => save_components(path, config, components), + MenuResponse::Shortcut(MenuShortcut::Save, _) => { + save_document(document, components, dynamic_plugins) + } MenuResponse::Shortcut(MenuShortcut::Help, _) => { print_editor_help(); Ok(EditLoopControl::Continue) @@ -165,65 +177,98 @@ fn handle_menu_response( fn handle_menu_action( theme: &ColorfulTheme, - path: &Path, - config: &mut PluginConfig, + document: &mut PluginConfigDocument, components: &mut [EditableComponent], + dynamic_plugins: &mut [DynamicPluginEditorState], action: Option, ) -> Result { match action { - Some(MenuAction::ToggleComponent(component_index)) => { + Some(MenuAction::EditComponent(component_index)) => { if let Some(component) = components.get_mut(component_index) { - component.toggle_enabled(); + edit_component(theme, component)?; } Ok(EditLoopControl::Continue) } - Some(MenuAction::EditField { - component_index, - field_index, - }) => { - edit_selected_component_field(theme, components, component_index, field_index)?; + Some(MenuAction::EditDynamic(dynamic_index)) => { + if let Some(plugin) = dynamic_plugins.get_mut(dynamic_index) { + edit_dynamic_plugin(theme, plugin)?; + } Ok(EditLoopControl::Continue) } Some(MenuAction::Preview) => { - preview_components(config, components)?; + preview_document(document, components, dynamic_plugins)?; Ok(EditLoopControl::Continue) } - Some(MenuAction::Save) => save_components(path, config, components), + Some(MenuAction::Save) => save_document(document, components, dynamic_plugins), Some(MenuAction::Cancel) | None => Err(cancelled_error()), } } -fn edit_selected_component_field( +fn edit_component( theme: &ColorfulTheme, - components: &mut [EditableComponent], - component_index: usize, - field_index: usize, + component: &mut EditableComponent, ) -> Result<(), CliError> { - if let Some(component) = components.get_mut(component_index) - && let Some(field) = component.fields().get(field_index) - { - edit_component_field(theme, component, *field)?; + let mut selected_index = 0; + loop { + let (items, actions) = component_menu_items(component); + let selection = prompt_menu(theme, component.label(), &items, selected_index)?; + if let Some(selected) = menu_response_index(&selection) { + selected_index = selected; + } + match selection { + MenuResponse::Selected(selected) => match actions.get(selected).copied() { + Some(ComponentMenuAction::Toggle) => component.toggle_enabled(), + Some(ComponentMenuAction::EditField(field_index)) => { + if let Some(field) = component.fields().get(field_index) { + edit_component_field(theme, component, *field)?; + } + } + Some(ComponentMenuAction::Back) | None => return Ok(()), + }, + MenuResponse::Shortcut(MenuShortcut::Reset, selected) => { + reset_component_menu_item(component, actions.get(selected).copied())?; + } + MenuResponse::Shortcut(MenuShortcut::Clear, selected) => { + clear_component_menu_item(component, actions.get(selected).copied())?; + } + MenuResponse::Shortcut(MenuShortcut::Help, _) => print_editor_help(), + MenuResponse::Shortcut(MenuShortcut::Preview | MenuShortcut::Save, _) => { + println!(" Preview and save are available from the main plugins.toml menu."); + } + MenuResponse::Cancel => return Ok(()), + } } - Ok(()) } -fn preview_components( - config: &PluginConfig, +fn preview_document( + document: &PluginConfigDocument, components: &[EditableComponent], + dynamic_plugins: &[DynamicPluginEditorState], ) -> Result<(), CliError> { - let preview_config = config_with_editable_components(config, components)?; - print_preview(&preview_config) + let mut preview = document.clone(); + preview.set_config(config_with_editable_components( + document.config(), + components, + )?); + for plugin in dynamic_plugins { + plugin.apply_to_document(&mut preview, true)?; + } + print_document_preview(&preview) } -fn save_components( - path: &Path, - config: &mut PluginConfig, +fn save_document( + document: &mut PluginConfigDocument, components: &[EditableComponent], + dynamic_plugins: &[DynamicPluginEditorState], ) -> Result { - store_editable_components(config, components)?; - validate_config(config)?; - write_plugin_config(path, config)?; - print_save_success(path); + store_editable_components(document.config_mut(), components)?; + validate_config(document.config())?; + for plugin in dynamic_plugins { + plugin.validate()?; + plugin.apply_to_document(document, false)?; + } + document.write()?; + print_save_success(document.path()); Ok(EditLoopControl::Finish) } @@ -232,30 +277,43 @@ fn handle_reset_or_clear_shortcut( action: Option, shortcut: MenuShortcut, ) -> Result { + let _ = (components, action, shortcut); + println!(" Open a plugin to reset or clear its settings."); + Ok(EditLoopControl::Continue) +} + +fn reset_component_menu_item( + component: &mut EditableComponent, + action: Option, +) -> Result<(), CliError> { match action { - Some(MenuAction::ToggleComponent(component_index)) => { - if let Some(component) = components.get_mut(component_index) { - apply_component_enablement_shortcut(component, shortcut); + Some(ComponentMenuAction::Toggle) => component.reset_enabled(), + Some(ComponentMenuAction::EditField(field_index)) => { + if let Some(field) = component.fields().get(field_index) { + component.reset_field(*field)?; } } - Some(MenuAction::EditField { - component_index, - field_index, - }) => reset_selected_component_field(components, component_index, field_index)?, - _ => println!(" Select a component or editable field to reset or clear."), + Some(ComponentMenuAction::Back) | None => { + println!(" Select a component setting to reset."); + } } - Ok(EditLoopControl::Continue) + Ok(()) } -fn reset_selected_component_field( - components: &mut [EditableComponent], - component_index: usize, - field_index: usize, +fn clear_component_menu_item( + component: &mut EditableComponent, + action: Option, ) -> Result<(), CliError> { - if let Some(component) = components.get_mut(component_index) - && let Some(field) = component.fields().get(field_index) - { - component.reset_field(*field)?; + match action { + Some(ComponentMenuAction::Toggle) => component.set_enabled(false), + Some(ComponentMenuAction::EditField(field_index)) => { + if let Some(field) = component.fields().get(field_index) { + component.reset_field(*field)?; + } + } + Some(ComponentMenuAction::Back) | None => { + println!(" Select a component setting to clear."); + } } Ok(()) } @@ -290,14 +348,6 @@ fn edit_component_field( Ok(()) } -fn apply_component_enablement_shortcut(component: &mut EditableComponent, shortcut: MenuShortcut) { - match shortcut { - MenuShortcut::Reset => component.reset_enabled(), - MenuShortcut::Clear => component.set_enabled(false), - _ => {} - } -} - fn menu_response_index(response: &MenuResponse) -> Option { match response { MenuResponse::Selected(index) @@ -329,7 +379,16 @@ fn prompt_menu( if rendered_lines > 0 { term.clear_last_lines(rendered_lines).map_err(menu_error)?; } - let lines = render_menu(theme, prompt, items, selected); + let (rows, columns) = term.size(); + let viewport = menu_viewport(items.len(), selected, usize::from(rows)); + let lines = render_menu_for_size( + theme, + prompt, + items, + selected, + usize::from(rows), + usize::from(columns), + ); rendered_lines = lines.len(); for line in &lines { term.write_line(line).map_err(menu_error)?; @@ -346,6 +405,16 @@ fn prompt_menu( Key::ArrowDown | Key::Char('j') => { selected = (selected + 1) % items.len(); } + Key::PageUp => { + selected = selected.saturating_sub(viewport.page_size); + } + Key::PageDown => { + selected = selected + .saturating_add(viewport.page_size) + .min(items.len() - 1); + } + Key::Home => selected = 0, + Key::End => selected = items.len() - 1, Key::Enter | Key::Char(' ') => { clear_menu(&term, rendered_lines)?; return Ok(MenuResponse::Selected(selected)); @@ -379,41 +448,139 @@ fn prompt_menu( } } -fn render_menu( +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +struct MenuViewport { + start: usize, + end: usize, + page_size: usize, + indicators: bool, +} + +fn menu_viewport(item_count: usize, selected: usize, terminal_rows: usize) -> MenuViewport { + let terminal_rows = terminal_rows.max(1); + let header_rows = menu_header_rows(terminal_rows); + let available_without_indicators = terminal_rows.saturating_sub(header_rows).max(1); + if item_count <= available_without_indicators { + return MenuViewport { + start: 0, + end: item_count, + page_size: available_without_indicators, + indicators: false, + }; + } + + let indicator_rows = usize::from(terminal_rows.saturating_sub(header_rows) >= 3) * 2; + let page_size = terminal_rows + .saturating_sub(header_rows + indicator_rows) + .max(1); + let selected = selected.min(item_count.saturating_sub(1)); + let start = selected + .saturating_sub(page_size.saturating_sub(1)) + .min(item_count.saturating_sub(page_size)); + MenuViewport { + start, + end: (start + page_size).min(item_count), + page_size, + indicators: indicator_rows > 0, + } +} + +fn menu_header_rows(terminal_rows: usize) -> usize { + match terminal_rows { + 0 | 1 => 0, + 2..=4 => 1, + _ => 2, + } +} + +fn render_menu_for_size( theme: &ColorfulTheme, prompt: &str, items: &[MenuItem], selected: usize, + terminal_rows: usize, + terminal_columns: usize, ) -> Vec { - let mut lines = Vec::with_capacity(items.len() + 2); - lines.push(format!( - "{} {} {}", - theme.prompt_prefix, - theme.prompt_style.apply_to(prompt), - theme.prompt_suffix - )); - lines.push( - theme - .hint_style - .apply_to(" ↑/↓ or j/k move, Enter/Space select, p preview, s save, r reset, Backspace/Delete clear, ? help, q cancel.") - .to_string(), + let terminal_rows = terminal_rows.max(1); + let viewport = menu_viewport(items.len(), selected, terminal_rows); + let mut lines = Vec::with_capacity(viewport.page_size + 4); + let header_rows = menu_header_rows(terminal_rows); + if header_rows >= 1 { + lines.push(format!( + "{} {} {}", + theme.prompt_prefix, + theme.prompt_style.apply_to(single_line_text(prompt)), + theme.prompt_suffix + )); + } + if header_rows >= 2 { + lines.push( + theme + .hint_style + .apply_to(" ↑/↓ or j/k move, PgUp/PgDn page, Home/End jump, Enter/Space select, p preview, s save, r reset, Backspace/Delete clear, ? help, q cancel.") + .to_string(), + ); + } + if viewport.indicators { + lines.push(if viewport.start > 0 { + theme + .hint_style + .apply_to(format!(" ↑ {} more", viewport.start)) + .to_string() + } else { + String::new() + }); + } + lines.extend( + items[viewport.start..viewport.end] + .iter() + .enumerate() + .map(|(offset, item)| { + let index = viewport.start + offset; + let label = single_line_text(&item.label); + if index == selected { + format!( + "{} {}", + theme.active_item_prefix, + theme.active_item_style.apply_to(label) + ) + } else { + format!( + "{} {}", + theme.inactive_item_prefix, + theme.inactive_item_style.apply_to(label) + ) + } + }), ); - lines.extend(items.iter().enumerate().map(|(index, item)| { - if index == selected { - format!( - "{} {}", - theme.active_item_prefix, - theme.active_item_style.apply_to(&item.label) - ) + if viewport.indicators { + lines.push(if viewport.end < items.len() { + theme + .hint_style + .apply_to(format!(" ↓ {} more", items.len() - viewport.end)) + .to_string() } else { - format!( - "{} {}", - theme.inactive_item_prefix, - theme.inactive_item_style.apply_to(&item.label) - ) - } - })); + String::new() + }); + } + let width = terminal_columns.max(1); lines + .into_iter() + .map(|line| truncate_str(&line, width, "…").into_owned()) + .collect() +} + +fn single_line_text(value: &str) -> String { + console::strip_ansi_codes(value) + .chars() + .map(|character| { + if character.is_control() { + ' ' + } else { + character + } + }) + .collect() } fn clear_menu(term: &Term, rendered_lines: usize) -> Result<(), CliError> { @@ -442,6 +609,10 @@ fn print_editor_help() { style("Plugin editor keys").bold() ); println!(" {} move", style("↑/↓ or j/k").cyan()); + println!( + " {} move by page or jump to an end", + style("PageUp/PageDown, Home/End").cyan() + ); println!( " {} select/toggle the highlighted item", style("Enter/Space").cyan() diff --git a/crates/cli/src/plugins/config_io.rs b/crates/cli/src/plugins/config_io.rs index 1e8a7da71..acec77389 100644 --- a/crates/cli/src/plugins/config_io.rs +++ b/crates/cli/src/plugins/config_io.rs @@ -26,6 +26,229 @@ pub(crate) enum TargetScope { Global, } +/// A physical `plugins.toml` document together with its typed runtime plugin config. +/// +/// The raw TOML remains the source of truth for host-only sections such as +/// `[[plugins.dynamic]]`. Rendering patches the typed runtime fields back into that raw document +/// instead of reconstructing the whole file from [`PluginConfig`]. +#[derive(Debug, Clone)] +pub(crate) struct PluginConfigDocument { + path: PathBuf, + root: toml::Value, + config: PluginConfig, +} + +/// One dynamic plugin reference declared in the physical document. +#[derive(Debug, Clone, PartialEq)] +pub(crate) struct DynamicPluginConfigEntry { + /// Original index in `plugins.dynamic`; suitable for updating this document clone. + pub(crate) index: usize, + /// Manifest reference exactly as declared in TOML. + pub(crate) manifest: String, + /// Manifest path resolved relative to the physical `plugins.toml` file. + pub(crate) manifest_path: PathBuf, + /// `None` distinguishes an omitted config from an explicitly empty object. + pub(crate) config: Option>, +} + +impl PluginConfigDocument { + pub(crate) fn read(path: &Path) -> Result { + let root = read_plugin_toml_root(path)?; + let config = plugin_config_from_toml(&root)?; + Ok(Self { + path: path.to_path_buf(), + root, + config, + }) + } + + pub(crate) fn path(&self) -> &Path { + &self.path + } + + pub(crate) fn config(&self) -> &PluginConfig { + &self.config + } + + pub(crate) fn config_mut(&mut self) -> &mut PluginConfig { + &mut self.config + } + + pub(crate) fn set_config(&mut self, config: PluginConfig) { + self.config = config; + } + + pub(crate) fn dynamic_entries(&self) -> Result, CliError> { + let Some(dynamic) = dynamic_plugin_entries(&self.root, &self.path)? else { + return Ok(Vec::new()); + }; + + dynamic + .iter() + .enumerate() + .map(|(index, entry)| { + let entry = entry.as_table().ok_or_else(|| { + invalid_dynamic_entry_error(&self.path, index, "must be a table") + })?; + let manifest = entry + .get("manifest") + .and_then(toml::Value::as_str) + .ok_or_else(|| { + invalid_dynamic_entry_error(&self.path, index, "manifest must be a string") + })? + .to_owned(); + let config = entry + .get("config") + .map(|config| dynamic_config_from_toml(config, &self.path, index)) + .transpose()?; + Ok(DynamicPluginConfigEntry { + index, + manifest_path: resolve_manifest_ref(&self.path, &manifest), + manifest, + config, + }) + }) + .collect() + } + + /// Set a dynamic plugin config, including an explicitly empty config object. + pub(crate) fn set_dynamic_config( + &mut self, + index: usize, + config: Map, + ) -> Result<(), CliError> { + let entry = self.dynamic_entry_mut(index)?; + let config = toml::Value::try_from(Value::Object(config)).map_err(|error| { + CliError::Config(format!( + "could not convert dynamic plugin config to TOML: {error}" + )) + })?; + entry.insert("config".to_owned(), config); + Ok(()) + } + + /// Remove a dynamic plugin config while retaining its manifest reference. + pub(crate) fn remove_dynamic_config(&mut self, index: usize) -> Result<(), CliError> { + self.dynamic_entry_mut(index)?.remove("config"); + Ok(()) + } + + /// Patches a dynamic config relative to the JSON view that was originally loaded. + /// + /// Unchanged TOML values remain in the raw document. This matters for host extensions that + /// use TOML-native values, such as datetimes, which do not have an equivalent JSON type. + pub(crate) fn patch_dynamic_config( + &mut self, + index: usize, + original: Option<&Map>, + updated: Option>, + ) -> Result<(), CliError> { + match (original, updated) { + (_, None) => self.remove_dynamic_config(index), + (None, Some(updated)) => self.set_dynamic_config(index, updated), + (Some(original), Some(updated)) => { + let entry = self.dynamic_entry_mut(index)?; + let Some(raw) = entry.get_mut("config") else { + let updated = json_to_toml(Value::Object(updated))?; + entry.insert("config".to_owned(), updated); + return Ok(()); + }; + patch_json_value( + raw, + &Value::Object(original.clone()), + &Value::Object(updated), + ) + } + } + } + + /// Render a full document after overlaying the typed runtime config onto the raw TOML. + pub(crate) fn render(&self) -> Result { + let mut root = self.root.clone(); + patch_plugin_config(&mut root, &self.config)?; + toml::to_string_pretty(&root) + .map_err(|error| CliError::Config(format!("could not render plugin TOML: {error}"))) + } + + pub(crate) fn write(&self) -> Result<(), CliError> { + let rendered = self.render()?; + if let Some(parent) = self.path.parent() { + std::fs::create_dir_all(parent)?; + } + std::fs::write(&self.path, rendered)?; + Ok(()) + } + + fn dynamic_entry_mut( + &mut self, + index: usize, + ) -> Result<&mut toml::map::Map, CliError> { + let dynamic = dynamic_plugin_entries_mut(&mut self.root, &self.path)?.ok_or_else(|| { + CliError::Config(format!( + "dynamic plugin index {index} is out of range in {}", + self.path.display() + )) + })?; + let entry = dynamic.get_mut(index).ok_or_else(|| { + CliError::Config(format!( + "dynamic plugin index {index} is out of range in {}", + self.path.display() + )) + })?; + entry + .as_table_mut() + .ok_or_else(|| invalid_dynamic_entry_error(&self.path, index, "must be a table")) + } +} + +fn patch_json_value( + raw: &mut toml::Value, + original: &Value, + updated: &Value, +) -> Result<(), CliError> { + if original == updated { + return Ok(()); + } + match (raw, original, updated) { + (toml::Value::Table(raw), Value::Object(original), Value::Object(updated)) => { + for key in original.keys() { + if !updated.contains_key(key) { + raw.remove(key); + } + } + for (key, updated) in updated { + match (raw.get_mut(key), original.get(key)) { + (Some(raw), Some(original)) => patch_json_value(raw, original, updated)?, + _ => { + raw.insert(key.clone(), json_to_toml(updated.clone())?); + } + } + } + Ok(()) + } + (toml::Value::Array(raw), Value::Array(original), Value::Array(updated)) + if raw.len() == original.len() && original.len() == updated.len() => + { + for ((raw, original), updated) in raw.iter_mut().zip(original).zip(updated) { + patch_json_value(raw, original, updated)?; + } + Ok(()) + } + (raw, _, updated) => { + *raw = json_to_toml(updated.clone())?; + Ok(()) + } + } +} + +fn json_to_toml(value: Value) -> Result { + toml::Value::try_from(value).map_err(|error| { + CliError::Config(format!( + "could not convert dynamic plugin config value to TOML: {error}" + )) + }) +} + pub(crate) fn target_scope(command: &PluginsScopeArgs) -> Result { let selected = [command.user, command.project, command.global] .into_iter() @@ -67,20 +290,12 @@ pub(crate) fn target_path(scope: TargetScope) -> Result { } } +#[cfg(test)] pub(crate) fn read_plugin_config(path: &Path) -> Result { - if !path.exists() { - return Ok(PluginConfig::default()); - } - let raw = std::fs::read_to_string(path)?; - let parsed = raw - .parse::() - .map(toml::Value::Table) - .map_err(|error| { - CliError::Config(format!( - "invalid plugin TOML in {}: {error}", - path.display() - )) - })?; + Ok(PluginConfigDocument::read(path)?.config) +} + +fn plugin_config_from_toml(parsed: &toml::Value) -> Result { serde_json::from_value( serde_json::to_value(parsed) .map_err(|error| CliError::Config(format!("invalid plugin TOML shape: {error}")))?, @@ -88,20 +303,11 @@ pub(crate) fn read_plugin_config(path: &Path) -> Result .map_err(|error| CliError::Config(format!("invalid plugin config: {error}"))) } +#[cfg(test)] pub(crate) fn write_plugin_config(path: &Path, config: &PluginConfig) -> Result<(), CliError> { - let mut value = serde_json::to_value(config) - .map_err(|error| CliError::Config(format!("could not serialize plugin config: {error}")))?; - prune_plugin_defaults(&mut value); - let toml_value: toml::Value = serde_json::from_value(value).map_err(|error| { - CliError::Config(format!("could not convert plugin config to TOML: {error}")) - })?; - let rendered = toml::to_string_pretty(&toml_value) - .map_err(|error| CliError::Config(format!("could not render plugin TOML: {error}")))?; - if let Some(parent) = path.parent() { - std::fs::create_dir_all(parent)?; - } - std::fs::write(path, rendered)?; - Ok(()) + let mut document = PluginConfigDocument::read(path)?; + document.set_config(config.clone()); + document.write() } pub(crate) fn append_dynamic_plugin_reference( @@ -247,7 +453,207 @@ fn write_plugin_toml_root(path: &Path, root: &toml::Value) -> Result<(), CliErro Ok(()) } -fn resolve_manifest_ref(source: &Path, manifest: &str) -> PathBuf { +fn dynamic_plugin_entries<'a>( + root: &'a toml::Value, + path: &Path, +) -> Result>, CliError> { + let Some(plugins) = root.as_table().and_then(|root| root.get("plugins")) else { + return Ok(None); + }; + let plugins = plugins.as_table().ok_or_else(|| { + CliError::Config(format!( + "invalid plugin TOML in {}: [plugins] must be a table", + path.display() + )) + })?; + let Some(dynamic) = plugins.get("dynamic") else { + return Ok(None); + }; + dynamic.as_array().map(Some).ok_or_else(|| { + CliError::Config(format!( + "invalid plugin TOML in {}: plugins.dynamic must be an array of tables", + path.display() + )) + }) +} + +fn dynamic_plugin_entries_mut<'a>( + root: &'a mut toml::Value, + path: &Path, +) -> Result>, CliError> { + let Some(plugins) = root.as_table_mut().and_then(|root| root.get_mut("plugins")) else { + return Ok(None); + }; + let plugins = plugins.as_table_mut().ok_or_else(|| { + CliError::Config(format!( + "invalid plugin TOML in {}: [plugins] must be a table", + path.display() + )) + })?; + let Some(dynamic) = plugins.get_mut("dynamic") else { + return Ok(None); + }; + dynamic.as_array_mut().map(Some).ok_or_else(|| { + CliError::Config(format!( + "invalid plugin TOML in {}: plugins.dynamic must be an array of tables", + path.display() + )) + }) +} + +fn dynamic_config_from_toml( + config: &toml::Value, + path: &Path, + index: usize, +) -> Result, CliError> { + if !config.is_table() { + return Err(invalid_dynamic_entry_error( + path, + index, + "config must be a table", + )); + } + let config = serde_json::to_value(config).map_err(|error| { + invalid_dynamic_entry_error(path, index, &format!("config is invalid: {error}")) + })?; + config + .as_object() + .cloned() + .ok_or_else(|| invalid_dynamic_entry_error(path, index, "config must be a table")) +} + +fn invalid_dynamic_entry_error(path: &Path, index: usize, message: &str) -> CliError { + CliError::Config(format!( + "invalid plugin TOML in {}: plugins.dynamic[{index}] {message}", + path.display() + )) +} + +fn patch_plugin_config(root: &mut toml::Value, config: &PluginConfig) -> Result<(), CliError> { + let desired = pruned_plugin_config_toml(config)?; + let desired = desired + .as_table() + .expect("serialized plugin config is always a table"); + let root = root + .as_table_mut() + .expect("root plugin TOML is always a table"); + + patch_required_field(root, desired, "version"); + patch_policy(root, desired); + patch_components(root, desired); + Ok(()) +} + +fn pruned_plugin_config_toml(config: &PluginConfig) -> Result { + let mut value = serde_json::to_value(config) + .map_err(|error| CliError::Config(format!("could not serialize plugin config: {error}")))?; + prune_plugin_defaults(&mut value); + serde_json::from_value(value).map_err(|error| { + CliError::Config(format!("could not convert plugin config to TOML: {error}")) + }) +} + +fn patch_required_field( + root: &mut toml::map::Map, + desired: &toml::map::Map, + key: &str, +) { + root.insert( + key.to_owned(), + desired + .get(key) + .expect("serialized plugin config contains required fields") + .clone(), + ); +} + +fn patch_policy( + root: &mut toml::map::Map, + desired: &toml::map::Map, +) { + const POLICY_FIELDS: [&str; 3] = ["unknown_component", "unknown_field", "unsupported_value"]; + let desired_policy = desired.get("policy").and_then(toml::Value::as_table); + let existing_policy = root.get_mut("policy").and_then(toml::Value::as_table_mut); + + match (existing_policy, desired_policy) { + (Some(existing), desired) => { + for key in POLICY_FIELDS { + match desired.and_then(|policy| policy.get(key)) { + Some(value) => { + existing.insert(key.to_owned(), value.clone()); + } + None => { + existing.remove(key); + } + } + } + if existing.is_empty() { + root.remove("policy"); + } + } + (None, Some(desired)) => { + root.insert("policy".to_owned(), toml::Value::Table(desired.clone())); + } + (None, None) => {} + } +} + +fn patch_components( + root: &mut toml::map::Map, + desired: &toml::map::Map, +) { + let desired = desired + .get("components") + .and_then(toml::Value::as_array) + .expect("serialized plugin config components are an array"); + let existing = root + .get("components") + .and_then(toml::Value::as_array) + .cloned() + .unwrap_or_default(); + let mut consumed = vec![false; existing.len()]; + let mut patched = Vec::with_capacity(desired.len()); + + for desired_component in desired { + let kind = desired_component + .as_table() + .and_then(|component| component.get("kind")) + .and_then(toml::Value::as_str); + let matching_index = existing.iter().enumerate().position(|(index, component)| { + !consumed[index] + && component + .as_table() + .and_then(|component| component.get("kind")) + .and_then(toml::Value::as_str) + == kind + }); + let Some(index) = matching_index else { + patched.push(desired_component.clone()); + continue; + }; + consumed[index] = true; + let mut component = existing[index].clone(); + if let (Some(component), Some(desired_component)) = + (component.as_table_mut(), desired_component.as_table()) + { + for key in ["kind", "enabled", "config"] { + match desired_component.get(key) { + Some(value) => { + component.insert(key.to_owned(), value.clone()); + } + None => { + component.remove(key); + } + } + } + } + patched.push(component); + } + + root.insert("components".to_owned(), toml::Value::Array(patched)); +} + +pub(crate) fn resolve_manifest_ref(source: &Path, manifest: &str) -> PathBuf { let manifest = PathBuf::from(manifest); if manifest.is_absolute() { manifest @@ -259,7 +665,19 @@ fn resolve_manifest_ref(source: &Path, manifest: &str) -> PathBuf { } } +#[cfg(test)] pub(super) fn print_preview(config: &PluginConfig) -> Result<(), CliError> { + print_rendered_preview( + &toml::to_string_pretty(&pruned_plugin_config_toml(config)?) + .map_err(|error| CliError::Config(format!("could not render plugin TOML: {error}")))?, + ) +} + +pub(super) fn print_document_preview(document: &PluginConfigDocument) -> Result<(), CliError> { + print_rendered_preview(&document.render()?) +} + +fn print_rendered_preview(rendered: &str) -> Result<(), CliError> { println!(); println!( "{} {}", @@ -267,14 +685,6 @@ pub(super) fn print_preview(config: &PluginConfig) -> Result<(), CliError> { style("plugins.toml preview").bold() ); println!("{}", style("─".repeat(58)).black().bright()); - let mut value = serde_json::to_value(config) - .map_err(|error| CliError::Config(format!("could not serialize plugin config: {error}")))?; - prune_plugin_defaults(&mut value); - let toml_value: toml::Value = serde_json::from_value(value).map_err(|error| { - CliError::Config(format!("could not convert plugin config to TOML: {error}")) - })?; - let rendered = toml::to_string_pretty(&toml_value) - .map_err(|error| CliError::Config(format!("could not render plugin TOML: {error}")))?; print!("{rendered}"); println!("{}", style("─".repeat(58)).black().bright()); Ok(()) diff --git a/crates/cli/src/plugins/dynamic_editor.rs b/crates/cli/src/plugins/dynamic_editor.rs new file mode 100644 index 000000000..cb158428c --- /dev/null +++ b/crates/cli/src/plugins/dynamic_editor.rs @@ -0,0 +1,839 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +//! Interactive editor state and controls for dynamic plugin host configuration. + +use std::collections::HashSet; + +use dialoguer::theme::ColorfulTheme; +use dialoguer::{Input, Password, Select}; +use nemo_relay::plugin::dynamic::DynamicPluginManifest; +use serde_json::{Map, Number, Value}; + +use crate::error::CliError; + +use super::config_io::{DynamicPluginConfigEntry, PluginConfigDocument}; +use super::schema::{ + DynamicConfigField, DynamicConfigFieldKind, PluginConfigSchema, SecretEditValues, +}; +use super::{ + MenuItem, MenuResponse, MenuShortcut, configured_label, editor_error, menu_response_index, + prompt_menu, shortcut_label, +}; + +const REDACTED: &str = ""; + +#[derive(Debug)] +pub(super) struct DynamicPluginEditorState { + document_index: usize, + plugin_id: String, + label: String, + editor_title: Option, + description: Option, + original_config: Option>, + config: Option>, + schema: Option, + touched: bool, +} + +impl DynamicPluginEditorState { + pub(super) fn label(&self) -> &str { + &self.label + } + + pub(super) fn menu_summary(&self) -> String { + let config = match &self.config { + None => "config absent", + Some(config) if config.is_empty() => "explicit empty config", + Some(_) => "configured", + }; + let editor = match &self.schema { + Some(schema) if schema.fields().is_empty() => "schema-validated JSON", + Some(_) => "schema fields", + None => "raw JSON object", + }; + format!("dynamic; {config}; {editor}") + } + + pub(super) fn validate(&self) -> Result<(), CliError> { + if let Some(schema) = &self.schema { + schema.validate(&Value::Object(self.config.clone().unwrap_or_default()))?; + } + Ok(()) + } + + pub(super) fn apply_to_document( + &self, + document: &mut PluginConfigDocument, + redact_secrets: bool, + ) -> Result<(), CliError> { + let needs_preview_redaction = redact_secrets + && self + .schema + .as_ref() + .is_some_and(PluginConfigSchema::has_secrets); + if !self.touched && !needs_preview_redaction { + return Ok(()); + } + match &self.config { + None => document.patch_dynamic_config( + self.document_index, + self.original_config.as_ref(), + None, + ), + Some(config) => { + let config = if redact_secrets { + self.schema + .as_ref() + .map(|schema| schema.redact(&Value::Object(config.clone()))) + .unwrap_or_else(|| Value::Object(config.clone())) + } else { + Value::Object(config.clone()) + }; + let config = config.as_object().cloned().ok_or_else(|| { + CliError::Config(format!( + "dynamic plugin '{}' configuration must be a JSON object", + self.plugin_id + )) + })?; + document.patch_dynamic_config( + self.document_index, + self.original_config.as_ref(), + Some(config), + ) + } + } + } + + fn redacted_config(&self) -> Option> { + self.config.as_ref().map(|config| { + self.schema + .as_ref() + .map(|schema| schema.redact(&Value::Object(config.clone()))) + .unwrap_or_else(|| Value::Object(config.clone())) + .as_object() + .cloned() + .unwrap_or_default() + }) + } + + pub(super) fn reset(&mut self) { + self.config = None; + self.touched = true; + } + + #[cfg(test)] + pub(super) fn config(&self) -> Option<&Map> { + self.config.as_ref() + } + + #[cfg(test)] + pub(super) fn top_level_field_labels(&self) -> Vec { + self.schema + .as_ref() + .map(|schema| { + dynamic_field_menu_items(self, schema.fields(), &[]) + .0 + .into_iter() + .map(|item| console::strip_ansi_codes(&item.label).into_owned()) + .collect() + }) + .unwrap_or_default() + } + + #[cfg(test)] + pub(super) fn reset_top_level_field(&mut self, key: &str) -> Result<(), CliError> { + let field = self + .schema + .as_ref() + .and_then(|schema| schema.fields().iter().find(|field| field.key == key)) + .cloned() + .ok_or_else(|| CliError::Config(format!("unknown dynamic config field '{key}'")))?; + self.reset_field(&[key.to_owned()], &field); + Ok(()) + } + + #[cfg(test)] + pub(super) fn clear_top_level_field(&mut self, key: &str) { + self.remove_field(&[key.to_owned()]); + } + + #[cfg(test)] + pub(super) fn top_level_field_uses_hidden_json(&self, key: &str) -> bool { + self.field_has_secrets(&[key.to_owned()]) + } + + fn set_raw_config(&mut self, config: Map) { + self.config = Some(config); + self.touched = true; + } + + fn field_value(&self, path: &[String]) -> Option<&Value> { + value_at_path(self.config.as_ref(), path) + } + + fn display_field_value(&self, path: &[String]) -> Option { + let redacted = self.redacted_config(); + value_at_path(redacted.as_ref(), path).cloned() + } + + fn field_has_secrets(&self, path: &[String]) -> bool { + self.schema + .as_ref() + .is_some_and(|schema| schema.has_secrets_at(path)) + } + + fn field_value_for_raw_edit(&self, path: &[String]) -> (Option, SecretEditValues, bool) { + let original = Value::Object(self.config.clone().unwrap_or_default()); + let Some(schema) = &self.schema else { + return ( + self.field_value(path).cloned(), + SecretEditValues::new(), + false, + ); + }; + let (redacted, secrets) = schema.redact_for_edit(&original); + let value = value_at_path(redacted.as_object(), path).cloned(); + (value, secrets, schema.has_secrets_at(path)) + } + + fn set_field(&mut self, path: &[String], value: Value) { + set_value_at_path(&mut self.config, path, value); + self.touched = true; + } + + fn remove_field(&mut self, path: &[String]) { + if self.config.is_none() { + self.config = Some(Map::new()); + } + if let Some(config) = &mut self.config { + remove_value_at_path(config, path); + } + self.touched = true; + } + + fn reset_field(&mut self, path: &[String], field: &DynamicConfigField) { + match &field.default { + Some(default) => self.set_field(path, default.clone()), + None => self.remove_field(path), + } + } +} + +pub(super) fn load_dynamic_plugin_states( + document: &PluginConfigDocument, +) -> Result, CliError> { + let entries = document.dynamic_entries()?; + let mut plugin_ids = HashSet::new(); + entries + .into_iter() + .map(|entry| load_dynamic_plugin_state(entry, &mut plugin_ids)) + .collect() +} + +fn load_dynamic_plugin_state( + entry: DynamicPluginConfigEntry, + plugin_ids: &mut HashSet, +) -> Result { + let (manifest, manifest_ref) = DynamicPluginManifest::load_from_path(&entry.manifest_path) + .map_err(|error| { + CliError::Config(format!( + "could not load dynamic plugin manifest '{}' for editing: {error}", + entry.manifest + )) + })?; + let plugin_id = manifest.plugin.id.trim().to_owned(); + if !plugin_ids.insert(plugin_id.clone()) { + return Err(CliError::Config(format!( + "dynamic plugin '{}' is declared more than once in {}", + plugin_id, + entry.manifest_path.display() + ))); + } + let schema = load_config_schema(&manifest, &manifest_ref)?; + let label = manifest + .plugin + .name + .as_deref() + .filter(|name| *name != plugin_id) + .map(|name| format!("{name} ({plugin_id})")) + .unwrap_or_else(|| plugin_id.clone()); + let description = schema + .as_ref() + .and_then(|schema| schema.editor().description.clone()) + .or(manifest.description); + let editor_title = schema + .as_ref() + .and_then(|schema| schema.editor().title.clone()); + + let original_config = entry.config.clone(); + Ok(DynamicPluginEditorState { + document_index: entry.index, + plugin_id, + label, + editor_title, + description, + original_config, + config: entry.config, + schema, + touched: false, + }) +} + +fn load_config_schema( + manifest: &DynamicPluginManifest, + manifest_ref: &str, +) -> Result, CliError> { + manifest + .resolve_config_schema_path(manifest_ref) + .map_err(|error| { + CliError::Config(format!( + "dynamic plugin '{}' config schema path could not be resolved from '{}': {error}", + manifest.plugin.id, manifest_ref + )) + })? + .map(|path| PluginConfigSchema::load(manifest.plugin.id.trim(), path)) + .transpose() +} + +#[derive(Debug, Clone, Copy)] +enum DynamicMenuAction { + EditField(usize), + EditRawConfig, + ResetPlugin, + Back, +} + +pub(super) fn edit_dynamic_plugin( + theme: &ColorfulTheme, + state: &mut DynamicPluginEditorState, +) -> Result<(), CliError> { + if let Some(description) = &state.description { + println!(" {}", super::single_line_text(description)); + } + let fields = state + .schema + .as_ref() + .map(|schema| schema.fields().to_vec()) + .unwrap_or_default(); + if state.schema.is_none() || fields.is_empty() { + edit_dynamic_root_menu(theme, state, &fields) + } else { + let prompt = state + .editor_title + .clone() + .unwrap_or_else(|| state.label.clone()); + edit_dynamic_fields_menu(theme, state, &fields, &[], prompt) + } +} + +fn edit_dynamic_root_menu( + theme: &ColorfulTheme, + state: &mut DynamicPluginEditorState, + fields: &[DynamicConfigField], +) -> Result<(), CliError> { + let mut selected_index = 0; + loop { + let mut items = Vec::new(); + let mut actions = Vec::new(); + if fields.is_empty() { + items.push(MenuItem::new(configured_label( + state.config.is_some(), + "Edit configuration as JSON object", + ))); + actions.push(DynamicMenuAction::EditRawConfig); + } + items.push(MenuItem::new(shortcut_label( + "Reset plugin configuration", + "r", + ))); + actions.push(DynamicMenuAction::ResetPlugin); + items.push(MenuItem::new(shortcut_label("Back", "q"))); + actions.push(DynamicMenuAction::Back); + + let selection = prompt_menu(theme, state.label(), &items, selected_index)?; + if let Some(selected) = menu_response_index(&selection) { + selected_index = selected; + } + match selection { + MenuResponse::Selected(selected) => match actions.get(selected).copied() { + Some(DynamicMenuAction::EditRawConfig) => prompt_raw_config(theme, state)?, + Some(DynamicMenuAction::ResetPlugin) => state.reset(), + Some(DynamicMenuAction::Back) | None => return Ok(()), + Some(DynamicMenuAction::EditField(_)) => unreachable!(), + }, + MenuResponse::Shortcut(MenuShortcut::Reset, selected) => { + if matches!(actions.get(selected), Some(DynamicMenuAction::ResetPlugin)) { + state.reset(); + } else { + println!(" Select Reset plugin configuration to remove config."); + } + } + MenuResponse::Shortcut(MenuShortcut::Clear, selected) => { + if matches!( + actions.get(selected), + Some(DynamicMenuAction::EditRawConfig) + ) { + state.set_raw_config(Map::new()); + } + } + MenuResponse::Shortcut(MenuShortcut::Help, _) => super::print_editor_help(), + MenuResponse::Shortcut(MenuShortcut::Preview | MenuShortcut::Save, _) => { + println!(" Preview and save are available from the main plugins.toml menu."); + } + MenuResponse::Cancel => return Ok(()), + } + } +} + +fn edit_dynamic_fields_menu( + theme: &ColorfulTheme, + state: &mut DynamicPluginEditorState, + fields: &[DynamicConfigField], + parent_path: &[String], + prompt: String, +) -> Result<(), CliError> { + let mut selected_index = 0; + loop { + let (items, actions) = dynamic_field_menu_items(state, fields, parent_path); + let selection = prompt_menu(theme, &prompt, &items, selected_index)?; + if let Some(selected) = menu_response_index(&selection) { + selected_index = selected; + } + match selection { + MenuResponse::Selected(selected) => match actions.get(selected).copied() { + Some(DynamicMenuAction::EditField(index)) => { + edit_dynamic_field(theme, state, &fields[index], parent_path)?; + } + Some(DynamicMenuAction::ResetPlugin) => state.reset(), + Some(DynamicMenuAction::Back) | None => return Ok(()), + Some(DynamicMenuAction::EditRawConfig) => unreachable!(), + }, + MenuResponse::Shortcut(MenuShortcut::Reset, selected) => { + reset_dynamic_selection(state, fields, parent_path, &actions, selected); + } + MenuResponse::Shortcut(MenuShortcut::Clear, selected) => { + clear_dynamic_selection(state, fields, parent_path, &actions, selected); + } + MenuResponse::Shortcut(MenuShortcut::Help, _) => super::print_editor_help(), + MenuResponse::Shortcut(MenuShortcut::Preview | MenuShortcut::Save, _) => { + println!(" Preview and save are available from the main plugins.toml menu."); + } + MenuResponse::Cancel => return Ok(()), + } + } +} + +fn dynamic_field_menu_items( + state: &DynamicPluginEditorState, + fields: &[DynamicConfigField], + parent_path: &[String], +) -> (Vec, Vec) { + let mut items = Vec::with_capacity(fields.len() + 2); + let mut actions = Vec::with_capacity(fields.len() + 2); + for (index, field) in fields.iter().enumerate() { + let path = field_path(parent_path, field); + let configured = state.field_value(&path).is_some(); + let value = state + .display_field_value(&path) + .map(|value| display_dynamic_value(&value, &field.kind)) + .or_else(|| { + field.default.as_ref().map(|default| { + if field_is_secret(field) || state.field_has_secrets(&path) { + format!("{REDACTED} (default)") + } else { + format!("{} (default)", display_dynamic_value(default, &field.kind)) + } + }) + }) + .unwrap_or_else(|| "(unset)".to_owned()); + let required = if field.required { " [required]" } else { "" }; + items.push(MenuItem::new(format!( + "{}{} = {value}", + configured_label(configured, &field.title), + required + ))); + actions.push(DynamicMenuAction::EditField(index)); + } + if parent_path.is_empty() { + items.push(MenuItem::new(shortcut_label( + "Reset plugin configuration", + "r", + ))); + actions.push(DynamicMenuAction::ResetPlugin); + } + items.push(MenuItem::new(shortcut_label("Back", "q"))); + actions.push(DynamicMenuAction::Back); + (items, actions) +} + +fn edit_dynamic_field( + theme: &ColorfulTheme, + state: &mut DynamicPluginEditorState, + field: &DynamicConfigField, + parent_path: &[String], +) -> Result<(), CliError> { + if let Some(description) = &field.description { + println!(" {}", super::single_line_text(description)); + } + let path = field_path(parent_path, field); + if let DynamicConfigFieldKind::Object { fields } = &field.kind { + return edit_dynamic_fields_menu(theme, state, fields, &path, field.title.clone()); + } + if let Some(value) = prompt_dynamic_value(theme, state, field, &path)? { + state.set_field(&path, value); + } + Ok(()) +} + +fn prompt_dynamic_value( + theme: &ColorfulTheme, + state: &DynamicPluginEditorState, + field: &DynamicConfigField, + path: &[String], +) -> Result, CliError> { + let current = state.field_value(path); + match &field.kind { + DynamicConfigFieldKind::Boolean => { + let values = ["false", "true"]; + let default = current + .and_then(Value::as_bool) + .or_else(|| field.default.as_ref().and_then(Value::as_bool)) + .map(usize::from) + .unwrap_or(0); + let selected = Select::with_theme(theme) + .with_prompt(super::single_line_text(&field.title)) + .items(&values) + .default(default) + .interact() + .map_err(editor_error)?; + Ok(Some(Value::Bool(selected == 1))) + } + DynamicConfigFieldKind::String { secret } => { + prompt_dynamic_string(theme, field, current, *secret, None) + } + DynamicConfigFieldKind::StringEnum { options, secret } => { + if *secret { + prompt_dynamic_string(theme, field, current, true, Some(options)) + } else { + let default = current + .and_then(Value::as_str) + .or_else(|| field.default.as_ref().and_then(Value::as_str)) + .and_then(|value| options.iter().position(|option| option == value)) + .unwrap_or(0); + let selected = Select::with_theme(theme) + .with_prompt(super::single_line_text(&field.title)) + .items(options) + .default(default) + .interact() + .map_err(editor_error)?; + Ok(Some(Value::String(options[selected].clone()))) + } + } + DynamicConfigFieldKind::Integer => { + let initial = current + .or(field.default.as_ref()) + .map(json_text) + .unwrap_or_default(); + let value: String = Input::with_theme(theme) + .with_prompt(super::single_line_text(&field.title)) + .with_initial_text(initial) + .interact_text() + .map_err(editor_error)?; + let value = value.trim().parse::().map_err(|error| { + CliError::Config(format!("{} must be an integer: {error}", field.key)) + })?; + Ok(Some(Value::Number(value.into()))) + } + DynamicConfigFieldKind::Number => { + let initial = current + .or(field.default.as_ref()) + .map(json_text) + .unwrap_or_default(); + let value: String = Input::with_theme(theme) + .with_prompt(super::single_line_text(&field.title)) + .with_initial_text(initial) + .interact_text() + .map_err(editor_error)?; + let parsed = value.trim().parse::().map_err(|error| { + CliError::Config(format!("{} must be a number: {error}", field.key)) + })?; + let number = Number::from_f64(parsed).ok_or_else(|| { + CliError::Config(format!("{} must be a finite number", field.key)) + })?; + Ok(Some(Value::Number(number))) + } + DynamicConfigFieldKind::StringMap => { + let (current, secrets, hidden) = state.field_value_for_raw_edit(path); + let Some(value) = prompt_json_value( + theme, + field, + current.as_ref(), + Value::Object(Map::new()), + hidden, + )? + else { + return Ok(None); + }; + let value = state + .schema + .as_ref() + .map(|schema| schema.restore_edit_secrets(&value, &secrets)) + .unwrap_or(value); + let object = value + .as_object() + .ok_or_else(|| CliError::Config(format!("{} must be a JSON object", field.key)))?; + if object.values().any(|value| !value.is_string()) { + return Err(CliError::Config(format!( + "{} must contain only string values", + field.key + ))); + } + Ok(Some(value)) + } + DynamicConfigFieldKind::RawJson => { + let fallback = field.default.clone().unwrap_or(Value::Null); + let (current, secrets, hidden) = state.field_value_for_raw_edit(path); + let Some(value) = prompt_json_value(theme, field, current.as_ref(), fallback, hidden)? + else { + return Ok(None); + }; + Ok(Some( + state + .schema + .as_ref() + .map(|schema| schema.restore_edit_secrets(&value, &secrets)) + .unwrap_or(value), + )) + } + DynamicConfigFieldKind::Object { .. } => unreachable!(), + } +} + +fn prompt_dynamic_string( + theme: &ColorfulTheme, + field: &DynamicConfigField, + current: Option<&Value>, + secret: bool, + options: Option<&[String]>, +) -> Result, CliError> { + if secret { + let title = super::single_line_text(&field.title); + let value = Password::with_theme(theme) + .with_prompt(format!("New {} (blank preserves the current value)", title)) + .allow_empty_password(true) + .report(false) + .interact() + .map_err(editor_error)?; + if value.is_empty() { + return Ok(None); + } + if options.is_some_and(|options| !options.iter().any(|option| option == &value)) { + return Err(CliError::Config(format!( + "{} must be one of the schema enum values", + field.key + ))); + } + return Ok(Some(Value::String(value))); + } + let initial = current + .and_then(Value::as_str) + .or_else(|| field.default.as_ref().and_then(Value::as_str)) + .unwrap_or_default(); + let value: String = Input::with_theme(theme) + .with_prompt(super::single_line_text(&field.title)) + .with_initial_text(initial) + .interact_text() + .map_err(editor_error)?; + Ok(Some(Value::String(value))) +} + +fn prompt_json_value( + theme: &ColorfulTheme, + field: &DynamicConfigField, + current: Option<&Value>, + fallback: Value, + hidden: bool, +) -> Result, CliError> { + let initial = current.or(field.default.as_ref()).unwrap_or(&fallback); + let prompt = format!("{} as JSON", super::single_line_text(&field.title)); + let value = if hidden { + if current.is_some() { + println!(" Current redacted JSON: {}", json_text(initial)); + } + let value = Password::with_theme(theme) + .with_prompt(format!("New {prompt} (blank preserves the current value)")) + .allow_empty_password(true) + .report(false) + .interact() + .map_err(editor_error)?; + if value.is_empty() { + return Ok(None); + } + value + } else { + Input::with_theme(theme) + .with_prompt(prompt) + .with_initial_text(json_text(initial)) + .interact_text() + .map_err(editor_error)? + }; + serde_json::from_str(value.trim()) + .map_err(|error| CliError::Config(format!("invalid JSON for {}: {error}", field.key))) + .map(Some) +} + +fn prompt_raw_config( + theme: &ColorfulTheme, + state: &mut DynamicPluginEditorState, +) -> Result<(), CliError> { + let original = Value::Object(state.config.clone().unwrap_or_default()); + let (initial, secrets, hidden) = state + .schema + .as_ref() + .map(|schema| { + let (redacted, secrets) = schema.redact_for_edit(&original); + (redacted, secrets, schema.has_secrets()) + }) + .unwrap_or_else(|| (original, SecretEditValues::new(), false)); + let value = if hidden { + println!(" Current redacted JSON: {}", json_text(&initial)); + let value = Password::with_theme(theme) + .with_prompt("New configuration as JSON object (blank preserves the current value)") + .allow_empty_password(true) + .report(false) + .interact() + .map_err(editor_error)?; + if value.is_empty() { + return Ok(()); + } + value + } else { + Input::with_theme(theme) + .with_prompt("Configuration as JSON object") + .with_initial_text(json_text(&initial)) + .interact_text() + .map_err(editor_error)? + }; + let value: Value = serde_json::from_str(value.trim()) + .map_err(|error| CliError::Config(format!("invalid JSON configuration: {error}")))?; + let value = state + .schema + .as_ref() + .map(|schema| schema.restore_edit_secrets(&value, &secrets)) + .unwrap_or(value); + let object = value.as_object().cloned().ok_or_else(|| { + CliError::Config(format!( + "dynamic plugin '{}' configuration must be a JSON object", + state.plugin_id + )) + })?; + if let Some(schema) = &state.schema { + schema.validate(&value)?; + } + state.set_raw_config(object); + Ok(()) +} + +fn reset_dynamic_selection( + state: &mut DynamicPluginEditorState, + fields: &[DynamicConfigField], + parent_path: &[String], + actions: &[DynamicMenuAction], + selected: usize, +) { + match actions.get(selected).copied() { + Some(DynamicMenuAction::EditField(index)) => { + let field = &fields[index]; + state.reset_field(&field_path(parent_path, field), field); + } + Some(DynamicMenuAction::ResetPlugin) => state.reset(), + _ => println!(" Select a setting to reset."), + } +} + +fn clear_dynamic_selection( + state: &mut DynamicPluginEditorState, + fields: &[DynamicConfigField], + parent_path: &[String], + actions: &[DynamicMenuAction], + selected: usize, +) { + match actions.get(selected).copied() { + Some(DynamicMenuAction::EditField(index)) => { + state.remove_field(&field_path(parent_path, &fields[index])); + } + _ => println!(" Select a field to clear."), + } +} + +fn field_path(parent_path: &[String], field: &DynamicConfigField) -> Vec { + let mut path = parent_path.to_vec(); + path.push(field.key.clone()); + path +} + +fn field_is_secret(field: &DynamicConfigField) -> bool { + matches!( + field.kind, + DynamicConfigFieldKind::String { secret: true } + | DynamicConfigFieldKind::StringEnum { secret: true, .. } + ) +} + +fn value_at_path<'a>(config: Option<&'a Map>, path: &[String]) -> Option<&'a Value> { + let (first, rest) = path.split_first()?; + let mut value = config?.get(first)?; + for segment in rest { + value = value.as_object()?.get(segment)?; + } + Some(value) +} + +fn set_value_at_path(config: &mut Option>, path: &[String], value: Value) { + let Some((last, parents)) = path.split_last() else { + return; + }; + let mut object = config.get_or_insert_with(Map::new); + for segment in parents { + let entry = object + .entry(segment.clone()) + .or_insert_with(|| Value::Object(Map::new())); + if !entry.is_object() { + *entry = Value::Object(Map::new()); + } + object = entry + .as_object_mut() + .expect("newly inserted path segment is an object"); + } + object.insert(last.clone(), value); +} + +fn remove_value_at_path(config: &mut Map, path: &[String]) -> bool { + let Some((first, rest)) = path.split_first() else { + return config.is_empty(); + }; + if rest.is_empty() { + config.remove(first); + return config.is_empty(); + } + let remove_parent = config + .get_mut(first) + .and_then(Value::as_object_mut) + .is_some_and(|object| remove_value_at_path(object, rest)); + if remove_parent { + config.remove(first); + } + config.is_empty() +} + +fn display_dynamic_value(value: &Value, kind: &DynamicConfigFieldKind) -> String { + if matches!(kind, DynamicConfigFieldKind::Object { .. }) { + return "{…}".to_owned(); + } + json_text(value) +} + +fn json_text(value: &Value) -> String { + serde_json::to_string(value).unwrap_or_else(|_| "".to_owned()) +} diff --git a/crates/cli/src/plugins/editor_model.rs b/crates/cli/src/plugins/editor_model.rs index 3adea5dab..191bae9c1 100644 --- a/crates/cli/src/plugins/editor_model.rs +++ b/crates/cli/src/plugins/editor_model.rs @@ -151,16 +151,20 @@ impl EditableComponent { #[derive(Debug, Clone, Copy)] pub(super) enum MenuAction { - ToggleComponent(usize), - EditField { - component_index: usize, - field_index: usize, - }, + EditComponent(usize), + EditDynamic(usize), Preview, Save, Cancel, } +#[derive(Debug, Clone, Copy)] +pub(super) enum ComponentMenuAction { + Toggle, + EditField(usize), + Back, +} + pub(super) fn editable_components( config: &PluginConfig, ) -> Result, CliError> { @@ -174,34 +178,24 @@ pub(super) fn editable_components( pub(super) fn plugin_menu_items( components: &[EditableComponent], + dynamic_plugins: &[(String, String)], path: &Path, ) -> (Vec, Vec) { let mut items = Vec::new(); let mut actions = Vec::new(); for (component_index, component) in components.iter().enumerate() { items.push(super::MenuItem::new(format!( - "Toggle {} component [{}]", + "{} [{}] — {}", component.label(), - super::status_label(component.enabled()) + super::status_label(component.enabled()), + component.summary() ))); - actions.push(MenuAction::ToggleComponent(component_index)); - - items.extend(component.fields().iter().map(|field| { - super::MenuItem::new(super::configured_label( - component.field_configured(*field), - format!("Edit {} {}", component.label(), field.label), - )) - })); - actions.extend( - component - .fields() - .iter() - .enumerate() - .map(|(field_index, _)| MenuAction::EditField { - component_index, - field_index, - }), - ); + actions.push(MenuAction::EditComponent(component_index)); + } + + for (dynamic_index, (label, summary)) in dynamic_plugins.iter().enumerate() { + items.push(super::MenuItem::new(format!("{label} — {summary}"))); + actions.push(MenuAction::EditDynamic(dynamic_index)); } items.push(super::MenuItem::new(super::shortcut_label( @@ -220,6 +214,32 @@ pub(super) fn plugin_menu_items( (items, actions) } +pub(super) fn component_menu_items( + component: &EditableComponent, +) -> (Vec, Vec) { + let mut items = vec![super::MenuItem::new(format!( + "Toggle component [{}]", + super::status_label(component.enabled()) + ))]; + let mut actions = vec![ComponentMenuAction::Toggle]; + items.extend(component.fields().iter().map(|field| { + super::MenuItem::new(super::configured_label( + component.field_configured(*field), + format!("Edit {}", field.label), + )) + })); + actions.extend( + component + .fields() + .iter() + .enumerate() + .map(|(field_index, _)| ComponentMenuAction::EditField(field_index)), + ); + items.push(super::MenuItem::new(super::shortcut_label("Back", "q"))); + actions.push(ComponentMenuAction::Back); + (items, actions) +} + pub(super) fn config_with_editable_components( config: &PluginConfig, components: &[EditableComponent], diff --git a/crates/cli/src/plugins/lifecycle.rs b/crates/cli/src/plugins/lifecycle.rs index b38dfc56d..5b6dd2519 100644 --- a/crates/cli/src/plugins/lifecycle.rs +++ b/crates/cli/src/plugins/lifecycle.rs @@ -27,6 +27,7 @@ use crate::plugins::policy::{ use super::config_io::{ append_dynamic_plugin_reference, remove_dynamic_plugin_reference, target_scope, }; +use super::schema::PluginConfigSchema; mod responses; mod state; @@ -53,6 +54,7 @@ pub(crate) fn add(command: PluginsAddCommand, server: &ServerArgs) -> Result<(), let mut scopes = load_and_hydrate_scopes(server.config.as_ref(), &resolved)?; let (manifest, manifest_ref) = load_manifest_for_action("add", &command.path)?; let plugin_id = manifest.plugin.id.trim().to_owned(); + load_config_schema_for_manifest(&manifest, &manifest_ref)?; let revived = match find_record_by_id(&scopes, &plugin_id)? { Some(existing) if !existing.record.is_tombstoned() => { return Err(CliError::Config(format!( @@ -157,6 +159,7 @@ pub(crate) fn validate( } let resolved = resolve_plugins_config(server.config.as_ref())?; let (manifest, manifest_ref) = load_manifest_for_action("validate", &path)?; + load_config_schema_for_manifest(&manifest, &manifest_ref)?; let policy = evaluate_dynamic_plugin_host_policy(&resolved.dynamic_plugin_policy, &manifest); let trust = evaluate_dynamic_plugin_trust(&manifest, &manifest_ref, &policy); @@ -195,6 +198,13 @@ pub(crate) fn validate( let entry = find_registered_entry(&scopes, "plugins validate", &plugin_id)?; let manifest_ref = manifest_ref_from_record(&entry.record)?; let (manifest, manifest_ref) = load_manifest_for_action("validate", &manifest_ref)?; + if let Some(schema) = load_config_schema_for_manifest(&manifest, &manifest_ref)? { + let config = host_config_by_id + .get(&plugin_id) + .map(|host_config| Value::Object(host_config.config.clone())) + .unwrap_or_else(|| Value::Object(Map::new())); + schema.validate(&config)?; + } let policy = evaluate_dynamic_plugin_host_policy(&resolved.dynamic_plugin_policy, &manifest); let trust = evaluate_dynamic_plugin_trust(&manifest, &manifest_ref, &policy); @@ -652,6 +662,23 @@ fn load_manifest_for_action( .map_err(|error| CliError::Config(format!("dynamic plugin {action} failed: {error}"))) } +fn load_config_schema_for_manifest( + manifest: &DynamicPluginManifest, + manifest_ref: &str, +) -> Result, CliError> { + let schema_path = manifest + .resolve_config_schema_path(manifest_ref) + .map_err(|error| { + CliError::Config(format!( + "dynamic plugin '{}' config schema path could not be resolved from '{}': {error}", + manifest.plugin.id, manifest_ref + )) + })?; + schema_path + .map(|path| PluginConfigSchema::load(manifest.plugin.id.trim(), path)) + .transpose() +} + fn manifest_ref_from_record(record: &DynamicPluginRecord) -> Result { record.source.manifest_ref.clone().ok_or_else(|| { CliError::Config(format!( diff --git a/crates/cli/src/plugins/schema.rs b/crates/cli/src/plugins/schema.rs new file mode 100644 index 000000000..75fe5dcf4 --- /dev/null +++ b/crates/cli/src/plugins/schema.rs @@ -0,0 +1,1416 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +//! Static JSON Schema loading and editor metadata for dynamic plugins. + +use std::collections::{BTreeMap, HashSet}; +use std::fs; +use std::path::Path; +#[cfg(test)] +use std::path::PathBuf; + +use jsonschema::{Draft, Validator}; +use serde_json::{Map, Value}; + +use crate::error::CliError; + +const DRAFT_7_URI: &str = "http://json-schema.org/draft-07/schema"; +const DRAFT_7_HTTPS_URI: &str = "https://json-schema.org/draft-07/schema"; +const DRAFT_2020_12_URI: &str = "https://json-schema.org/draft/2020-12/schema"; +const DRAFT_2020_12_HTTP_URI: &str = "http://json-schema.org/draft/2020-12/schema"; +const REDACTED: &str = ""; +const EDIT_REDACTED_PREFIX: &str = "; + +/// Supported JSON Schema dialects for dynamic plugin configuration. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub(super) enum ConfigSchemaDraft { + Draft7, + Draft202012, +} + +impl ConfigSchemaDraft { + fn validator_draft(self) -> Draft { + match self { + Self::Draft7 => Draft::Draft7, + Self::Draft202012 => Draft::Draft202012, + } + } +} + +/// Editor representation of a dynamic plugin's object-root configuration schema. +#[derive(Debug, Clone, PartialEq)] +pub(super) struct DynamicConfigEditorSchema { + pub(super) title: Option, + pub(super) description: Option, + pub(super) fields: Vec, +} + +/// One named property in a dynamic plugin configuration schema. +#[derive(Debug, Clone, PartialEq)] +pub(super) struct DynamicConfigField { + pub(super) key: String, + pub(super) title: String, + pub(super) description: Option, + pub(super) default: Option, + pub(super) required: bool, + pub(super) kind: DynamicConfigFieldKind, +} + +/// Native editor control selected for a configuration property. +#[derive(Debug, Clone, PartialEq)] +pub(super) enum DynamicConfigFieldKind { + Boolean, + String { secret: bool }, + Integer, + Number, + StringEnum { options: Vec, secret: bool }, + Object { fields: Vec }, + StringMap, + RawJson, +} + +/// A loaded and compiled dynamic plugin configuration schema. +#[derive(Debug, Clone)] +pub(super) struct PluginConfigSchema { + plugin_id: String, + #[cfg(test)] + path: PathBuf, + #[cfg(test)] + source: Value, + #[cfg(test)] + draft: ConfigSchemaDraft, + validator: Validator, + editor: DynamicConfigEditorSchema, + secret_patterns: Vec, + #[cfg(test)] + secret_paths: Vec, +} + +impl PluginConfigSchema { + /// Reads, validates, and compiles a plugin's static configuration schema. + pub(super) fn load( + plugin_id: impl Into, + path: impl AsRef, + ) -> Result { + let plugin_id = plugin_id.into(); + let path = path.as_ref().to_path_buf(); + let contents = fs::read_to_string(&path).map_err(|error| { + schema_error(&plugin_id, &path, format!("failed to read schema: {error}")) + })?; + let source: Value = serde_json::from_str(&contents).map_err(|error| { + schema_error( + &plugin_id, + &path, + format!("schema is not valid JSON: {error}"), + ) + })?; + + let draft = parse_draft(&plugin_id, &path, &source)?; + reject_external_references(&plugin_id, &path, &source)?; + validate_schema_document(&plugin_id, &path, draft, &source)?; + let validator = jsonschema::options() + .with_draft(draft.validator_draft()) + .build(&source) + .map_err(|error| { + schema_error( + &plugin_id, + &path, + format!("failed to compile schema: {error}"), + ) + })?; + + let mut root_references = HashSet::new(); + let resolved_root = + resolve_schema(&source, &source, &mut root_references).map_err(|error| { + schema_error( + &plugin_id, + &path, + format!("root schema cannot be resolved: {error}"), + ) + })?; + if schema_type(resolved_root) != Some("object") { + return Err(schema_error( + &plugin_id, + &path, + "root schema must resolve to type 'object'", + )); + } + + let fields = + build_object_fields(&plugin_id, &path, &source, resolved_root, &root_references)?; + let editor = DynamicConfigEditorSchema { + title: annotation_string(&source, resolved_root, "title"), + description: annotation_string(&source, resolved_root, "description"), + fields, + }; + + let mut secret_patterns = Vec::new(); + discover_secret_patterns(&source, &source, &[], &HashSet::new(), &mut secret_patterns); + secret_patterns.sort(); + secret_patterns.dedup(); + #[cfg(test)] + let secret_paths = secret_patterns.iter().map(SecretPattern::display).collect(); + + Ok(Self { + plugin_id, + #[cfg(test)] + path, + #[cfg(test)] + source, + #[cfg(test)] + draft, + validator, + editor, + secret_patterns, + #[cfg(test)] + secret_paths, + }) + } + + #[cfg(test)] + pub(super) fn plugin_id(&self) -> &str { + &self.plugin_id + } + + #[cfg(test)] + pub(super) fn path(&self) -> &Path { + &self.path + } + + #[cfg(test)] + pub(super) fn source(&self) -> &Value { + &self.source + } + + #[cfg(test)] + pub(super) fn draft(&self) -> ConfigSchemaDraft { + self.draft + } + + pub(super) fn editor(&self) -> &DynamicConfigEditorSchema { + &self.editor + } + + pub(super) fn fields(&self) -> &[DynamicConfigField] { + &self.editor.fields + } + + /// Validates one object configuration and reports the first failing instance pointer. + pub(super) fn validate(&self, config: &Value) -> Result<(), CliError> { + self.validator.validate(config).map_err(|error| { + let pointer = error.instance_path().to_string(); + CliError::Config(format!( + "dynamic plugin '{}' configuration at JSON pointer '{}' is invalid: {error}", + self.plugin_id, pointer + )) + }) + } + + /// Returns schema-discovered secret paths. `*` denotes an array item or arbitrary property. + #[cfg(test)] + pub(super) fn secret_paths(&self) -> &[String] { + &self.secret_paths + } + + /// Clones a configuration and masks every schema-declared secret present in it. + pub(super) fn redact(&self, config: &Value) -> Value { + let mut redacted = config.clone(); + for pattern in &self.secret_patterns { + pattern.redact(&mut redacted, 0); + } + redacted + } + + pub(super) fn has_secrets(&self) -> bool { + !self.secret_patterns.is_empty() + } + + pub(super) fn has_secrets_at(&self, path: &[String]) -> bool { + self.secret_patterns + .iter() + .any(|pattern| pattern.applies_below(path)) + } + + /// Redacts secrets with per-value tokens so raw JSON editing can safely reorder values. + pub(super) fn redact_for_edit(&self, config: &Value) -> (Value, SecretEditValues) { + let mut redacted = config.clone(); + let mut secrets = BTreeMap::new(); + let mut occupied = HashSet::new(); + collect_string_values(config, &mut occupied); + let mut next_token = 0; + for pattern in &self.secret_patterns { + pattern.redact_for_edit(&mut redacted, 0, &mut secrets, &occupied, &mut next_token); + } + (redacted, secrets) + } + + /// Restores only the exact per-value tokens emitted by [`Self::redact_for_edit`]. + pub(super) fn restore_edit_secrets(&self, edited: &Value, secrets: &SecretEditValues) -> Value { + restore_secret_tokens(edited, secrets) + } +} + +fn schema_error(plugin_id: &str, path: &Path, message: impl std::fmt::Display) -> CliError { + CliError::Config(format!( + "dynamic plugin '{plugin_id}' config schema '{}': {message}", + path.display() + )) +} + +fn parse_draft( + plugin_id: &str, + path: &Path, + schema: &Value, +) -> Result { + let Some(schema_object) = schema.as_object() else { + return Err(schema_error( + plugin_id, + path, + "schema document must be a JSON object", + )); + }; + let Some(dialect) = schema_object.get("$schema") else { + return Err(schema_error( + plugin_id, + path, + "schema document must declare '$schema' as Draft 7 or Draft 2020-12", + )); + }; + let Some(dialect) = dialect.as_str() else { + return Err(schema_error(plugin_id, path, "'$schema' must be a string")); + }; + match dialect.trim_end_matches('#') { + DRAFT_7_URI | DRAFT_7_HTTPS_URI => Ok(ConfigSchemaDraft::Draft7), + DRAFT_2020_12_URI | DRAFT_2020_12_HTTP_URI => Ok(ConfigSchemaDraft::Draft202012), + _ => Err(schema_error( + plugin_id, + path, + format!( + "unsupported '$schema' value '{dialect}'; expected JSON Schema Draft 7 or Draft 2020-12" + ), + )), + } +} + +fn reject_external_references( + plugin_id: &str, + path: &Path, + schema: &Value, +) -> Result<(), CliError> { + fn visit_schema( + plugin_id: &str, + file_path: &Path, + schema: &Value, + pointer: &str, + ) -> Result<(), CliError> { + let Some(object) = schema.as_object() else { + return Ok(()); + }; + for key in ["$ref", "$dynamicRef"] { + if let Some(reference) = object.get(key).and_then(Value::as_str) + && !reference.starts_with('#') + { + return Err(schema_error( + plugin_id, + file_path, + format!( + "{key} at JSON pointer '{}' must be a local fragment reference beginning with '#', got '{reference}'", + push_pointer(pointer, key) + ), + )); + } + } + + for key in [ + "additionalItems", + "additionalProperties", + "contains", + "contentSchema", + "else", + "if", + "not", + "propertyNames", + "then", + "unevaluatedItems", + "unevaluatedProperties", + ] { + if let Some(child) = object.get(key) { + visit_schema(plugin_id, file_path, child, &push_pointer(pointer, key))?; + } + } + + if let Some(items) = object.get("items") { + let items_pointer = push_pointer(pointer, "items"); + if let Some(items) = items.as_array() { + for (index, child) in items.iter().enumerate() { + visit_schema( + plugin_id, + file_path, + child, + &push_pointer(&items_pointer, &index.to_string()), + )?; + } + } else { + visit_schema(plugin_id, file_path, items, &items_pointer)?; + } + } + + for key in ["allOf", "anyOf", "oneOf", "prefixItems"] { + if let Some(children) = object.get(key).and_then(Value::as_array) { + let children_pointer = push_pointer(pointer, key); + for (index, child) in children.iter().enumerate() { + visit_schema( + plugin_id, + file_path, + child, + &push_pointer(&children_pointer, &index.to_string()), + )?; + } + } + } + + for key in [ + "$defs", + "definitions", + "dependentSchemas", + "patternProperties", + "properties", + ] { + if let Some(children) = object.get(key).and_then(Value::as_object) { + let children_pointer = push_pointer(pointer, key); + for (name, child) in children { + visit_schema( + plugin_id, + file_path, + child, + &push_pointer(&children_pointer, name), + )?; + } + } + } + + if let Some(dependencies) = object.get("dependencies").and_then(Value::as_object) { + let dependencies_pointer = push_pointer(pointer, "dependencies"); + for (name, dependency) in dependencies { + if dependency.is_object() || dependency.is_boolean() { + visit_schema( + plugin_id, + file_path, + dependency, + &push_pointer(&dependencies_pointer, name), + )?; + } + } + } + Ok(()) + } + + visit_schema(plugin_id, path, schema, "") +} + +fn validate_schema_document( + plugin_id: &str, + path: &Path, + draft: ConfigSchemaDraft, + schema: &Value, +) -> Result<(), CliError> { + let result = match draft { + ConfigSchemaDraft::Draft7 => jsonschema::draft7::meta::validate(schema), + ConfigSchemaDraft::Draft202012 => jsonschema::draft202012::meta::validate(schema), + }; + result.map_err(|error| { + schema_error( + plugin_id, + path, + format!( + "schema is invalid at JSON pointer '{}': {error}", + error.instance_path() + ), + ) + }) +} + +fn build_object_fields( + plugin_id: &str, + path: &Path, + root: &Value, + schema: &Value, + reference_stack: &HashSet, +) -> Result, CliError> { + let Some(object) = schema.as_object() else { + return Ok(Vec::new()); + }; + let Some(properties) = object.get("properties") else { + return Ok(Vec::new()); + }; + let Some(properties) = properties.as_object() else { + return Err(schema_error( + plugin_id, + path, + "'properties' must be an object", + )); + }; + let required = required_properties(object); + let property_names = ordered_property_names(plugin_id, path, object, properties)?; + property_names + .into_iter() + .map(|key| { + build_field( + plugin_id, + path, + root, + &key, + &properties[&key], + required.contains(key.as_str()), + reference_stack, + ) + }) + .collect() +} + +fn required_properties(object: &Map) -> HashSet<&str> { + object + .get("required") + .and_then(Value::as_array) + .into_iter() + .flatten() + .filter_map(Value::as_str) + .collect() +} + +fn ordered_property_names( + plugin_id: &str, + path: &Path, + schema: &Map, + properties: &Map, +) -> Result, CliError> { + let mut alphabetical: Vec = properties.keys().cloned().collect(); + alphabetical.sort(); + let Some(order) = schema.get("x-nemo-relay-order") else { + return Ok(alphabetical); + }; + let Some(order) = order.as_array() else { + return Err(schema_error( + plugin_id, + path, + "'x-nemo-relay-order' must be an array of unique property names", + )); + }; + + let mut seen = HashSet::new(); + let mut ordered = Vec::with_capacity(properties.len()); + for value in order { + let Some(key) = value.as_str() else { + return Err(schema_error( + plugin_id, + path, + "'x-nemo-relay-order' must contain only strings", + )); + }; + if !properties.contains_key(key) { + return Err(schema_error( + plugin_id, + path, + format!("'x-nemo-relay-order' names unknown property '{key}'"), + )); + } + if !seen.insert(key) { + return Err(schema_error( + plugin_id, + path, + format!("'x-nemo-relay-order' contains duplicate property '{key}'"), + )); + } + ordered.push(key.to_owned()); + } + ordered.extend( + alphabetical + .into_iter() + .filter(|key| !seen.contains(key.as_str())), + ); + Ok(ordered) +} + +fn build_field( + plugin_id: &str, + path: &Path, + root: &Value, + key: &str, + schema: &Value, + required: bool, + reference_stack: &HashSet, +) -> Result { + let mut references = reference_stack.clone(); + let resolved = match resolve_schema(root, schema, &mut references) { + Ok(schema) => schema, + Err(ResolveError::Cycle(_)) => { + return Ok(DynamicConfigField { + key: key.to_owned(), + title: annotation_string(schema, schema, "title").unwrap_or_else(|| key.to_owned()), + description: annotation_string(schema, schema, "description"), + default: schema.get("default").cloned(), + required, + kind: DynamicConfigFieldKind::RawJson, + }); + } + Err(error) => { + return Err(schema_error( + plugin_id, + path, + format!("property '{key}' cannot be resolved: {error}"), + )); + } + }; + let title = annotation_string(schema, resolved, "title").unwrap_or_else(|| key.to_owned()); + let description = annotation_string(schema, resolved, "description"); + let default = schema + .get("default") + .or_else(|| resolved.get("default")) + .cloned(); + let secret = annotation_bool(schema, resolved, "writeOnly"); + let kind = build_field_kind(plugin_id, path, root, resolved, secret, &references)?; + + Ok(DynamicConfigField { + key: key.to_owned(), + title, + description, + default, + required, + kind, + }) +} + +fn build_field_kind( + plugin_id: &str, + path: &Path, + root: &Value, + schema: &Value, + secret: bool, + reference_stack: &HashSet, +) -> Result { + let Some(object) = schema.as_object() else { + return Ok(DynamicConfigFieldKind::RawJson); + }; + if has_unsupported_shape_keywords(object) { + return Ok(DynamicConfigFieldKind::RawJson); + } + match schema_type(schema) { + Some("boolean") => Ok(DynamicConfigFieldKind::Boolean), + Some("string") => match object.get("enum") { + None => Ok(DynamicConfigFieldKind::String { secret }), + Some(Value::Array(values)) if values.iter().all(Value::is_string) => { + Ok(DynamicConfigFieldKind::StringEnum { + options: values + .iter() + .filter_map(Value::as_str) + .map(ToOwned::to_owned) + .collect(), + secret, + }) + } + Some(_) => Ok(DynamicConfigFieldKind::RawJson), + }, + Some("integer") => Ok(DynamicConfigFieldKind::Integer), + Some("number") => Ok(DynamicConfigFieldKind::Number), + Some("object") => { + if object + .get("properties") + .and_then(Value::as_object) + .is_some_and(|properties| !properties.is_empty()) + { + let fields = build_object_fields(plugin_id, path, root, schema, reference_stack)?; + Ok(DynamicConfigFieldKind::Object { fields }) + } else if is_string_map(root, object, reference_stack) { + Ok(DynamicConfigFieldKind::StringMap) + } else { + Ok(DynamicConfigFieldKind::RawJson) + } + } + _ => Ok(DynamicConfigFieldKind::RawJson), + } +} + +fn has_unsupported_shape_keywords(schema: &Map) -> bool { + [ + "allOf", "anyOf", "oneOf", "not", "if", "then", "else", "const", + ] + .iter() + .any(|keyword| schema.contains_key(*keyword)) +} + +fn is_string_map( + root: &Value, + schema: &Map, + reference_stack: &HashSet, +) -> bool { + if schema.contains_key("patternProperties") + || schema.contains_key("propertyNames") + || schema + .get("properties") + .and_then(Value::as_object) + .is_some_and(|properties| !properties.is_empty()) + { + return false; + } + let Some(additional) = schema.get("additionalProperties") else { + return false; + }; + let mut references = reference_stack.clone(); + resolve_schema(root, additional, &mut references) + .is_ok_and(|resolved| schema_type(resolved) == Some("string")) +} + +fn schema_type(schema: &Value) -> Option<&str> { + schema.get("type").and_then(Value::as_str) +} + +fn annotation_string(primary: &Value, resolved: &Value, key: &str) -> Option { + primary + .get(key) + .or_else(|| resolved.get(key)) + .and_then(Value::as_str) + .map(ToOwned::to_owned) +} + +fn annotation_bool(primary: &Value, resolved: &Value, key: &str) -> bool { + primary + .get(key) + .or_else(|| resolved.get(key)) + .and_then(Value::as_bool) + .unwrap_or(false) +} + +#[derive(Debug)] +enum ResolveError { + Missing(String), + Cycle(String), +} + +impl std::fmt::Display for ResolveError { + fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Self::Missing(reference) => { + write!(formatter, "local reference '{reference}' was not found") + } + Self::Cycle(reference) => write!(formatter, "local reference '{reference}' is cyclic"), + } + } +} + +fn resolve_schema<'a>( + root: &'a Value, + schema: &'a Value, + references: &mut HashSet, +) -> Result<&'a Value, ResolveError> { + let Some(reference) = schema.get("$ref").and_then(Value::as_str) else { + return Ok(schema); + }; + if !references.insert(reference.to_owned()) { + return Err(ResolveError::Cycle(reference.to_owned())); + } + let target = resolve_fragment(root, reference) + .ok_or_else(|| ResolveError::Missing(reference.to_owned()))?; + resolve_schema(root, target, references) +} + +fn resolve_fragment<'a>(root: &'a Value, reference: &str) -> Option<&'a Value> { + if reference == "#" { + return Some(root); + } + if let Some(pointer) = reference.strip_prefix('#') + && pointer.starts_with('/') + { + return root.pointer(pointer); + } + let anchor = reference.strip_prefix('#')?; + find_anchor(root, anchor) +} + +fn find_anchor<'a>(schema: &'a Value, anchor: &str) -> Option<&'a Value> { + match schema { + Value::Object(object) => { + if object.get("$anchor").and_then(Value::as_str) == Some(anchor) + || object.get("$id").and_then(Value::as_str) == Some(&format!("#{anchor}")) + { + return Some(schema); + } + object.values().find_map(|child| find_anchor(child, anchor)) + } + Value::Array(values) => values.iter().find_map(|child| find_anchor(child, anchor)), + _ => None, + } +} + +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)] +enum SecretSegment { + Property(String), + Any, + Pattern(String), + Index(usize), +} + +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)] +struct SecretPattern(Vec); + +impl SecretPattern { + #[cfg(test)] + fn display(&self) -> String { + let mut pointer = String::new(); + for segment in &self.0 { + pointer.push('/'); + match segment { + SecretSegment::Property(property) => pointer.push_str(&escape_pointer(property)), + SecretSegment::Any => pointer.push('*'), + SecretSegment::Pattern(pattern) => { + pointer.push_str(&format!("~pattern({pattern})")) + } + SecretSegment::Index(index) => pointer.push_str(&index.to_string()), + } + } + pointer + } + + fn redact(&self, value: &mut Value, offset: usize) { + if offset == self.0.len() { + if value.is_string() { + *value = Value::String(REDACTED.to_owned()); + } + return; + } + match &self.0[offset] { + SecretSegment::Property(property) => { + if let Some(child) = value.get_mut(property) { + self.redact(child, offset + 1); + } + } + SecretSegment::Any => match value { + Value::Object(object) => { + for child in object.values_mut() { + self.redact(child, offset + 1); + } + } + Value::Array(values) => { + for child in values { + self.redact(child, offset + 1); + } + } + _ => {} + }, + SecretSegment::Pattern(pattern) => { + if let Value::Object(object) = value { + for (key, child) in object { + if pattern_matches(pattern, key) { + self.redact(child, offset + 1); + } + } + } + } + SecretSegment::Index(index) => { + if let Some(child) = value.get_mut(*index) { + self.redact(child, offset + 1); + } + } + } + } + + fn redact_for_edit( + &self, + value: &mut Value, + offset: usize, + secrets: &mut SecretEditValues, + occupied: &HashSet, + next_token: &mut usize, + ) { + if offset == self.0.len() { + if !value.is_string() { + return; + } + if value + .as_str() + .is_some_and(|candidate| secrets.contains_key(candidate)) + { + return; + } + let token = next_secret_token(secrets, occupied, next_token); + secrets.insert(token.clone(), value.clone()); + *value = Value::String(token); + return; + } + match &self.0[offset] { + SecretSegment::Property(property) => { + if let Some(child) = value.get_mut(property) { + self.redact_for_edit(child, offset + 1, secrets, occupied, next_token); + } + } + SecretSegment::Any => match value { + Value::Object(object) => { + for child in object.values_mut() { + self.redact_for_edit(child, offset + 1, secrets, occupied, next_token); + } + } + Value::Array(values) => { + for child in values { + self.redact_for_edit(child, offset + 1, secrets, occupied, next_token); + } + } + _ => {} + }, + SecretSegment::Pattern(pattern) => { + if let Value::Object(object) = value { + for (key, child) in object { + if pattern_matches(pattern, key) { + self.redact_for_edit(child, offset + 1, secrets, occupied, next_token); + } + } + } + } + SecretSegment::Index(index) => { + if let Some(child) = value.get_mut(*index) { + self.redact_for_edit(child, offset + 1, secrets, occupied, next_token); + } + } + } + } + + fn applies_below(&self, path: &[String]) -> bool { + self.0.len() >= path.len() + && self + .0 + .iter() + .zip(path) + .all(|(segment, property)| match segment { + SecretSegment::Property(expected) => expected == property, + SecretSegment::Any => true, + SecretSegment::Pattern(pattern) => pattern_matches(pattern, property), + SecretSegment::Index(index) => property.parse::() == Ok(*index), + }) + } +} + +fn pattern_matches(pattern: &str, property: &str) -> bool { + regex::Regex::new(pattern) + .map(|pattern| pattern.is_match(property)) + .unwrap_or(true) +} + +fn collect_string_values(value: &Value, output: &mut HashSet) { + match value { + Value::String(value) => { + output.insert(value.clone()); + } + Value::Array(values) => { + for value in values { + collect_string_values(value, output); + } + } + Value::Object(values) => { + for value in values.values() { + collect_string_values(value, output); + } + } + _ => {} + } +} + +fn next_secret_token( + secrets: &SecretEditValues, + occupied: &HashSet, + next_token: &mut usize, +) -> String { + loop { + let token = format!("{EDIT_REDACTED_PREFIX}{}>", *next_token); + *next_token += 1; + if !secrets.contains_key(&token) && !occupied.contains(&token) { + return token; + } + } +} + +fn restore_secret_tokens(value: &Value, secrets: &SecretEditValues) -> Value { + match value { + Value::String(value) => secrets + .get(value) + .cloned() + .unwrap_or_else(|| Value::String(value.clone())), + Value::Array(values) => Value::Array( + values + .iter() + .map(|value| restore_secret_tokens(value, secrets)) + .collect(), + ), + Value::Object(values) => Value::Object( + values + .iter() + .map(|(key, value)| (key.clone(), restore_secret_tokens(value, secrets))) + .collect(), + ), + value => value.clone(), + } +} + +fn discover_secret_patterns( + root: &Value, + schema: &Value, + instance_path: &[SecretSegment], + reference_stack: &HashSet, + output: &mut Vec, +) { + let mut references = reference_stack.clone(); + let resolved = match resolve_schema(root, schema, &mut references) { + Ok(resolved) => resolved, + Err(_) => return, + }; + if schema_type(resolved) == Some("string") && annotation_bool(schema, resolved, "writeOnly") { + output.push(SecretPattern(instance_path.to_vec())); + return; + } + let Some(object) = resolved.as_object() else { + return; + }; + + if let Some(properties) = object.get("properties").and_then(Value::as_object) { + for (property, child_schema) in properties { + let mut child_path = instance_path.to_vec(); + child_path.push(SecretSegment::Property(property.clone())); + discover_secret_patterns(root, child_schema, &child_path, &references, output); + } + } + if let Some(additional) = object.get("additionalProperties") + && additional.is_object() + { + let mut child_path = instance_path.to_vec(); + child_path.push(SecretSegment::Any); + discover_secret_patterns(root, additional, &child_path, &references, output); + } + if let Some(patterns) = object.get("patternProperties").and_then(Value::as_object) { + for (pattern, child_schema) in patterns { + let mut child_path = instance_path.to_vec(); + child_path.push(SecretSegment::Pattern(pattern.clone())); + discover_secret_patterns(root, child_schema, &child_path, &references, output); + } + } + if let Some(items) = object.get("items") + && items.is_object() + { + let mut child_path = instance_path.to_vec(); + child_path.push(SecretSegment::Any); + discover_secret_patterns(root, items, &child_path, &references, output); + } + if let Some(prefix_items) = object.get("prefixItems").and_then(Value::as_array) { + for (index, child_schema) in prefix_items.iter().enumerate() { + let mut child_path = instance_path.to_vec(); + child_path.push(SecretSegment::Index(index)); + discover_secret_patterns(root, child_schema, &child_path, &references, output); + } + } + for keyword in ["allOf", "anyOf", "oneOf"] { + if let Some(branches) = object.get(keyword).and_then(Value::as_array) { + for branch in branches { + discover_secret_patterns(root, branch, instance_path, &references, output); + } + } + } + for keyword in ["if", "then", "else", "not"] { + if let Some(branch) = object.get(keyword) + && branch.is_object() + { + discover_secret_patterns(root, branch, instance_path, &references, output); + } + } + if let Some(contains) = object.get("contains") + && contains.is_object() + { + let mut child_path = instance_path.to_vec(); + child_path.push(SecretSegment::Any); + discover_secret_patterns(root, contains, &child_path, &references, output); + } +} + +fn push_pointer(pointer: &str, segment: &str) -> String { + format!("{pointer}/{}", escape_pointer(segment)) +} + +fn escape_pointer(segment: &str) -> String { + segment.replace('~', "~0").replace('/', "~1") +} + +#[cfg(test)] +mod tests { + use std::fs; + + use serde_json::json; + use tempfile::tempdir; + + use super::*; + + const DRAFT7: &str = "http://json-schema.org/draft-07/schema#"; + const DRAFT2020: &str = "https://json-schema.org/draft/2020-12/schema"; + + fn write_schema(schema: &Value) -> (tempfile::TempDir, PathBuf) { + let directory = tempdir().expect("create temp directory"); + let path = directory.path().join("config.schema.json"); + fs::write( + &path, + serde_json::to_vec_pretty(schema).expect("serialize schema"), + ) + .expect("write schema"); + (directory, path) + } + + fn load(schema: &Value) -> PluginConfigSchema { + let (_directory, path) = write_schema(schema); + PluginConfigSchema::load("acme.example", path).expect("load schema") + } + + #[test] + fn loads_supported_drafts_and_requires_object_root() { + for (dialect, expected) in [ + (DRAFT7, ConfigSchemaDraft::Draft7), + (DRAFT2020, ConfigSchemaDraft::Draft202012), + ] { + let loaded = load(&json!({"$schema": dialect, "type": "object"})); + assert_eq!(loaded.draft(), expected); + assert_eq!(loaded.plugin_id(), "acme.example"); + assert_eq!(loaded.source()["type"], "object"); + assert!(loaded.path().ends_with("config.schema.json")); + } + + let (_directory, path) = write_schema(&json!({ + "$schema": DRAFT2020, + "type": "string" + })); + let error = PluginConfigSchema::load("acme.bad", &path).expect_err("reject string root"); + let message = error.to_string(); + assert!(message.contains("acme.bad"), "{message}"); + assert!( + message.contains(path.to_string_lossy().as_ref()), + "{message}" + ); + assert!(message.contains("root schema"), "{message}"); + } + + #[test] + fn requires_supported_explicit_dialect() { + for schema in [ + json!({"type": "object"}), + json!({"$schema": 7, "type": "object"}), + json!({"$schema": "https://json-schema.org/draft/2019-09/schema", "type": "object"}), + ] { + let (_directory, path) = write_schema(&schema); + let error = PluginConfigSchema::load("acme.bad", path).expect_err("reject dialect"); + assert!(error.to_string().contains("$schema")); + } + } + + #[test] + fn rejects_invalid_schema_and_external_references_recursively() { + let (_directory, path) = write_schema(&json!({ + "$schema": DRAFT7, + "type": 7 + })); + let error = PluginConfigSchema::load("acme.bad", path).expect_err("reject invalid schema"); + assert!(error.to_string().contains("schema is invalid")); + + let (_directory, path) = write_schema(&json!({ + "$schema": DRAFT2020, + "type": "object", + "$defs": { + "remote": {"$ref": "https://example.com/schema.json"} + } + })); + let error = PluginConfigSchema::load("acme.bad", path).expect_err("reject external ref"); + let message = error.to_string(); + assert!(message.contains("local fragment"), "{message}"); + assert!(message.contains("/$defs/remote/$ref"), "{message}"); + + load(&json!({ + "$schema": DRAFT2020, + "type": "object", + "properties": { + "payload": { + "type": "object", + "default": {"$ref": "https://example.com/literal-data"}, + "examples": [{"$ref": "https://example.com/also-literal"}] + } + } + })); + } + + #[test] + fn resolves_local_definitions_for_root_and_fields() { + let loaded = load(&json!({ + "$schema": DRAFT2020, + "$ref": "#/$defs/config", + "$defs": { + "config": { + "type": "object", + "properties": { + "endpoint": {"$ref": "#/$defs/nonEmpty"} + } + }, + "nonEmpty": {"type": "string", "minLength": 1} + } + })); + assert_eq!(loaded.fields().len(), 1); + assert!(matches!( + loaded.fields()[0].kind, + DynamicConfigFieldKind::String { secret: false } + )); + loaded + .validate(&json!({"endpoint": "relay"})) + .expect("valid config"); + } + + #[test] + fn maps_native_nested_map_and_raw_controls() { + let loaded = load(&json!({ + "$schema": DRAFT2020, + "type": "object", + "required": ["enabled"], + "properties": { + "array": {"type": "array", "items": {"type": "string"}}, + "choice": {"type": "string", "enum": ["one", "two"]}, + "count": {"type": "integer"}, + "enabled": {"type": "boolean", "title": "Enabled", "default": true}, + "free": {"type": "object"}, + "labels": {"type": "object", "additionalProperties": {"type": "string"}}, + "nested": { + "type": "object", + "properties": {"ratio": {"type": "number", "description": "Weight"}} + }, + "secret": {"type": "string", "writeOnly": true}, + "union": {"oneOf": [{"type": "string"}, {"type": "number"}]} + } + })); + let field = |key: &str| { + loaded + .fields() + .iter() + .find(|field| field.key == key) + .unwrap() + }; + + assert!(matches!( + field("array").kind, + DynamicConfigFieldKind::RawJson + )); + assert!(matches!( + field("free").kind, + DynamicConfigFieldKind::RawJson + )); + assert!(matches!( + field("union").kind, + DynamicConfigFieldKind::RawJson + )); + assert!(matches!( + field("count").kind, + DynamicConfigFieldKind::Integer + )); + assert!(matches!( + field("labels").kind, + DynamicConfigFieldKind::StringMap + )); + assert!(matches!( + field("secret").kind, + DynamicConfigFieldKind::String { secret: true } + )); + assert_eq!(field("enabled").title, "Enabled"); + assert_eq!(field("enabled").default, Some(json!(true))); + assert!(field("enabled").required); + assert!(matches!( + field("choice").kind, + DynamicConfigFieldKind::StringEnum { ref options, secret: false } + if options == &["one", "two"] + )); + assert!(matches!( + field("nested").kind, + DynamicConfigFieldKind::Object { ref fields } + if fields.len() == 1 + && fields[0].key == "ratio" + && fields[0].description.as_deref() == Some("Weight") + && matches!(fields[0].kind, DynamicConfigFieldKind::Number) + )); + assert!(loaded.editor().title.is_none()); + } + + #[test] + fn applies_partial_explicit_order_then_alphabetical_fallback() { + let loaded = load(&json!({ + "$schema": DRAFT7, + "type": "object", + "x-nemo-relay-order": ["zeta", "middle"], + "properties": { + "zeta": {"type": "string"}, + "alpha": {"type": "string"}, + "middle": {"type": "string"}, + "beta": {"type": "string"} + } + })); + assert_eq!( + loaded + .fields() + .iter() + .map(|field| field.key.as_str()) + .collect::>(), + ["zeta", "middle", "alpha", "beta"] + ); + } + + #[test] + fn rejects_malformed_explicit_order() { + for order in [ + json!("alpha"), + json!(["missing"]), + json!(["alpha", "alpha"]), + json!([1]), + ] { + let (_directory, path) = write_schema(&json!({ + "$schema": DRAFT2020, + "type": "object", + "x-nemo-relay-order": order, + "properties": {"alpha": {"type": "string"}} + })); + let error = PluginConfigSchema::load("acme.bad", path).expect_err("reject order"); + assert!(error.to_string().contains("x-nemo-relay-order")); + } + } + + #[test] + fn validation_error_names_plugin_and_instance_pointer() { + let loaded = load(&json!({ + "$schema": DRAFT2020, + "type": "object", + "properties": { + "service": { + "type": "object", + "properties": {"port": {"type": "integer", "minimum": 1}} + } + } + })); + let error = loaded + .validate(&json!({"service": {"port": 0}})) + .expect_err("reject invalid config"); + let message = error.to_string(); + assert!(message.contains("acme.example"), "{message}"); + assert!(message.contains("/service/port"), "{message}"); + } + + #[test] + fn recursively_discovers_and_redacts_write_only_strings() { + let loaded = load(&json!({ + "$schema": DRAFT2020, + "type": "object", + "properties": { + "token": {"$ref": "#/$defs/secret"}, + "nested": { + "type": "object", + "properties": {"password": {"type": "string", "writeOnly": true}} + }, + "records": { + "type": "array", + "items": { + "type": "object", + "properties": {"key": {"type": "string", "writeOnly": true}} + } + } + }, + "$defs": {"secret": {"type": "string", "writeOnly": true}} + })); + assert_eq!( + loaded.secret_paths(), + &["/nested/password", "/records/*/key", "/token"] + ); + let config = json!({ + "token": "top-secret", + "nested": {"password": "hunter2", "visible": "ok"}, + "records": [{"key": "one"}, {"key": "two"}] + }); + assert_eq!( + loaded.redact(&config), + json!({ + "token": REDACTED, + "nested": {"password": REDACTED, "visible": "ok"}, + "records": [{"key": REDACTED}, {"key": REDACTED}] + }) + ); + assert_eq!(config["token"], "top-secret", "redaction must clone"); + + let (redacted, secrets) = loaded.redact_for_edit(&config); + assert_eq!(loaded.restore_edit_secrets(&redacted, &secrets), config); + + let mut replacement = redacted; + replacement["token"] = json!("replacement"); + replacement["nested"] + .as_object_mut() + .unwrap() + .remove("password"); + replacement["records"].as_array_mut().unwrap().swap(0, 1); + let restored = loaded.restore_edit_secrets(&replacement, &secrets); + assert_eq!(restored["token"], json!("replacement")); + assert!(restored["nested"].get("password").is_none()); + assert_eq!(restored["records"], json!([{"key": "two"}, {"key": "one"}])); + } + + #[test] + fn secret_discovery_preserves_pattern_prefix_and_contains_selectors() { + let loaded = load(&json!({ + "$schema": DRAFT2020, + "type": "object", + "properties": { + "patterned": { + "type": "object", + "patternProperties": { + "^secret_": {"type": "string", "writeOnly": true} + } + }, + "tuple": { + "type": "array", + "prefixItems": [ + {"type": "string", "writeOnly": true}, + {"type": "string"} + ] + }, + "contained": { + "type": "array", + "contains": {"type": "string", "writeOnly": true} + } + } + })); + let config = json!({ + "patterned": {"secret_token": "hide", "public": "show"}, + "tuple": ["hide", "show"], + "contained": ["hide-one", 7, "hide-two"] + }); + assert_eq!( + loaded.redact(&config), + json!({ + "patterned": {"secret_token": REDACTED, "public": "show"}, + "tuple": [REDACTED, "show"], + "contained": [REDACTED, 7, REDACTED] + }) + ); + assert!(loaded.has_secrets_at(&["patterned".to_owned()])); + assert!(loaded.has_secrets_at(&["tuple".to_owned()])); + assert!(loaded.has_secrets_at(&["contained".to_owned()])); + } + + #[test] + fn read_and_json_errors_include_plugin_and_path() { + let directory = tempdir().expect("create temp directory"); + let missing = directory.path().join("missing.json"); + let error = PluginConfigSchema::load("acme.missing", &missing).expect_err("missing"); + let message = error.to_string(); + assert!(message.contains("acme.missing"), "{message}"); + assert!( + message.contains(missing.to_string_lossy().as_ref()), + "{message}" + ); + + let invalid = directory.path().join("invalid.json"); + fs::write(&invalid, "{").expect("write invalid json"); + let error = PluginConfigSchema::load("acme.invalid", &invalid).expect_err("invalid json"); + assert!(error.to_string().contains("not valid JSON")); + } +} diff --git a/crates/cli/src/pricing.rs b/crates/cli/src/pricing.rs index 30175e9fb..abc986e79 100644 --- a/crates/cli/src/pricing.rs +++ b/crates/cli/src/pricing.rs @@ -17,9 +17,7 @@ use crate::config::{ PricingValidateCommand, ServerArgs, resolve_server_config, }; use crate::error::CliError; -use crate::plugins::config_io::{ - TargetScope, read_plugin_config, target_path, validate_config, write_plugin_config, -}; +use crate::plugins::config_io::{PluginConfigDocument, TargetScope, target_path, validate_config}; const PRICING_PLUGIN_KIND: &str = "pricing"; @@ -37,13 +35,13 @@ pub(crate) fn validate(command: PricingValidateCommand) -> Result<(), CliError> pub(crate) fn init(command: PricingInitCommand) -> Result<(), CliError> { let scope = target_pricing_scope(&command.scope)?; let path = target_path(scope)?; - let mut plugin_config = read_plugin_config(&path)?; - let index = ensure_pricing_component(&mut plugin_config)?; - let pricing_config = pricing_config_from_component(&plugin_config.components[index])?; - store_pricing_config(&mut plugin_config.components[index], &pricing_config)?; - plugin_config.components[index].enabled = true; - validate_config(&plugin_config)?; - write_plugin_config(&path, &plugin_config)?; + update_plugin_config_document(&path, |plugin_config| { + let index = ensure_pricing_component(plugin_config)?; + let pricing_config = pricing_config_from_component(&plugin_config.components[index])?; + store_pricing_config(&mut plugin_config.components[index], &pricing_config)?; + plugin_config.components[index].enabled = true; + Ok(()) + })?; println!("Initialized pricing config: {}", path.display()); Ok(()) } @@ -58,23 +56,22 @@ pub(crate) fn add_source(command: PricingAddSourceCommand) -> Result<(), CliErro read_pricing_catalog(&source_path)?; let scope = target_pricing_scope(&command.scope)?; let path = target_path(scope)?; - let mut plugin_config = read_plugin_config(&path)?; - let index = ensure_pricing_component(&mut plugin_config)?; - let mut pricing_config = pricing_config_from_component(&plugin_config.components[index])?; let source = PricingSourceConfig::File { path: source_path }; - if !pricing_config.sources.contains(&source) { - if command.append { - pricing_config.sources.push(source); - } else { - pricing_config.sources.insert(0, source); + update_plugin_config_document(&path, |plugin_config| { + let index = ensure_pricing_component(plugin_config)?; + let mut pricing_config = pricing_config_from_component(&plugin_config.components[index])?; + if !pricing_config.sources.contains(&source) { + if command.append { + pricing_config.sources.push(source); + } else { + pricing_config.sources.insert(0, source); + } } - } - - store_pricing_config(&mut plugin_config.components[index], &pricing_config)?; - plugin_config.components[index].enabled = true; - validate_config(&plugin_config)?; - write_plugin_config(&path, &plugin_config)?; + store_pricing_config(&mut plugin_config.components[index], &pricing_config)?; + plugin_config.components[index].enabled = true; + Ok(()) + })?; println!( "Added pricing source: {} -> {}", command.path.display(), @@ -83,6 +80,16 @@ pub(crate) fn add_source(command: PricingAddSourceCommand) -> Result<(), CliErro Ok(()) } +fn update_plugin_config_document( + path: &Path, + update: impl FnOnce(&mut PluginConfig) -> Result<(), CliError>, +) -> Result<(), CliError> { + let mut document = PluginConfigDocument::read(path)?; + update(document.config_mut())?; + validate_config(document.config())?; + document.write() +} + pub(crate) fn resolve(command: PricingResolveCommand) -> Result<(), CliError> { let sources = pricing_catalog_sources_from_current_config()?; if sources.is_empty() { diff --git a/crates/cli/tests/coverage/launcher_tests.rs b/crates/cli/tests/coverage/launcher_tests.rs index fefa81add..da924de6f 100644 --- a/crates/cli/tests/coverage/launcher_tests.rs +++ b/crates/cli/tests/coverage/launcher_tests.rs @@ -4,11 +4,10 @@ use super::*; use crate::config::{AgentCommandConfig, CursorAgentConfig, GatewayConfig}; use std::ffi::OsString; -use std::sync::{Mutex, OnceLock}; +use std::sync::Mutex; fn current_dir_lock() -> &'static Mutex<()> { - static LOCK: OnceLock> = OnceLock::new(); - LOCK.get_or_init(|| Mutex::new(())) + &crate::test_support::CWD_TEST_LOCK } struct EnvScope { diff --git a/crates/cli/tests/coverage/plugins_lifecycle_tests.rs b/crates/cli/tests/coverage/plugins_lifecycle_tests.rs index 5e57969c0..9ad401dcc 100644 --- a/crates/cli/tests/coverage/plugins_lifecycle_tests.rs +++ b/crates/cli/tests/coverage/plugins_lifecycle_tests.rs @@ -36,6 +36,7 @@ impl Drop for CurrentDirGuard { struct EnvScope { _guard: MutexGuard<'static, ()>, + _cwd_guard: crate::test_support::CwdTestScope, values: Vec<(&'static str, Option)>, } @@ -50,6 +51,10 @@ impl EnvScope { } fn set(values: &[(&'static str, Option<&std::ffi::OsStr>)]) -> Self { + // Acquire process-global locks in the same CWD-then-environment order as + // the rest of the CLI test suite. Lifecycle tests also change CWD while + // this scope is alive. + let cwd_guard = crate::test_support::CwdTestScope::locked(); let guard = crate::test_support::ENV_TEST_LOCK .lock() .unwrap_or_else(|error| error.into_inner()); @@ -67,6 +72,7 @@ impl EnvScope { } Self { _guard: guard, + _cwd_guard: cwd_guard, values: previous, } } @@ -152,6 +158,34 @@ entrypoint = "{plugin_id}.plugin:register" manifest_path } +fn write_dynamic_manifest_with_config_schema( + dir: &Path, + plugin_id: &str, + schema: &serde_json::Value, +) -> PathBuf { + let manifest_path = write_dynamic_manifest_with_options( + dir, + plugin_id, + &["plugin_worker", "config_schema"], + None, + ); + let mut manifest = std::fs::read_to_string(&manifest_path).unwrap(); + manifest.push_str( + r#" + +[config_schema] +path = "config.schema.json" +"#, + ); + std::fs::write(&manifest_path, manifest).unwrap(); + std::fs::write( + dir.join("config.schema.json"), + serde_json::to_vec_pretty(schema).unwrap(), + ) + .unwrap(); + manifest_path +} + fn write_detached_ed25519_signature(dir: &Path, signature_name: &str) -> String { std::fs::create_dir_all(dir).unwrap(); let artifact = std::fs::read(dir.join("plugin.py")).unwrap(); @@ -382,6 +416,124 @@ fn add_registers_dynamic_plugin_in_project_plugins_toml() { assert_eq!(resolved.dynamic_plugins[0].plugin_id, "acme.guardrail"); } +#[test] +fn add_rejects_unreadable_declared_config_schema() { + let temp = tempfile::tempdir().unwrap(); + let _env = EnvScope::hermetic(&temp); + let _cwd = CurrentDirGuard::enter(temp.path()); + let plugin_dir = temp.path().join("plugins").join("schema-missing"); + std::fs::create_dir_all(&plugin_dir).unwrap(); + write_dynamic_manifest_with_config_schema( + &plugin_dir, + "acme.schema-missing", + &serde_json::json!({ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "type": "object" + }), + ); + std::fs::remove_file(plugin_dir.join("config.schema.json")).unwrap(); + + let error = add( + PluginsAddCommand { + scope: PluginsScopeArgs { + project: true, + ..PluginsScopeArgs::default() + }, + path: plugin_dir, + }, + &ServerArgs::default(), + ) + .unwrap_err() + .to_string(); + + assert!(error.contains("acme.schema-missing"), "{error}"); + assert!(error.contains("config.schema.json"), "{error}"); + assert!(error.contains("failed to read schema"), "{error}"); +} + +#[test] +fn validate_path_rejects_invalid_declared_config_schema() { + let temp = tempfile::tempdir().unwrap(); + let _env = EnvScope::hermetic(&temp); + let _cwd = CurrentDirGuard::enter(temp.path()); + let plugin_dir = temp.path().join("plugins").join("schema-invalid"); + std::fs::create_dir_all(&plugin_dir).unwrap(); + write_dynamic_manifest_with_config_schema( + &plugin_dir, + "acme.schema-invalid", + &serde_json::json!({ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "type": 42 + }), + ); + + let error = validate( + PluginsValidateCommand { + target: plugin_dir.to_string_lossy().into_owned(), + json: false, + }, + &ServerArgs::default(), + ) + .unwrap_err() + .to_string(); + + assert!(error.contains("acme.schema-invalid"), "{error}"); + assert!(error.contains("schema is invalid"), "{error}"); +} + +#[test] +fn validate_id_checks_resolved_host_config_against_declared_schema() { + let temp = tempfile::tempdir().unwrap(); + let _env = EnvScope::hermetic(&temp); + let _cwd = CurrentDirGuard::enter(temp.path()); + let plugin_dir = temp.path().join("plugins").join("schema-config"); + std::fs::create_dir_all(&plugin_dir).unwrap(); + write_dynamic_manifest_with_config_schema( + &plugin_dir, + "acme.schema-config", + &serde_json::json!({ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": {"port": {"type": "integer"}} + }), + ); + let server = ServerArgs::default(); + add( + PluginsAddCommand { + scope: PluginsScopeArgs { + project: true, + ..PluginsScopeArgs::default() + }, + path: plugin_dir, + }, + &server, + ) + .unwrap(); + + let plugins_toml = temp.path().join(".nemo-relay").join("plugins.toml"); + let mut rendered = std::fs::read_to_string(&plugins_toml).unwrap(); + rendered.push_str( + r#" +[plugins.dynamic.config] +port = "not-an-integer" +"#, + ); + std::fs::write(&plugins_toml, rendered).unwrap(); + + let error = validate( + PluginsValidateCommand { + target: "acme.schema-config".into(), + json: false, + }, + &server, + ) + .unwrap_err() + .to_string(); + + assert!(error.contains("acme.schema-config"), "{error}"); + assert!(error.contains("JSON pointer '/port'"), "{error}"); +} + #[test] fn active_dynamic_plugin_components_project_enabled_native_records_only() { let temp = tempfile::tempdir().unwrap(); diff --git a/crates/cli/tests/coverage/plugins_tests.rs b/crates/cli/tests/coverage/plugins_tests.rs index 80992976c..1e2c284bc 100644 --- a/crates/cli/tests/coverage/plugins_tests.rs +++ b/crates/cli/tests/coverage/plugins_tests.rs @@ -15,6 +15,65 @@ use nemo_relay::plugins::nemo_guardrails::component::{ use nemo_relay_adaptive::AdaptiveConfig; use nemo_relay_adaptive::plugin_component::ADAPTIVE_PLUGIN_KIND; use nemo_relay_pii_redaction::component::{PII_REDACTION_PLUGIN_KIND, PiiRedactionConfig}; +use serde_json::Map; +use std::path::PathBuf; + +fn write_editor_dynamic_manifest( + dir: &Path, + plugin_id: &str, + name: Option<&str>, + schema: Option<&Value>, +) -> PathBuf { + std::fs::create_dir_all(dir).unwrap(); + let name = name + .map(|name| format!("name = {name:?}\n")) + .unwrap_or_default(); + let schema_capability = if schema.is_some() { + ", \"config_schema\"" + } else { + "" + }; + let schema_section = if schema.is_some() { + "\n[config_schema]\npath = \"config.schema.json\"\n" + } else { + "" + }; + let manifest = dir.join("relay-plugin.toml"); + std::fs::write( + &manifest, + format!( + r#"manifest_version = 1 + +[plugin] +id = "{plugin_id}" +{name}kind = "worker" + +[compat] +relay = "0.5" +worker_protocol = "grpc-v1" + +[defaults] +enabled = false + +[capabilities] +items = ["plugin_worker"{schema_capability}] +{schema_section} +[load] +runtime = "python" +entrypoint = "fixture.plugin:register" +"# + ), + ) + .unwrap(); + if let Some(schema) = schema { + std::fs::write( + dir.join("config.schema.json"), + serde_json::to_vec_pretty(schema).unwrap(), + ) + .unwrap(); + } + manifest +} fn adaptive_component_config(agent_id: &str) -> serde_json::Map { json!({ @@ -316,11 +375,13 @@ fn typed_editor_model_contains_pii_redaction_options() { #[test] fn plugin_menu_uses_setup_theme_markers() { let theme = ColorfulTheme::default(); - let lines = render_menu( + let lines = render_menu_for_size( &theme, "plugins.toml", &[MenuItem::new("First"), MenuItem::new("Second")], 0, + 24, + 80, ); let rendered = lines.join("\n"); @@ -337,33 +398,59 @@ fn plugin_menu_builds_ordered_component_actions() { let config = PluginConfig::default(); let components = editable_components(&config).unwrap(); - let (items, actions) = plugin_menu_items(&components, &temp.path().join("plugins.toml")); + let dynamic = vec![( + "Example Dynamic".to_owned(), + "dynamic; config absent; schema fields".to_owned(), + )]; + let (items, actions) = + plugin_menu_items(&components, &dynamic, &temp.path().join("plugins.toml")); let plain_labels = items .iter() .map(|item| console::strip_ansi_codes(&item.label).into_owned()) .collect::>(); assert_eq!(items.len(), actions.len()); - assert_eq!(plain_labels[0], "Toggle Observability component [on]"); - assert_eq!(plain_labels[1], " Edit Observability ATOF"); + assert!(plain_labels[0].starts_with("Observability [on] —")); assert!( plain_labels .iter() - .any(|label| { label.contains("Toggle NeMo Guardrails component [off]") }) + .any(|label| { label.starts_with("NeMo Guardrails [off] —") }) ); - assert!(matches!(actions[0], MenuAction::ToggleComponent(0))); + assert_eq!( + plain_labels[components.len()], + "Example Dynamic — dynamic; config absent; schema fields" + ); + assert_eq!(plain_labels.len(), components.len() + dynamic.len() + 3); + assert!(matches!(actions[0], MenuAction::EditComponent(0))); assert!(matches!( - actions[1], - MenuAction::EditField { - component_index: 0, - field_index: 0 - } + actions[components.len()], + MenuAction::EditDynamic(0) )); assert!(matches!(actions[actions.len() - 3], MenuAction::Preview)); assert!(matches!(actions[actions.len() - 2], MenuAction::Save)); assert!(matches!(actions[actions.len() - 1], MenuAction::Cancel)); } +#[test] +fn component_menu_contains_toggle_fields_and_back() { + let config = PluginConfig::default(); + let components = editable_components(&config).unwrap(); + let component = &components[0]; + + let (items, actions) = component_menu_items(component); + let labels = items + .iter() + .map(|item| console::strip_ansi_codes(&item.label).into_owned()) + .collect::>(); + + assert_eq!(labels[0], "Toggle component [on]"); + assert_eq!(labels[1], " Edit ATOF"); + assert_eq!(labels.last().unwrap(), "Back [q]"); + assert!(matches!(actions[0], ComponentMenuAction::Toggle)); + assert!(matches!(actions[1], ComponentMenuAction::EditField(0))); + assert!(matches!(actions.last(), Some(ComponentMenuAction::Back))); +} + #[test] fn component_enablement_shortcuts_clear_and_reset_differ() { let config = PluginConfig::default(); @@ -374,10 +461,10 @@ fn component_enablement_shortcuts_clear_and_reset_differ() { .find(|component| component.label() == "Observability") .unwrap(); observability.set_enabled(false); - apply_component_enablement_shortcut(observability, MenuShortcut::Reset); + reset_component_menu_item(observability, Some(ComponentMenuAction::Toggle)).unwrap(); assert!(observability.enabled()); - apply_component_enablement_shortcut(observability, MenuShortcut::Clear); + clear_component_menu_item(observability, Some(ComponentMenuAction::Toggle)).unwrap(); assert!(!observability.enabled()); let adaptive = components @@ -385,10 +472,62 @@ fn component_enablement_shortcuts_clear_and_reset_differ() { .find(|component| component.label() == "Adaptive") .unwrap(); adaptive.set_enabled(true); - apply_component_enablement_shortcut(adaptive, MenuShortcut::Reset); + reset_component_menu_item(adaptive, Some(ComponentMenuAction::Toggle)).unwrap(); assert!(!adaptive.enabled()); } +#[test] +fn menu_viewport_keeps_selection_visible_and_pages() { + let first = menu_viewport(20, 0, 8); + assert_eq!((first.start, first.end, first.page_size), (0, 4, 4)); + assert!(first.indicators); + + let middle = menu_viewport(20, 10, 8); + assert!(middle.start <= 10 && middle.end > 10); + assert_eq!(middle.end - middle.start, middle.page_size); + + let last = menu_viewport(20, 19, 8); + assert_eq!(last.end, 20); + assert!(last.start <= 19); +} + +#[test] +fn menu_renderer_respects_terminal_height_and_width() { + let theme = ColorfulTheme::default(); + let items = (0..20) + .map(|index| MenuItem::new(format!("A very long menu item number {index}"))) + .collect::>(); + let lines = render_menu_for_size(&theme, "plugins.toml", &items, 10, 8, 24); + + assert!(lines.len() <= 8); + assert!( + lines + .iter() + .all(|line| console::measure_text_width(line) <= 24) + ); + assert!(lines.iter().any(|line| line.contains("↑"))); + assert!(lines.iter().any(|line| line.contains("↓"))); +} + +#[test] +fn menu_renderer_bounds_tiny_terminals_and_sanitizes_physical_rows() { + let theme = ColorfulTheme::default(); + let items = [ + MenuItem::new("safe\nsecond row\r\u{1b}[31mred"), + MenuItem::new("next"), + ]; + + for rows in [0, 1, 2] { + let lines = render_menu_for_size(&theme, "unsafe\nprompt\u{1b}[2J", &items, 0, rows, 80); + assert!(lines.len() <= rows.max(1), "rows={rows}: {lines:?}"); + assert!(lines.iter().all(|line| { + !line + .chars() + .any(|character| matches!(character, '\n' | '\r' | '\u{1b}')) + })); + } +} + #[test] fn menu_response_index_tracks_selected_and_shortcut_positions() { assert_eq!(menu_response_index(&MenuResponse::Selected(3)), Some(3)); @@ -1238,6 +1377,285 @@ fn read_plugin_config_handles_missing_and_invalid_files() { ); } +#[test] +fn plugin_config_document_preserves_host_sections_and_dynamic_config_presence() { + let temp = tempfile::tempdir().unwrap(); + let path = temp.path().join("plugins.toml"); + std::fs::write( + &path, + r#"version = 1 +host_setting = "preserve-me" + +[[components]] +kind = "observability" +enabled = true +extension_field = "preserve-component-extension" +config = {} + +[plugins.policy] +allow_unsigned = true + +[[plugins.dynamic]] +manifest = "./first/relay-plugin.toml" + +[[plugins.dynamic]] +manifest = "./second/relay-plugin.toml" +config = {} + +[host.extra] +value = "preserve-host-section" +"#, + ) + .unwrap(); + + let mut document = PluginConfigDocument::read(&path).unwrap(); + assert_eq!(document.path(), path); + assert_eq!(document.config().components.len(), 1); + let entries = document.dynamic_entries().unwrap(); + assert_eq!(entries.len(), 2); + assert_eq!(entries[0].index, 0); + assert_eq!(entries[0].manifest, "./first/relay-plugin.toml"); + assert_eq!( + entries[0].manifest_path, + temp.path().join("first/relay-plugin.toml") + ); + assert_eq!(entries[0].config, None); + assert_eq!(entries[1].config, Some(Map::new())); + + document.config_mut().components[0].enabled = false; + document + .set_dynamic_config(0, Map::from_iter([("token".to_owned(), json!("secret"))])) + .unwrap(); + document.remove_dynamic_config(1).unwrap(); + + let mut redacted = document.clone(); + redacted + .set_dynamic_config( + 0, + Map::from_iter([("token".to_owned(), json!(""))]), + ) + .unwrap(); + assert!(redacted.render().unwrap().contains("")); + assert!(!document.render().unwrap().contains("")); + + document.write().unwrap(); + let rendered = std::fs::read_to_string(&path).unwrap(); + let root = rendered.parse::().unwrap(); + assert_eq!(root["host_setting"].as_str(), Some("preserve-me")); + assert_eq!( + root["host"]["extra"]["value"].as_str(), + Some("preserve-host-section") + ); + let component = &root["components"].as_array().unwrap()[0]; + assert_eq!(component["enabled"].as_bool(), Some(false)); + assert_eq!( + component["extension_field"].as_str(), + Some("preserve-component-extension") + ); + assert_eq!( + root["plugins"]["policy"]["allow_unsigned"].as_bool(), + Some(true) + ); + let dynamic = root["plugins"]["dynamic"].as_array().unwrap(); + assert_eq!( + dynamic[0]["manifest"].as_str(), + Some("./first/relay-plugin.toml") + ); + assert_eq!(dynamic[0]["config"]["token"].as_str(), Some("secret")); + assert!(dynamic[1].get("config").is_none()); +} + +#[test] +fn dynamic_editor_loads_document_local_plugins_and_redacts_schema_secrets() { + let temp = tempfile::tempdir().unwrap(); + write_editor_dynamic_manifest( + &temp.path().join("plugins/structured"), + "acme.structured", + Some("Structured Plugin"), + Some(&json!({ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "type": "object", + "properties": { + "token": {"type": "string", "writeOnly": true}, + "retries": {"type": "integer", "default": 3}, + "records": { + "type": "array", + "items": { + "type": "object", + "properties": { + "password": {"type": "string", "writeOnly": true} + } + } + } + } + })), + ); + write_editor_dynamic_manifest(&temp.path().join("plugins/raw"), "acme.raw", None, None); + write_editor_dynamic_manifest( + &temp.path().join("plugins/absent"), + "acme.absent", + None, + None, + ); + write_editor_dynamic_manifest(&temp.path().join("plugins/empty"), "acme.empty", None, None); + let path = temp.path().join("plugins.toml"); + std::fs::write( + &path, + r#"[[plugins.dynamic]] +manifest = "./plugins/structured/relay-plugin.toml" +config = { token = "super-secret", retries = 5, records = [{ password = "nested-secret" }], observed_at = 1979-05-27T07:32:00Z, unknown = { nested = "keep" } } + +[[plugins.dynamic]] +manifest = "./plugins/raw/relay-plugin.toml" +config = { local_time = 1979-05-27T07:32:00Z } + +[[plugins.dynamic]] +manifest = "./plugins/absent/relay-plugin.toml" + +[[plugins.dynamic]] +manifest = "./plugins/empty/relay-plugin.toml" +config = {} +"#, + ) + .unwrap(); + + let document = PluginConfigDocument::read(&path).unwrap(); + let mut states = load_dynamic_plugin_states(&document).unwrap(); + assert_eq!(states.len(), 4); + assert_eq!(states[0].label(), "Structured Plugin (acme.structured)"); + assert_eq!(states[1].label(), "acme.raw"); + assert!(states[0].menu_summary().contains("schema fields")); + assert!(states[1].menu_summary().contains("configured")); + assert!(states[2].menu_summary().contains("config absent")); + assert!(states[3].menu_summary().contains("explicit empty config")); + assert!(states[0].top_level_field_uses_hidden_json("records")); + let labels = states[0].top_level_field_labels(); + assert!(labels.iter().any(|label| label.contains(""))); + assert!(labels.iter().all(|label| !label.contains("super-secret"))); + + let mut preview = document.clone(); + for state in &states { + state.apply_to_document(&mut preview, true).unwrap(); + } + let rendered = preview.render().unwrap(); + assert!(rendered.contains("")); + assert!(!rendered.contains("super-secret")); + assert!(!rendered.contains("nested-secret")); + let preview_root = rendered.parse::().unwrap(); + assert!( + preview_root["plugins"]["dynamic"].as_array().unwrap()[0]["config"]["observed_at"] + .is_datetime() + ); + assert!( + preview_root["plugins"]["dynamic"].as_array().unwrap()[1]["config"]["local_time"] + .is_datetime() + ); + + states[0].reset_top_level_field("retries").unwrap(); + assert_eq!(states[0].config().unwrap().get("retries"), Some(&json!(3))); + assert_eq!( + states[0].config().unwrap().get("unknown"), + Some(&json!({"nested": "keep"})) + ); + let mut touched = document.clone(); + states[0].apply_to_document(&mut touched, false).unwrap(); + assert_eq!( + touched.dynamic_entries().unwrap()[0] + .config + .as_ref() + .unwrap() + .get("unknown"), + Some(&json!({"nested": "keep"})) + ); + let touched_root = touched.render().unwrap().parse::().unwrap(); + assert!( + touched_root["plugins"]["dynamic"].as_array().unwrap()[0]["config"]["observed_at"] + .is_datetime() + ); + states[0].clear_top_level_field("token"); + states[0].clear_top_level_field("retries"); + states[0].clear_top_level_field("unknown"); + states[0].clear_top_level_field("observed_at"); + states[0].clear_top_level_field("records"); + assert_eq!(states[0].config(), Some(&Map::new())); + + states[0].reset(); + let mut persisted = document.clone(); + for state in &states { + state.apply_to_document(&mut persisted, false).unwrap(); + } + let entries = persisted.dynamic_entries().unwrap(); + assert_eq!(entries[0].config, None); + assert_eq!(entries[2].config, None); + assert_eq!(entries[3].config, Some(Map::new())); + let persisted_root = persisted.render().unwrap().parse::().unwrap(); + assert!( + persisted_root["plugins"]["dynamic"].as_array().unwrap()[1]["config"]["local_time"] + .is_datetime() + ); +} + +#[test] +fn dynamic_editor_rejects_unreadable_declared_schema() { + let temp = tempfile::tempdir().unwrap(); + let plugin_dir = temp.path().join("plugin"); + write_editor_dynamic_manifest( + &plugin_dir, + "acme.missing-schema", + None, + Some(&json!({ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "type": "object" + })), + ); + std::fs::remove_file(plugin_dir.join("config.schema.json")).unwrap(); + let path = temp.path().join("plugins.toml"); + std::fs::write( + &path, + "[[plugins.dynamic]]\nmanifest = \"./plugin/relay-plugin.toml\"\n", + ) + .unwrap(); + + let document = PluginConfigDocument::read(&path).unwrap(); + let error = load_dynamic_plugin_states(&document) + .unwrap_err() + .to_string(); + assert!(error.contains("acme.missing-schema"), "{error}"); + assert!(error.contains("failed to read schema"), "{error}"); +} + +#[test] +fn plugin_config_document_reports_invalid_dynamic_entries_and_indexes() { + let temp = tempfile::tempdir().unwrap(); + let path = temp.path().join("plugins.toml"); + std::fs::write(&path, "[plugins]\ndynamic = \"not-an-array\"\n").unwrap(); + let mut document = PluginConfigDocument::read(&path).unwrap(); + assert!( + document + .dynamic_entries() + .unwrap_err() + .to_string() + .contains("plugins.dynamic must be an array") + ); + assert!( + document + .remove_dynamic_config(0) + .unwrap_err() + .to_string() + .contains("plugins.dynamic must be an array") + ); + + std::fs::write(&path, "[[plugins.dynamic]]\nmanifest = \"plugin.toml\"\n").unwrap(); + let mut document = PluginConfigDocument::read(&path).unwrap(); + assert!( + document + .set_dynamic_config(1, Map::new()) + .unwrap_err() + .to_string() + .contains("index 1 is out of range") + ); +} + #[test] fn write_plugin_config_prunes_defaults_and_round_trips() { let temp = tempfile::tempdir().unwrap(); @@ -1681,6 +2099,7 @@ fn parse_float_value_rejects_non_finite_numbers() { #[test] fn target_path_resolves_project_and_global_without_user_env() { + let _cwd = crate::test_support::CwdTestScope::locked(); let cwd = std::env::current_dir().unwrap(); assert_eq!( diff --git a/crates/cli/tests/coverage/pricing_tests.rs b/crates/cli/tests/coverage/pricing_tests.rs index fab436929..a2ccd7794 100644 --- a/crates/cli/tests/coverage/pricing_tests.rs +++ b/crates/cli/tests/coverage/pricing_tests.rs @@ -114,3 +114,58 @@ fn pricing_component_rejects_malformed_component_config() { .to_string(); assert!(error.contains("invalid pricing config")); } + +#[test] +fn pricing_document_update_preserves_dynamic_and_host_sections() { + let temp = tempfile::tempdir().unwrap(); + let path = temp.path().join("plugins.toml"); + std::fs::write( + &path, + r#"host_setting = "preserve-me" + +[[plugins.dynamic]] +manifest = "./relay-plugin.toml" +config = {} + +[plugins.policy] +allow_unsigned = true + +[host.extra] +value = 42 +"#, + ) + .unwrap(); + + update_plugin_config_document(&path, |plugin_config| { + let index = ensure_pricing_component(plugin_config)?; + plugin_config.components[index].enabled = true; + Ok(()) + }) + .unwrap(); + + let root = std::fs::read_to_string(&path) + .unwrap() + .parse::() + .unwrap(); + assert_eq!(root["host_setting"].as_str(), Some("preserve-me")); + assert_eq!(root["host"]["extra"]["value"].as_integer(), Some(42)); + assert_eq!( + root["plugins"]["policy"]["allow_unsigned"].as_bool(), + Some(true) + ); + let dynamic = root["plugins"]["dynamic"].as_array().unwrap(); + assert_eq!(dynamic[0]["manifest"].as_str(), Some("./relay-plugin.toml")); + assert!(dynamic[0]["config"].as_table().unwrap().is_empty()); + let pricing = root["components"] + .as_array() + .unwrap() + .iter() + .find(|component| component["kind"].as_str() == Some(PRICING_PLUGIN_KIND)) + .expect("pricing component should be present"); + assert!( + pricing + .get("enabled") + .and_then(toml::Value::as_bool) + .unwrap_or(true) + ); +} diff --git a/crates/core/src/plugin/dynamic/manifest.rs b/crates/core/src/plugin/dynamic/manifest.rs index f8cac46a8..a6218c190 100644 --- a/crates/core/src/plugin/dynamic/manifest.rs +++ b/crates/core/src/plugin/dynamic/manifest.rs @@ -3,7 +3,7 @@ use std::collections::HashSet; use std::fs; -use std::path::Path; +use std::path::{Path, PathBuf}; use serde::de::{self, Deserializer}; use serde::ser::Serializer; @@ -35,6 +35,9 @@ pub struct DynamicPluginManifest { pub defaults: DynamicPluginManifestDefaults, /// Required capability declarations. pub capabilities: DynamicPluginManifestCapabilities, + /// Optional static configuration schema reference. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub config_schema: Option, /// Runtime load contract. #[cfg_attr(feature = "schema", schemars(with = "DynamicPluginManifestLoadSchema"))] pub load: DynamicPluginManifestLoad, @@ -97,6 +100,14 @@ pub struct DynamicPluginManifestCapabilities { pub items: Vec, } +/// Static configuration schema block for authored manifests. +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] +#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))] +pub struct DynamicPluginManifestConfigSchema { + /// Local JSON Schema path, resolved relative to `relay-plugin.toml`. + pub path: String, +} + /// Load block for authored manifests. #[derive(Debug, Clone, PartialEq, Eq)] pub enum DynamicPluginManifestLoad { @@ -321,6 +332,7 @@ impl DynamicPluginManifest { )); } reject_duplicate_capabilities(&self.capabilities.items)?; + validate_config_schema_contract(&self.capabilities.items, self.config_schema.as_ref())?; if self.defaults.enabled { return Err(PluginError::InvalidConfig( @@ -334,6 +346,34 @@ impl DynamicPluginManifest { Ok(()) } + /// Resolves the declared configuration schema path without accessing it. + /// + /// Relative schema paths are resolved from the parent directory of the + /// canonical `relay-plugin.toml` path. Absolute local paths are returned + /// unchanged. + pub fn resolve_config_schema_path( + &self, + canonical_manifest_path: impl AsRef, + ) -> Result> { + let Some(config_schema) = &self.config_schema else { + return Ok(None); + }; + + let schema_path = Path::new(config_schema.path.trim()); + if schema_path.is_absolute() { + return Ok(Some(schema_path.to_path_buf())); + } + + let manifest_path = canonical_manifest_path.as_ref(); + let manifest_parent = manifest_path.parent().ok_or_else(|| { + PluginError::InvalidConfig(format!( + "dynamic plugin manifest path '{}' has no parent directory", + manifest_path.display() + )) + })?; + Ok(Some(manifest_parent.join(schema_path))) + } + /// Converts the authored manifest into a durable control-plane record. pub fn into_record(self, manifest_ref: Option) -> Result { self.validate()?; @@ -459,6 +499,53 @@ fn reject_duplicate_capabilities(capabilities: &[DynamicPluginCapability]) -> Re Ok(()) } +fn validate_config_schema_contract( + capabilities: &[DynamicPluginCapability], + config_schema: Option<&DynamicPluginManifestConfigSchema>, +) -> Result<()> { + let has_capability = capabilities.contains(&DynamicPluginCapability::ConfigSchema); + match (has_capability, config_schema) { + (true, None) => { + return Err(PluginError::InvalidConfig( + "capabilities.items containing config_schema requires a [config_schema] section" + .into(), + )); + } + (false, Some(_)) => { + return Err(PluginError::InvalidConfig( + "[config_schema] requires capabilities.items containing config_schema".into(), + )); + } + (false, None) => return Ok(()), + (true, Some(config_schema)) => { + let path = required_trimmed_string(Some(&config_schema.path), "config_schema.path")?; + if has_uri_scheme(path.trim()) { + return Err(PluginError::InvalidConfig( + "config_schema.path must be a local filesystem path, not a URI".into(), + )); + } + } + } + Ok(()) +} + +fn has_uri_scheme(value: &str) -> bool { + if value + .get(..5) + .is_some_and(|prefix| prefix.eq_ignore_ascii_case("file:")) + { + return true; + } + let Some((scheme, _)) = value.split_once("://") else { + return false; + }; + let mut chars = scheme.chars(); + chars + .next() + .is_some_and(|first| first.is_ascii_alphabetic()) + && chars.all(|ch| ch.is_ascii_alphanumeric() || matches!(ch, '+' | '-' | '.')) +} + fn validate_capability_shape( kind: DynamicPluginKind, capabilities: &[DynamicPluginCapability], diff --git a/crates/core/tests/unit/plugin_dynamic_tests.rs b/crates/core/tests/unit/plugin_dynamic_tests.rs index 4f9465e7c..950fd898b 100644 --- a/crates/core/tests/unit/plugin_dynamic_tests.rs +++ b/crates/core/tests/unit/plugin_dynamic_tests.rs @@ -486,6 +486,9 @@ enabled = false [capabilities] items = ["plugin_worker", "config_schema"] +[config_schema] +path = "config.schema.json" + [load] runtime = "python" entrypoint = "acme_guardrails.plugin:register" @@ -598,6 +601,9 @@ items = [ "config_schema", ] +[config_schema] +path = "schemas/config.schema.json" + [load] runtime = "python" entrypoint = "acme_guardrails.plugin:register" @@ -612,6 +618,210 @@ entrypoint = "acme_guardrails.plugin:register" DynamicPluginCapability::ConfigSchema, ] ); + assert_eq!( + manifest.config_schema, + Some(DynamicPluginManifestConfigSchema { + path: "schemas/config.schema.json".into(), + }) + ); +} + +#[test] +fn manifest_requires_config_schema_section_for_capability() { + let err = DynamicPluginManifest::parse_toml( + r#" +manifest_version = 1 + +[plugin] +id = "acme.guardrails.missing-schema" +kind = "worker" + +[compat] +relay = ">=0.1.0,<0.2.0" +worker_protocol = "grpc-v1" + +[defaults] +enabled = false + +[capabilities] +items = ["plugin_worker", "config_schema"] + +[load] +runtime = "python" +entrypoint = "acme_guardrails.plugin:register" +"#, + ) + .expect_err("config_schema capability without section should fail"); + + match err { + PluginError::InvalidConfig(message) => { + assert!( + message.contains("requires a [config_schema] section"), + "{message}" + ); + } + other => panic!("unexpected missing config schema error: {other}"), + } +} + +#[test] +fn manifest_requires_config_schema_capability_for_section() { + let err = DynamicPluginManifest::parse_toml( + r#" +manifest_version = 1 + +[plugin] +id = "acme.guardrails.missing-capability" +kind = "worker" + +[compat] +relay = ">=0.1.0,<0.2.0" +worker_protocol = "grpc-v1" + +[defaults] +enabled = false + +[capabilities] +items = ["plugin_worker"] + +[config_schema] +path = "config.schema.json" + +[load] +runtime = "python" +entrypoint = "acme_guardrails.plugin:register" +"#, + ) + .expect_err("config_schema section without capability should fail"); + + match err { + PluginError::InvalidConfig(message) => { + assert!(message.contains("requires capabilities.items"), "{message}"); + } + other => panic!("unexpected missing config schema capability error: {other}"), + } +} + +#[test] +fn manifest_rejects_empty_config_schema_path() { + let err = DynamicPluginManifest::parse_toml( + &valid_worker_manifest_toml().replace("path = \"config.schema.json\"", "path = \" \""), + ) + .expect_err("empty config schema path should fail"); + + match err { + PluginError::InvalidConfig(message) => { + assert!(message.contains("config_schema.path"), "{message}"); + } + other => panic!("unexpected empty config schema path error: {other}"), + } +} + +#[test] +fn manifest_rejects_uri_config_schema_paths() { + for path in [ + "https://example.com/config.schema.json", + "http://example.com/config.schema.json", + "file:///tmp/config.schema.json", + "schema+custom://example/config.schema.json", + ] { + let err = DynamicPluginManifest::parse_toml(&valid_worker_manifest_toml().replace( + "path = \"config.schema.json\"", + &format!("path = \"{path}\""), + )) + .expect_err("URI config schema path should fail"); + + match err { + PluginError::InvalidConfig(message) => { + assert!(message.contains("local filesystem path"), "{message}"); + } + other => panic!("unexpected URI config schema path error: {other}"), + } + } +} + +#[test] +fn manifest_accepts_windows_drive_config_schema_paths() { + for path_declaration in [ + r#"path = "C:/schemas/config.schema.json""#, + r#"path = 'C:\schemas\config.schema.json'"#, + ] { + DynamicPluginManifest::parse_toml( + &valid_worker_manifest_toml() + .replace(r#"path = "config.schema.json""#, path_declaration), + ) + .expect("Windows drive schema path should be accepted"); + } +} + +#[test] +fn manifest_accepts_local_config_schema_paths_containing_colons() { + for path_declaration in [ + r#"path = "schemas:v2/config.schema.json""#, + r#"path = "C:relative.schema.json""#, + ] { + DynamicPluginManifest::parse_toml( + &valid_worker_manifest_toml() + .replace(r#"path = "config.schema.json""#, path_declaration), + ) + .expect("local schema paths containing colons should be accepted"); + } +} + +#[test] +fn manifest_resolves_relative_config_schema_path_from_manifest_parent() { + let dir = temp_dir("dynamic-plugin-config-schema-relative"); + let manifest_path = dir.join(DYNAMIC_PLUGIN_MANIFEST_FILENAME); + fs::write(&manifest_path, valid_worker_manifest_toml()).expect("write manifest"); + let canonical_manifest_path = fs::canonicalize(&manifest_path).expect("canonicalize manifest"); + let manifest = + DynamicPluginManifest::parse_toml(valid_worker_manifest_toml()).expect("parse manifest"); + + assert_eq!( + manifest + .resolve_config_schema_path(&canonical_manifest_path) + .expect("resolve schema path"), + Some( + canonical_manifest_path + .parent() + .expect("canonical manifest parent") + .join("config.schema.json"), + ) + ); +} + +#[test] +fn manifest_resolves_absolute_config_schema_path_without_filesystem_access() { + let dir = temp_dir("dynamic-plugin-config-schema-absolute"); + let manifest_path = dir.join(DYNAMIC_PLUGIN_MANIFEST_FILENAME); + fs::write(&manifest_path, valid_worker_manifest_toml()).expect("write manifest"); + let canonical_manifest_path = fs::canonicalize(&manifest_path).expect("canonicalize manifest"); + let absolute_schema_path = dir.join("missing.schema.json"); + let manifest_source = valid_worker_manifest_toml().replace( + "path = \"config.schema.json\"", + &format!("path = {:?}", absolute_schema_path.to_string_lossy()), + ); + let manifest = DynamicPluginManifest::parse_toml(&manifest_source).expect("parse manifest"); + + assert_eq!( + manifest + .resolve_config_schema_path(&canonical_manifest_path) + .expect("resolve schema path"), + Some(absolute_schema_path) + ); +} + +#[test] +fn manifest_without_config_schema_resolves_to_none() { + let manifest = + DynamicPluginManifest::parse_toml(valid_rust_manifest_toml()).expect("parse manifest"); + + assert_eq!( + manifest + .resolve_config_schema_path("/plugins/native/relay-plugin.toml") + .expect("resolve absent schema path"), + None + ); } #[test] diff --git a/deny.toml b/deny.toml index 7dbda4aca..7a8f61524 100644 --- a/deny.toml +++ b/deny.toml @@ -22,6 +22,7 @@ allow = [ "BSL-1.0", # Boost Software License, required by xxhash-rust "ISC", "MIT", + "MIT-0", # required by borrow-or-share through jsonschema/referencing "MPL-2.0", "Unicode-3.0", "Zlib", # required by foldhash through tonic-prost-build/prost-build diff --git a/docs/build-plugins/basic-guide.mdx b/docs/build-plugins/basic-guide.mdx index 944f3c4c5..3addeaf71 100644 --- a/docs/build-plugins/basic-guide.mdx +++ b/docs/build-plugins/basic-guide.mdx @@ -44,6 +44,7 @@ A plugin needs a stable shape before operators can activate it from config: | Validation hook | Operators need diagnostics before runtime behavior changes. | | Registration hook | Runtime behavior should be installed through `PluginContext` for name qualification and rollback. | | Runtime ownership | The plugin should clearly own subscribers, middleware, adaptive behavior, or a small bundle of related surfaces. | +| Optional configuration schema | Dynamic plugins can reference JSON Schema from `relay-plugin.toml` to provide structured fields in `nemo-relay plugins edit`. | Keep runtime objects out of config. Provider clients, callbacks, file handles, caches, and credentials should be created inside plugin code or resolved from safe references during registration. @@ -133,6 +134,12 @@ The top-level config document has `version`, `components`, and `policy`. Each co Use this document as the boundary between operator intent and plugin implementation. Keep business logic in the plugin code, not in the config parser. +Dynamic plugins can also expose this component-local shape to the CLI editor. +Declare the `config_schema` capability in `relay-plugin.toml` and reference a +local Draft 7 or Draft 2020-12 JSON Schema file. Refer to [Plugin Configuration +Files](/build-plugins/plugin-configuration-files#dynamic-plugin-configuration-schemas) +for the manifest shape and supported editor controls. + ## Design Checklist Before you write the plugin implementation, answer these questions: diff --git a/docs/build-plugins/plugin-configuration-files.mdx b/docs/build-plugins/plugin-configuration-files.mdx index 803cb7e0d..e1e9d483b 100644 --- a/docs/build-plugins/plugin-configuration-files.mdx +++ b/docs/build-plugins/plugin-configuration-files.mdx @@ -103,7 +103,9 @@ without process-level plugin activation. ## Editing Files -Use the interactive editor for Observability and Adaptive plugin configuration: +Use the interactive editor for the built-in Observability, Adaptive, NeMo +Guardrails, and PII Redaction plugins. The editor also supports dynamic plugins +that are declared in the selected file: ```bash nemo-relay plugins edit @@ -143,6 +145,8 @@ The editor menus support these controls: | Key | Behavior | |---|---| | Arrow keys, `j`, `k` | Move through menu items. | +| Page Up, Page Down | Move by one visible page. | +| Home, End | Move to the first or last item. | | `Enter`, `Space` | Select or toggle the highlighted item. | | `Backspace`, `Delete` | Clear the highlighted optional field. | | `r` | Reset the highlighted field or section to its default. | @@ -151,8 +155,64 @@ The editor menus support these controls: | `?` | Show help. | | `q`, `Esc` | Go back or cancel without saving. | -Text and JSON value prompts use normal line editing. Use the surrounding field -menu to reset, clear, preview, or save. +The top-level menu contains one entry for each plugin. Select an entry to edit +that plugin's fields. Text and JSON value prompts use normal line editing. Use +the surrounding field menu to reset or clear a value. Preview and save remain +available from the top-level menu. + +### Dynamic Plugin Configuration Schemas + +A dynamic plugin can expose structured editor fields by declaring the +`config_schema` capability in `relay-plugin.toml` and referencing a local JSON +Schema file: + +```toml +[capabilities] +items = ["plugin_native", "config_schema"] + +[config_schema] +path = "config.schema.json" +``` + +Declare the capability and the `[config_schema]` section together. A manifest +that declares only one of them is invalid. The `plugin_native` capability in the +example applies to a native plugin; worker manifests continue to declare +`plugin_worker` alongside `config_schema`. + +The editor resolves a relative schema path from the directory that contains +`relay-plugin.toml`. It reads the schema without loading a native library or +starting a worker. `nemo-relay plugins add`, `nemo-relay plugins validate`, and +`nemo-relay plugins edit` reject a declared schema that is missing or invalid. + +Declare `$schema` as JSON Schema Draft 7 or Draft 2020-12, and describe an +object at the schema root. Only same-document fragment references beginning +with `#`, such as `#/$defs/auth`, are supported. Relative files, network URLs, +and file URLs in `$ref` are not supported. The editor provides structured +controls for booleans, strings, numbers, string enums, nested objects, and +string-valued maps. It uses a raw JSON control for arrays, unions, and other +complex values, then validates the result against the complete schema before +saving. + +Use JSON Schema keywords and the NeMo Relay editor extension to improve the +editor: + +- `title` supplies the field label. +- `description` supplies field help. +- `default` supplies the reset value. +- `required` identifies fields that must be configured. +- `writeOnly: true` masks a string value in menus and previews and uses hidden + terminal input for replacements. An existing value remains unchanged unless + you explicitly replace or clear it. +- `x-nemo-relay-order` optionally lists properties in editor order. Properties + that are not listed follow in alphabetical order. + +Dynamic plugins without `config_schema` remain available through a raw JSON +object editor. That fallback has no schema validation or secret-field metadata. +Dynamic enablement remains separate: use `nemo-relay plugins enable` and +`nemo-relay plugins disable` to change lifecycle state. + +Static schema validation complements runtime plugin validation. Runtime plugin +validation remains authoritative when the plugin is activated. ## Precedence And Merge Behavior diff --git a/examples/rust-native-plugin/README.md b/examples/rust-native-plugin/README.md index 69e77d0e4..a8292caa1 100644 --- a/examples/rust-native-plugin/README.md +++ b/examples/rust-native-plugin/README.md @@ -54,6 +54,18 @@ block_llms = false emit_isolated_scope = true ``` +The manifest declares the `config_schema` capability and references +`config.schema.json`. After adding the plugin, use the editor for the same +configuration target (`--user`, `--project`, or `--global`) to configure the +fields without loading the native library: + +```bash +nemo-relay plugins edit +``` + +The editor reads the schema file relative to `relay-plugin.toml`. It does not +run the plugin during schema discovery. + Start the gateway normally after the dynamic record is enabled: ```bash diff --git a/examples/rust-native-plugin/config.schema.json b/examples/rust-native-plugin/config.schema.json new file mode 100644 index 000000000..9e583dbd9 --- /dev/null +++ b/examples/rust-native-plugin/config.schema.json @@ -0,0 +1,39 @@ +{ + "$comment": "SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. SPDX-License-Identifier: Apache-2.0", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "Rust Native Policy Example", + "type": "object", + "additionalProperties": false, + "x-nemo-relay-order": [ + "tag", + "block_tools", + "block_llms", + "emit_isolated_scope" + ], + "properties": { + "tag": { + "title": "Event tag", + "description": "Tag added to events emitted by the example plugin.", + "type": "string", + "default": "rust-native-example" + }, + "block_tools": { + "title": "Block tool calls", + "description": "Reject tool calls through the example conditional guardrail.", + "type": "boolean", + "default": false + }, + "block_llms": { + "title": "Block LLM calls", + "description": "Reject LLM calls through the example conditional guardrail.", + "type": "boolean", + "default": false + }, + "emit_isolated_scope": { + "title": "Emit isolated scope", + "description": "Emit the example plugin's isolated scope and mark events.", + "type": "boolean", + "default": true + } + } +} diff --git a/examples/rust-native-plugin/relay-plugin.toml b/examples/rust-native-plugin/relay-plugin.toml index 77644210a..b660e4ea1 100644 --- a/examples/rust-native-plugin/relay-plugin.toml +++ b/examples/rust-native-plugin/relay-plugin.toml @@ -15,7 +15,10 @@ native_api = "1" enabled = false [capabilities] -items = ["plugin_native"] +items = ["plugin_native", "config_schema"] + +[config_schema] +path = "config.schema.json" [load] # Replace `` with the file built by `cargo build` for diff --git a/skills/nemo-relay-build-plugin/SKILL.md b/skills/nemo-relay-build-plugin/SKILL.md index 536289224..fd458cbde 100644 --- a/skills/nemo-relay-build-plugin/SKILL.md +++ b/skills/nemo-relay-build-plugin/SKILL.md @@ -72,6 +72,11 @@ Do not build a plugin when a narrower NeMo Relay surface is enough: failure rollback. 8. Document how to enable the plugin, what config fields are supported, and how to roll back the component. +9. For a dynamic plugin that should provide structured fields in + `nemo-relay plugins edit`, declare the `config_schema` capability and + reference a local Draft 7 or Draft 2020-12 JSON Schema file from + `[config_schema].path` in `relay-plugin.toml`. Schema-less plugins remain + editable as raw JSON objects. ## Config Shape @@ -139,6 +144,8 @@ helper functions can be `camelCase`, but plugin config objects remain - [ ] A forced registration failure does not leave partial runtime behavior active. - [ ] Docs or examples show how to enable and roll back the plugin. +- [ ] Dynamic plugins that need structured CLI editing package a valid local + JSON Schema and declare `config_schema` in `relay-plugin.toml`. ## Use Another Skill When From a81d9538e90910a1e6ffd9f019c04a06b30711cd Mon Sep 17 00:00:00 2001 From: Will Killian Date: Mon, 29 Jun 2026 11:44:15 -0400 Subject: [PATCH 02/14] fix: harden dynamic plugin schema editing Signed-off-by: Will Killian --- crates/cli/src/plugins/dynamic_editor.rs | 35 ++- crates/cli/src/plugins/schema.rs | 205 ++++++++++++++---- crates/cli/tests/coverage/plugins_tests.rs | 15 +- crates/core/src/plugin/dynamic/manifest.rs | 6 +- .../core/tests/unit/plugin_dynamic_tests.rs | 22 ++ .../plugin-configuration-files.mdx | 3 +- 6 files changed, 223 insertions(+), 63 deletions(-) diff --git a/crates/cli/src/plugins/dynamic_editor.rs b/crates/cli/src/plugins/dynamic_editor.rs index cb158428c..94cf1f371 100644 --- a/crates/cli/src/plugins/dynamic_editor.rs +++ b/crates/cli/src/plugins/dynamic_editor.rs @@ -203,13 +203,10 @@ impl DynamicPluginEditorState { } fn remove_field(&mut self, path: &[String]) { - if self.config.is_none() { - self.config = Some(Map::new()); - } if let Some(config) = &mut self.config { remove_value_at_path(config, path); + self.touched = true; } - self.touched = true; } fn reset_field(&mut self, path: &[String], field: &DynamicConfigField) { @@ -575,11 +572,10 @@ fn prompt_dynamic_value( else { return Ok(None); }; - let value = state - .schema - .as_ref() - .map(|schema| schema.restore_edit_secrets(&value, &secrets)) - .unwrap_or(value); + let value = match &state.schema { + Some(schema) => schema.restore_edit_secrets(&value, &secrets)?, + None => value, + }; let object = value .as_object() .ok_or_else(|| CliError::Config(format!("{} must be a JSON object", field.key)))?; @@ -598,13 +594,11 @@ fn prompt_dynamic_value( else { return Ok(None); }; - Ok(Some( - state - .schema - .as_ref() - .map(|schema| schema.restore_edit_secrets(&value, &secrets)) - .unwrap_or(value), - )) + let value = match &state.schema { + Some(schema) => schema.restore_edit_secrets(&value, &secrets)?, + None => value, + }; + Ok(Some(value)) } DynamicConfigFieldKind::Object { .. } => unreachable!(), } @@ -717,11 +711,10 @@ fn prompt_raw_config( }; let value: Value = serde_json::from_str(value.trim()) .map_err(|error| CliError::Config(format!("invalid JSON configuration: {error}")))?; - let value = state - .schema - .as_ref() - .map(|schema| schema.restore_edit_secrets(&value, &secrets)) - .unwrap_or(value); + let value = match &state.schema { + Some(schema) => schema.restore_edit_secrets(&value, &secrets)?, + None => value, + }; let object = value.as_object().cloned().ok_or_else(|| { CliError::Config(format!( "dynamic plugin '{}' configuration must be a JSON object", diff --git a/crates/cli/src/plugins/schema.rs b/crates/cli/src/plugins/schema.rs index 75fe5dcf4..f0c08971d 100644 --- a/crates/cli/src/plugins/schema.rs +++ b/crates/cli/src/plugins/schema.rs @@ -21,7 +21,13 @@ const DRAFT_2020_12_HTTP_URI: &str = "http://json-schema.org/draft/2020-12/schem const REDACTED: &str = ""; const EDIT_REDACTED_PREFIX: &str = "; +pub(super) type SecretEditValues = BTreeMap; + +#[derive(Debug, Clone)] +pub(super) struct SecretEditValue { + value: Value, + pattern: SecretPattern, +} /// Supported JSON Schema dialects for dynamic plugin configuration. #[derive(Debug, Clone, Copy, PartialEq, Eq)] @@ -246,9 +252,18 @@ impl PluginConfigSchema { (redacted, secrets) } - /// Restores only the exact per-value tokens emitted by [`Self::redact_for_edit`]. - pub(super) fn restore_edit_secrets(&self, edited: &Value, secrets: &SecretEditValues) -> Value { - restore_secret_tokens(edited, secrets) + /// Restores redaction tokens only at their schema-declared secret locations. + pub(super) fn restore_edit_secrets( + &self, + edited: &Value, + secrets: &SecretEditValues, + ) -> Result { + restore_secret_tokens(edited, secrets).map_err(|error| { + CliError::Config(format!( + "dynamic plugin '{}' configuration contains an invalid secret redaction token: {error}", + self.plugin_id + )) + }) } } @@ -308,19 +323,31 @@ fn reject_external_references( let Some(object) = schema.as_object() else { return Ok(()); }; - for key in ["$ref", "$dynamicRef"] { - if let Some(reference) = object.get(key).and_then(Value::as_str) - && !reference.starts_with('#') - { - return Err(schema_error( - plugin_id, - file_path, - format!( - "{key} at JSON pointer '{}' must be a local fragment reference beginning with '#', got '{reference}'", - push_pointer(pointer, key) - ), - )); - } + if object.contains_key("$dynamicRef") || object.contains_key("$dynamicAnchor") { + return Err(schema_error( + plugin_id, + file_path, + format!( + "Draft 2020-12 dynamic references are not supported at JSON pointer '{}'", + if object.contains_key("$dynamicRef") { + push_pointer(pointer, "$dynamicRef") + } else { + push_pointer(pointer, "$dynamicAnchor") + } + ), + )); + } + if let Some(reference) = object.get("$ref").and_then(Value::as_str) + && !reference.starts_with('#') + { + return Err(schema_error( + plugin_id, + file_path, + format!( + "$ref at JSON pointer '{}' must be a local fragment reference beginning with '#', got '{reference}'", + push_pointer(pointer, "$ref") + ), + )); } for key in [ @@ -834,7 +861,13 @@ impl SecretPattern { return; } let token = next_secret_token(secrets, occupied, next_token); - secrets.insert(token.clone(), value.clone()); + secrets.insert( + token.clone(), + SecretEditValue { + value: value.clone(), + pattern: self.clone(), + }, + ); *value = Value::String(token); return; } @@ -887,6 +920,34 @@ impl SecretPattern { SecretSegment::Index(index) => property.parse::() == Ok(*index), }) } + + fn matches_instance_path(&self, path: &[SecretInstanceSegment]) -> bool { + self.0.len() == path.len() + && self + .0 + .iter() + .zip(path) + .all(|(pattern, instance)| match (pattern, instance) { + ( + SecretSegment::Property(expected), + SecretInstanceSegment::Property(actual), + ) => expected == actual, + (SecretSegment::Any, _) => true, + (SecretSegment::Pattern(pattern), SecretInstanceSegment::Property(actual)) => { + pattern_matches(pattern, actual) + } + (SecretSegment::Index(expected), SecretInstanceSegment::Index(actual)) => { + expected == actual + } + _ => false, + }) + } +} + +#[derive(Debug, Clone)] +enum SecretInstanceSegment { + Property(String), + Index(usize), } fn pattern_matches(pattern: &str, property: &str) -> bool { @@ -928,26 +989,47 @@ fn next_secret_token( } } -fn restore_secret_tokens(value: &Value, secrets: &SecretEditValues) -> Value { - match value { - Value::String(value) => secrets - .get(value) - .cloned() - .unwrap_or_else(|| Value::String(value.clone())), - Value::Array(values) => Value::Array( - values - .iter() - .map(|value| restore_secret_tokens(value, secrets)) - .collect(), - ), - Value::Object(values) => Value::Object( - values - .iter() - .map(|(key, value)| (key.clone(), restore_secret_tokens(value, secrets))) - .collect(), - ), - value => value.clone(), +fn restore_secret_tokens(value: &Value, secrets: &SecretEditValues) -> Result { + fn restore( + value: &Value, + secrets: &SecretEditValues, + path: &mut Vec, + used_tokens: &mut HashSet, + ) -> Result { + match value { + Value::String(value) => match secrets.get(value) { + None => Ok(Value::String(value.clone())), + Some(secret) if !secret.pattern.matches_instance_path(path) => Err(format!( + "token '{value}' may only appear at its original schema-declared secret location" + )), + Some(_) if !used_tokens.insert(value.clone()) => { + Err(format!("token '{value}' may only appear once")) + } + Some(secret) => Ok(secret.value.clone()), + }, + Value::Array(values) => { + let mut restored = Vec::with_capacity(values.len()); + for (index, value) in values.iter().enumerate() { + path.push(SecretInstanceSegment::Index(index)); + restored.push(restore(value, secrets, path, used_tokens)?); + path.pop(); + } + Ok(Value::Array(restored)) + } + Value::Object(values) => { + let mut restored = Map::with_capacity(values.len()); + for (key, value) in values { + path.push(SecretInstanceSegment::Property(key.clone())); + restored.insert(key.clone(), restore(value, secrets, path, used_tokens)?); + path.pop(); + } + Ok(Value::Object(restored)) + } + value => Ok(value.clone()), + } } + + restore(value, secrets, &mut Vec::new(), &mut HashSet::new()) } fn discover_secret_patterns( @@ -1125,6 +1207,24 @@ mod tests { assert!(message.contains("local fragment"), "{message}"); assert!(message.contains("/$defs/remote/$ref"), "{message}"); + for schema in [ + json!({ + "$schema": DRAFT2020, + "type": "object", + "$dynamicRef": "#config" + }), + json!({ + "$schema": DRAFT2020, + "type": "object", + "$defs": {"config": {"$dynamicAnchor": "config", "type": "object"}} + }), + ] { + let (_directory, path) = write_schema(&schema); + let error = PluginConfigSchema::load("acme.bad", path) + .expect_err("reject unsupported dynamic references"); + assert!(error.to_string().contains("dynamic references")); + } + load(&json!({ "$schema": DRAFT2020, "type": "object", @@ -1338,7 +1438,12 @@ mod tests { assert_eq!(config["token"], "top-secret", "redaction must clone"); let (redacted, secrets) = loaded.redact_for_edit(&config); - assert_eq!(loaded.restore_edit_secrets(&redacted, &secrets), config); + assert_eq!( + loaded + .restore_edit_secrets(&redacted, &secrets) + .expect("restore original secrets"), + config + ); let mut replacement = redacted; replacement["token"] = json!("replacement"); @@ -1347,10 +1452,32 @@ mod tests { .unwrap() .remove("password"); replacement["records"].as_array_mut().unwrap().swap(0, 1); - let restored = loaded.restore_edit_secrets(&replacement, &secrets); + let restored = loaded + .restore_edit_secrets(&replacement, &secrets) + .expect("preserve reordered array secrets"); assert_eq!(restored["token"], json!("replacement")); assert!(restored["nested"].get("password").is_none()); assert_eq!(restored["records"], json!([{"key": "two"}, {"key": "one"}])); + + let (redacted, secrets) = loaded.redact_for_edit(&config); + let mut moved = redacted.clone(); + let token = redacted["token"].clone(); + moved["visible"] = token; + let error = loaded + .restore_edit_secrets(&moved, &secrets) + .expect_err("reject token copied to a non-secret field"); + assert!( + error + .to_string() + .contains("schema-declared secret location") + ); + + let mut duplicated = redacted; + duplicated["records"][1]["key"] = duplicated["records"][0]["key"].clone(); + let error = loaded + .restore_edit_secrets(&duplicated, &secrets) + .expect_err("reject duplicate secret token"); + assert!(error.to_string().contains("may only appear once")); } #[test] diff --git a/crates/cli/tests/coverage/plugins_tests.rs b/crates/cli/tests/coverage/plugins_tests.rs index 1e2c284bc..54a93a999 100644 --- a/crates/cli/tests/coverage/plugins_tests.rs +++ b/crates/cli/tests/coverage/plugins_tests.rs @@ -1495,7 +1495,11 @@ fn dynamic_editor_loads_document_local_plugins_and_redacts_schema_secrets() { &temp.path().join("plugins/absent"), "acme.absent", None, - None, + Some(&json!({ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "type": "object", + "properties": {"optional": {"type": "string"}} + })), ); write_editor_dynamic_manifest(&temp.path().join("plugins/empty"), "acme.empty", None, None); let path = temp.path().join("plugins.toml"); @@ -1533,6 +1537,10 @@ config = {} assert!(labels.iter().any(|label| label.contains(""))); assert!(labels.iter().all(|label| !label.contains("super-secret"))); + states[2].clear_top_level_field("optional"); + states[2].reset_top_level_field("optional").unwrap(); + assert_eq!(states[2].config(), None); + let mut preview = document.clone(); for state in &states { state.apply_to_document(&mut preview, true).unwrap(); @@ -1550,6 +1558,11 @@ config = {} preview_root["plugins"]["dynamic"].as_array().unwrap()[1]["config"]["local_time"] .is_datetime() ); + assert!( + preview_root["plugins"]["dynamic"].as_array().unwrap()[2] + .get("config") + .is_none() + ); states[0].reset_top_level_field("retries").unwrap(); assert_eq!(states[0].config().unwrap().get("retries"), Some(&json!(3))); diff --git a/crates/core/src/plugin/dynamic/manifest.rs b/crates/core/src/plugin/dynamic/manifest.rs index a6218c190..0cdff643a 100644 --- a/crates/core/src/plugin/dynamic/manifest.rs +++ b/crates/core/src/plugin/dynamic/manifest.rs @@ -519,7 +519,7 @@ fn validate_config_schema_contract( (false, None) => return Ok(()), (true, Some(config_schema)) => { let path = required_trimmed_string(Some(&config_schema.path), "config_schema.path")?; - if has_uri_scheme(path.trim()) { + if has_uri_scheme(path.trim()) || is_unc_path(path.trim()) { return Err(PluginError::InvalidConfig( "config_schema.path must be a local filesystem path, not a URI".into(), )); @@ -529,6 +529,10 @@ fn validate_config_schema_contract( Ok(()) } +fn is_unc_path(value: &str) -> bool { + value.starts_with(r"\\") || value.starts_with("//") +} + fn has_uri_scheme(value: &str) -> bool { if value .get(..5) diff --git a/crates/core/tests/unit/plugin_dynamic_tests.rs b/crates/core/tests/unit/plugin_dynamic_tests.rs index 950fd898b..2c00838e2 100644 --- a/crates/core/tests/unit/plugin_dynamic_tests.rs +++ b/crates/core/tests/unit/plugin_dynamic_tests.rs @@ -740,6 +740,28 @@ fn manifest_rejects_uri_config_schema_paths() { } } +#[test] +fn manifest_rejects_unc_config_schema_paths() { + for path_declaration in [ + r#"path = '\\server\share\config.schema.json'"#, + r#"path = '\\?\UNC\server\share\config.schema.json'"#, + r#"path = "//server/share/config.schema.json""#, + ] { + let err = DynamicPluginManifest::parse_toml( + &valid_worker_manifest_toml() + .replace(r#"path = "config.schema.json""#, path_declaration), + ) + .expect_err("UNC config schema path should fail"); + + match err { + PluginError::InvalidConfig(message) => { + assert!(message.contains("local filesystem path"), "{message}"); + } + other => panic!("unexpected UNC config schema path error: {other}"), + } + } +} + #[test] fn manifest_accepts_windows_drive_config_schema_paths() { for path_declaration in [ diff --git a/docs/build-plugins/plugin-configuration-files.mdx b/docs/build-plugins/plugin-configuration-files.mdx index e1e9d483b..a38ba604c 100644 --- a/docs/build-plugins/plugin-configuration-files.mdx +++ b/docs/build-plugins/plugin-configuration-files.mdx @@ -187,7 +187,8 @@ starting a worker. `nemo-relay plugins add`, `nemo-relay plugins validate`, and Declare `$schema` as JSON Schema Draft 7 or Draft 2020-12, and describe an object at the schema root. Only same-document fragment references beginning with `#`, such as `#/$defs/auth`, are supported. Relative files, network URLs, -and file URLs in `$ref` are not supported. The editor provides structured +and file URLs in `$ref` are not supported. Draft 2020-12 dynamic references +and anchors (`$dynamicRef` and `$dynamicAnchor`) are not supported. The editor provides structured controls for booleans, strings, numbers, string enums, nested objects, and string-valued maps. It uses a raw JSON control for arrays, unions, and other complex values, then validates the result against the complete schema before From a202a79dae618780be856c8495c9fbfbfe602122 Mon Sep 17 00:00:00 2001 From: Will Killian Date: Mon, 29 Jun 2026 11:48:46 -0400 Subject: [PATCH 03/14] chore: remove dynamic plugin documentation updates Signed-off-by: Will Killian --- README.md | 7 +- crates/cli/README.md | 5 -- docs/build-plugins/basic-guide.mdx | 7 -- .../plugin-configuration-files.mdx | 67 +------------------ examples/rust-native-plugin/README.md | 12 ---- skills/nemo-relay-build-plugin/SKILL.md | 7 -- 6 files changed, 6 insertions(+), 99 deletions(-) diff --git a/README.md b/README.md index 28e76c713..3ac820acc 100644 --- a/README.md +++ b/README.md @@ -71,10 +71,9 @@ nemo-relay plugins edit --project ``` The editor creates or updates the nearest project plugin file at -`.nemo-relay/plugins.toml`. In the top-level menu, select **Observability**, -then configure these sections: +`.nemo-relay/plugins.toml`. In the menu: -1. Toggle the Observability component on. +1. Enable the `Observability` component. 2. Open `ATOF`, toggle the section `[on]` Optionally set: @@ -86,7 +85,7 @@ then configure these sections: Optionally set: - `output_directory` to `.nemo-relay/atif` - `filename_template` to `trajectory-{session_id}.json` -4. Return to the top-level menu and press `p` to preview the generated TOML. +4. Press `p` to preview the generated TOML. 5. Press `s` to save. > [!NOTE] diff --git a/crates/cli/README.md b/crates/cli/README.md index c52dd9c71..ee1847d8e 100644 --- a/crates/cli/README.md +++ b/crates/cli/README.md @@ -111,11 +111,6 @@ plugin config with: nemo-relay plugins edit ``` -The top-level editor menu contains one entry per supported built-in, followed by -the dynamic plugin references in the selected physical `plugins.toml`. Dynamic -plugins with a manifest-declared JSON Schema provide structured field controls. -Other dynamic plugins use a raw JSON object editor. - The canonical plugin file is `plugins.toml`; user config lives at `~/.config/nemo-relay/plugins.toml` or `$XDG_CONFIG_HOME/nemo-relay/plugins.toml`. Project config lives at diff --git a/docs/build-plugins/basic-guide.mdx b/docs/build-plugins/basic-guide.mdx index 3addeaf71..944f3c4c5 100644 --- a/docs/build-plugins/basic-guide.mdx +++ b/docs/build-plugins/basic-guide.mdx @@ -44,7 +44,6 @@ A plugin needs a stable shape before operators can activate it from config: | Validation hook | Operators need diagnostics before runtime behavior changes. | | Registration hook | Runtime behavior should be installed through `PluginContext` for name qualification and rollback. | | Runtime ownership | The plugin should clearly own subscribers, middleware, adaptive behavior, or a small bundle of related surfaces. | -| Optional configuration schema | Dynamic plugins can reference JSON Schema from `relay-plugin.toml` to provide structured fields in `nemo-relay plugins edit`. | Keep runtime objects out of config. Provider clients, callbacks, file handles, caches, and credentials should be created inside plugin code or resolved from safe references during registration. @@ -134,12 +133,6 @@ The top-level config document has `version`, `components`, and `policy`. Each co Use this document as the boundary between operator intent and plugin implementation. Keep business logic in the plugin code, not in the config parser. -Dynamic plugins can also expose this component-local shape to the CLI editor. -Declare the `config_schema` capability in `relay-plugin.toml` and reference a -local Draft 7 or Draft 2020-12 JSON Schema file. Refer to [Plugin Configuration -Files](/build-plugins/plugin-configuration-files#dynamic-plugin-configuration-schemas) -for the manifest shape and supported editor controls. - ## Design Checklist Before you write the plugin implementation, answer these questions: diff --git a/docs/build-plugins/plugin-configuration-files.mdx b/docs/build-plugins/plugin-configuration-files.mdx index a38ba604c..803cb7e0d 100644 --- a/docs/build-plugins/plugin-configuration-files.mdx +++ b/docs/build-plugins/plugin-configuration-files.mdx @@ -103,9 +103,7 @@ without process-level plugin activation. ## Editing Files -Use the interactive editor for the built-in Observability, Adaptive, NeMo -Guardrails, and PII Redaction plugins. The editor also supports dynamic plugins -that are declared in the selected file: +Use the interactive editor for Observability and Adaptive plugin configuration: ```bash nemo-relay plugins edit @@ -145,8 +143,6 @@ The editor menus support these controls: | Key | Behavior | |---|---| | Arrow keys, `j`, `k` | Move through menu items. | -| Page Up, Page Down | Move by one visible page. | -| Home, End | Move to the first or last item. | | `Enter`, `Space` | Select or toggle the highlighted item. | | `Backspace`, `Delete` | Clear the highlighted optional field. | | `r` | Reset the highlighted field or section to its default. | @@ -155,65 +151,8 @@ The editor menus support these controls: | `?` | Show help. | | `q`, `Esc` | Go back or cancel without saving. | -The top-level menu contains one entry for each plugin. Select an entry to edit -that plugin's fields. Text and JSON value prompts use normal line editing. Use -the surrounding field menu to reset or clear a value. Preview and save remain -available from the top-level menu. - -### Dynamic Plugin Configuration Schemas - -A dynamic plugin can expose structured editor fields by declaring the -`config_schema` capability in `relay-plugin.toml` and referencing a local JSON -Schema file: - -```toml -[capabilities] -items = ["plugin_native", "config_schema"] - -[config_schema] -path = "config.schema.json" -``` - -Declare the capability and the `[config_schema]` section together. A manifest -that declares only one of them is invalid. The `plugin_native` capability in the -example applies to a native plugin; worker manifests continue to declare -`plugin_worker` alongside `config_schema`. - -The editor resolves a relative schema path from the directory that contains -`relay-plugin.toml`. It reads the schema without loading a native library or -starting a worker. `nemo-relay plugins add`, `nemo-relay plugins validate`, and -`nemo-relay plugins edit` reject a declared schema that is missing or invalid. - -Declare `$schema` as JSON Schema Draft 7 or Draft 2020-12, and describe an -object at the schema root. Only same-document fragment references beginning -with `#`, such as `#/$defs/auth`, are supported. Relative files, network URLs, -and file URLs in `$ref` are not supported. Draft 2020-12 dynamic references -and anchors (`$dynamicRef` and `$dynamicAnchor`) are not supported. The editor provides structured -controls for booleans, strings, numbers, string enums, nested objects, and -string-valued maps. It uses a raw JSON control for arrays, unions, and other -complex values, then validates the result against the complete schema before -saving. - -Use JSON Schema keywords and the NeMo Relay editor extension to improve the -editor: - -- `title` supplies the field label. -- `description` supplies field help. -- `default` supplies the reset value. -- `required` identifies fields that must be configured. -- `writeOnly: true` masks a string value in menus and previews and uses hidden - terminal input for replacements. An existing value remains unchanged unless - you explicitly replace or clear it. -- `x-nemo-relay-order` optionally lists properties in editor order. Properties - that are not listed follow in alphabetical order. - -Dynamic plugins without `config_schema` remain available through a raw JSON -object editor. That fallback has no schema validation or secret-field metadata. -Dynamic enablement remains separate: use `nemo-relay plugins enable` and -`nemo-relay plugins disable` to change lifecycle state. - -Static schema validation complements runtime plugin validation. Runtime plugin -validation remains authoritative when the plugin is activated. +Text and JSON value prompts use normal line editing. Use the surrounding field +menu to reset, clear, preview, or save. ## Precedence And Merge Behavior diff --git a/examples/rust-native-plugin/README.md b/examples/rust-native-plugin/README.md index a8292caa1..69e77d0e4 100644 --- a/examples/rust-native-plugin/README.md +++ b/examples/rust-native-plugin/README.md @@ -54,18 +54,6 @@ block_llms = false emit_isolated_scope = true ``` -The manifest declares the `config_schema` capability and references -`config.schema.json`. After adding the plugin, use the editor for the same -configuration target (`--user`, `--project`, or `--global`) to configure the -fields without loading the native library: - -```bash -nemo-relay plugins edit -``` - -The editor reads the schema file relative to `relay-plugin.toml`. It does not -run the plugin during schema discovery. - Start the gateway normally after the dynamic record is enabled: ```bash diff --git a/skills/nemo-relay-build-plugin/SKILL.md b/skills/nemo-relay-build-plugin/SKILL.md index fd458cbde..536289224 100644 --- a/skills/nemo-relay-build-plugin/SKILL.md +++ b/skills/nemo-relay-build-plugin/SKILL.md @@ -72,11 +72,6 @@ Do not build a plugin when a narrower NeMo Relay surface is enough: failure rollback. 8. Document how to enable the plugin, what config fields are supported, and how to roll back the component. -9. For a dynamic plugin that should provide structured fields in - `nemo-relay plugins edit`, declare the `config_schema` capability and - reference a local Draft 7 or Draft 2020-12 JSON Schema file from - `[config_schema].path` in `relay-plugin.toml`. Schema-less plugins remain - editable as raw JSON objects. ## Config Shape @@ -144,8 +139,6 @@ helper functions can be `camelCase`, but plugin config objects remain - [ ] A forced registration failure does not leave partial runtime behavior active. - [ ] Docs or examples show how to enable and roll back the plugin. -- [ ] Dynamic plugins that need structured CLI editing package a valid local - JSON Schema and declare `config_schema` in `relay-plugin.toml`. ## Use Another Skill When From 2208d4a4394c46b7491e722dd8b1e8ff9335e52c Mon Sep 17 00:00:00 2001 From: Will Killian Date: Mon, 29 Jun 2026 11:49:17 -0400 Subject: [PATCH 04/14] chore: restore plugin documentation references Signed-off-by: Will Killian --- README.md | 7 ++++--- crates/cli/README.md | 5 +++++ examples/rust-native-plugin/README.md | 12 ++++++++++++ skills/nemo-relay-build-plugin/SKILL.md | 7 +++++++ 4 files changed, 28 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 3ac820acc..28e76c713 100644 --- a/README.md +++ b/README.md @@ -71,9 +71,10 @@ nemo-relay plugins edit --project ``` The editor creates or updates the nearest project plugin file at -`.nemo-relay/plugins.toml`. In the menu: +`.nemo-relay/plugins.toml`. In the top-level menu, select **Observability**, +then configure these sections: -1. Enable the `Observability` component. +1. Toggle the Observability component on. 2. Open `ATOF`, toggle the section `[on]` Optionally set: @@ -85,7 +86,7 @@ The editor creates or updates the nearest project plugin file at Optionally set: - `output_directory` to `.nemo-relay/atif` - `filename_template` to `trajectory-{session_id}.json` -4. Press `p` to preview the generated TOML. +4. Return to the top-level menu and press `p` to preview the generated TOML. 5. Press `s` to save. > [!NOTE] diff --git a/crates/cli/README.md b/crates/cli/README.md index ee1847d8e..c52dd9c71 100644 --- a/crates/cli/README.md +++ b/crates/cli/README.md @@ -111,6 +111,11 @@ plugin config with: nemo-relay plugins edit ``` +The top-level editor menu contains one entry per supported built-in, followed by +the dynamic plugin references in the selected physical `plugins.toml`. Dynamic +plugins with a manifest-declared JSON Schema provide structured field controls. +Other dynamic plugins use a raw JSON object editor. + The canonical plugin file is `plugins.toml`; user config lives at `~/.config/nemo-relay/plugins.toml` or `$XDG_CONFIG_HOME/nemo-relay/plugins.toml`. Project config lives at diff --git a/examples/rust-native-plugin/README.md b/examples/rust-native-plugin/README.md index 69e77d0e4..a8292caa1 100644 --- a/examples/rust-native-plugin/README.md +++ b/examples/rust-native-plugin/README.md @@ -54,6 +54,18 @@ block_llms = false emit_isolated_scope = true ``` +The manifest declares the `config_schema` capability and references +`config.schema.json`. After adding the plugin, use the editor for the same +configuration target (`--user`, `--project`, or `--global`) to configure the +fields without loading the native library: + +```bash +nemo-relay plugins edit +``` + +The editor reads the schema file relative to `relay-plugin.toml`. It does not +run the plugin during schema discovery. + Start the gateway normally after the dynamic record is enabled: ```bash diff --git a/skills/nemo-relay-build-plugin/SKILL.md b/skills/nemo-relay-build-plugin/SKILL.md index 536289224..fd458cbde 100644 --- a/skills/nemo-relay-build-plugin/SKILL.md +++ b/skills/nemo-relay-build-plugin/SKILL.md @@ -72,6 +72,11 @@ Do not build a plugin when a narrower NeMo Relay surface is enough: failure rollback. 8. Document how to enable the plugin, what config fields are supported, and how to roll back the component. +9. For a dynamic plugin that should provide structured fields in + `nemo-relay plugins edit`, declare the `config_schema` capability and + reference a local Draft 7 or Draft 2020-12 JSON Schema file from + `[config_schema].path` in `relay-plugin.toml`. Schema-less plugins remain + editable as raw JSON objects. ## Config Shape @@ -139,6 +144,8 @@ helper functions can be `camelCase`, but plugin config objects remain - [ ] A forced registration failure does not leave partial runtime behavior active. - [ ] Docs or examples show how to enable and roll back the plugin. +- [ ] Dynamic plugins that need structured CLI editing package a valid local + JSON Schema and declare `config_schema` in `relay-plugin.toml`. ## Use Another Skill When From e83cbc7dc667fe6da5059238723d16482ec273d2 Mon Sep 17 00:00:00 2001 From: Will Killian Date: Mon, 29 Jun 2026 12:00:23 -0400 Subject: [PATCH 05/14] fix: restore secrets from raw field edits Signed-off-by: Will Killian --- crates/cli/src/plugins/dynamic_editor.rs | 68 ++++++++++++++++++---- crates/cli/tests/coverage/plugins_tests.rs | 6 ++ 2 files changed, 62 insertions(+), 12 deletions(-) diff --git a/crates/cli/src/plugins/dynamic_editor.rs b/crates/cli/src/plugins/dynamic_editor.rs index 94cf1f371..83d64a4fe 100644 --- a/crates/cli/src/plugins/dynamic_editor.rs +++ b/crates/cli/src/plugins/dynamic_editor.rs @@ -183,18 +183,68 @@ impl DynamicPluginEditorState { .is_some_and(|schema| schema.has_secrets_at(path)) } - fn field_value_for_raw_edit(&self, path: &[String]) -> (Option, SecretEditValues, bool) { + fn field_value_for_raw_edit( + &self, + path: &[String], + ) -> ( + Option, + Option>, + SecretEditValues, + bool, + ) { let original = Value::Object(self.config.clone().unwrap_or_default()); let Some(schema) = &self.schema else { return ( self.field_value(path).cloned(), + None, SecretEditValues::new(), false, ); }; let (redacted, secrets) = schema.redact_for_edit(&original); let value = value_at_path(redacted.as_object(), path).cloned(); - (value, secrets, schema.has_secrets_at(path)) + ( + value, + redacted.as_object().cloned(), + secrets, + schema.has_secrets_at(path), + ) + } + + fn restore_raw_field_edit( + &self, + path: &[String], + value: Value, + redacted_config: Option>, + secrets: &SecretEditValues, + ) -> Result { + let Some(schema) = &self.schema else { + return Ok(value); + }; + let mut config = redacted_config; + set_value_at_path(&mut config, path, value); + let restored = + schema.restore_edit_secrets(&Value::Object(config.unwrap_or_default()), secrets)?; + value_at_path(restored.as_object(), path) + .cloned() + .ok_or_else(|| { + CliError::Config(format!( + "dynamic plugin '{}' raw field '{}' could not be restored", + self.plugin_id, + path.join(".") + )) + }) + } + + #[cfg(test)] + pub(super) fn restore_raw_field_for_test(&self, path: &[String]) -> Result { + let (value, redacted_config, secrets, _) = self.field_value_for_raw_edit(path); + self.restore_raw_field_edit( + path, + value.unwrap_or(Value::Null), + redacted_config, + &secrets, + ) } fn set_field(&mut self, path: &[String], value: Value) { @@ -561,7 +611,7 @@ fn prompt_dynamic_value( Ok(Some(Value::Number(number))) } DynamicConfigFieldKind::StringMap => { - let (current, secrets, hidden) = state.field_value_for_raw_edit(path); + let (current, redacted_config, secrets, hidden) = state.field_value_for_raw_edit(path); let Some(value) = prompt_json_value( theme, field, @@ -572,10 +622,7 @@ fn prompt_dynamic_value( else { return Ok(None); }; - let value = match &state.schema { - Some(schema) => schema.restore_edit_secrets(&value, &secrets)?, - None => value, - }; + let value = state.restore_raw_field_edit(path, value, redacted_config, &secrets)?; let object = value .as_object() .ok_or_else(|| CliError::Config(format!("{} must be a JSON object", field.key)))?; @@ -589,15 +636,12 @@ fn prompt_dynamic_value( } DynamicConfigFieldKind::RawJson => { let fallback = field.default.clone().unwrap_or(Value::Null); - let (current, secrets, hidden) = state.field_value_for_raw_edit(path); + let (current, redacted_config, secrets, hidden) = state.field_value_for_raw_edit(path); let Some(value) = prompt_json_value(theme, field, current.as_ref(), fallback, hidden)? else { return Ok(None); }; - let value = match &state.schema { - Some(schema) => schema.restore_edit_secrets(&value, &secrets)?, - None => value, - }; + let value = state.restore_raw_field_edit(path, value, redacted_config, &secrets)?; Ok(Some(value)) } DynamicConfigFieldKind::Object { .. } => unreachable!(), diff --git a/crates/cli/tests/coverage/plugins_tests.rs b/crates/cli/tests/coverage/plugins_tests.rs index 54a93a999..b6bb24357 100644 --- a/crates/cli/tests/coverage/plugins_tests.rs +++ b/crates/cli/tests/coverage/plugins_tests.rs @@ -1533,6 +1533,12 @@ config = {} assert!(states[2].menu_summary().contains("config absent")); assert!(states[3].menu_summary().contains("explicit empty config")); assert!(states[0].top_level_field_uses_hidden_json("records")); + assert_eq!( + states[0] + .restore_raw_field_for_test(&["records".to_owned()]) + .unwrap(), + json!([{ "password": "nested-secret" }]) + ); let labels = states[0].top_level_field_labels(); assert!(labels.iter().any(|label| label.contains(""))); assert!(labels.iter().all(|label| !label.contains("super-secret"))); From dcc63ff08cb2ae21f0d9c891308df118ee613024 Mon Sep 17 00:00:00 2001 From: Will Killian Date: Mon, 29 Jun 2026 22:22:33 -0400 Subject: [PATCH 06/14] fix: address dynamic plugin editor review feedback Signed-off-by: Will Killian --- crates/cli/src/plugins/config_io.rs | 11 ++- crates/cli/src/plugins/schema.rs | 96 +++++++++++++++---- .../tests/coverage/plugins_lifecycle_tests.rs | 4 + crates/cli/tests/coverage/plugins_tests.rs | 57 +++++++++++ crates/core/src/plugin/dynamic/manifest.rs | 21 ++-- .../core/tests/unit/plugin_dynamic_tests.rs | 23 +++++ 6 files changed, 182 insertions(+), 30 deletions(-) diff --git a/crates/cli/src/plugins/config_io.rs b/crates/cli/src/plugins/config_io.rs index acec77389..a062305c5 100644 --- a/crates/cli/src/plugins/config_io.rs +++ b/crates/cli/src/plugins/config_io.rs @@ -227,10 +227,15 @@ fn patch_json_value( Ok(()) } (toml::Value::Array(raw), Value::Array(original), Value::Array(updated)) - if raw.len() == original.len() && original.len() == updated.len() => + if raw.len() == original.len() => { - for ((raw, original), updated) in raw.iter_mut().zip(original).zip(updated) { - patch_json_value(raw, original, updated)?; + let shared_len = original.len().min(updated.len()); + for index in 0..shared_len { + patch_json_value(&mut raw[index], &original[index], &updated[index])?; + } + raw.truncate(updated.len()); + for value in &updated[shared_len..] { + raw.push(json_to_toml(value.clone())?); } Ok(()) } diff --git a/crates/cli/src/plugins/schema.rs b/crates/cli/src/plugins/schema.rs index f0c08971d..8a1197a50 100644 --- a/crates/cli/src/plugins/schema.rs +++ b/crates/cli/src/plugins/schema.rs @@ -3,6 +3,7 @@ //! Static JSON Schema loading and editor metadata for dynamic plugins. +use std::cmp::Ordering; use std::collections::{BTreeMap, HashSet}; use std::fs; use std::path::Path; @@ -153,7 +154,14 @@ impl PluginConfigSchema { }; let mut secret_patterns = Vec::new(); - discover_secret_patterns(&source, &source, &[], &HashSet::new(), &mut secret_patterns); + discover_secret_patterns(&source, &source, &[], &HashSet::new(), &mut secret_patterns) + .map_err(|error| { + schema_error( + &plugin_id, + &path, + format!("secret schema patterns are invalid: {error}"), + ) + })?; secret_patterns.sort(); secret_patterns.dedup(); #[cfg(test)] @@ -774,10 +782,36 @@ fn find_anchor<'a>(schema: &'a Value, anchor: &str) -> Option<&'a Value> { enum SecretSegment { Property(String), Any, - Pattern(String), + Pattern(SecretPropertyPattern), Index(usize), } +#[derive(Debug, Clone)] +struct SecretPropertyPattern { + source: String, + matcher: regex::Regex, +} + +impl PartialEq for SecretPropertyPattern { + fn eq(&self, other: &Self) -> bool { + self.source == other.source + } +} + +impl Eq for SecretPropertyPattern {} + +impl PartialOrd for SecretPropertyPattern { + fn partial_cmp(&self, other: &Self) -> Option { + Some(self.cmp(other)) + } +} + +impl Ord for SecretPropertyPattern { + fn cmp(&self, other: &Self) -> Ordering { + self.source.cmp(&other.source) + } +} + #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)] struct SecretPattern(Vec); @@ -791,7 +825,7 @@ impl SecretPattern { SecretSegment::Property(property) => pointer.push_str(&escape_pointer(property)), SecretSegment::Any => pointer.push('*'), SecretSegment::Pattern(pattern) => { - pointer.push_str(&format!("~pattern({pattern})")) + pointer.push_str(&format!("~pattern({})", pattern.source)) } SecretSegment::Index(index) => pointer.push_str(&index.to_string()), } @@ -950,10 +984,8 @@ enum SecretInstanceSegment { Index(usize), } -fn pattern_matches(pattern: &str, property: &str) -> bool { - regex::Regex::new(pattern) - .map(|pattern| pattern.is_match(property)) - .unwrap_or(true) +fn pattern_matches(pattern: &SecretPropertyPattern, property: &str) -> bool { + pattern.matcher.is_match(property) } fn collect_string_values(value: &Value, output: &mut HashSet) { @@ -1038,25 +1070,25 @@ fn discover_secret_patterns( instance_path: &[SecretSegment], reference_stack: &HashSet, output: &mut Vec, -) { +) -> Result<(), String> { let mut references = reference_stack.clone(); let resolved = match resolve_schema(root, schema, &mut references) { Ok(resolved) => resolved, - Err(_) => return, + Err(_) => return Ok(()), }; if schema_type(resolved) == Some("string") && annotation_bool(schema, resolved, "writeOnly") { output.push(SecretPattern(instance_path.to_vec())); - return; + return Ok(()); } let Some(object) = resolved.as_object() else { - return; + return Ok(()); }; if let Some(properties) = object.get("properties").and_then(Value::as_object) { for (property, child_schema) in properties { let mut child_path = instance_path.to_vec(); child_path.push(SecretSegment::Property(property.clone())); - discover_secret_patterns(root, child_schema, &child_path, &references, output); + discover_secret_patterns(root, child_schema, &child_path, &references, output)?; } } if let Some(additional) = object.get("additionalProperties") @@ -1064,13 +1096,19 @@ fn discover_secret_patterns( { let mut child_path = instance_path.to_vec(); child_path.push(SecretSegment::Any); - discover_secret_patterns(root, additional, &child_path, &references, output); + discover_secret_patterns(root, additional, &child_path, &references, output)?; } if let Some(patterns) = object.get("patternProperties").and_then(Value::as_object) { for (pattern, child_schema) in patterns { let mut child_path = instance_path.to_vec(); - child_path.push(SecretSegment::Pattern(pattern.clone())); - discover_secret_patterns(root, child_schema, &child_path, &references, output); + let matcher = regex::Regex::new(pattern).map_err(|error| { + format!("unsupported patternProperties expression {pattern:?}: {error}") + })?; + child_path.push(SecretSegment::Pattern(SecretPropertyPattern { + source: pattern.clone(), + matcher, + })); + discover_secret_patterns(root, child_schema, &child_path, &references, output)?; } } if let Some(items) = object.get("items") @@ -1078,19 +1116,19 @@ fn discover_secret_patterns( { let mut child_path = instance_path.to_vec(); child_path.push(SecretSegment::Any); - discover_secret_patterns(root, items, &child_path, &references, output); + discover_secret_patterns(root, items, &child_path, &references, output)?; } if let Some(prefix_items) = object.get("prefixItems").and_then(Value::as_array) { for (index, child_schema) in prefix_items.iter().enumerate() { let mut child_path = instance_path.to_vec(); child_path.push(SecretSegment::Index(index)); - discover_secret_patterns(root, child_schema, &child_path, &references, output); + discover_secret_patterns(root, child_schema, &child_path, &references, output)?; } } for keyword in ["allOf", "anyOf", "oneOf"] { if let Some(branches) = object.get(keyword).and_then(Value::as_array) { for branch in branches { - discover_secret_patterns(root, branch, instance_path, &references, output); + discover_secret_patterns(root, branch, instance_path, &references, output)?; } } } @@ -1098,7 +1136,7 @@ fn discover_secret_patterns( if let Some(branch) = object.get(keyword) && branch.is_object() { - discover_secret_patterns(root, branch, instance_path, &references, output); + discover_secret_patterns(root, branch, instance_path, &references, output)?; } } if let Some(contains) = object.get("contains") @@ -1106,8 +1144,9 @@ fn discover_secret_patterns( { let mut child_path = instance_path.to_vec(); child_path.push(SecretSegment::Any); - discover_secret_patterns(root, contains, &child_path, &references, output); + discover_secret_patterns(root, contains, &child_path, &references, output)?; } + Ok(()) } fn push_pointer(pointer: &str, segment: &str) -> String { @@ -1523,6 +1562,23 @@ mod tests { assert!(loaded.has_secrets_at(&["contained".to_owned()])); } + #[test] + fn rejects_pattern_properties_unsupported_by_secret_matcher() { + let (_directory, path) = write_schema(&json!({ + "$schema": DRAFT2020, + "type": "object", + "patternProperties": { + "(?=secret)": {"type": "string", "writeOnly": true} + } + })); + + let error = PluginConfigSchema::load("acme.bad-pattern", path) + .expect_err("reject unsupported patternProperties expression"); + let message = error.to_string(); + assert!(message.contains("patternProperties"), "{message}"); + assert!(message.contains("look-around"), "{message}"); + } + #[test] fn read_and_json_errors_include_plugin_and_path() { let directory = tempdir().expect("create temp directory"); diff --git a/crates/cli/tests/coverage/plugins_lifecycle_tests.rs b/crates/cli/tests/coverage/plugins_lifecycle_tests.rs index 4e96e4c1c..f9faa38c5 100644 --- a/crates/cli/tests/coverage/plugins_lifecycle_tests.rs +++ b/crates/cli/tests/coverage/plugins_lifecycle_tests.rs @@ -406,11 +406,15 @@ fn materialize_native_example_manifest(dir: &Path) -> (PathBuf, PathBuf) { repository_root.join("examples/rust-native-plugin/relay-plugin.toml"), ) .unwrap(); + let config_schema = + std::fs::read(repository_root.join("examples/rust-native-plugin/config.schema.json")) + .unwrap(); let manifest = template .replace("", &artifact_name) .replace("", &digest); let manifest_path = dir.join("relay-plugin.toml"); std::fs::write(&manifest_path, manifest).unwrap(); + std::fs::write(dir.join("config.schema.json"), config_schema).unwrap(); (manifest_path, artifact_path) } diff --git a/crates/cli/tests/coverage/plugins_tests.rs b/crates/cli/tests/coverage/plugins_tests.rs index b6bb24357..7e4e2ce04 100644 --- a/crates/cli/tests/coverage/plugins_tests.rs +++ b/crates/cli/tests/coverage/plugins_tests.rs @@ -1465,6 +1465,63 @@ value = "preserve-host-section" assert!(dynamic[1].get("config").is_none()); } +#[test] +fn dynamic_config_array_resize_preserves_toml_native_values() { + let temp = tempfile::tempdir().unwrap(); + let path = temp.path().join("plugins.toml"); + std::fs::write( + &path, + r#"[[plugins.dynamic]] +manifest = "./plugin/relay-plugin.toml" +config = { records = [{ observed_at = 1979-05-27T07:32:00Z, label = "existing" }] } +"#, + ) + .unwrap(); + + let mut document = PluginConfigDocument::read(&path).unwrap(); + let original = document.dynamic_entries().unwrap()[0] + .config + .clone() + .unwrap(); + let mut grown = original.clone(); + grown + .get_mut("records") + .unwrap() + .as_array_mut() + .unwrap() + .push(json!({"label": "new"})); + document + .patch_dynamic_config(0, Some(&original), Some(grown.clone())) + .unwrap(); + + let grown_root = document.render().unwrap().parse::().unwrap(); + let grown_records = + grown_root["plugins"]["dynamic"].as_array().unwrap()[0]["config"]["records"] + .as_array() + .unwrap(); + assert_eq!(grown_records.len(), 2); + assert!(grown_records[0]["observed_at"].is_datetime()); + + let mut shrunk = grown.clone(); + shrunk + .get_mut("records") + .unwrap() + .as_array_mut() + .unwrap() + .truncate(1); + document + .patch_dynamic_config(0, Some(&grown), Some(shrunk)) + .unwrap(); + + let shrunk_root = document.render().unwrap().parse::().unwrap(); + let shrunk_records = + shrunk_root["plugins"]["dynamic"].as_array().unwrap()[0]["config"]["records"] + .as_array() + .unwrap(); + assert_eq!(shrunk_records.len(), 1); + assert!(shrunk_records[0]["observed_at"].is_datetime()); +} + #[test] fn dynamic_editor_loads_document_local_plugins_and_redacts_schema_secrets() { let temp = tempfile::tempdir().unwrap(); diff --git a/crates/core/src/plugin/dynamic/manifest.rs b/crates/core/src/plugin/dynamic/manifest.rs index 0cdff643a..339bf89ac 100644 --- a/crates/core/src/plugin/dynamic/manifest.rs +++ b/crates/core/src/plugin/dynamic/manifest.rs @@ -359,7 +359,7 @@ impl DynamicPluginManifest { return Ok(None); }; - let schema_path = Path::new(config_schema.path.trim()); + let schema_path = Path::new(validate_config_schema_path(config_schema)?); if schema_path.is_absolute() { return Ok(Some(schema_path.to_path_buf())); } @@ -518,18 +518,25 @@ fn validate_config_schema_contract( } (false, None) => return Ok(()), (true, Some(config_schema)) => { - let path = required_trimmed_string(Some(&config_schema.path), "config_schema.path")?; - if has_uri_scheme(path.trim()) || is_unc_path(path.trim()) { - return Err(PluginError::InvalidConfig( - "config_schema.path must be a local filesystem path, not a URI".into(), - )); - } + validate_config_schema_path(config_schema)?; } } Ok(()) } +fn validate_config_schema_path(config_schema: &DynamicPluginManifestConfigSchema) -> Result<&str> { + let path = required_trimmed_string(Some(&config_schema.path), "config_schema.path")?; + if has_uri_scheme(path) || is_unc_path(path) { + return Err(PluginError::InvalidConfig( + "config_schema.path must be a local filesystem path, not a URI or network share".into(), + )); + } + Ok(path) +} + fn is_unc_path(value: &str) -> bool { + // A leading `//` can identify a local path on POSIX, but manifests are portable and the same + // spelling is a UNC network share on Windows, so reject it consistently on every platform. value.starts_with(r"\\") || value.starts_with("//") } diff --git a/crates/core/tests/unit/plugin_dynamic_tests.rs b/crates/core/tests/unit/plugin_dynamic_tests.rs index 2c00838e2..9117cf295 100644 --- a/crates/core/tests/unit/plugin_dynamic_tests.rs +++ b/crates/core/tests/unit/plugin_dynamic_tests.rs @@ -812,6 +812,29 @@ fn manifest_resolves_relative_config_schema_path_from_manifest_parent() { ); } +#[test] +fn manifest_resolver_rejects_mutated_non_local_config_schema_paths() { + let mut manifest = + DynamicPluginManifest::parse_toml(valid_worker_manifest_toml()).expect("parse manifest"); + + for path in [ + "https://example.com/config.schema.json", + r"\\server\share\config.schema.json", + "//server/share/config.schema.json", + ] { + manifest.config_schema.as_mut().unwrap().path = path.to_owned(); + let error = manifest + .resolve_config_schema_path("/plugins/native/relay-plugin.toml") + .expect_err("public resolver must reject non-local paths"); + match error { + PluginError::InvalidConfig(message) => { + assert!(message.contains("local filesystem path"), "{message}"); + } + other => panic!("unexpected config schema path error: {other}"), + } + } +} + #[test] fn manifest_resolves_absolute_config_schema_path_without_filesystem_access() { let dir = temp_dir("dynamic-plugin-config-schema-absolute"); From 2ac7a531d36f8b5fa49502c5ee9dae4cf37cbc2f Mon Sep 17 00:00:00 2001 From: Will Killian Date: Mon, 29 Jun 2026 22:59:11 -0400 Subject: [PATCH 07/14] fix: redact Draft 7 tuple secrets Signed-off-by: Will Killian --- crates/cli/src/plugins/schema.rs | 97 ++++++++++++++++++++++++++++++-- 1 file changed, 91 insertions(+), 6 deletions(-) diff --git a/crates/cli/src/plugins/schema.rs b/crates/cli/src/plugins/schema.rs index 8a1197a50..93bffeec6 100644 --- a/crates/cli/src/plugins/schema.rs +++ b/crates/cli/src/plugins/schema.rs @@ -784,6 +784,7 @@ enum SecretSegment { Any, Pattern(SecretPropertyPattern), Index(usize), + Tail(usize), } #[derive(Debug, Clone)] @@ -828,6 +829,7 @@ impl SecretPattern { pointer.push_str(&format!("~pattern({})", pattern.source)) } SecretSegment::Index(index) => pointer.push_str(&index.to_string()), + SecretSegment::Tail(start) => pointer.push_str(&format!("~tail({start})")), } } pointer @@ -873,6 +875,13 @@ impl SecretPattern { self.redact(child, offset + 1); } } + SecretSegment::Tail(start) => { + if let Value::Array(values) = value { + for child in values.iter_mut().skip(*start) { + self.redact(child, offset + 1); + } + } + } } } @@ -938,6 +947,13 @@ impl SecretPattern { self.redact_for_edit(child, offset + 1, secrets, occupied, next_token); } } + SecretSegment::Tail(start) => { + if let Value::Array(values) = value { + for child in values.iter_mut().skip(*start) { + self.redact_for_edit(child, offset + 1, secrets, occupied, next_token); + } + } + } } } @@ -952,6 +968,9 @@ impl SecretPattern { SecretSegment::Any => true, SecretSegment::Pattern(pattern) => pattern_matches(pattern, property), SecretSegment::Index(index) => property.parse::() == Ok(*index), + SecretSegment::Tail(start) => { + property.parse::().is_ok_and(|index| index >= *start) + } }) } @@ -973,6 +992,9 @@ impl SecretPattern { (SecretSegment::Index(expected), SecretInstanceSegment::Index(actual)) => { expected == actual } + (SecretSegment::Tail(start), SecretInstanceSegment::Index(actual)) => { + actual >= start + } _ => false, }) } @@ -1111,12 +1133,25 @@ fn discover_secret_patterns( discover_secret_patterns(root, child_schema, &child_path, &references, output)?; } } - if let Some(items) = object.get("items") - && items.is_object() - { - let mut child_path = instance_path.to_vec(); - child_path.push(SecretSegment::Any); - discover_secret_patterns(root, items, &child_path, &references, output)?; + if let Some(items) = object.get("items") { + if items.is_object() { + let mut child_path = instance_path.to_vec(); + child_path.push(SecretSegment::Any); + discover_secret_patterns(root, items, &child_path, &references, output)?; + } else if let Some(tuple_items) = items.as_array() { + for (index, child_schema) in tuple_items.iter().enumerate() { + let mut child_path = instance_path.to_vec(); + child_path.push(SecretSegment::Index(index)); + discover_secret_patterns(root, child_schema, &child_path, &references, output)?; + } + if let Some(additional_items) = object.get("additionalItems") + && additional_items.is_object() + { + let mut child_path = instance_path.to_vec(); + child_path.push(SecretSegment::Tail(tuple_items.len())); + discover_secret_patterns(root, additional_items, &child_path, &references, output)?; + } + } } if let Some(prefix_items) = object.get("prefixItems").and_then(Value::as_array) { for (index, child_schema) in prefix_items.iter().enumerate() { @@ -1562,6 +1597,56 @@ mod tests { assert!(loaded.has_secrets_at(&["contained".to_owned()])); } + #[test] + fn secret_discovery_handles_draft7_tuple_and_additional_items() { + let loaded = load(&json!({ + "$schema": DRAFT7, + "type": "object", + "properties": { + "tuple": { + "type": "array", + "items": [ + {"type": "string"}, + {"type": "string", "writeOnly": true} + ], + "additionalItems": { + "type": "object", + "properties": { + "token": {"type": "string", "writeOnly": true} + } + } + } + } + })); + let config = json!({ + "tuple": [ + "visible", + "tuple-secret", + {"token": "tail-secret-one", "visible": "keep"}, + {"token": "tail-secret-two"} + ] + }); + + assert_eq!( + loaded.redact(&config), + json!({ + "tuple": [ + "visible", + REDACTED, + {"token": REDACTED, "visible": "keep"}, + {"token": REDACTED} + ] + }) + ); + let (redacted, secrets) = loaded.redact_for_edit(&config); + assert_eq!( + loaded + .restore_edit_secrets(&redacted, &secrets) + .expect("restore tuple secrets"), + config + ); + } + #[test] fn rejects_pattern_properties_unsupported_by_secret_matcher() { let (_directory, path) = write_schema(&json!({ From 1cd2ef10c52bbecc63f08810bf547d07ab6b8c43 Mon Sep 17 00:00:00 2001 From: Will Killian Date: Mon, 29 Jun 2026 23:19:23 -0400 Subject: [PATCH 08/14] refactor: centralize plugin menu navigation Signed-off-by: Will Killian --- crates/cli/src/plugins.rs | 52 +++++++++++++--------- crates/cli/tests/coverage/plugins_tests.rs | 15 +++++++ 2 files changed, 46 insertions(+), 21 deletions(-) diff --git a/crates/cli/src/plugins.rs b/crates/cli/src/plugins.rs index ba8ab8e65..562f54e3f 100644 --- a/crates/cli/src/plugins.rs +++ b/crates/cli/src/plugins.rs @@ -394,27 +394,14 @@ fn prompt_menu( term.write_line(line).map_err(menu_error)?; } term.flush().map_err(menu_error)?; - match term.read_key().map_err(menu_error)? { - Key::ArrowUp | Key::Char('k') => { - selected = if selected == 0 { - items.len() - 1 - } else { - selected - 1 - }; - } - Key::ArrowDown | Key::Char('j') => { - selected = (selected + 1) % items.len(); - } - Key::PageUp => { - selected = selected.saturating_sub(viewport.page_size); - } - Key::PageDown => { - selected = selected - .saturating_add(viewport.page_size) - .min(items.len() - 1); - } - Key::Home => selected = 0, - Key::End => selected = items.len() - 1, + let key = term.read_key().map_err(menu_error)?; + if let Some(next) = + menu_selection_after_key(&key, selected, items.len(), viewport.page_size) + { + selected = next; + continue; + } + match key { Key::Enter | Key::Char(' ') => { clear_menu(&term, rendered_lines)?; return Ok(MenuResponse::Selected(selected)); @@ -448,6 +435,29 @@ fn prompt_menu( } } +fn menu_selection_after_key( + key: &Key, + selected: usize, + item_count: usize, + page_size: usize, +) -> Option { + if item_count == 0 { + return None; + } + + let last = item_count - 1; + let selected = selected.min(last); + match key { + Key::ArrowUp | Key::Char('k') => Some(if selected == 0 { last } else { selected - 1 }), + Key::ArrowDown | Key::Char('j') => Some((selected + 1) % item_count), + Key::PageUp => Some(selected.saturating_sub(page_size)), + Key::PageDown => Some(selected.saturating_add(page_size).min(last)), + Key::Home => Some(0), + Key::End => Some(last), + _ => None, + } +} + #[derive(Debug, Clone, Copy, PartialEq, Eq)] struct MenuViewport { start: usize, diff --git a/crates/cli/tests/coverage/plugins_tests.rs b/crates/cli/tests/coverage/plugins_tests.rs index 7e4e2ce04..c9badb1a4 100644 --- a/crates/cli/tests/coverage/plugins_tests.rs +++ b/crates/cli/tests/coverage/plugins_tests.rs @@ -491,6 +491,21 @@ fn menu_viewport_keeps_selection_visible_and_pages() { assert!(last.start <= 19); } +#[test] +fn menu_selection_navigation_wraps_pages_and_jumps() { + assert_eq!(menu_selection_after_key(&Key::ArrowUp, 0, 10, 4), Some(9)); + assert_eq!(menu_selection_after_key(&Key::Char('k'), 4, 10, 4), Some(3)); + assert_eq!(menu_selection_after_key(&Key::ArrowDown, 9, 10, 4), Some(0)); + assert_eq!(menu_selection_after_key(&Key::Char('j'), 4, 10, 4), Some(5)); + assert_eq!(menu_selection_after_key(&Key::PageUp, 5, 10, 4), Some(1)); + assert_eq!(menu_selection_after_key(&Key::PageUp, 2, 10, 4), Some(0)); + assert_eq!(menu_selection_after_key(&Key::PageDown, 5, 10, 4), Some(9)); + assert_eq!(menu_selection_after_key(&Key::Home, 5, 10, 4), Some(0)); + assert_eq!(menu_selection_after_key(&Key::End, 5, 10, 4), Some(9)); + assert_eq!(menu_selection_after_key(&Key::Enter, 5, 10, 4), None); + assert_eq!(menu_selection_after_key(&Key::PageDown, 0, 0, 4), None); +} + #[test] fn menu_renderer_respects_terminal_height_and_width() { let theme = ColorfulTheme::default(); From 115c6bf69d917978d2ceb0b09a0e7b3ca2ac307a Mon Sep 17 00:00:00 2001 From: Will Killian Date: Mon, 29 Jun 2026 23:53:56 -0400 Subject: [PATCH 09/14] fix: bound dynamic plugin schema reads Signed-off-by: Will Killian --- crates/cli/src/plugins/schema.rs | 91 ++++++++++++++++++- .../plugin-configuration-files.mdx | 67 +++++++++++++- 2 files changed, 151 insertions(+), 7 deletions(-) diff --git a/crates/cli/src/plugins/schema.rs b/crates/cli/src/plugins/schema.rs index 93bffeec6..a70bc7855 100644 --- a/crates/cli/src/plugins/schema.rs +++ b/crates/cli/src/plugins/schema.rs @@ -6,6 +6,7 @@ use std::cmp::Ordering; use std::collections::{BTreeMap, HashSet}; use std::fs; +use std::io::Read; use std::path::Path; #[cfg(test)] use std::path::PathBuf; @@ -21,6 +22,7 @@ const DRAFT_2020_12_URI: &str = "https://json-schema.org/draft/2020-12/schema"; const DRAFT_2020_12_HTTP_URI: &str = "http://json-schema.org/draft/2020-12/schema"; const REDACTED: &str = ""; const EDIT_REDACTED_PREFIX: &str = "; @@ -103,10 +105,8 @@ impl PluginConfigSchema { ) -> Result { let plugin_id = plugin_id.into(); let path = path.as_ref().to_path_buf(); - let contents = fs::read_to_string(&path).map_err(|error| { - schema_error(&plugin_id, &path, format!("failed to read schema: {error}")) - })?; - let source: Value = serde_json::from_str(&contents).map_err(|error| { + let contents = read_schema_file(&plugin_id, &path)?; + let source: Value = serde_json::from_slice(&contents).map_err(|error| { schema_error( &plugin_id, &path, @@ -275,6 +275,62 @@ impl PluginConfigSchema { } } +fn read_schema_file(plugin_id: &str, path: &Path) -> Result, CliError> { + let path_metadata = fs::metadata(path).map_err(|error| { + schema_error(plugin_id, path, format!("failed to read schema: {error}")) + })?; + validate_schema_file_metadata(plugin_id, path, &path_metadata)?; + + let file = fs::File::open(path).map_err(|error| { + schema_error(plugin_id, path, format!("failed to read schema: {error}")) + })?; + let file_metadata = file.metadata().map_err(|error| { + schema_error( + plugin_id, + path, + format!("failed to inspect open schema: {error}"), + ) + })?; + validate_schema_file_metadata(plugin_id, path, &file_metadata)?; + + let mut contents = Vec::with_capacity(file_metadata.len() as usize); + file.take(MAX_CONFIG_SCHEMA_BYTES + 1) + .read_to_end(&mut contents) + .map_err(|error| { + schema_error(plugin_id, path, format!("failed to read schema: {error}")) + })?; + if contents.len() as u64 > MAX_CONFIG_SCHEMA_BYTES { + return Err(schema_error( + plugin_id, + path, + "schema exceeds the 1 MiB size limit", + )); + } + Ok(contents) +} + +fn validate_schema_file_metadata( + plugin_id: &str, + path: &Path, + metadata: &fs::Metadata, +) -> Result<(), CliError> { + if !metadata.is_file() { + return Err(schema_error( + plugin_id, + path, + "schema path must identify a regular file", + )); + } + if metadata.len() > MAX_CONFIG_SCHEMA_BYTES { + return Err(schema_error( + plugin_id, + path, + "schema exceeds the 1 MiB size limit", + )); + } + Ok(()) +} + fn schema_error(plugin_id: &str, path: &Path, message: impl std::fmt::Display) -> CliError { CliError::Config(format!( "dynamic plugin '{plugin_id}' config schema '{}': {message}", @@ -1681,4 +1737,31 @@ mod tests { let error = PluginConfigSchema::load("acme.invalid", &invalid).expect_err("invalid json"); assert!(error.to_string().contains("not valid JSON")); } + + #[test] + fn schema_reads_require_regular_files_within_the_size_limit() { + let directory = tempdir().expect("create temp directory"); + let error = PluginConfigSchema::load("acme.directory", directory.path()) + .expect_err("reject directory schema path"); + assert!(error.to_string().contains("regular file")); + + let oversized = directory.path().join("oversized.schema.json"); + fs::File::create(&oversized) + .expect("create oversized schema") + .set_len(MAX_CONFIG_SCHEMA_BYTES + 1) + .expect("size oversized schema"); + let error = PluginConfigSchema::load("acme.oversized", &oversized) + .expect_err("reject oversized schema"); + assert!(error.to_string().contains("1 MiB size limit")); + + let maximum = directory.path().join("maximum.schema.json"); + let mut source = serde_json::to_vec(&json!({ + "$schema": DRAFT2020, + "type": "object" + })) + .expect("serialize schema"); + source.resize(MAX_CONFIG_SCHEMA_BYTES as usize, b' '); + fs::write(&maximum, source).expect("write maximum-sized schema"); + PluginConfigSchema::load("acme.maximum", maximum).expect("accept schema at the size limit"); + } } diff --git a/docs/build-plugins/plugin-configuration-files.mdx b/docs/build-plugins/plugin-configuration-files.mdx index dd84032f0..59c794f55 100644 --- a/docs/build-plugins/plugin-configuration-files.mdx +++ b/docs/build-plugins/plugin-configuration-files.mdx @@ -160,7 +160,9 @@ without process-level plugin activation. ## Editing Files -Use the interactive editor for Observability and Adaptive plugin configuration: +Use the interactive editor for the built-in Observability, Adaptive, NeMo +Guardrails, and PII Redaction plugins. The editor also supports dynamic plugins +that are declared in the selected file: ```bash nemo-relay plugins edit @@ -200,6 +202,8 @@ The editor menus support these controls: | Key | Behavior | |---|---| | Arrow keys, `j`, `k` | Move through menu items. | +| Page Up, Page Down | Move by one visible page. | +| Home, End | Jump to the first or last item. | | `Enter`, `Space` | Select or toggle the highlighted item. | | `Backspace`, `Delete` | Clear the highlighted optional field. | | `r` | Reset the highlighted field or section to its default. | @@ -208,8 +212,65 @@ The editor menus support these controls: | `?` | Show help. | | `q`, `Esc` | Go back or cancel without saving. | -Text and JSON value prompts use normal line editing. Use the surrounding field -menu to reset, clear, preview, or save. +The top-level menu contains one entry for each plugin. Select an entry to edit +that plugin's fields. Text and JSON value prompts use normal line editing. Use +the surrounding field menu to reset or clear a value. Preview and save remain +available from the top-level menu. + +### Dynamic Plugin Configuration Schemas + +A dynamic plugin can expose structured editor fields by declaring the +`config_schema` capability in `relay-plugin.toml` and referencing a local JSON +Schema file: + +```toml +[capabilities] +items = ["plugin_native", "config_schema"] + +[config_schema] +path = "config.schema.json" +``` + +Declare the capability and the `[config_schema]` section together. A manifest +that declares only one of them is invalid. The `plugin_native` capability in the +example applies to a native plugin; worker manifests continue to declare +`plugin_worker` alongside `config_schema`. + +The editor resolves a relative schema path from the directory that contains +`relay-plugin.toml`. The path must identify a local regular file no larger than +1 MiB. The editor reads the schema without loading a native library or starting +a worker. `nemo-relay plugins add`, `nemo-relay plugins validate`, and +`nemo-relay plugins edit` reject a declared schema that is missing or invalid. + +Declare `$schema` as JSON Schema Draft 7 or Draft 2020-12, and describe an +object at the schema root. Only standard same-document fragment references +beginning with `#`, such as `#/$defs/auth`, are supported. Dynamic references, +relative files, network URLs, and file URLs in `$ref` are not supported. The +editor provides structured controls for booleans, strings, numbers, string +enums, nested objects, and string-valued maps. It uses a raw JSON control for +arrays, unions, and other complex values, then validates the result against the +complete schema before saving. + +Use JSON Schema keywords and the NeMo Relay editor extension to improve the +editor: + +- `title` supplies the field label. +- `description` supplies field help. +- `default` supplies the reset value. +- `required` identifies fields that must be configured. +- `writeOnly: true` masks a string value in menus and previews and uses hidden + terminal input for replacements. An existing value remains unchanged unless + you explicitly replace or clear it. +- `x-nemo-relay-order` optionally lists properties in editor order. Properties + that are not listed follow in alphabetical order. + +Dynamic plugins without `config_schema` remain available through a raw JSON +object editor. That fallback has no schema validation or secret-field metadata. +Dynamic enablement remains separate: use `nemo-relay plugins enable` and +`nemo-relay plugins disable` to change lifecycle state. + +Static schema validation complements runtime plugin validation. Runtime plugin +validation remains authoritative when the plugin is activated. ## Precedence And Merge Behavior From 405a2c162d7d64c799e1cd65d9c347cfe82a0d3c Mon Sep 17 00:00:00 2001 From: Will Killian Date: Tue, 30 Jun 2026 00:26:53 -0400 Subject: [PATCH 10/14] fix: distinguish plugin clear from reset Signed-off-by: Will Killian --- crates/cli/src/plugins.rs | 9 +++- crates/cli/src/plugins/editor_model.rs | 25 ++++++++++ crates/cli/tests/coverage/plugins_tests.rs | 58 ++++++++++++++++++++++ 3 files changed, 90 insertions(+), 2 deletions(-) diff --git a/crates/cli/src/plugins.rs b/crates/cli/src/plugins.rs index 562f54e3f..c7bd097eb 100644 --- a/crates/cli/src/plugins.rs +++ b/crates/cli/src/plugins.rs @@ -307,8 +307,13 @@ fn clear_component_menu_item( match action { Some(ComponentMenuAction::Toggle) => component.set_enabled(false), Some(ComponentMenuAction::EditField(field_index)) => { - if let Some(field) = component.fields().get(field_index) { - component.reset_field(*field)?; + if let Some(field) = component.fields().get(field_index) + && !component.clear_field(*field)? + { + println!( + " {} is required; use reset to restore its default.", + field.label + ); } } Some(ComponentMenuAction::Back) | None => { diff --git a/crates/cli/src/plugins/editor_model.rs b/crates/cli/src/plugins/editor_model.rs index 191bae9c1..91c42fad4 100644 --- a/crates/cli/src/plugins/editor_model.rs +++ b/crates/cli/src/plugins/editor_model.rs @@ -139,6 +139,31 @@ impl EditableComponent { Ok(()) } + pub(super) fn clear_field(&mut self, field: EditorFieldSpec) -> Result { + if !field.optional { + return Ok(false); + } + match self { + Self::Observability(state) => { + remove_struct_field(&mut state.config, field.name)?; + state.mark_config_touched(); + } + Self::Adaptive(state) => { + remove_struct_field(&mut state.config, field.name)?; + state.mark_config_touched(); + } + Self::NemoGuardrails(state) => { + remove_struct_field(&mut state.config, field.name)?; + state.mark_config_touched(); + } + Self::PiiRedaction(state) => { + remove_struct_field(&mut state.config, field.name)?; + state.mark_config_touched(); + } + } + Ok(true) + } + pub(super) fn store(&self, config: &mut PluginConfig) -> Result<(), CliError> { match self { Self::Observability(state) => store_observability_state(config, state), diff --git a/crates/cli/tests/coverage/plugins_tests.rs b/crates/cli/tests/coverage/plugins_tests.rs index c9badb1a4..94f25bb86 100644 --- a/crates/cli/tests/coverage/plugins_tests.rs +++ b/crates/cli/tests/coverage/plugins_tests.rs @@ -476,6 +476,64 @@ fn component_enablement_shortcuts_clear_and_reset_differ() { assert!(!adaptive.enabled()); } +#[test] +fn component_field_clear_only_removes_optional_fields() { + let config = PluginConfig::default(); + let mut components = editable_components(&config).unwrap(); + + let observability = components + .iter_mut() + .find(|component| component.label() == "Observability") + .unwrap(); + let atof_index = observability + .fields() + .iter() + .position(|field| field.name == "atof") + .unwrap(); + let atof = observability.fields()[atof_index]; + assert!(atof.optional); + let EditableComponent::Observability(state) = observability else { + unreachable!(); + }; + state.config.atof = Some(Default::default()); + assert!(observability.field_configured(atof)); + clear_component_menu_item( + observability, + Some(ComponentMenuAction::EditField(atof_index)), + ) + .unwrap(); + assert!(!observability.field_configured(atof)); + + let pii_redaction = components + .iter_mut() + .find(|component| component.label() == "PII Redaction") + .unwrap(); + let input_index = pii_redaction + .fields() + .iter() + .position(|field| field.name == "input") + .unwrap(); + let input = pii_redaction.fields()[input_index]; + assert!(!input.optional); + let EditableComponent::PiiRedaction(state) = pii_redaction else { + unreachable!(); + }; + state.config.input = false; + assert!(pii_redaction.field_configured(input)); + clear_component_menu_item( + pii_redaction, + Some(ComponentMenuAction::EditField(input_index)), + ) + .unwrap(); + assert!(pii_redaction.field_configured(input)); + reset_component_menu_item( + pii_redaction, + Some(ComponentMenuAction::EditField(input_index)), + ) + .unwrap(); + assert!(!pii_redaction.field_configured(input)); +} + #[test] fn menu_viewport_keeps_selection_visible_and_pages() { let first = menu_viewport(20, 0, 8); From b0c7ff82c3dcf9177b73249d14eef32c63da2e86 Mon Sep 17 00:00:00 2001 From: Will Killian Date: Tue, 30 Jun 2026 00:53:32 -0400 Subject: [PATCH 11/14] fix: tighten dynamic plugin secret discovery Signed-off-by: Will Killian --- crates/cli/src/plugins/schema.rs | 278 +++++++++++++++++- crates/cli/tests/coverage/plugins_tests.rs | 4 + .../plugin-configuration-files.mdx | 6 +- 3 files changed, 272 insertions(+), 16 deletions(-) diff --git a/crates/cli/src/plugins/schema.rs b/crates/cli/src/plugins/schema.rs index a70bc7855..dbf3399c4 100644 --- a/crates/cli/src/plugins/schema.rs +++ b/crates/cli/src/plugins/schema.rs @@ -839,6 +839,7 @@ enum SecretSegment { Property(String), Any, Pattern(SecretPropertyPattern), + UnmatchedProperties(SecretUnmatchedProperties), Index(usize), Tail(usize), } @@ -869,6 +870,24 @@ impl Ord for SecretPropertyPattern { } } +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)] +struct SecretUnmatchedProperties { + properties: Vec, + patterns: Vec, +} + +impl SecretUnmatchedProperties { + fn matches(&self, property: &str) -> bool { + self.properties + .binary_search_by(|candidate| candidate.as_str().cmp(property)) + .is_err() + && !self + .patterns + .iter() + .any(|pattern| pattern_matches(pattern, property)) + } +} + #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)] struct SecretPattern(Vec); @@ -884,6 +903,7 @@ impl SecretPattern { SecretSegment::Pattern(pattern) => { pointer.push_str(&format!("~pattern({})", pattern.source)) } + SecretSegment::UnmatchedProperties(_) => pointer.push_str("~additional"), SecretSegment::Index(index) => pointer.push_str(&index.to_string()), SecretSegment::Tail(start) => pointer.push_str(&format!("~tail({start})")), } @@ -926,6 +946,15 @@ impl SecretPattern { } } } + SecretSegment::UnmatchedProperties(selector) => { + if let Value::Object(object) = value { + for (key, child) in object { + if selector.matches(key) { + self.redact(child, offset + 1); + } + } + } + } SecretSegment::Index(index) => { if let Some(child) = value.get_mut(*index) { self.redact(child, offset + 1); @@ -998,6 +1027,15 @@ impl SecretPattern { } } } + SecretSegment::UnmatchedProperties(selector) => { + if let Value::Object(object) = value { + for (key, child) in object { + if selector.matches(key) { + self.redact_for_edit(child, offset + 1, secrets, occupied, next_token); + } + } + } + } SecretSegment::Index(index) => { if let Some(child) = value.get_mut(*index) { self.redact_for_edit(child, offset + 1, secrets, occupied, next_token); @@ -1023,6 +1061,7 @@ impl SecretPattern { SecretSegment::Property(expected) => expected == property, SecretSegment::Any => true, SecretSegment::Pattern(pattern) => pattern_matches(pattern, property), + SecretSegment::UnmatchedProperties(selector) => selector.matches(property), SecretSegment::Index(index) => property.parse::() == Ok(*index), SecretSegment::Tail(start) => { property.parse::().is_ok_and(|index| index >= *start) @@ -1045,6 +1084,10 @@ impl SecretPattern { (SecretSegment::Pattern(pattern), SecretInstanceSegment::Property(actual)) => { pattern_matches(pattern, actual) } + ( + SecretSegment::UnmatchedProperties(selector), + SecretInstanceSegment::Property(actual), + ) => selector.matches(actual), (SecretSegment::Index(expected), SecretInstanceSegment::Index(actual)) => { expected == actual } @@ -1162,37 +1205,66 @@ fn discover_secret_patterns( return Ok(()); }; - if let Some(properties) = object.get("properties").and_then(Value::as_object) { + let properties = object.get("properties").and_then(Value::as_object); + if let Some(properties) = properties { for (property, child_schema) in properties { let mut child_path = instance_path.to_vec(); child_path.push(SecretSegment::Property(property.clone())); discover_secret_patterns(root, child_schema, &child_path, &references, output)?; } } - if let Some(additional) = object.get("additionalProperties") - && additional.is_object() - { - let mut child_path = instance_path.to_vec(); - child_path.push(SecretSegment::Any); - discover_secret_patterns(root, additional, &child_path, &references, output)?; - } + + let mut pattern_schemas = Vec::new(); if let Some(patterns) = object.get("patternProperties").and_then(Value::as_object) { for (pattern, child_schema) in patterns { - let mut child_path = instance_path.to_vec(); let matcher = regex::Regex::new(pattern).map_err(|error| { format!("unsupported patternProperties expression {pattern:?}: {error}") })?; - child_path.push(SecretSegment::Pattern(SecretPropertyPattern { - source: pattern.clone(), - matcher, - })); - discover_secret_patterns(root, child_schema, &child_path, &references, output)?; + pattern_schemas.push(( + SecretPropertyPattern { + source: pattern.clone(), + matcher, + }, + child_schema, + )); } } + pattern_schemas.sort_by(|(left, _), (right, _)| left.cmp(right)); + + if let Some(additional) = object.get("additionalProperties") + && additional.is_object() + { + let mut excluded_properties = properties + .into_iter() + .flat_map(|properties| properties.keys().cloned()) + .collect::>(); + excluded_properties.sort(); + let mut child_path = instance_path.to_vec(); + child_path.push(SecretSegment::UnmatchedProperties( + SecretUnmatchedProperties { + properties: excluded_properties, + patterns: pattern_schemas + .iter() + .map(|(pattern, _)| pattern.clone()) + .collect(), + }, + )); + discover_secret_patterns(root, additional, &child_path, &references, output)?; + } + for (pattern, child_schema) in pattern_schemas { + let mut child_path = instance_path.to_vec(); + child_path.push(SecretSegment::Pattern(pattern)); + discover_secret_patterns(root, child_schema, &child_path, &references, output)?; + } if let Some(items) = object.get("items") { if items.is_object() { let mut child_path = instance_path.to_vec(); - child_path.push(SecretSegment::Any); + match object.get("prefixItems").and_then(Value::as_array) { + Some(prefix_items) => { + child_path.push(SecretSegment::Tail(prefix_items.len())); + } + None => child_path.push(SecretSegment::Any), + } discover_secret_patterns(root, items, &child_path, &references, output)?; } else if let Some(tuple_items) = items.as_array() { for (index, child_schema) in tuple_items.iter().enumerate() { @@ -1237,9 +1309,53 @@ fn discover_secret_patterns( child_path.push(SecretSegment::Any); discover_secret_patterns(root, contains, &child_path, &references, output)?; } + for keyword in ["unevaluatedProperties", "unevaluatedItems"] { + if let Some(branch) = object.get(keyword) + && branch.is_object() + { + reject_write_only_under_applicator(root, keyword, branch, instance_path, &references)?; + } + } + for keyword in ["dependentSchemas", "dependencies"] { + if let Some(branches) = object.get(keyword).and_then(Value::as_object) { + for branch in branches.values().filter(|branch| branch.is_object()) { + reject_write_only_under_applicator( + root, + keyword, + branch, + instance_path, + &references, + )?; + } + } + } Ok(()) } +fn reject_write_only_under_applicator( + root: &Value, + keyword: &str, + schema: &Value, + instance_path: &[SecretSegment], + references: &HashSet, +) -> Result<(), String> { + let mut nested_patterns = Vec::new(); + discover_secret_patterns( + root, + schema, + instance_path, + references, + &mut nested_patterns, + )?; + if nested_patterns.is_empty() { + Ok(()) + } else { + Err(format!( + "writeOnly fields under '{keyword}' are not supported for secret redaction" + )) + } +} + fn push_pointer(pointer: &str, segment: &str) -> String { format!("{pointer}/{}", escape_pointer(segment)) } @@ -1653,6 +1769,138 @@ mod tests { assert!(loaded.has_secrets_at(&["contained".to_owned()])); } + #[test] + fn secret_discovery_limits_additional_properties_and_items_to_unmatched_values() { + let loaded = load(&json!({ + "$schema": DRAFT2020, + "type": "object", + "properties": { + "metadata": { + "type": "object", + "properties": { + "known": {"type": "string"} + }, + "patternProperties": { + "^public_": {"type": "string"} + }, + "additionalProperties": {"type": "string", "writeOnly": true} + }, + "tuple": { + "type": "array", + "prefixItems": [ + {"type": "string"}, + {"type": "string", "writeOnly": true} + ], + "items": {"type": "string", "writeOnly": true} + } + } + })); + assert_eq!( + loaded.secret_paths(), + &["/metadata/~additional", "/tuple/1", "/tuple/~tail(2)"] + ); + + let config = json!({ + "metadata": { + "known": "visible-known", + "public_name": "visible-pattern", + "token": "hidden-additional" + }, + "tuple": ["visible-prefix", "hidden-prefix", "hidden-tail"] + }); + assert_eq!( + loaded.redact(&config), + json!({ + "metadata": { + "known": "visible-known", + "public_name": "visible-pattern", + "token": REDACTED + }, + "tuple": ["visible-prefix", REDACTED, REDACTED] + }) + ); + + let (redacted, secrets) = loaded.redact_for_edit(&config); + assert_eq!( + loaded + .restore_edit_secrets(&redacted, &secrets) + .expect("restore precisely selected secrets"), + config + ); + } + + #[test] + fn rejects_write_only_under_evaluation_dependent_applicators() { + let cases = [ + ( + DRAFT2020, + "dependentSchemas", + json!({ + "dependentSchemas": { + "mode": { + "properties": { + "token": {"type": "string", "writeOnly": true} + } + } + } + }), + ), + ( + DRAFT7, + "dependencies", + json!({ + "dependencies": { + "mode": { + "properties": { + "token": {"type": "string", "writeOnly": true} + } + } + } + }), + ), + ( + DRAFT2020, + "unevaluatedProperties", + json!({ + "unevaluatedProperties": {"$ref": "#/$defs/secret"}, + "$defs": { + "secret": {"type": "string", "writeOnly": true} + } + }), + ), + ( + DRAFT2020, + "unevaluatedItems", + json!({ + "properties": { + "values": { + "type": "array", + "prefixItems": [{"type": "string"}], + "unevaluatedItems": {"type": "string", "writeOnly": true} + } + } + }), + ), + ]; + + for (draft, keyword, body) in cases { + let mut schema = json!({ + "$schema": draft, + "type": "object" + }); + schema + .as_object_mut() + .unwrap() + .extend(body.as_object().unwrap().clone()); + let (_directory, path) = write_schema(&schema); + let error = PluginConfigSchema::load("acme.unsupported-secret", path) + .expect_err("reject applicator-dependent writeOnly field"); + let message = error.to_string(); + assert!(message.contains(keyword), "{message}"); + assert!(message.contains("writeOnly"), "{message}"); + } + } + #[test] fn secret_discovery_handles_draft7_tuple_and_additional_items() { let loaded = load(&json!({ diff --git a/crates/cli/tests/coverage/plugins_tests.rs b/crates/cli/tests/coverage/plugins_tests.rs index 94f25bb86..e53045563 100644 --- a/crates/cli/tests/coverage/plugins_tests.rs +++ b/crates/cli/tests/coverage/plugins_tests.rs @@ -526,6 +526,10 @@ fn component_field_clear_only_removes_optional_fields() { ) .unwrap(); assert!(pii_redaction.field_configured(input)); + let EditableComponent::PiiRedaction(state) = &*pii_redaction else { + unreachable!(); + }; + assert!(!state.config.input); reset_component_menu_item( pii_redaction, Some(ComponentMenuAction::EditField(input_index)), diff --git a/docs/build-plugins/plugin-configuration-files.mdx b/docs/build-plugins/plugin-configuration-files.mdx index 59c794f55..11a9ac364 100644 --- a/docs/build-plugins/plugin-configuration-files.mdx +++ b/docs/build-plugins/plugin-configuration-files.mdx @@ -260,7 +260,11 @@ editor: - `required` identifies fields that must be configured. - `writeOnly: true` masks a string value in menus and previews and uses hidden terminal input for replacements. An existing value remains unchanged unless - you explicitly replace or clear it. + you explicitly replace or clear it. `writeOnly` fields under + `dependentSchemas`, Draft 7 `dependencies`, `unevaluatedProperties`, or + `unevaluatedItems` are not supported because their applicability depends on + runtime evaluation state; the editor rejects schemas that use those + combinations instead of risking an unmasked secret. - `x-nemo-relay-order` optionally lists properties in editor order. Properties that are not listed follow in alphabetical order. From 6e61fd5a324d4723814095c2d9b48be4aee93b23 Mon Sep 17 00:00:00 2001 From: Will Killian Date: Tue, 30 Jun 2026 01:16:51 -0400 Subject: [PATCH 12/14] fix: reject unresolved secret schema references Signed-off-by: Will Killian --- crates/cli/src/plugins/schema.rs | 32 ++++++++++++++++++- .../plugin-configuration-files.mdx | 10 +++--- 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/crates/cli/src/plugins/schema.rs b/crates/cli/src/plugins/schema.rs index dbf3399c4..0d1d1b1d1 100644 --- a/crates/cli/src/plugins/schema.rs +++ b/crates/cli/src/plugins/schema.rs @@ -1195,7 +1195,11 @@ fn discover_secret_patterns( let mut references = reference_stack.clone(); let resolved = match resolve_schema(root, schema, &mut references) { Ok(resolved) => resolved, - Err(_) => return Ok(()), + Err(error) => { + return Err(format!( + "secret schema reference could not be resolved: {error}" + )); + } }; if schema_type(resolved) == Some("string") && annotation_bool(schema, resolved, "writeOnly") { output.push(SecretPattern(instance_path.to_vec())); @@ -1901,6 +1905,32 @@ mod tests { } } + #[test] + fn rejects_recursive_references_that_secret_discovery_cannot_safely_expand() { + let (_directory, path) = write_schema(&json!({ + "$schema": DRAFT2020, + "type": "object", + "properties": { + "node": {"$ref": "#/$defs/node"} + }, + "$defs": { + "node": { + "type": "object", + "properties": { + "token": {"type": "string", "writeOnly": true}, + "next": {"$ref": "#/$defs/node"} + } + } + } + })); + + let error = PluginConfigSchema::load("acme.recursive", path) + .expect_err("reject recursive secret schema reference"); + let message = error.to_string(); + assert!(message.contains("secret schema reference"), "{message}"); + assert!(message.contains("cyclic"), "{message}"); + } + #[test] fn secret_discovery_handles_draft7_tuple_and_additional_items() { let loaded = load(&json!({ diff --git a/docs/build-plugins/plugin-configuration-files.mdx b/docs/build-plugins/plugin-configuration-files.mdx index 11a9ac364..baeb6abed 100644 --- a/docs/build-plugins/plugin-configuration-files.mdx +++ b/docs/build-plugins/plugin-configuration-files.mdx @@ -245,11 +245,11 @@ a worker. `nemo-relay plugins add`, `nemo-relay plugins validate`, and Declare `$schema` as JSON Schema Draft 7 or Draft 2020-12, and describe an object at the schema root. Only standard same-document fragment references beginning with `#`, such as `#/$defs/auth`, are supported. Dynamic references, -relative files, network URLs, and file URLs in `$ref` are not supported. The -editor provides structured controls for booleans, strings, numbers, string -enums, nested objects, and string-valued maps. It uses a raw JSON control for -arrays, unions, and other complex values, then validates the result against the -complete schema before saving. +recursive reference cycles, relative files, network URLs, and file URLs in +`$ref` are not supported. The editor provides structured controls for +booleans, strings, numbers, string enums, nested objects, and string-valued +maps. It uses a raw JSON control for arrays, unions, and other complex values, +then validates the result against the complete schema before saving. Use JSON Schema keywords and the NeMo Relay editor extension to improve the editor: From 99baa92167fdd6513b9b6f6f827554ac68aea4b8 Mon Sep 17 00:00:00 2001 From: Will Killian Date: Tue, 30 Jun 2026 08:19:54 -0400 Subject: [PATCH 13/14] test: move plugin schema tests out of src Signed-off-by: Will Killian --- crates/cli/src/plugins/schema.rs | 741 +----------------- .../tests/coverage/plugins_schema_tests.rs | 704 +++++++++++++++++ 2 files changed, 706 insertions(+), 739 deletions(-) create mode 100644 crates/cli/tests/coverage/plugins_schema_tests.rs diff --git a/crates/cli/src/plugins/schema.rs b/crates/cli/src/plugins/schema.rs index 0d1d1b1d1..53e5542ad 100644 --- a/crates/cli/src/plugins/schema.rs +++ b/crates/cli/src/plugins/schema.rs @@ -8,8 +8,6 @@ use std::collections::{BTreeMap, HashSet}; use std::fs; use std::io::Read; use std::path::Path; -#[cfg(test)] -use std::path::PathBuf; use jsonschema::{Draft, Validator}; use serde_json::{Map, Value}; @@ -84,17 +82,9 @@ pub(super) enum DynamicConfigFieldKind { #[derive(Debug, Clone)] pub(super) struct PluginConfigSchema { plugin_id: String, - #[cfg(test)] - path: PathBuf, - #[cfg(test)] - source: Value, - #[cfg(test)] - draft: ConfigSchemaDraft, validator: Validator, editor: DynamicConfigEditorSchema, secret_patterns: Vec, - #[cfg(test)] - secret_paths: Vec, } impl PluginConfigSchema { @@ -164,45 +154,15 @@ impl PluginConfigSchema { })?; secret_patterns.sort(); secret_patterns.dedup(); - #[cfg(test)] - let secret_paths = secret_patterns.iter().map(SecretPattern::display).collect(); Ok(Self { plugin_id, - #[cfg(test)] - path, - #[cfg(test)] - source, - #[cfg(test)] - draft, validator, editor, secret_patterns, - #[cfg(test)] - secret_paths, }) } - #[cfg(test)] - pub(super) fn plugin_id(&self) -> &str { - &self.plugin_id - } - - #[cfg(test)] - pub(super) fn path(&self) -> &Path { - &self.path - } - - #[cfg(test)] - pub(super) fn source(&self) -> &Value { - &self.source - } - - #[cfg(test)] - pub(super) fn draft(&self) -> ConfigSchemaDraft { - self.draft - } - pub(super) fn editor(&self) -> &DynamicConfigEditorSchema { &self.editor } @@ -222,12 +182,6 @@ impl PluginConfigSchema { }) } - /// Returns schema-discovered secret paths. `*` denotes an array item or arbitrary property. - #[cfg(test)] - pub(super) fn secret_paths(&self) -> &[String] { - &self.secret_paths - } - /// Clones a configuration and masks every schema-declared secret present in it. pub(super) fn redact(&self, config: &Value) -> Value { let mut redacted = config.clone(); @@ -892,25 +846,6 @@ impl SecretUnmatchedProperties { struct SecretPattern(Vec); impl SecretPattern { - #[cfg(test)] - fn display(&self) -> String { - let mut pointer = String::new(); - for segment in &self.0 { - pointer.push('/'); - match segment { - SecretSegment::Property(property) => pointer.push_str(&escape_pointer(property)), - SecretSegment::Any => pointer.push('*'), - SecretSegment::Pattern(pattern) => { - pointer.push_str(&format!("~pattern({})", pattern.source)) - } - SecretSegment::UnmatchedProperties(_) => pointer.push_str("~additional"), - SecretSegment::Index(index) => pointer.push_str(&index.to_string()), - SecretSegment::Tail(start) => pointer.push_str(&format!("~tail({start})")), - } - } - pointer - } - fn redact(&self, value: &mut Value, offset: usize) { if offset == self.0.len() { if value.is_string() { @@ -1369,677 +1304,5 @@ fn escape_pointer(segment: &str) -> String { } #[cfg(test)] -mod tests { - use std::fs; - - use serde_json::json; - use tempfile::tempdir; - - use super::*; - - const DRAFT7: &str = "http://json-schema.org/draft-07/schema#"; - const DRAFT2020: &str = "https://json-schema.org/draft/2020-12/schema"; - - fn write_schema(schema: &Value) -> (tempfile::TempDir, PathBuf) { - let directory = tempdir().expect("create temp directory"); - let path = directory.path().join("config.schema.json"); - fs::write( - &path, - serde_json::to_vec_pretty(schema).expect("serialize schema"), - ) - .expect("write schema"); - (directory, path) - } - - fn load(schema: &Value) -> PluginConfigSchema { - let (_directory, path) = write_schema(schema); - PluginConfigSchema::load("acme.example", path).expect("load schema") - } - - #[test] - fn loads_supported_drafts_and_requires_object_root() { - for (dialect, expected) in [ - (DRAFT7, ConfigSchemaDraft::Draft7), - (DRAFT2020, ConfigSchemaDraft::Draft202012), - ] { - let loaded = load(&json!({"$schema": dialect, "type": "object"})); - assert_eq!(loaded.draft(), expected); - assert_eq!(loaded.plugin_id(), "acme.example"); - assert_eq!(loaded.source()["type"], "object"); - assert!(loaded.path().ends_with("config.schema.json")); - } - - let (_directory, path) = write_schema(&json!({ - "$schema": DRAFT2020, - "type": "string" - })); - let error = PluginConfigSchema::load("acme.bad", &path).expect_err("reject string root"); - let message = error.to_string(); - assert!(message.contains("acme.bad"), "{message}"); - assert!( - message.contains(path.to_string_lossy().as_ref()), - "{message}" - ); - assert!(message.contains("root schema"), "{message}"); - } - - #[test] - fn requires_supported_explicit_dialect() { - for schema in [ - json!({"type": "object"}), - json!({"$schema": 7, "type": "object"}), - json!({"$schema": "https://json-schema.org/draft/2019-09/schema", "type": "object"}), - ] { - let (_directory, path) = write_schema(&schema); - let error = PluginConfigSchema::load("acme.bad", path).expect_err("reject dialect"); - assert!(error.to_string().contains("$schema")); - } - } - - #[test] - fn rejects_invalid_schema_and_external_references_recursively() { - let (_directory, path) = write_schema(&json!({ - "$schema": DRAFT7, - "type": 7 - })); - let error = PluginConfigSchema::load("acme.bad", path).expect_err("reject invalid schema"); - assert!(error.to_string().contains("schema is invalid")); - - let (_directory, path) = write_schema(&json!({ - "$schema": DRAFT2020, - "type": "object", - "$defs": { - "remote": {"$ref": "https://example.com/schema.json"} - } - })); - let error = PluginConfigSchema::load("acme.bad", path).expect_err("reject external ref"); - let message = error.to_string(); - assert!(message.contains("local fragment"), "{message}"); - assert!(message.contains("/$defs/remote/$ref"), "{message}"); - - for schema in [ - json!({ - "$schema": DRAFT2020, - "type": "object", - "$dynamicRef": "#config" - }), - json!({ - "$schema": DRAFT2020, - "type": "object", - "$defs": {"config": {"$dynamicAnchor": "config", "type": "object"}} - }), - ] { - let (_directory, path) = write_schema(&schema); - let error = PluginConfigSchema::load("acme.bad", path) - .expect_err("reject unsupported dynamic references"); - assert!(error.to_string().contains("dynamic references")); - } - - load(&json!({ - "$schema": DRAFT2020, - "type": "object", - "properties": { - "payload": { - "type": "object", - "default": {"$ref": "https://example.com/literal-data"}, - "examples": [{"$ref": "https://example.com/also-literal"}] - } - } - })); - } - - #[test] - fn resolves_local_definitions_for_root_and_fields() { - let loaded = load(&json!({ - "$schema": DRAFT2020, - "$ref": "#/$defs/config", - "$defs": { - "config": { - "type": "object", - "properties": { - "endpoint": {"$ref": "#/$defs/nonEmpty"} - } - }, - "nonEmpty": {"type": "string", "minLength": 1} - } - })); - assert_eq!(loaded.fields().len(), 1); - assert!(matches!( - loaded.fields()[0].kind, - DynamicConfigFieldKind::String { secret: false } - )); - loaded - .validate(&json!({"endpoint": "relay"})) - .expect("valid config"); - } - - #[test] - fn maps_native_nested_map_and_raw_controls() { - let loaded = load(&json!({ - "$schema": DRAFT2020, - "type": "object", - "required": ["enabled"], - "properties": { - "array": {"type": "array", "items": {"type": "string"}}, - "choice": {"type": "string", "enum": ["one", "two"]}, - "count": {"type": "integer"}, - "enabled": {"type": "boolean", "title": "Enabled", "default": true}, - "free": {"type": "object"}, - "labels": {"type": "object", "additionalProperties": {"type": "string"}}, - "nested": { - "type": "object", - "properties": {"ratio": {"type": "number", "description": "Weight"}} - }, - "secret": {"type": "string", "writeOnly": true}, - "union": {"oneOf": [{"type": "string"}, {"type": "number"}]} - } - })); - let field = |key: &str| { - loaded - .fields() - .iter() - .find(|field| field.key == key) - .unwrap() - }; - - assert!(matches!( - field("array").kind, - DynamicConfigFieldKind::RawJson - )); - assert!(matches!( - field("free").kind, - DynamicConfigFieldKind::RawJson - )); - assert!(matches!( - field("union").kind, - DynamicConfigFieldKind::RawJson - )); - assert!(matches!( - field("count").kind, - DynamicConfigFieldKind::Integer - )); - assert!(matches!( - field("labels").kind, - DynamicConfigFieldKind::StringMap - )); - assert!(matches!( - field("secret").kind, - DynamicConfigFieldKind::String { secret: true } - )); - assert_eq!(field("enabled").title, "Enabled"); - assert_eq!(field("enabled").default, Some(json!(true))); - assert!(field("enabled").required); - assert!(matches!( - field("choice").kind, - DynamicConfigFieldKind::StringEnum { ref options, secret: false } - if options == &["one", "two"] - )); - assert!(matches!( - field("nested").kind, - DynamicConfigFieldKind::Object { ref fields } - if fields.len() == 1 - && fields[0].key == "ratio" - && fields[0].description.as_deref() == Some("Weight") - && matches!(fields[0].kind, DynamicConfigFieldKind::Number) - )); - assert!(loaded.editor().title.is_none()); - } - - #[test] - fn applies_partial_explicit_order_then_alphabetical_fallback() { - let loaded = load(&json!({ - "$schema": DRAFT7, - "type": "object", - "x-nemo-relay-order": ["zeta", "middle"], - "properties": { - "zeta": {"type": "string"}, - "alpha": {"type": "string"}, - "middle": {"type": "string"}, - "beta": {"type": "string"} - } - })); - assert_eq!( - loaded - .fields() - .iter() - .map(|field| field.key.as_str()) - .collect::>(), - ["zeta", "middle", "alpha", "beta"] - ); - } - - #[test] - fn rejects_malformed_explicit_order() { - for order in [ - json!("alpha"), - json!(["missing"]), - json!(["alpha", "alpha"]), - json!([1]), - ] { - let (_directory, path) = write_schema(&json!({ - "$schema": DRAFT2020, - "type": "object", - "x-nemo-relay-order": order, - "properties": {"alpha": {"type": "string"}} - })); - let error = PluginConfigSchema::load("acme.bad", path).expect_err("reject order"); - assert!(error.to_string().contains("x-nemo-relay-order")); - } - } - - #[test] - fn validation_error_names_plugin_and_instance_pointer() { - let loaded = load(&json!({ - "$schema": DRAFT2020, - "type": "object", - "properties": { - "service": { - "type": "object", - "properties": {"port": {"type": "integer", "minimum": 1}} - } - } - })); - let error = loaded - .validate(&json!({"service": {"port": 0}})) - .expect_err("reject invalid config"); - let message = error.to_string(); - assert!(message.contains("acme.example"), "{message}"); - assert!(message.contains("/service/port"), "{message}"); - } - - #[test] - fn recursively_discovers_and_redacts_write_only_strings() { - let loaded = load(&json!({ - "$schema": DRAFT2020, - "type": "object", - "properties": { - "token": {"$ref": "#/$defs/secret"}, - "nested": { - "type": "object", - "properties": {"password": {"type": "string", "writeOnly": true}} - }, - "records": { - "type": "array", - "items": { - "type": "object", - "properties": {"key": {"type": "string", "writeOnly": true}} - } - } - }, - "$defs": {"secret": {"type": "string", "writeOnly": true}} - })); - assert_eq!( - loaded.secret_paths(), - &["/nested/password", "/records/*/key", "/token"] - ); - let config = json!({ - "token": "top-secret", - "nested": {"password": "hunter2", "visible": "ok"}, - "records": [{"key": "one"}, {"key": "two"}] - }); - assert_eq!( - loaded.redact(&config), - json!({ - "token": REDACTED, - "nested": {"password": REDACTED, "visible": "ok"}, - "records": [{"key": REDACTED}, {"key": REDACTED}] - }) - ); - assert_eq!(config["token"], "top-secret", "redaction must clone"); - - let (redacted, secrets) = loaded.redact_for_edit(&config); - assert_eq!( - loaded - .restore_edit_secrets(&redacted, &secrets) - .expect("restore original secrets"), - config - ); - - let mut replacement = redacted; - replacement["token"] = json!("replacement"); - replacement["nested"] - .as_object_mut() - .unwrap() - .remove("password"); - replacement["records"].as_array_mut().unwrap().swap(0, 1); - let restored = loaded - .restore_edit_secrets(&replacement, &secrets) - .expect("preserve reordered array secrets"); - assert_eq!(restored["token"], json!("replacement")); - assert!(restored["nested"].get("password").is_none()); - assert_eq!(restored["records"], json!([{"key": "two"}, {"key": "one"}])); - - let (redacted, secrets) = loaded.redact_for_edit(&config); - let mut moved = redacted.clone(); - let token = redacted["token"].clone(); - moved["visible"] = token; - let error = loaded - .restore_edit_secrets(&moved, &secrets) - .expect_err("reject token copied to a non-secret field"); - assert!( - error - .to_string() - .contains("schema-declared secret location") - ); - - let mut duplicated = redacted; - duplicated["records"][1]["key"] = duplicated["records"][0]["key"].clone(); - let error = loaded - .restore_edit_secrets(&duplicated, &secrets) - .expect_err("reject duplicate secret token"); - assert!(error.to_string().contains("may only appear once")); - } - - #[test] - fn secret_discovery_preserves_pattern_prefix_and_contains_selectors() { - let loaded = load(&json!({ - "$schema": DRAFT2020, - "type": "object", - "properties": { - "patterned": { - "type": "object", - "patternProperties": { - "^secret_": {"type": "string", "writeOnly": true} - } - }, - "tuple": { - "type": "array", - "prefixItems": [ - {"type": "string", "writeOnly": true}, - {"type": "string"} - ] - }, - "contained": { - "type": "array", - "contains": {"type": "string", "writeOnly": true} - } - } - })); - let config = json!({ - "patterned": {"secret_token": "hide", "public": "show"}, - "tuple": ["hide", "show"], - "contained": ["hide-one", 7, "hide-two"] - }); - assert_eq!( - loaded.redact(&config), - json!({ - "patterned": {"secret_token": REDACTED, "public": "show"}, - "tuple": [REDACTED, "show"], - "contained": [REDACTED, 7, REDACTED] - }) - ); - assert!(loaded.has_secrets_at(&["patterned".to_owned()])); - assert!(loaded.has_secrets_at(&["tuple".to_owned()])); - assert!(loaded.has_secrets_at(&["contained".to_owned()])); - } - - #[test] - fn secret_discovery_limits_additional_properties_and_items_to_unmatched_values() { - let loaded = load(&json!({ - "$schema": DRAFT2020, - "type": "object", - "properties": { - "metadata": { - "type": "object", - "properties": { - "known": {"type": "string"} - }, - "patternProperties": { - "^public_": {"type": "string"} - }, - "additionalProperties": {"type": "string", "writeOnly": true} - }, - "tuple": { - "type": "array", - "prefixItems": [ - {"type": "string"}, - {"type": "string", "writeOnly": true} - ], - "items": {"type": "string", "writeOnly": true} - } - } - })); - assert_eq!( - loaded.secret_paths(), - &["/metadata/~additional", "/tuple/1", "/tuple/~tail(2)"] - ); - - let config = json!({ - "metadata": { - "known": "visible-known", - "public_name": "visible-pattern", - "token": "hidden-additional" - }, - "tuple": ["visible-prefix", "hidden-prefix", "hidden-tail"] - }); - assert_eq!( - loaded.redact(&config), - json!({ - "metadata": { - "known": "visible-known", - "public_name": "visible-pattern", - "token": REDACTED - }, - "tuple": ["visible-prefix", REDACTED, REDACTED] - }) - ); - - let (redacted, secrets) = loaded.redact_for_edit(&config); - assert_eq!( - loaded - .restore_edit_secrets(&redacted, &secrets) - .expect("restore precisely selected secrets"), - config - ); - } - - #[test] - fn rejects_write_only_under_evaluation_dependent_applicators() { - let cases = [ - ( - DRAFT2020, - "dependentSchemas", - json!({ - "dependentSchemas": { - "mode": { - "properties": { - "token": {"type": "string", "writeOnly": true} - } - } - } - }), - ), - ( - DRAFT7, - "dependencies", - json!({ - "dependencies": { - "mode": { - "properties": { - "token": {"type": "string", "writeOnly": true} - } - } - } - }), - ), - ( - DRAFT2020, - "unevaluatedProperties", - json!({ - "unevaluatedProperties": {"$ref": "#/$defs/secret"}, - "$defs": { - "secret": {"type": "string", "writeOnly": true} - } - }), - ), - ( - DRAFT2020, - "unevaluatedItems", - json!({ - "properties": { - "values": { - "type": "array", - "prefixItems": [{"type": "string"}], - "unevaluatedItems": {"type": "string", "writeOnly": true} - } - } - }), - ), - ]; - - for (draft, keyword, body) in cases { - let mut schema = json!({ - "$schema": draft, - "type": "object" - }); - schema - .as_object_mut() - .unwrap() - .extend(body.as_object().unwrap().clone()); - let (_directory, path) = write_schema(&schema); - let error = PluginConfigSchema::load("acme.unsupported-secret", path) - .expect_err("reject applicator-dependent writeOnly field"); - let message = error.to_string(); - assert!(message.contains(keyword), "{message}"); - assert!(message.contains("writeOnly"), "{message}"); - } - } - - #[test] - fn rejects_recursive_references_that_secret_discovery_cannot_safely_expand() { - let (_directory, path) = write_schema(&json!({ - "$schema": DRAFT2020, - "type": "object", - "properties": { - "node": {"$ref": "#/$defs/node"} - }, - "$defs": { - "node": { - "type": "object", - "properties": { - "token": {"type": "string", "writeOnly": true}, - "next": {"$ref": "#/$defs/node"} - } - } - } - })); - - let error = PluginConfigSchema::load("acme.recursive", path) - .expect_err("reject recursive secret schema reference"); - let message = error.to_string(); - assert!(message.contains("secret schema reference"), "{message}"); - assert!(message.contains("cyclic"), "{message}"); - } - - #[test] - fn secret_discovery_handles_draft7_tuple_and_additional_items() { - let loaded = load(&json!({ - "$schema": DRAFT7, - "type": "object", - "properties": { - "tuple": { - "type": "array", - "items": [ - {"type": "string"}, - {"type": "string", "writeOnly": true} - ], - "additionalItems": { - "type": "object", - "properties": { - "token": {"type": "string", "writeOnly": true} - } - } - } - } - })); - let config = json!({ - "tuple": [ - "visible", - "tuple-secret", - {"token": "tail-secret-one", "visible": "keep"}, - {"token": "tail-secret-two"} - ] - }); - - assert_eq!( - loaded.redact(&config), - json!({ - "tuple": [ - "visible", - REDACTED, - {"token": REDACTED, "visible": "keep"}, - {"token": REDACTED} - ] - }) - ); - let (redacted, secrets) = loaded.redact_for_edit(&config); - assert_eq!( - loaded - .restore_edit_secrets(&redacted, &secrets) - .expect("restore tuple secrets"), - config - ); - } - - #[test] - fn rejects_pattern_properties_unsupported_by_secret_matcher() { - let (_directory, path) = write_schema(&json!({ - "$schema": DRAFT2020, - "type": "object", - "patternProperties": { - "(?=secret)": {"type": "string", "writeOnly": true} - } - })); - - let error = PluginConfigSchema::load("acme.bad-pattern", path) - .expect_err("reject unsupported patternProperties expression"); - let message = error.to_string(); - assert!(message.contains("patternProperties"), "{message}"); - assert!(message.contains("look-around"), "{message}"); - } - - #[test] - fn read_and_json_errors_include_plugin_and_path() { - let directory = tempdir().expect("create temp directory"); - let missing = directory.path().join("missing.json"); - let error = PluginConfigSchema::load("acme.missing", &missing).expect_err("missing"); - let message = error.to_string(); - assert!(message.contains("acme.missing"), "{message}"); - assert!( - message.contains(missing.to_string_lossy().as_ref()), - "{message}" - ); - - let invalid = directory.path().join("invalid.json"); - fs::write(&invalid, "{").expect("write invalid json"); - let error = PluginConfigSchema::load("acme.invalid", &invalid).expect_err("invalid json"); - assert!(error.to_string().contains("not valid JSON")); - } - - #[test] - fn schema_reads_require_regular_files_within_the_size_limit() { - let directory = tempdir().expect("create temp directory"); - let error = PluginConfigSchema::load("acme.directory", directory.path()) - .expect_err("reject directory schema path"); - assert!(error.to_string().contains("regular file")); - - let oversized = directory.path().join("oversized.schema.json"); - fs::File::create(&oversized) - .expect("create oversized schema") - .set_len(MAX_CONFIG_SCHEMA_BYTES + 1) - .expect("size oversized schema"); - let error = PluginConfigSchema::load("acme.oversized", &oversized) - .expect_err("reject oversized schema"); - assert!(error.to_string().contains("1 MiB size limit")); - - let maximum = directory.path().join("maximum.schema.json"); - let mut source = serde_json::to_vec(&json!({ - "$schema": DRAFT2020, - "type": "object" - })) - .expect("serialize schema"); - source.resize(MAX_CONFIG_SCHEMA_BYTES as usize, b' '); - fs::write(&maximum, source).expect("write maximum-sized schema"); - PluginConfigSchema::load("acme.maximum", maximum).expect("accept schema at the size limit"); - } -} +#[path = "../../tests/coverage/plugins_schema_tests.rs"] +mod tests; diff --git a/crates/cli/tests/coverage/plugins_schema_tests.rs b/crates/cli/tests/coverage/plugins_schema_tests.rs new file mode 100644 index 000000000..cc69a1061 --- /dev/null +++ b/crates/cli/tests/coverage/plugins_schema_tests.rs @@ -0,0 +1,704 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +use std::{fs, path::PathBuf}; + +use serde_json::json; +use tempfile::tempdir; + +use super::*; + +const DRAFT7: &str = "http://json-schema.org/draft-07/schema#"; +const DRAFT2020: &str = "https://json-schema.org/draft/2020-12/schema"; + +fn write_schema(schema: &Value) -> (tempfile::TempDir, PathBuf) { + let directory = tempdir().expect("create temp directory"); + let path = directory.path().join("config.schema.json"); + fs::write( + &path, + serde_json::to_vec_pretty(schema).expect("serialize schema"), + ) + .expect("write schema"); + (directory, path) +} + +fn load(schema: &Value) -> PluginConfigSchema { + let (_directory, path) = write_schema(schema); + PluginConfigSchema::load("acme.example", path).expect("load schema") +} + +fn secret_paths(schema: &PluginConfigSchema) -> Vec { + schema + .secret_patterns + .iter() + .map(|pattern| { + let mut pointer = String::new(); + for segment in &pattern.0 { + pointer.push('/'); + match segment { + SecretSegment::Property(property) => { + pointer.push_str(&escape_pointer(property)); + } + SecretSegment::Any => pointer.push('*'), + SecretSegment::Pattern(pattern) => { + pointer.push_str(&format!("~pattern({})", pattern.source)); + } + SecretSegment::UnmatchedProperties(_) => pointer.push_str("~additional"), + SecretSegment::Index(index) => pointer.push_str(&index.to_string()), + SecretSegment::Tail(start) => pointer.push_str(&format!("~tail({start})")), + } + } + pointer + }) + .collect() +} + +#[test] +fn loads_supported_drafts_and_requires_object_root() { + for dialect in [DRAFT7, DRAFT2020] { + let loaded = load(&json!({"$schema": dialect, "type": "object"})); + assert_eq!(loaded.plugin_id, "acme.example"); + assert!(loaded.fields().is_empty()); + } + + let (_directory, path) = write_schema(&json!({ + "$schema": DRAFT2020, + "type": "string" + })); + let error = PluginConfigSchema::load("acme.bad", &path).expect_err("reject string root"); + let message = error.to_string(); + assert!(message.contains("acme.bad"), "{message}"); + assert!( + message.contains(path.to_string_lossy().as_ref()), + "{message}" + ); + assert!(message.contains("root schema"), "{message}"); +} + +#[test] +fn requires_supported_explicit_dialect() { + for schema in [ + json!({"type": "object"}), + json!({"$schema": 7, "type": "object"}), + json!({"$schema": "https://json-schema.org/draft/2019-09/schema", "type": "object"}), + ] { + let (_directory, path) = write_schema(&schema); + let error = PluginConfigSchema::load("acme.bad", path).expect_err("reject dialect"); + assert!(error.to_string().contains("$schema")); + } +} + +#[test] +fn rejects_invalid_schema_and_external_references_recursively() { + let (_directory, path) = write_schema(&json!({ + "$schema": DRAFT7, + "type": 7 + })); + let error = PluginConfigSchema::load("acme.bad", path).expect_err("reject invalid schema"); + assert!(error.to_string().contains("schema is invalid")); + + let (_directory, path) = write_schema(&json!({ + "$schema": DRAFT2020, + "type": "object", + "$defs": { + "remote": {"$ref": "https://example.com/schema.json"} + } + })); + let error = PluginConfigSchema::load("acme.bad", path).expect_err("reject external ref"); + let message = error.to_string(); + assert!(message.contains("local fragment"), "{message}"); + assert!(message.contains("/$defs/remote/$ref"), "{message}"); + + for schema in [ + json!({ + "$schema": DRAFT2020, + "type": "object", + "$dynamicRef": "#config" + }), + json!({ + "$schema": DRAFT2020, + "type": "object", + "$defs": {"config": {"$dynamicAnchor": "config", "type": "object"}} + }), + ] { + let (_directory, path) = write_schema(&schema); + let error = PluginConfigSchema::load("acme.bad", path) + .expect_err("reject unsupported dynamic references"); + assert!(error.to_string().contains("dynamic references")); + } + + load(&json!({ + "$schema": DRAFT2020, + "type": "object", + "properties": { + "payload": { + "type": "object", + "default": {"$ref": "https://example.com/literal-data"}, + "examples": [{"$ref": "https://example.com/also-literal"}] + } + } + })); +} + +#[test] +fn resolves_local_definitions_for_root_and_fields() { + let loaded = load(&json!({ + "$schema": DRAFT2020, + "$ref": "#/$defs/config", + "$defs": { + "config": { + "type": "object", + "properties": { + "endpoint": {"$ref": "#/$defs/nonEmpty"} + } + }, + "nonEmpty": {"type": "string", "minLength": 1} + } + })); + assert_eq!(loaded.fields().len(), 1); + assert!(matches!( + loaded.fields()[0].kind, + DynamicConfigFieldKind::String { secret: false } + )); + loaded + .validate(&json!({"endpoint": "relay"})) + .expect("valid config"); +} + +#[test] +fn maps_native_nested_map_and_raw_controls() { + let loaded = load(&json!({ + "$schema": DRAFT2020, + "type": "object", + "required": ["enabled"], + "properties": { + "array": {"type": "array", "items": {"type": "string"}}, + "choice": {"type": "string", "enum": ["one", "two"]}, + "count": {"type": "integer"}, + "enabled": {"type": "boolean", "title": "Enabled", "default": true}, + "free": {"type": "object"}, + "labels": {"type": "object", "additionalProperties": {"type": "string"}}, + "nested": { + "type": "object", + "properties": {"ratio": {"type": "number", "description": "Weight"}} + }, + "secret": {"type": "string", "writeOnly": true}, + "union": {"oneOf": [{"type": "string"}, {"type": "number"}]} + } + })); + let field = |key: &str| { + loaded + .fields() + .iter() + .find(|field| field.key == key) + .unwrap() + }; + + assert!(matches!( + field("array").kind, + DynamicConfigFieldKind::RawJson + )); + assert!(matches!( + field("free").kind, + DynamicConfigFieldKind::RawJson + )); + assert!(matches!( + field("union").kind, + DynamicConfigFieldKind::RawJson + )); + assert!(matches!( + field("count").kind, + DynamicConfigFieldKind::Integer + )); + assert!(matches!( + field("labels").kind, + DynamicConfigFieldKind::StringMap + )); + assert!(matches!( + field("secret").kind, + DynamicConfigFieldKind::String { secret: true } + )); + assert_eq!(field("enabled").title, "Enabled"); + assert_eq!(field("enabled").default, Some(json!(true))); + assert!(field("enabled").required); + assert!(matches!( + field("choice").kind, + DynamicConfigFieldKind::StringEnum { ref options, secret: false } + if options == &["one", "two"] + )); + assert!(matches!( + field("nested").kind, + DynamicConfigFieldKind::Object { ref fields } + if fields.len() == 1 + && fields[0].key == "ratio" + && fields[0].description.as_deref() == Some("Weight") + && matches!(fields[0].kind, DynamicConfigFieldKind::Number) + )); + assert!(loaded.editor().title.is_none()); +} + +#[test] +fn applies_partial_explicit_order_then_alphabetical_fallback() { + let loaded = load(&json!({ + "$schema": DRAFT7, + "type": "object", + "x-nemo-relay-order": ["zeta", "middle"], + "properties": { + "zeta": {"type": "string"}, + "alpha": {"type": "string"}, + "middle": {"type": "string"}, + "beta": {"type": "string"} + } + })); + assert_eq!( + loaded + .fields() + .iter() + .map(|field| field.key.as_str()) + .collect::>(), + ["zeta", "middle", "alpha", "beta"] + ); +} + +#[test] +fn rejects_malformed_explicit_order() { + for order in [ + json!("alpha"), + json!(["missing"]), + json!(["alpha", "alpha"]), + json!([1]), + ] { + let (_directory, path) = write_schema(&json!({ + "$schema": DRAFT2020, + "type": "object", + "x-nemo-relay-order": order, + "properties": {"alpha": {"type": "string"}} + })); + let error = PluginConfigSchema::load("acme.bad", path).expect_err("reject order"); + assert!(error.to_string().contains("x-nemo-relay-order")); + } +} + +#[test] +fn validation_error_names_plugin_and_instance_pointer() { + let loaded = load(&json!({ + "$schema": DRAFT2020, + "type": "object", + "properties": { + "service": { + "type": "object", + "properties": {"port": {"type": "integer", "minimum": 1}} + } + } + })); + let error = loaded + .validate(&json!({"service": {"port": 0}})) + .expect_err("reject invalid config"); + let message = error.to_string(); + assert!(message.contains("acme.example"), "{message}"); + assert!(message.contains("/service/port"), "{message}"); +} + +#[test] +fn recursively_discovers_and_redacts_write_only_strings() { + let loaded = load(&json!({ + "$schema": DRAFT2020, + "type": "object", + "properties": { + "token": {"$ref": "#/$defs/secret"}, + "nested": { + "type": "object", + "properties": {"password": {"type": "string", "writeOnly": true}} + }, + "records": { + "type": "array", + "items": { + "type": "object", + "properties": {"key": {"type": "string", "writeOnly": true}} + } + } + }, + "$defs": {"secret": {"type": "string", "writeOnly": true}} + })); + assert_eq!( + secret_paths(&loaded), + vec![ + "/nested/password".to_owned(), + "/records/*/key".to_owned(), + "/token".to_owned() + ] + ); + let config = json!({ + "token": "top-secret", + "nested": {"password": "hunter2", "visible": "ok"}, + "records": [{"key": "one"}, {"key": "two"}] + }); + assert_eq!( + loaded.redact(&config), + json!({ + "token": REDACTED, + "nested": {"password": REDACTED, "visible": "ok"}, + "records": [{"key": REDACTED}, {"key": REDACTED}] + }) + ); + assert_eq!(config["token"], "top-secret", "redaction must clone"); + + let (redacted, secrets) = loaded.redact_for_edit(&config); + assert_eq!( + loaded + .restore_edit_secrets(&redacted, &secrets) + .expect("restore original secrets"), + config + ); + + let mut replacement = redacted; + replacement["token"] = json!("replacement"); + replacement["nested"] + .as_object_mut() + .unwrap() + .remove("password"); + replacement["records"].as_array_mut().unwrap().swap(0, 1); + let restored = loaded + .restore_edit_secrets(&replacement, &secrets) + .expect("preserve reordered array secrets"); + assert_eq!(restored["token"], json!("replacement")); + assert!(restored["nested"].get("password").is_none()); + assert_eq!(restored["records"], json!([{"key": "two"}, {"key": "one"}])); + + let (redacted, secrets) = loaded.redact_for_edit(&config); + let mut moved = redacted.clone(); + let token = redacted["token"].clone(); + moved["visible"] = token; + let error = loaded + .restore_edit_secrets(&moved, &secrets) + .expect_err("reject token copied to a non-secret field"); + assert!( + error + .to_string() + .contains("schema-declared secret location") + ); + + let mut duplicated = redacted; + duplicated["records"][1]["key"] = duplicated["records"][0]["key"].clone(); + let error = loaded + .restore_edit_secrets(&duplicated, &secrets) + .expect_err("reject duplicate secret token"); + assert!(error.to_string().contains("may only appear once")); +} + +#[test] +fn secret_discovery_preserves_pattern_prefix_and_contains_selectors() { + let loaded = load(&json!({ + "$schema": DRAFT2020, + "type": "object", + "properties": { + "patterned": { + "type": "object", + "patternProperties": { + "^secret_": {"type": "string", "writeOnly": true} + } + }, + "tuple": { + "type": "array", + "prefixItems": [ + {"type": "string", "writeOnly": true}, + {"type": "string"} + ] + }, + "contained": { + "type": "array", + "contains": {"type": "string", "writeOnly": true} + } + } + })); + let config = json!({ + "patterned": {"secret_token": "hide", "public": "show"}, + "tuple": ["hide", "show"], + "contained": ["hide-one", 7, "hide-two"] + }); + assert_eq!( + loaded.redact(&config), + json!({ + "patterned": {"secret_token": REDACTED, "public": "show"}, + "tuple": [REDACTED, "show"], + "contained": [REDACTED, 7, REDACTED] + }) + ); + assert!(loaded.has_secrets_at(&["patterned".to_owned()])); + assert!(loaded.has_secrets_at(&["tuple".to_owned()])); + assert!(loaded.has_secrets_at(&["contained".to_owned()])); +} + +#[test] +fn secret_discovery_limits_additional_properties_and_items_to_unmatched_values() { + let loaded = load(&json!({ + "$schema": DRAFT2020, + "type": "object", + "properties": { + "metadata": { + "type": "object", + "properties": { + "known": {"type": "string"} + }, + "patternProperties": { + "^public_": {"type": "string"} + }, + "additionalProperties": {"type": "string", "writeOnly": true} + }, + "tuple": { + "type": "array", + "prefixItems": [ + {"type": "string"}, + {"type": "string", "writeOnly": true} + ], + "items": {"type": "string", "writeOnly": true} + } + } + })); + assert_eq!( + secret_paths(&loaded), + vec![ + "/metadata/~additional".to_owned(), + "/tuple/1".to_owned(), + "/tuple/~tail(2)".to_owned() + ] + ); + + let config = json!({ + "metadata": { + "known": "visible-known", + "public_name": "visible-pattern", + "token": "hidden-additional" + }, + "tuple": ["visible-prefix", "hidden-prefix", "hidden-tail"] + }); + assert_eq!( + loaded.redact(&config), + json!({ + "metadata": { + "known": "visible-known", + "public_name": "visible-pattern", + "token": REDACTED + }, + "tuple": ["visible-prefix", REDACTED, REDACTED] + }) + ); + + let (redacted, secrets) = loaded.redact_for_edit(&config); + assert_eq!( + loaded + .restore_edit_secrets(&redacted, &secrets) + .expect("restore precisely selected secrets"), + config + ); +} + +#[test] +fn rejects_write_only_under_evaluation_dependent_applicators() { + let cases = [ + ( + DRAFT2020, + "dependentSchemas", + json!({ + "dependentSchemas": { + "mode": { + "properties": { + "token": {"type": "string", "writeOnly": true} + } + } + } + }), + ), + ( + DRAFT7, + "dependencies", + json!({ + "dependencies": { + "mode": { + "properties": { + "token": {"type": "string", "writeOnly": true} + } + } + } + }), + ), + ( + DRAFT2020, + "unevaluatedProperties", + json!({ + "unevaluatedProperties": {"$ref": "#/$defs/secret"}, + "$defs": { + "secret": {"type": "string", "writeOnly": true} + } + }), + ), + ( + DRAFT2020, + "unevaluatedItems", + json!({ + "properties": { + "values": { + "type": "array", + "prefixItems": [{"type": "string"}], + "unevaluatedItems": {"type": "string", "writeOnly": true} + } + } + }), + ), + ]; + + for (draft, keyword, body) in cases { + let mut schema = json!({ + "$schema": draft, + "type": "object" + }); + schema + .as_object_mut() + .unwrap() + .extend(body.as_object().unwrap().clone()); + let (_directory, path) = write_schema(&schema); + let error = PluginConfigSchema::load("acme.unsupported-secret", path) + .expect_err("reject applicator-dependent writeOnly field"); + let message = error.to_string(); + assert!(message.contains(keyword), "{message}"); + assert!(message.contains("writeOnly"), "{message}"); + } +} + +#[test] +fn rejects_recursive_references_that_secret_discovery_cannot_safely_expand() { + let (_directory, path) = write_schema(&json!({ + "$schema": DRAFT2020, + "type": "object", + "properties": { + "node": {"$ref": "#/$defs/node"} + }, + "$defs": { + "node": { + "type": "object", + "properties": { + "token": {"type": "string", "writeOnly": true}, + "next": {"$ref": "#/$defs/node"} + } + } + } + })); + + let error = PluginConfigSchema::load("acme.recursive", path) + .expect_err("reject recursive secret schema reference"); + let message = error.to_string(); + assert!(message.contains("secret schema reference"), "{message}"); + assert!(message.contains("cyclic"), "{message}"); +} + +#[test] +fn secret_discovery_handles_draft7_tuple_and_additional_items() { + let loaded = load(&json!({ + "$schema": DRAFT7, + "type": "object", + "properties": { + "tuple": { + "type": "array", + "items": [ + {"type": "string"}, + {"type": "string", "writeOnly": true} + ], + "additionalItems": { + "type": "object", + "properties": { + "token": {"type": "string", "writeOnly": true} + } + } + } + } + })); + let config = json!({ + "tuple": [ + "visible", + "tuple-secret", + {"token": "tail-secret-one", "visible": "keep"}, + {"token": "tail-secret-two"} + ] + }); + + assert_eq!( + loaded.redact(&config), + json!({ + "tuple": [ + "visible", + REDACTED, + {"token": REDACTED, "visible": "keep"}, + {"token": REDACTED} + ] + }) + ); + let (redacted, secrets) = loaded.redact_for_edit(&config); + assert_eq!( + loaded + .restore_edit_secrets(&redacted, &secrets) + .expect("restore tuple secrets"), + config + ); +} + +#[test] +fn rejects_pattern_properties_unsupported_by_secret_matcher() { + let (_directory, path) = write_schema(&json!({ + "$schema": DRAFT2020, + "type": "object", + "patternProperties": { + "(?=secret)": {"type": "string", "writeOnly": true} + } + })); + + let error = PluginConfigSchema::load("acme.bad-pattern", path) + .expect_err("reject unsupported patternProperties expression"); + let message = error.to_string(); + assert!(message.contains("patternProperties"), "{message}"); + assert!(message.contains("look-around"), "{message}"); +} + +#[test] +fn read_and_json_errors_include_plugin_and_path() { + let directory = tempdir().expect("create temp directory"); + let missing = directory.path().join("missing.json"); + let error = PluginConfigSchema::load("acme.missing", &missing).expect_err("missing"); + let message = error.to_string(); + assert!(message.contains("acme.missing"), "{message}"); + assert!( + message.contains(missing.to_string_lossy().as_ref()), + "{message}" + ); + + let invalid = directory.path().join("invalid.json"); + fs::write(&invalid, "{").expect("write invalid json"); + let error = PluginConfigSchema::load("acme.invalid", &invalid).expect_err("invalid json"); + assert!(error.to_string().contains("not valid JSON")); +} + +#[test] +fn schema_reads_require_regular_files_within_the_size_limit() { + let directory = tempdir().expect("create temp directory"); + let error = PluginConfigSchema::load("acme.directory", directory.path()) + .expect_err("reject directory schema path"); + assert!(error.to_string().contains("regular file")); + + let oversized = directory.path().join("oversized.schema.json"); + fs::File::create(&oversized) + .expect("create oversized schema") + .set_len(MAX_CONFIG_SCHEMA_BYTES + 1) + .expect("size oversized schema"); + let error = PluginConfigSchema::load("acme.oversized", &oversized) + .expect_err("reject oversized schema"); + assert!(error.to_string().contains("1 MiB size limit")); + + let maximum = directory.path().join("maximum.schema.json"); + let mut source = serde_json::to_vec(&json!({ + "$schema": DRAFT2020, + "type": "object" + })) + .expect("serialize schema"); + source.resize(MAX_CONFIG_SCHEMA_BYTES as usize, b' '); + fs::write(&maximum, source).expect("write maximum-sized schema"); + PluginConfigSchema::load("acme.maximum", maximum).expect("accept schema at the size limit"); +} From bbee2b41a9ded39053cf438be68df696b44e1f96 Mon Sep 17 00:00:00 2001 From: Will Killian Date: Tue, 30 Jun 2026 08:49:30 -0400 Subject: [PATCH 14/14] docs: remove plugin configuration guide updates Signed-off-by: Will Killian --- .../plugin-configuration-files.mdx | 71 +------------------ 1 file changed, 3 insertions(+), 68 deletions(-) diff --git a/docs/build-plugins/plugin-configuration-files.mdx b/docs/build-plugins/plugin-configuration-files.mdx index baeb6abed..dd84032f0 100644 --- a/docs/build-plugins/plugin-configuration-files.mdx +++ b/docs/build-plugins/plugin-configuration-files.mdx @@ -160,9 +160,7 @@ without process-level plugin activation. ## Editing Files -Use the interactive editor for the built-in Observability, Adaptive, NeMo -Guardrails, and PII Redaction plugins. The editor also supports dynamic plugins -that are declared in the selected file: +Use the interactive editor for Observability and Adaptive plugin configuration: ```bash nemo-relay plugins edit @@ -202,8 +200,6 @@ The editor menus support these controls: | Key | Behavior | |---|---| | Arrow keys, `j`, `k` | Move through menu items. | -| Page Up, Page Down | Move by one visible page. | -| Home, End | Jump to the first or last item. | | `Enter`, `Space` | Select or toggle the highlighted item. | | `Backspace`, `Delete` | Clear the highlighted optional field. | | `r` | Reset the highlighted field or section to its default. | @@ -212,69 +208,8 @@ The editor menus support these controls: | `?` | Show help. | | `q`, `Esc` | Go back or cancel without saving. | -The top-level menu contains one entry for each plugin. Select an entry to edit -that plugin's fields. Text and JSON value prompts use normal line editing. Use -the surrounding field menu to reset or clear a value. Preview and save remain -available from the top-level menu. - -### Dynamic Plugin Configuration Schemas - -A dynamic plugin can expose structured editor fields by declaring the -`config_schema` capability in `relay-plugin.toml` and referencing a local JSON -Schema file: - -```toml -[capabilities] -items = ["plugin_native", "config_schema"] - -[config_schema] -path = "config.schema.json" -``` - -Declare the capability and the `[config_schema]` section together. A manifest -that declares only one of them is invalid. The `plugin_native` capability in the -example applies to a native plugin; worker manifests continue to declare -`plugin_worker` alongside `config_schema`. - -The editor resolves a relative schema path from the directory that contains -`relay-plugin.toml`. The path must identify a local regular file no larger than -1 MiB. The editor reads the schema without loading a native library or starting -a worker. `nemo-relay plugins add`, `nemo-relay plugins validate`, and -`nemo-relay plugins edit` reject a declared schema that is missing or invalid. - -Declare `$schema` as JSON Schema Draft 7 or Draft 2020-12, and describe an -object at the schema root. Only standard same-document fragment references -beginning with `#`, such as `#/$defs/auth`, are supported. Dynamic references, -recursive reference cycles, relative files, network URLs, and file URLs in -`$ref` are not supported. The editor provides structured controls for -booleans, strings, numbers, string enums, nested objects, and string-valued -maps. It uses a raw JSON control for arrays, unions, and other complex values, -then validates the result against the complete schema before saving. - -Use JSON Schema keywords and the NeMo Relay editor extension to improve the -editor: - -- `title` supplies the field label. -- `description` supplies field help. -- `default` supplies the reset value. -- `required` identifies fields that must be configured. -- `writeOnly: true` masks a string value in menus and previews and uses hidden - terminal input for replacements. An existing value remains unchanged unless - you explicitly replace or clear it. `writeOnly` fields under - `dependentSchemas`, Draft 7 `dependencies`, `unevaluatedProperties`, or - `unevaluatedItems` are not supported because their applicability depends on - runtime evaluation state; the editor rejects schemas that use those - combinations instead of risking an unmasked secret. -- `x-nemo-relay-order` optionally lists properties in editor order. Properties - that are not listed follow in alphabetical order. - -Dynamic plugins without `config_schema` remain available through a raw JSON -object editor. That fallback has no schema validation or secret-field metadata. -Dynamic enablement remains separate: use `nemo-relay plugins enable` and -`nemo-relay plugins disable` to change lifecycle state. - -Static schema validation complements runtime plugin validation. Runtime plugin -validation remains authoritative when the plugin is activated. +Text and JSON value prompts use normal line editing. Use the surrounding field +menu to reset, clear, preview, or save. ## Precedence And Merge Behavior