| "packages": { | "packages": { | ||||
| "ctre": { | "ctre": { | ||||
| "2.7.0": { | "2.7.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "A compile-time PCRE (almost) compatible regular expression matcher", | "description": "A compile-time PCRE (almost) compatible regular expression matcher", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "hanickadot/ctre", | "auto-lib": "hanickadot/ctre", | ||||
| }, | }, | ||||
| "fmt": { | "fmt": { | ||||
| "0.10.0": { | "0.10.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "A modern formatting library : https://fmt.dev/", | "description": "A modern formatting library : https://fmt.dev/", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "fmt/fmt", | "auto-lib": "fmt/fmt", | ||||
| } | } | ||||
| }, | }, | ||||
| "0.12.0": { | "0.12.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "A modern formatting library : https://fmt.dev/", | "description": "A modern formatting library : https://fmt.dev/", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "fmt/fmt", | "auto-lib": "fmt/fmt", | ||||
| } | } | ||||
| }, | }, | ||||
| "0.8.0": { | "0.8.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "A modern formatting library : https://fmt.dev/", | "description": "A modern formatting library : https://fmt.dev/", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "fmt/fmt", | "auto-lib": "fmt/fmt", | ||||
| } | } | ||||
| }, | }, | ||||
| "0.9.0": { | "0.9.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "A modern formatting library : https://fmt.dev/", | "description": "A modern formatting library : https://fmt.dev/", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "fmt/fmt", | "auto-lib": "fmt/fmt", | ||||
| } | } | ||||
| }, | }, | ||||
| "1.0.0": { | "1.0.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "A modern formatting library : https://fmt.dev/", | "description": "A modern formatting library : https://fmt.dev/", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "fmt/fmt", | "auto-lib": "fmt/fmt", | ||||
| } | } | ||||
| }, | }, | ||||
| "1.1.0": { | "1.1.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "A modern formatting library : https://fmt.dev/", | "description": "A modern formatting library : https://fmt.dev/", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "fmt/fmt", | "auto-lib": "fmt/fmt", | ||||
| } | } | ||||
| }, | }, | ||||
| "2.0.0": { | "2.0.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "A modern formatting library : https://fmt.dev/", | "description": "A modern formatting library : https://fmt.dev/", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "fmt/fmt", | "auto-lib": "fmt/fmt", | ||||
| } | } | ||||
| }, | }, | ||||
| "2.0.1": { | "2.0.1": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "A modern formatting library : https://fmt.dev/", | "description": "A modern formatting library : https://fmt.dev/", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "fmt/fmt", | "auto-lib": "fmt/fmt", | ||||
| } | } | ||||
| }, | }, | ||||
| "2.1.0": { | "2.1.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "A modern formatting library : https://fmt.dev/", | "description": "A modern formatting library : https://fmt.dev/", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "fmt/fmt", | "auto-lib": "fmt/fmt", | ||||
| } | } | ||||
| }, | }, | ||||
| "2.1.1": { | "2.1.1": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "A modern formatting library : https://fmt.dev/", | "description": "A modern formatting library : https://fmt.dev/", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "fmt/fmt", | "auto-lib": "fmt/fmt", | ||||
| } | } | ||||
| }, | }, | ||||
| "3.0.0": { | "3.0.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "A modern formatting library : https://fmt.dev/", | "description": "A modern formatting library : https://fmt.dev/", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "fmt/fmt", | "auto-lib": "fmt/fmt", | ||||
| } | } | ||||
| }, | }, | ||||
| "3.0.1": { | "3.0.1": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "A modern formatting library : https://fmt.dev/", | "description": "A modern formatting library : https://fmt.dev/", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "fmt/fmt", | "auto-lib": "fmt/fmt", | ||||
| } | } | ||||
| }, | }, | ||||
| "3.0.2": { | "3.0.2": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "A modern formatting library : https://fmt.dev/", | "description": "A modern formatting library : https://fmt.dev/", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "fmt/fmt", | "auto-lib": "fmt/fmt", | ||||
| } | } | ||||
| }, | }, | ||||
| "4.0.0": { | "4.0.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "A modern formatting library : https://fmt.dev/", | "description": "A modern formatting library : https://fmt.dev/", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "fmt/fmt", | "auto-lib": "fmt/fmt", | ||||
| } | } | ||||
| }, | }, | ||||
| "4.1.0": { | "4.1.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "A modern formatting library : https://fmt.dev/", | "description": "A modern formatting library : https://fmt.dev/", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "fmt/fmt", | "auto-lib": "fmt/fmt", | ||||
| } | } | ||||
| }, | }, | ||||
| "5.0.0": { | "5.0.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "A modern formatting library : https://fmt.dev/", | "description": "A modern formatting library : https://fmt.dev/", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "fmt/fmt", | "auto-lib": "fmt/fmt", | ||||
| } | } | ||||
| }, | }, | ||||
| "5.1.0": { | "5.1.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "A modern formatting library : https://fmt.dev/", | "description": "A modern formatting library : https://fmt.dev/", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "fmt/fmt", | "auto-lib": "fmt/fmt", | ||||
| } | } | ||||
| }, | }, | ||||
| "5.2.0": { | "5.2.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "A modern formatting library : https://fmt.dev/", | "description": "A modern formatting library : https://fmt.dev/", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "fmt/fmt", | "auto-lib": "fmt/fmt", | ||||
| } | } | ||||
| }, | }, | ||||
| "5.2.1": { | "5.2.1": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "A modern formatting library : https://fmt.dev/", | "description": "A modern formatting library : https://fmt.dev/", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "fmt/fmt", | "auto-lib": "fmt/fmt", | ||||
| } | } | ||||
| }, | }, | ||||
| "5.3.0": { | "5.3.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "A modern formatting library : https://fmt.dev/", | "description": "A modern formatting library : https://fmt.dev/", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "fmt/fmt", | "auto-lib": "fmt/fmt", | ||||
| } | } | ||||
| }, | }, | ||||
| "6.0.0": { | "6.0.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "A modern formatting library : https://fmt.dev/", | "description": "A modern formatting library : https://fmt.dev/", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "fmt/fmt", | "auto-lib": "fmt/fmt", | ||||
| } | } | ||||
| }, | }, | ||||
| "6.1.0": { | "6.1.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "A modern formatting library : https://fmt.dev/", | "description": "A modern formatting library : https://fmt.dev/", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "fmt/fmt", | "auto-lib": "fmt/fmt", | ||||
| } | } | ||||
| }, | }, | ||||
| "6.1.1": { | "6.1.1": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "A modern formatting library : https://fmt.dev/", | "description": "A modern formatting library : https://fmt.dev/", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "fmt/fmt", | "auto-lib": "fmt/fmt", | ||||
| } | } | ||||
| }, | }, | ||||
| "6.1.2": { | "6.1.2": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "A modern formatting library : https://fmt.dev/", | "description": "A modern formatting library : https://fmt.dev/", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "fmt/fmt", | "auto-lib": "fmt/fmt", | ||||
| }, | }, | ||||
| "ms-wil": { | "ms-wil": { | ||||
| "2020.03.16": { | "2020.03.16": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "The Windows Implementation Library", | "description": "The Windows Implementation Library", | ||||
| "git": { | "git": { | ||||
| "ref": "dds/2020.03.16", | "ref": "dds/2020.03.16", | ||||
| }, | }, | ||||
| "neo-concepts": { | "neo-concepts": { | ||||
| "0.1.0": { | "0.1.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "Minimal C++ concepts library. Contains many definitions from C++20.", | "description": "Minimal C++ concepts library. Contains many definitions from C++20.", | ||||
| "git": { | "git": { | ||||
| "ref": "0.1.0", | "ref": "0.1.0", | ||||
| } | } | ||||
| }, | }, | ||||
| "0.2.0": { | "0.2.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "Minimal C++ concepts library. Contains many definitions from C++20.", | "description": "Minimal C++ concepts library. Contains many definitions from C++20.", | ||||
| "git": { | "git": { | ||||
| "ref": "0.2.0", | "ref": "0.2.0", | ||||
| } | } | ||||
| }, | }, | ||||
| "0.2.1": { | "0.2.1": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "Minimal C++ concepts library. Contains many definitions from C++20.", | "description": "Minimal C++ concepts library. Contains many definitions from C++20.", | ||||
| "git": { | "git": { | ||||
| "ref": "0.2.1", | "ref": "0.2.1", | ||||
| } | } | ||||
| }, | }, | ||||
| "0.2.2": { | "0.2.2": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "Minimal C++ concepts library. Contains many definitions from C++20.", | "description": "Minimal C++ concepts library. Contains many definitions from C++20.", | ||||
| "git": { | "git": { | ||||
| "ref": "0.2.2", | "ref": "0.2.2", | ||||
| } | } | ||||
| }, | }, | ||||
| "0.3.0": { | "0.3.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "Minimal C++ concepts library. Contains many definitions from C++20.", | "description": "Minimal C++ concepts library. Contains many definitions from C++20.", | ||||
| "git": { | "git": { | ||||
| "ref": "0.3.0", | "ref": "0.3.0", | ||||
| } | } | ||||
| }, | }, | ||||
| "0.3.1": { | "0.3.1": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "Minimal C++ concepts library. Contains many definitions from C++20.", | "description": "Minimal C++ concepts library. Contains many definitions from C++20.", | ||||
| "git": { | "git": { | ||||
| "ref": "0.3.1", | "ref": "0.3.1", | ||||
| } | } | ||||
| }, | }, | ||||
| "0.3.2": { | "0.3.2": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "Minimal C++ concepts library. Contains many definitions from C++20.", | "description": "Minimal C++ concepts library. Contains many definitions from C++20.", | ||||
| "git": { | "git": { | ||||
| "ref": "0.3.2", | "ref": "0.3.2", | ||||
| }, | }, | ||||
| "neo-fun": { | "neo-fun": { | ||||
| "0.1.0": { | "0.1.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "Some library fundamentals that you might find useful", | "description": "Some library fundamentals that you might find useful", | ||||
| "git": { | "git": { | ||||
| "ref": "0.1.0", | "ref": "0.1.0", | ||||
| } | } | ||||
| }, | }, | ||||
| "0.1.1": { | "0.1.1": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "Some library fundamentals that you might find useful", | "description": "Some library fundamentals that you might find useful", | ||||
| "git": { | "git": { | ||||
| "ref": "0.1.1", | "ref": "0.1.1", | ||||
| } | } | ||||
| }, | }, | ||||
| "0.2.0": { | "0.2.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "Some library fundamentals that you might find useful", | "description": "Some library fundamentals that you might find useful", | ||||
| "git": { | "git": { | ||||
| "ref": "0.2.0", | "ref": "0.2.0", | ||||
| } | } | ||||
| }, | }, | ||||
| "0.2.1": { | "0.2.1": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "Some library fundamentals that you might find useful", | "description": "Some library fundamentals that you might find useful", | ||||
| "git": { | "git": { | ||||
| "ref": "0.2.1", | "ref": "0.2.1", | ||||
| } | } | ||||
| }, | }, | ||||
| "0.3.0": { | "0.3.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "Some library fundamentals that you might find useful", | "description": "Some library fundamentals that you might find useful", | ||||
| "git": { | "git": { | ||||
| "ref": "0.3.0", | "ref": "0.3.0", | ||||
| } | } | ||||
| }, | }, | ||||
| "0.3.1": { | "0.3.1": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "Some library fundamentals that you might find useful", | "description": "Some library fundamentals that you might find useful", | ||||
| "git": { | "git": { | ||||
| "ref": "0.3.1", | "ref": "0.3.1", | ||||
| } | } | ||||
| }, | }, | ||||
| "0.3.2": { | "0.3.2": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "Some library fundamentals that you might find useful", | "description": "Some library fundamentals that you might find useful", | ||||
| "git": { | "git": { | ||||
| "ref": "0.3.2", | "ref": "0.3.2", | ||||
| }, | }, | ||||
| "neo-sqlite3": { | "neo-sqlite3": { | ||||
| "0.1.0": { | "0.1.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "A modern and low-level C++ SQLite API", | "description": "A modern and low-level C++ SQLite API", | ||||
| "git": { | "git": { | ||||
| "ref": "0.1.0", | "ref": "0.1.0", | ||||
| } | } | ||||
| }, | }, | ||||
| "0.2.0": { | "0.2.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "A modern and low-level C++ SQLite API", | "description": "A modern and low-level C++ SQLite API", | ||||
| "git": { | "git": { | ||||
| "ref": "0.2.0", | "ref": "0.2.0", | ||||
| } | } | ||||
| }, | }, | ||||
| "0.2.1": { | "0.2.1": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "A modern and low-level C++ SQLite API", | "description": "A modern and low-level C++ SQLite API", | ||||
| "git": { | "git": { | ||||
| "ref": "0.2.1", | "ref": "0.2.1", | ||||
| } | } | ||||
| }, | }, | ||||
| "0.2.2": { | "0.2.2": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "A modern and low-level C++ SQLite API", | "description": "A modern and low-level C++ SQLite API", | ||||
| "git": { | "git": { | ||||
| "ref": "0.2.2", | "ref": "0.2.2", | ||||
| } | } | ||||
| }, | }, | ||||
| "0.2.3": { | "0.2.3": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "A modern and low-level C++ SQLite API", | "description": "A modern and low-level C++ SQLite API", | ||||
| "git": { | "git": { | ||||
| "ref": "0.2.3", | "ref": "0.2.3", | ||||
| }, | }, | ||||
| "nlohmann-json": { | "nlohmann-json": { | ||||
| "3.0.0": { | "3.0.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "JSON for Modern C++", | "description": "JSON for Modern C++", | ||||
| "git": { | "git": { | ||||
| "ref": "dds/3.0.0", | "ref": "dds/3.0.0", | ||||
| } | } | ||||
| }, | }, | ||||
| "3.0.1": { | "3.0.1": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "JSON for Modern C++", | "description": "JSON for Modern C++", | ||||
| "git": { | "git": { | ||||
| "ref": "dds/3.0.1", | "ref": "dds/3.0.1", | ||||
| } | } | ||||
| }, | }, | ||||
| "3.1.0": { | "3.1.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "JSON for Modern C++", | "description": "JSON for Modern C++", | ||||
| "git": { | "git": { | ||||
| "ref": "dds/3.1.0", | "ref": "dds/3.1.0", | ||||
| } | } | ||||
| }, | }, | ||||
| "3.1.1": { | "3.1.1": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "JSON for Modern C++", | "description": "JSON for Modern C++", | ||||
| "git": { | "git": { | ||||
| "ref": "dds/3.1.1", | "ref": "dds/3.1.1", | ||||
| } | } | ||||
| }, | }, | ||||
| "3.1.2": { | "3.1.2": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "JSON for Modern C++", | "description": "JSON for Modern C++", | ||||
| "git": { | "git": { | ||||
| "ref": "dds/3.1.2", | "ref": "dds/3.1.2", | ||||
| } | } | ||||
| }, | }, | ||||
| "3.2.0": { | "3.2.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "JSON for Modern C++", | "description": "JSON for Modern C++", | ||||
| "git": { | "git": { | ||||
| "ref": "dds/3.2.0", | "ref": "dds/3.2.0", | ||||
| } | } | ||||
| }, | }, | ||||
| "3.3.0": { | "3.3.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "JSON for Modern C++", | "description": "JSON for Modern C++", | ||||
| "git": { | "git": { | ||||
| "ref": "dds/3.3.0", | "ref": "dds/3.3.0", | ||||
| } | } | ||||
| }, | }, | ||||
| "3.4.0": { | "3.4.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "JSON for Modern C++", | "description": "JSON for Modern C++", | ||||
| "git": { | "git": { | ||||
| "ref": "dds/3.4.0", | "ref": "dds/3.4.0", | ||||
| } | } | ||||
| }, | }, | ||||
| "3.5.0": { | "3.5.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "JSON for Modern C++", | "description": "JSON for Modern C++", | ||||
| "git": { | "git": { | ||||
| "ref": "dds/3.5.0", | "ref": "dds/3.5.0", | ||||
| } | } | ||||
| }, | }, | ||||
| "3.6.0": { | "3.6.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "JSON for Modern C++", | "description": "JSON for Modern C++", | ||||
| "git": { | "git": { | ||||
| "ref": "dds/3.6.0", | "ref": "dds/3.6.0", | ||||
| } | } | ||||
| }, | }, | ||||
| "3.6.1": { | "3.6.1": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "JSON for Modern C++", | "description": "JSON for Modern C++", | ||||
| "git": { | "git": { | ||||
| "ref": "dds/3.6.1", | "ref": "dds/3.6.1", | ||||
| } | } | ||||
| }, | }, | ||||
| "3.7.0": { | "3.7.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "JSON for Modern C++", | "description": "JSON for Modern C++", | ||||
| "git": { | "git": { | ||||
| "ref": "dds/3.7.0", | "ref": "dds/3.7.0", | ||||
| } | } | ||||
| }, | }, | ||||
| "3.7.1": { | "3.7.1": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "JSON for Modern C++", | "description": "JSON for Modern C++", | ||||
| "git": { | "git": { | ||||
| "ref": "dds/3.7.1", | "ref": "dds/3.7.1", | ||||
| } | } | ||||
| }, | }, | ||||
| "3.7.2": { | "3.7.2": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "JSON for Modern C++", | "description": "JSON for Modern C++", | ||||
| "git": { | "git": { | ||||
| "ref": "dds/3.7.2", | "ref": "dds/3.7.2", | ||||
| } | } | ||||
| }, | }, | ||||
| "3.7.3": { | "3.7.3": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "JSON for Modern C++", | "description": "JSON for Modern C++", | ||||
| "git": { | "git": { | ||||
| "ref": "dds/3.7.3", | "ref": "dds/3.7.3", | ||||
| }, | }, | ||||
| "pubgrub": { | "pubgrub": { | ||||
| "0.1.2": { | "0.1.2": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "A C++ implementation of the Pubgrub version solving algorithm", | "description": "A C++ implementation of the Pubgrub version solving algorithm", | ||||
| "git": { | "git": { | ||||
| "ref": "0.1.2", | "ref": "0.1.2", | ||||
| } | } | ||||
| }, | }, | ||||
| "0.2.0": { | "0.2.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "A C++ implementation of the Pubgrub version solving algorithm", | "description": "A C++ implementation of the Pubgrub version solving algorithm", | ||||
| "git": { | "git": { | ||||
| "ref": "0.2.0", | "ref": "0.2.0", | ||||
| } | } | ||||
| }, | }, | ||||
| "0.2.1": { | "0.2.1": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "A C++ implementation of the Pubgrub version solving algorithm", | "description": "A C++ implementation of the Pubgrub version solving algorithm", | ||||
| "git": { | "git": { | ||||
| "ref": "0.2.1", | "ref": "0.2.1", | ||||
| }, | }, | ||||
| "range-v3": { | "range-v3": { | ||||
| "0.10.0": { | "0.10.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "Range library for C++14/17/20, basis for C++20's std::ranges", | "description": "Range library for C++14/17/20, basis for C++20's std::ranges", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "range-v3/range-v3", | "auto-lib": "range-v3/range-v3", | ||||
| } | } | ||||
| }, | }, | ||||
| "0.5.0": { | "0.5.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "Range library for C++14/17/20, basis for C++20's std::ranges", | "description": "Range library for C++14/17/20, basis for C++20's std::ranges", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "range-v3/range-v3", | "auto-lib": "range-v3/range-v3", | ||||
| } | } | ||||
| }, | }, | ||||
| "0.9.0": { | "0.9.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "Range library for C++14/17/20, basis for C++20's std::ranges", | "description": "Range library for C++14/17/20, basis for C++20's std::ranges", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "range-v3/range-v3", | "auto-lib": "range-v3/range-v3", | ||||
| } | } | ||||
| }, | }, | ||||
| "0.9.1": { | "0.9.1": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "Range library for C++14/17/20, basis for C++20's std::ranges", | "description": "Range library for C++14/17/20, basis for C++20's std::ranges", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "range-v3/range-v3", | "auto-lib": "range-v3/range-v3", | ||||
| }, | }, | ||||
| "semver": { | "semver": { | ||||
| "0.2.1": { | "0.2.1": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "A C++ library that implements Semantic Versioning parsing, emitting, types, ordering, and operations. See https://semver.org/", | "description": "A C++ library that implements Semantic Versioning parsing, emitting, types, ordering, and operations. See https://semver.org/", | ||||
| "git": { | "git": { | ||||
| "ref": "0.2.1", | "ref": "0.2.1", | ||||
| } | } | ||||
| }, | }, | ||||
| "0.2.2": { | "0.2.2": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "A C++ library that implements Semantic Versioning parsing, emitting, types, ordering, and operations. See https://semver.org/", | "description": "A C++ library that implements Semantic Versioning parsing, emitting, types, ordering, and operations. See https://semver.org/", | ||||
| "git": { | "git": { | ||||
| "ref": "0.2.2", | "ref": "0.2.2", | ||||
| }, | }, | ||||
| "spdlog": { | "spdlog": { | ||||
| "0.10.0": { | "0.10.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "Fast C++ logging library", | "description": "Fast C++ logging library", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "spdlog/spdlog", | "auto-lib": "spdlog/spdlog", | ||||
| } | } | ||||
| }, | }, | ||||
| "0.11.0": { | "0.11.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "Fast C++ logging library", | "description": "Fast C++ logging library", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "spdlog/spdlog", | "auto-lib": "spdlog/spdlog", | ||||
| } | } | ||||
| }, | }, | ||||
| "0.12.0": { | "0.12.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "Fast C++ logging library", | "description": "Fast C++ logging library", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "spdlog/spdlog", | "auto-lib": "spdlog/spdlog", | ||||
| } | } | ||||
| }, | }, | ||||
| "0.13.0": { | "0.13.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "Fast C++ logging library", | "description": "Fast C++ logging library", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "spdlog/spdlog", | "auto-lib": "spdlog/spdlog", | ||||
| } | } | ||||
| }, | }, | ||||
| "0.14.0": { | "0.14.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "Fast C++ logging library", | "description": "Fast C++ logging library", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "spdlog/spdlog", | "auto-lib": "spdlog/spdlog", | ||||
| } | } | ||||
| }, | }, | ||||
| "0.16.0": { | "0.16.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "Fast C++ logging library", | "description": "Fast C++ logging library", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "spdlog/spdlog", | "auto-lib": "spdlog/spdlog", | ||||
| } | } | ||||
| }, | }, | ||||
| "0.16.1": { | "0.16.1": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "Fast C++ logging library", | "description": "Fast C++ logging library", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "spdlog/spdlog", | "auto-lib": "spdlog/spdlog", | ||||
| } | } | ||||
| }, | }, | ||||
| "0.16.2": { | "0.16.2": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "Fast C++ logging library", | "description": "Fast C++ logging library", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "spdlog/spdlog", | "auto-lib": "spdlog/spdlog", | ||||
| } | } | ||||
| }, | }, | ||||
| "0.17.0": { | "0.17.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "Fast C++ logging library", | "description": "Fast C++ logging library", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "spdlog/spdlog", | "auto-lib": "spdlog/spdlog", | ||||
| } | } | ||||
| }, | }, | ||||
| "0.9.0": { | "0.9.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "Fast C++ logging library", | "description": "Fast C++ logging library", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "spdlog/spdlog", | "auto-lib": "spdlog/spdlog", | ||||
| } | } | ||||
| }, | }, | ||||
| "1.0.0": { | "1.0.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "Fast C++ logging library", | "description": "Fast C++ logging library", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "spdlog/spdlog", | "auto-lib": "spdlog/spdlog", | ||||
| } | } | ||||
| }, | }, | ||||
| "1.1.0": { | "1.1.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "Fast C++ logging library", | "description": "Fast C++ logging library", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "spdlog/spdlog", | "auto-lib": "spdlog/spdlog", | ||||
| } | } | ||||
| }, | }, | ||||
| "1.2.0": { | "1.2.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "Fast C++ logging library", | "description": "Fast C++ logging library", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "spdlog/spdlog", | "auto-lib": "spdlog/spdlog", | ||||
| } | } | ||||
| }, | }, | ||||
| "1.2.1": { | "1.2.1": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "Fast C++ logging library", | "description": "Fast C++ logging library", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "spdlog/spdlog", | "auto-lib": "spdlog/spdlog", | ||||
| } | } | ||||
| }, | }, | ||||
| "1.3.0": { | "1.3.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "Fast C++ logging library", | "description": "Fast C++ logging library", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "spdlog/spdlog", | "auto-lib": "spdlog/spdlog", | ||||
| } | } | ||||
| }, | }, | ||||
| "1.3.1": { | "1.3.1": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "Fast C++ logging library", | "description": "Fast C++ logging library", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "spdlog/spdlog", | "auto-lib": "spdlog/spdlog", | ||||
| } | } | ||||
| }, | }, | ||||
| "1.4.0": { | "1.4.0": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "Fast C++ logging library", | "description": "Fast C++ logging library", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "spdlog/spdlog", | "auto-lib": "spdlog/spdlog", | ||||
| } | } | ||||
| }, | }, | ||||
| "1.4.1": { | "1.4.1": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "Fast C++ logging library", | "description": "Fast C++ logging library", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "spdlog/spdlog", | "auto-lib": "spdlog/spdlog", | ||||
| } | } | ||||
| }, | }, | ||||
| "1.4.2": { | "1.4.2": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "Fast C++ logging library", | "description": "Fast C++ logging library", | ||||
| "git": { | "git": { | ||||
| "auto-lib": "spdlog/spdlog", | "auto-lib": "spdlog/spdlog", | ||||
| }, | }, | ||||
| "vob-json5": { | "vob-json5": { | ||||
| "0.1.5": { | "0.1.5": { | ||||
| "depends": {}, | |||||
| "depends": [], | |||||
| "description": "A C++ implementation of a JSON5 parser", | "description": "A C++ implementation of a JSON5 parser", | ||||
| "git": { | "git": { | ||||
| "ref": "0.1.5", | "ref": "0.1.5", | ||||
| }, | }, | ||||
| "vob-semester": { | "vob-semester": { | ||||
| "0.1.0": { | "0.1.0": { | ||||
| "depends": { | |||||
| "neo-concepts": "^0.2.1", | |||||
| "neo-fun": "^0.1.0" | |||||
| }, | |||||
| "depends": [ | |||||
| "neo-fun^0.1.0", | |||||
| "neo-concepts^0.2.1" | |||||
| ], | |||||
| "description": "A C++ library to process recursive dynamic data", | "description": "A C++ library to process recursive dynamic data", | ||||
| "git": { | "git": { | ||||
| "ref": "0.1.0", | "ref": "0.1.0", | ||||
| } | } | ||||
| }, | }, | ||||
| "0.1.1": { | "0.1.1": { | ||||
| "depends": { | |||||
| "neo-concepts": "^0.2.2", | |||||
| "neo-fun": "^0.1.1" | |||||
| }, | |||||
| "depends": [ | |||||
| "neo-fun^0.1.1", | |||||
| "neo-concepts^0.2.2" | |||||
| ], | |||||
| "description": "A C++ library to process recursive dynamic data", | "description": "A C++ library to process recursive dynamic data", | ||||
| "git": { | "git": { | ||||
| "ref": "0.1.1", | "ref": "0.1.1", | ||||
| } | } | ||||
| }, | }, | ||||
| "0.2.0": { | "0.2.0": { | ||||
| "depends": { | |||||
| "neo-concepts": "^0.3.2", | |||||
| "neo-fun": "^0.3.2" | |||||
| }, | |||||
| "depends": [ | |||||
| "neo-fun^0.3.2", | |||||
| "neo-concepts^0.3.2" | |||||
| ], | |||||
| "description": "A C++ library to process recursive dynamic data", | "description": "A C++ library to process recursive dynamic data", | ||||
| "git": { | "git": { | ||||
| "ref": "0.2.0", | "ref": "0.2.0", | ||||
| } | } | ||||
| }, | }, | ||||
| "0.2.1": { | "0.2.1": { | ||||
| "depends": { | |||||
| "neo-concepts": "^0.3.2", | |||||
| "neo-fun": "^0.3.2" | |||||
| }, | |||||
| "depends": [ | |||||
| "neo-fun^0.3.2", | |||||
| "neo-concepts^0.3.2" | |||||
| ], | |||||
| "description": "A C++ library to process recursive dynamic data", | "description": "A C++ library to process recursive dynamic data", | ||||
| "git": { | "git": { | ||||
| "ref": "0.2.1", | "ref": "0.2.1", |
| { | |||||
| "packages": { | |||||
| "ctre": { | |||||
| "2.7.0": { | |||||
| "depends": {}, | |||||
| "description": "A compile-time PCRE (almost) compatible regular expression matcher", | |||||
| "git": { | |||||
| "auto-lib": "hanickadot/ctre", | |||||
| "ref": "v2.7", | |||||
| "url": "https://github.com/hanickadot/compile-time-regular-expressions.git" | |||||
| } | |||||
| } | |||||
| }, | |||||
| "fmt": { | |||||
| "0.10.0": { | |||||
| "depends": {}, | |||||
| "description": "A modern formatting library : https://fmt.dev/", | |||||
| "git": { | |||||
| "auto-lib": "fmt/fmt", | |||||
| "ref": "0.10.0", | |||||
| "url": "https://github.com/fmtlib/fmt.git" | |||||
| } | |||||
| }, | |||||
| "0.12.0": { | |||||
| "depends": {}, | |||||
| "description": "A modern formatting library : https://fmt.dev/", | |||||
| "git": { | |||||
| "auto-lib": "fmt/fmt", | |||||
| "ref": "0.12.0", | |||||
| "url": "https://github.com/fmtlib/fmt.git" | |||||
| } | |||||
| }, | |||||
| "0.8.0": { | |||||
| "depends": {}, | |||||
| "description": "A modern formatting library : https://fmt.dev/", | |||||
| "git": { | |||||
| "auto-lib": "fmt/fmt", | |||||
| "ref": "0.8.0", | |||||
| "url": "https://github.com/fmtlib/fmt.git" | |||||
| } | |||||
| }, | |||||
| "0.9.0": { | |||||
| "depends": {}, | |||||
| "description": "A modern formatting library : https://fmt.dev/", | |||||
| "git": { | |||||
| "auto-lib": "fmt/fmt", | |||||
| "ref": "0.9.0", | |||||
| "url": "https://github.com/fmtlib/fmt.git" | |||||
| } | |||||
| }, | |||||
| "1.0.0": { | |||||
| "depends": {}, | |||||
| "description": "A modern formatting library : https://fmt.dev/", | |||||
| "git": { | |||||
| "auto-lib": "fmt/fmt", | |||||
| "ref": "1.0.0", | |||||
| "url": "https://github.com/fmtlib/fmt.git" | |||||
| } | |||||
| }, | |||||
| "1.1.0": { | |||||
| "depends": {}, | |||||
| "description": "A modern formatting library : https://fmt.dev/", | |||||
| "git": { | |||||
| "auto-lib": "fmt/fmt", | |||||
| "ref": "1.1.0", | |||||
| "url": "https://github.com/fmtlib/fmt.git" | |||||
| } | |||||
| }, | |||||
| "2.0.0": { | |||||
| "depends": {}, | |||||
| "description": "A modern formatting library : https://fmt.dev/", | |||||
| "git": { | |||||
| "auto-lib": "fmt/fmt", | |||||
| "ref": "2.0.0", | |||||
| "url": "https://github.com/fmtlib/fmt.git" | |||||
| } | |||||
| }, | |||||
| "2.0.1": { | |||||
| "depends": {}, | |||||
| "description": "A modern formatting library : https://fmt.dev/", | |||||
| "git": { | |||||
| "auto-lib": "fmt/fmt", | |||||
| "ref": "2.0.1", | |||||
| "url": "https://github.com/fmtlib/fmt.git" | |||||
| } | |||||
| }, | |||||
| "2.1.0": { | |||||
| "depends": {}, | |||||
| "description": "A modern formatting library : https://fmt.dev/", | |||||
| "git": { | |||||
| "auto-lib": "fmt/fmt", | |||||
| "ref": "2.1.0", | |||||
| "url": "https://github.com/fmtlib/fmt.git" | |||||
| } | |||||
| }, | |||||
| "2.1.1": { | |||||
| "depends": {}, | |||||
| "description": "A modern formatting library : https://fmt.dev/", | |||||
| "git": { | |||||
| "auto-lib": "fmt/fmt", | |||||
| "ref": "2.1.1", | |||||
| "url": "https://github.com/fmtlib/fmt.git" | |||||
| } | |||||
| }, | |||||
| "3.0.0": { | |||||
| "depends": {}, | |||||
| "description": "A modern formatting library : https://fmt.dev/", | |||||
| "git": { | |||||
| "auto-lib": "fmt/fmt", | |||||
| "ref": "3.0.0", | |||||
| "url": "https://github.com/fmtlib/fmt.git" | |||||
| } | |||||
| }, | |||||
| "3.0.1": { | |||||
| "depends": {}, | |||||
| "description": "A modern formatting library : https://fmt.dev/", | |||||
| "git": { | |||||
| "auto-lib": "fmt/fmt", | |||||
| "ref": "3.0.1", | |||||
| "url": "https://github.com/fmtlib/fmt.git" | |||||
| } | |||||
| }, | |||||
| "3.0.2": { | |||||
| "depends": {}, | |||||
| "description": "A modern formatting library : https://fmt.dev/", | |||||
| "git": { | |||||
| "auto-lib": "fmt/fmt", | |||||
| "ref": "3.0.2", | |||||
| "url": "https://github.com/fmtlib/fmt.git" | |||||
| } | |||||
| }, | |||||
| "4.0.0": { | |||||
| "depends": {}, | |||||
| "description": "A modern formatting library : https://fmt.dev/", | |||||
| "git": { | |||||
| "auto-lib": "fmt/fmt", | |||||
| "ref": "4.0.0", | |||||
| "url": "https://github.com/fmtlib/fmt.git" | |||||
| } | |||||
| }, | |||||
| "4.1.0": { | |||||
| "depends": {}, | |||||
| "description": "A modern formatting library : https://fmt.dev/", | |||||
| "git": { | |||||
| "auto-lib": "fmt/fmt", | |||||
| "ref": "4.1.0", | |||||
| "url": "https://github.com/fmtlib/fmt.git" | |||||
| } | |||||
| }, | |||||
| "5.0.0": { | |||||
| "depends": {}, | |||||
| "description": "A modern formatting library : https://fmt.dev/", | |||||
| "git": { | |||||
| "auto-lib": "fmt/fmt", | |||||
| "ref": "5.0.0", | |||||
| "url": "https://github.com/fmtlib/fmt.git" | |||||
| } | |||||
| }, | |||||
| "5.1.0": { | |||||
| "depends": {}, | |||||
| "description": "A modern formatting library : https://fmt.dev/", | |||||
| "git": { | |||||
| "auto-lib": "fmt/fmt", | |||||
| "ref": "5.1.0", | |||||
| "url": "https://github.com/fmtlib/fmt.git" | |||||
| } | |||||
| }, | |||||
| "5.2.0": { | |||||
| "depends": {}, | |||||
| "description": "A modern formatting library : https://fmt.dev/", | |||||
| "git": { | |||||
| "auto-lib": "fmt/fmt", | |||||
| "ref": "5.2.0", | |||||
| "url": "https://github.com/fmtlib/fmt.git" | |||||
| } | |||||
| }, | |||||
| "5.2.1": { | |||||
| "depends": {}, | |||||
| "description": "A modern formatting library : https://fmt.dev/", | |||||
| "git": { | |||||
| "auto-lib": "fmt/fmt", | |||||
| "ref": "5.2.1", | |||||
| "url": "https://github.com/fmtlib/fmt.git" | |||||
| } | |||||
| }, | |||||
| "5.3.0": { | |||||
| "depends": {}, | |||||
| "description": "A modern formatting library : https://fmt.dev/", | |||||
| "git": { | |||||
| "auto-lib": "fmt/fmt", | |||||
| "ref": "5.3.0", | |||||
| "url": "https://github.com/fmtlib/fmt.git" | |||||
| } | |||||
| }, | |||||
| "6.0.0": { | |||||
| "depends": {}, | |||||
| "description": "A modern formatting library : https://fmt.dev/", | |||||
| "git": { | |||||
| "auto-lib": "fmt/fmt", | |||||
| "ref": "6.0.0", | |||||
| "url": "https://github.com/fmtlib/fmt.git" | |||||
| } | |||||
| }, | |||||
| "6.1.0": { | |||||
| "depends": {}, | |||||
| "description": "A modern formatting library : https://fmt.dev/", | |||||
| "git": { | |||||
| "auto-lib": "fmt/fmt", | |||||
| "ref": "6.1.0", | |||||
| "url": "https://github.com/fmtlib/fmt.git" | |||||
| } | |||||
| }, | |||||
| "6.1.1": { | |||||
| "depends": {}, | |||||
| "description": "A modern formatting library : https://fmt.dev/", | |||||
| "git": { | |||||
| "auto-lib": "fmt/fmt", | |||||
| "ref": "6.1.1", | |||||
| "url": "https://github.com/fmtlib/fmt.git" | |||||
| } | |||||
| }, | |||||
| "6.1.2": { | |||||
| "depends": {}, | |||||
| "description": "A modern formatting library : https://fmt.dev/", | |||||
| "git": { | |||||
| "auto-lib": "fmt/fmt", | |||||
| "ref": "6.1.2", | |||||
| "url": "https://github.com/fmtlib/fmt.git" | |||||
| } | |||||
| } | |||||
| }, | |||||
| "ms-wil": { | |||||
| "2020.03.16": { | |||||
| "depends": {}, | |||||
| "description": "The Windows Implementation Library", | |||||
| "git": { | |||||
| "ref": "dds/2020.03.16", | |||||
| "url": "https://github.com/vector-of-bool/wil.git" | |||||
| } | |||||
| } | |||||
| }, | |||||
| "neo-concepts": { | |||||
| "0.1.0": { | |||||
| "depends": {}, | |||||
| "description": "Minimal C++ concepts library. Contains many definitions from C++20.", | |||||
| "git": { | |||||
| "ref": "0.1.0", | |||||
| "url": "https://github.com/vector-of-bool/neo-concepts.git" | |||||
| } | |||||
| }, | |||||
| "0.2.0": { | |||||
| "depends": {}, | |||||
| "description": "Minimal C++ concepts library. Contains many definitions from C++20.", | |||||
| "git": { | |||||
| "ref": "0.2.0", | |||||
| "url": "https://github.com/vector-of-bool/neo-concepts.git" | |||||
| } | |||||
| }, | |||||
| "0.2.1": { | |||||
| "depends": {}, | |||||
| "description": "Minimal C++ concepts library. Contains many definitions from C++20.", | |||||
| "git": { | |||||
| "ref": "0.2.1", | |||||
| "url": "https://github.com/vector-of-bool/neo-concepts.git" | |||||
| } | |||||
| }, | |||||
| "0.2.2": { | |||||
| "depends": {}, | |||||
| "description": "Minimal C++ concepts library. Contains many definitions from C++20.", | |||||
| "git": { | |||||
| "ref": "0.2.2", | |||||
| "url": "https://github.com/vector-of-bool/neo-concepts.git" | |||||
| } | |||||
| }, | |||||
| "0.3.0": { | |||||
| "depends": {}, | |||||
| "description": "Minimal C++ concepts library. Contains many definitions from C++20.", | |||||
| "git": { | |||||
| "ref": "0.3.0", | |||||
| "url": "https://github.com/vector-of-bool/neo-concepts.git" | |||||
| } | |||||
| }, | |||||
| "0.3.1": { | |||||
| "depends": {}, | |||||
| "description": "Minimal C++ concepts library. Contains many definitions from C++20.", | |||||
| "git": { | |||||
| "ref": "0.3.1", | |||||
| "url": "https://github.com/vector-of-bool/neo-concepts.git" | |||||
| } | |||||
| }, | |||||
| "0.3.2": { | |||||
| "depends": {}, | |||||
| "description": "Minimal C++ concepts library. Contains many definitions from C++20.", | |||||
| "git": { | |||||
| "ref": "0.3.2", | |||||
| "url": "https://github.com/vector-of-bool/neo-concepts.git" | |||||
| } | |||||
| } | |||||
| }, | |||||
| "neo-fun": { | |||||
| "0.1.0": { | |||||
| "depends": {}, | |||||
| "description": "Some library fundamentals that you might find useful", | |||||
| "git": { | |||||
| "ref": "0.1.0", | |||||
| "url": "https://github.com/vector-of-bool/neo-fun.git" | |||||
| } | |||||
| }, | |||||
| "0.1.1": { | |||||
| "depends": {}, | |||||
| "description": "Some library fundamentals that you might find useful", | |||||
| "git": { | |||||
| "ref": "0.1.1", | |||||
| "url": "https://github.com/vector-of-bool/neo-fun.git" | |||||
| } | |||||
| }, | |||||
| "0.2.0": { | |||||
| "depends": {}, | |||||
| "description": "Some library fundamentals that you might find useful", | |||||
| "git": { | |||||
| "ref": "0.2.0", | |||||
| "url": "https://github.com/vector-of-bool/neo-fun.git" | |||||
| } | |||||
| }, | |||||
| "0.2.1": { | |||||
| "depends": {}, | |||||
| "description": "Some library fundamentals that you might find useful", | |||||
| "git": { | |||||
| "ref": "0.2.1", | |||||
| "url": "https://github.com/vector-of-bool/neo-fun.git" | |||||
| } | |||||
| }, | |||||
| "0.3.0": { | |||||
| "depends": {}, | |||||
| "description": "Some library fundamentals that you might find useful", | |||||
| "git": { | |||||
| "ref": "0.3.0", | |||||
| "url": "https://github.com/vector-of-bool/neo-fun.git" | |||||
| } | |||||
| }, | |||||
| "0.3.1": { | |||||
| "depends": {}, | |||||
| "description": "Some library fundamentals that you might find useful", | |||||
| "git": { | |||||
| "ref": "0.3.1", | |||||
| "url": "https://github.com/vector-of-bool/neo-fun.git" | |||||
| } | |||||
| }, | |||||
| "0.3.2": { | |||||
| "depends": {}, | |||||
| "description": "Some library fundamentals that you might find useful", | |||||
| "git": { | |||||
| "ref": "0.3.2", | |||||
| "url": "https://github.com/vector-of-bool/neo-fun.git" | |||||
| } | |||||
| } | |||||
| }, | |||||
| "neo-sqlite3": { | |||||
| "0.1.0": { | |||||
| "depends": {}, | |||||
| "description": "A modern and low-level C++ SQLite API", | |||||
| "git": { | |||||
| "ref": "0.1.0", | |||||
| "url": "https://github.com/vector-of-bool/neo-sqlite3.git" | |||||
| } | |||||
| }, | |||||
| "0.2.0": { | |||||
| "depends": {}, | |||||
| "description": "A modern and low-level C++ SQLite API", | |||||
| "git": { | |||||
| "ref": "0.2.0", | |||||
| "url": "https://github.com/vector-of-bool/neo-sqlite3.git" | |||||
| } | |||||
| }, | |||||
| "0.2.1": { | |||||
| "depends": {}, | |||||
| "description": "A modern and low-level C++ SQLite API", | |||||
| "git": { | |||||
| "ref": "0.2.1", | |||||
| "url": "https://github.com/vector-of-bool/neo-sqlite3.git" | |||||
| } | |||||
| }, | |||||
| "0.2.2": { | |||||
| "depends": {}, | |||||
| "description": "A modern and low-level C++ SQLite API", | |||||
| "git": { | |||||
| "ref": "0.2.2", | |||||
| "url": "https://github.com/vector-of-bool/neo-sqlite3.git" | |||||
| } | |||||
| }, | |||||
| "0.2.3": { | |||||
| "depends": {}, | |||||
| "description": "A modern and low-level C++ SQLite API", | |||||
| "git": { | |||||
| "ref": "0.2.3", | |||||
| "url": "https://github.com/vector-of-bool/neo-sqlite3.git" | |||||
| } | |||||
| } | |||||
| }, | |||||
| "nlohmann-json": { | |||||
| "3.0.0": { | |||||
| "depends": {}, | |||||
| "description": "JSON for Modern C++", | |||||
| "git": { | |||||
| "ref": "dds/3.0.0", | |||||
| "url": "https://github.com/vector-of-bool/json.git" | |||||
| } | |||||
| }, | |||||
| "3.0.1": { | |||||
| "depends": {}, | |||||
| "description": "JSON for Modern C++", | |||||
| "git": { | |||||
| "ref": "dds/3.0.1", | |||||
| "url": "https://github.com/vector-of-bool/json.git" | |||||
| } | |||||
| }, | |||||
| "3.1.0": { | |||||
| "depends": {}, | |||||
| "description": "JSON for Modern C++", | |||||
| "git": { | |||||
| "ref": "dds/3.1.0", | |||||
| "url": "https://github.com/vector-of-bool/json.git" | |||||
| } | |||||
| }, | |||||
| "3.1.1": { | |||||
| "depends": {}, | |||||
| "description": "JSON for Modern C++", | |||||
| "git": { | |||||
| "ref": "dds/3.1.1", | |||||
| "url": "https://github.com/vector-of-bool/json.git" | |||||
| } | |||||
| }, | |||||
| "3.1.2": { | |||||
| "depends": {}, | |||||
| "description": "JSON for Modern C++", | |||||
| "git": { | |||||
| "ref": "dds/3.1.2", | |||||
| "url": "https://github.com/vector-of-bool/json.git" | |||||
| } | |||||
| }, | |||||
| "3.2.0": { | |||||
| "depends": {}, | |||||
| "description": "JSON for Modern C++", | |||||
| "git": { | |||||
| "ref": "dds/3.2.0", | |||||
| "url": "https://github.com/vector-of-bool/json.git" | |||||
| } | |||||
| }, | |||||
| "3.3.0": { | |||||
| "depends": {}, | |||||
| "description": "JSON for Modern C++", | |||||
| "git": { | |||||
| "ref": "dds/3.3.0", | |||||
| "url": "https://github.com/vector-of-bool/json.git" | |||||
| } | |||||
| }, | |||||
| "3.4.0": { | |||||
| "depends": {}, | |||||
| "description": "JSON for Modern C++", | |||||
| "git": { | |||||
| "ref": "dds/3.4.0", | |||||
| "url": "https://github.com/vector-of-bool/json.git" | |||||
| } | |||||
| }, | |||||
| "3.5.0": { | |||||
| "depends": {}, | |||||
| "description": "JSON for Modern C++", | |||||
| "git": { | |||||
| "ref": "dds/3.5.0", | |||||
| "url": "https://github.com/vector-of-bool/json.git" | |||||
| } | |||||
| }, | |||||
| "3.6.0": { | |||||
| "depends": {}, | |||||
| "description": "JSON for Modern C++", | |||||
| "git": { | |||||
| "ref": "dds/3.6.0", | |||||
| "url": "https://github.com/vector-of-bool/json.git" | |||||
| } | |||||
| }, | |||||
| "3.6.1": { | |||||
| "depends": {}, | |||||
| "description": "JSON for Modern C++", | |||||
| "git": { | |||||
| "ref": "dds/3.6.1", | |||||
| "url": "https://github.com/vector-of-bool/json.git" | |||||
| } | |||||
| }, | |||||
| "3.7.0": { | |||||
| "depends": {}, | |||||
| "description": "JSON for Modern C++", | |||||
| "git": { | |||||
| "ref": "dds/3.7.0", | |||||
| "url": "https://github.com/vector-of-bool/json.git" | |||||
| } | |||||
| }, | |||||
| "3.7.1": { | |||||
| "depends": {}, | |||||
| "description": "JSON for Modern C++", | |||||
| "git": { | |||||
| "ref": "dds/3.7.1", | |||||
| "url": "https://github.com/vector-of-bool/json.git" | |||||
| } | |||||
| }, | |||||
| "3.7.2": { | |||||
| "depends": {}, | |||||
| "description": "JSON for Modern C++", | |||||
| "git": { | |||||
| "ref": "dds/3.7.2", | |||||
| "url": "https://github.com/vector-of-bool/json.git" | |||||
| } | |||||
| }, | |||||
| "3.7.3": { | |||||
| "depends": {}, | |||||
| "description": "JSON for Modern C++", | |||||
| "git": { | |||||
| "ref": "dds/3.7.3", | |||||
| "url": "https://github.com/vector-of-bool/json.git" | |||||
| } | |||||
| } | |||||
| }, | |||||
| "pubgrub": { | |||||
| "0.1.2": { | |||||
| "depends": {}, | |||||
| "description": "A C++ implementation of the Pubgrub version solving algorithm", | |||||
| "git": { | |||||
| "ref": "0.1.2", | |||||
| "url": "https://github.com/vector-of-bool/pubgrub.git" | |||||
| } | |||||
| }, | |||||
| "0.2.0": { | |||||
| "depends": {}, | |||||
| "description": "A C++ implementation of the Pubgrub version solving algorithm", | |||||
| "git": { | |||||
| "ref": "0.2.0", | |||||
| "url": "https://github.com/vector-of-bool/pubgrub.git" | |||||
| } | |||||
| }, | |||||
| "0.2.1": { | |||||
| "depends": {}, | |||||
| "description": "A C++ implementation of the Pubgrub version solving algorithm", | |||||
| "git": { | |||||
| "ref": "0.2.1", | |||||
| "url": "https://github.com/vector-of-bool/pubgrub.git" | |||||
| } | |||||
| } | |||||
| }, | |||||
| "range-v3": { | |||||
| "0.10.0": { | |||||
| "depends": {}, | |||||
| "description": "Range library for C++14/17/20, basis for C++20's std::ranges", | |||||
| "git": { | |||||
| "auto-lib": "range-v3/range-v3", | |||||
| "ref": "0.10.0", | |||||
| "url": "https://github.com/ericniebler/range-v3.git" | |||||
| } | |||||
| }, | |||||
| "0.5.0": { | |||||
| "depends": {}, | |||||
| "description": "Range library for C++14/17/20, basis for C++20's std::ranges", | |||||
| "git": { | |||||
| "auto-lib": "range-v3/range-v3", | |||||
| "ref": "0.5.0", | |||||
| "url": "https://github.com/ericniebler/range-v3.git" | |||||
| } | |||||
| }, | |||||
| "0.9.0": { | |||||
| "depends": {}, | |||||
| "description": "Range library for C++14/17/20, basis for C++20's std::ranges", | |||||
| "git": { | |||||
| "auto-lib": "range-v3/range-v3", | |||||
| "ref": "0.9.0", | |||||
| "url": "https://github.com/ericniebler/range-v3.git" | |||||
| } | |||||
| }, | |||||
| "0.9.1": { | |||||
| "depends": {}, | |||||
| "description": "Range library for C++14/17/20, basis for C++20's std::ranges", | |||||
| "git": { | |||||
| "auto-lib": "range-v3/range-v3", | |||||
| "ref": "0.9.1", | |||||
| "url": "https://github.com/ericniebler/range-v3.git" | |||||
| } | |||||
| } | |||||
| }, | |||||
| "semver": { | |||||
| "0.2.1": { | |||||
| "depends": {}, | |||||
| "description": "A C++ library that implements Semantic Versioning parsing, emitting, types, ordering, and operations. See https://semver.org/", | |||||
| "git": { | |||||
| "ref": "0.2.1", | |||||
| "url": "https://github.com/vector-of-bool/semver.git" | |||||
| } | |||||
| }, | |||||
| "0.2.2": { | |||||
| "depends": {}, | |||||
| "description": "A C++ library that implements Semantic Versioning parsing, emitting, types, ordering, and operations. See https://semver.org/", | |||||
| "git": { | |||||
| "ref": "0.2.2", | |||||
| "url": "https://github.com/vector-of-bool/semver.git" | |||||
| } | |||||
| } | |||||
| }, | |||||
| "spdlog": { | |||||
| "0.10.0": { | |||||
| "depends": {}, | |||||
| "description": "Fast C++ logging library", | |||||
| "git": { | |||||
| "auto-lib": "spdlog/spdlog", | |||||
| "ref": "v0.10.0", | |||||
| "url": "https://github.com/gabime/spdlog.git" | |||||
| } | |||||
| }, | |||||
| "0.11.0": { | |||||
| "depends": {}, | |||||
| "description": "Fast C++ logging library", | |||||
| "git": { | |||||
| "auto-lib": "spdlog/spdlog", | |||||
| "ref": "v0.11.0", | |||||
| "url": "https://github.com/gabime/spdlog.git" | |||||
| } | |||||
| }, | |||||
| "0.12.0": { | |||||
| "depends": {}, | |||||
| "description": "Fast C++ logging library", | |||||
| "git": { | |||||
| "auto-lib": "spdlog/spdlog", | |||||
| "ref": "v0.12.0", | |||||
| "url": "https://github.com/gabime/spdlog.git" | |||||
| } | |||||
| }, | |||||
| "0.13.0": { | |||||
| "depends": {}, | |||||
| "description": "Fast C++ logging library", | |||||
| "git": { | |||||
| "auto-lib": "spdlog/spdlog", | |||||
| "ref": "v0.13.0", | |||||
| "url": "https://github.com/gabime/spdlog.git" | |||||
| } | |||||
| }, | |||||
| "0.14.0": { | |||||
| "depends": {}, | |||||
| "description": "Fast C++ logging library", | |||||
| "git": { | |||||
| "auto-lib": "spdlog/spdlog", | |||||
| "ref": "v0.14.0", | |||||
| "url": "https://github.com/gabime/spdlog.git" | |||||
| } | |||||
| }, | |||||
| "0.16.0": { | |||||
| "depends": {}, | |||||
| "description": "Fast C++ logging library", | |||||
| "git": { | |||||
| "auto-lib": "spdlog/spdlog", | |||||
| "ref": "v0.16.0", | |||||
| "url": "https://github.com/gabime/spdlog.git" | |||||
| } | |||||
| }, | |||||
| "0.16.1": { | |||||
| "depends": {}, | |||||
| "description": "Fast C++ logging library", | |||||
| "git": { | |||||
| "auto-lib": "spdlog/spdlog", | |||||
| "ref": "v0.16.1", | |||||
| "url": "https://github.com/gabime/spdlog.git" | |||||
| } | |||||
| }, | |||||
| "0.16.2": { | |||||
| "depends": {}, | |||||
| "description": "Fast C++ logging library", | |||||
| "git": { | |||||
| "auto-lib": "spdlog/spdlog", | |||||
| "ref": "v0.16.2", | |||||
| "url": "https://github.com/gabime/spdlog.git" | |||||
| } | |||||
| }, | |||||
| "0.17.0": { | |||||
| "depends": {}, | |||||
| "description": "Fast C++ logging library", | |||||
| "git": { | |||||
| "auto-lib": "spdlog/spdlog", | |||||
| "ref": "v0.17.0", | |||||
| "url": "https://github.com/gabime/spdlog.git" | |||||
| } | |||||
| }, | |||||
| "0.9.0": { | |||||
| "depends": {}, | |||||
| "description": "Fast C++ logging library", | |||||
| "git": { | |||||
| "auto-lib": "spdlog/spdlog", | |||||
| "ref": "v0.9.0", | |||||
| "url": "https://github.com/gabime/spdlog.git" | |||||
| } | |||||
| }, | |||||
| "1.0.0": { | |||||
| "depends": {}, | |||||
| "description": "Fast C++ logging library", | |||||
| "git": { | |||||
| "auto-lib": "spdlog/spdlog", | |||||
| "ref": "v1.0.0", | |||||
| "url": "https://github.com/gabime/spdlog.git" | |||||
| } | |||||
| }, | |||||
| "1.1.0": { | |||||
| "depends": {}, | |||||
| "description": "Fast C++ logging library", | |||||
| "git": { | |||||
| "auto-lib": "spdlog/spdlog", | |||||
| "ref": "v1.1.0", | |||||
| "url": "https://github.com/gabime/spdlog.git" | |||||
| } | |||||
| }, | |||||
| "1.2.0": { | |||||
| "depends": {}, | |||||
| "description": "Fast C++ logging library", | |||||
| "git": { | |||||
| "auto-lib": "spdlog/spdlog", | |||||
| "ref": "v1.2.0", | |||||
| "url": "https://github.com/gabime/spdlog.git" | |||||
| } | |||||
| }, | |||||
| "1.2.1": { | |||||
| "depends": {}, | |||||
| "description": "Fast C++ logging library", | |||||
| "git": { | |||||
| "auto-lib": "spdlog/spdlog", | |||||
| "ref": "v1.2.1", | |||||
| "url": "https://github.com/gabime/spdlog.git" | |||||
| } | |||||
| }, | |||||
| "1.3.0": { | |||||
| "depends": {}, | |||||
| "description": "Fast C++ logging library", | |||||
| "git": { | |||||
| "auto-lib": "spdlog/spdlog", | |||||
| "ref": "v1.3.0", | |||||
| "url": "https://github.com/gabime/spdlog.git" | |||||
| } | |||||
| }, | |||||
| "1.3.1": { | |||||
| "depends": {}, | |||||
| "description": "Fast C++ logging library", | |||||
| "git": { | |||||
| "auto-lib": "spdlog/spdlog", | |||||
| "ref": "v1.3.1", | |||||
| "url": "https://github.com/gabime/spdlog.git" | |||||
| } | |||||
| }, | |||||
| "1.4.0": { | |||||
| "depends": {}, | |||||
| "description": "Fast C++ logging library", | |||||
| "git": { | |||||
| "auto-lib": "spdlog/spdlog", | |||||
| "ref": "v1.4.0", | |||||
| "url": "https://github.com/gabime/spdlog.git" | |||||
| } | |||||
| }, | |||||
| "1.4.1": { | |||||
| "depends": {}, | |||||
| "description": "Fast C++ logging library", | |||||
| "git": { | |||||
| "auto-lib": "spdlog/spdlog", | |||||
| "ref": "v1.4.1", | |||||
| "url": "https://github.com/gabime/spdlog.git" | |||||
| } | |||||
| }, | |||||
| "1.4.2": { | |||||
| "depends": {}, | |||||
| "description": "Fast C++ logging library", | |||||
| "git": { | |||||
| "auto-lib": "spdlog/spdlog", | |||||
| "ref": "v1.4.2", | |||||
| "url": "https://github.com/gabime/spdlog.git" | |||||
| } | |||||
| } | |||||
| }, | |||||
| "vob-json5": { | |||||
| "0.1.5": { | |||||
| "depends": {}, | |||||
| "description": "A C++ implementation of a JSON5 parser", | |||||
| "git": { | |||||
| "ref": "0.1.5", | |||||
| "url": "https://github.com/vector-of-bool/json5.git" | |||||
| } | |||||
| } | |||||
| }, | |||||
| "vob-semester": { | |||||
| "0.1.0": { | |||||
| "depends": { | |||||
| "neo-concepts": "^0.2.1", | |||||
| "neo-fun": "^0.1.0" | |||||
| }, | |||||
| "description": "A C++ library to process recursive dynamic data", | |||||
| "git": { | |||||
| "ref": "0.1.0", | |||||
| "url": "https://github.com/vector-of-bool/semester.git" | |||||
| } | |||||
| }, | |||||
| "0.1.1": { | |||||
| "depends": { | |||||
| "neo-concepts": "^0.2.2", | |||||
| "neo-fun": "^0.1.1" | |||||
| }, | |||||
| "description": "A C++ library to process recursive dynamic data", | |||||
| "git": { | |||||
| "ref": "0.1.1", | |||||
| "url": "https://github.com/vector-of-bool/semester.git" | |||||
| } | |||||
| }, | |||||
| "0.2.0": { | |||||
| "depends": { | |||||
| "neo-concepts": "^0.3.2", | |||||
| "neo-fun": "^0.3.2" | |||||
| }, | |||||
| "description": "A C++ library to process recursive dynamic data", | |||||
| "git": { | |||||
| "ref": "0.2.0", | |||||
| "url": "https://github.com/vector-of-bool/semester.git" | |||||
| } | |||||
| }, | |||||
| "0.2.1": { | |||||
| "depends": { | |||||
| "neo-concepts": "^0.3.2", | |||||
| "neo-fun": "^0.3.2" | |||||
| }, | |||||
| "description": "A C++ library to process recursive dynamic data", | |||||
| "git": { | |||||
| "ref": "0.2.1", | |||||
| "url": "https://github.com/vector-of-bool/semester.git" | |||||
| } | |||||
| } | |||||
| } | |||||
| }, | |||||
| "version": 1 | |||||
| } |
| #include <range/v3/view/split.hpp> | #include <range/v3/view/split.hpp> | ||||
| #include <range/v3/view/split_when.hpp> | #include <range/v3/view/split_when.hpp> | ||||
| #include <range/v3/view/transform.hpp> | #include <range/v3/view/transform.hpp> | ||||
| #include <semester/decomp.hpp> | |||||
| #include <semester/walk.hpp> | |||||
| #include <spdlog/spdlog.h> | #include <spdlog/spdlog.h> | ||||
| #include <json5/parse_data.hpp> | #include <json5/parse_data.hpp> | ||||
| using namespace dds; | using namespace dds; | ||||
| package_manifest package_manifest::load_from_file(const fs::path& fpath) { | |||||
| auto content = slurp_file(fpath); | |||||
| auto data = json5::parse_data(content); | |||||
| namespace { | |||||
| if (!data.is_object()) { | |||||
| throw_user_error<errc::invalid_pkg_manifest>("Root value must be an object"); | |||||
| } | |||||
| using require_obj = semester::require_type<json5::data::mapping_type>; | |||||
| using require_array = semester::require_type<json5::data::array_type>; | |||||
| using require_str = semester::require_type<std::string>; | |||||
| package_manifest parse_json(const json5::data& data, std::string_view fpath) { | |||||
| package_manifest ret; | package_manifest ret; | ||||
| using namespace semester::decompose_ops; | |||||
| auto res = semester::decompose( // | |||||
| data, | |||||
| try_seq{ | |||||
| require_type<json5::data::mapping_type>{ | |||||
| "The root of a package manifest must be an object (mapping)"}, | |||||
| mapping{ | |||||
| if_key{"$schema", just_accept}, | |||||
| if_key{ | |||||
| "name", | |||||
| require_type<std::string>{"`name` must be a string"}, | |||||
| put_into{ret.pkg_id.name}, | |||||
| }, | |||||
| if_key{ | |||||
| "namespace", | |||||
| require_type<std::string>{"`namespace` must be a string"}, | |||||
| put_into{ret.namespace_}, | |||||
| }, | |||||
| if_key{ | |||||
| "version", | |||||
| require_type<std::string>{"`version` must be a string"}, | |||||
| [&](auto&& version_str_) { | |||||
| auto& version = version_str_.as_string(); | |||||
| ret.pkg_id.version = semver::version::parse(version); | |||||
| return semester::dc_accept; | |||||
| }, | |||||
| }, | |||||
| if_key{ | |||||
| "depends", | |||||
| require_type<json5::data::mapping_type>{ | |||||
| "`depends` must be a mapping between package names and version ranges"}, | |||||
| mapping{[&](auto pkg_name, auto&& range_str_) { | |||||
| if (!range_str_.is_string()) { | |||||
| throw_user_error<errc::invalid_pkg_manifest>( | |||||
| "Dependency for '{}' must be a range string", pkg_name); | |||||
| } | |||||
| try { | |||||
| auto rng = semver::range::parse_restricted(range_str_.as_string()); | |||||
| dependency dep{std::string(pkg_name), {rng.low(), rng.high()}}; | |||||
| ret.dependencies.push_back(std::move(dep)); | |||||
| } catch (const semver::invalid_range&) { | |||||
| throw_user_error<errc::invalid_version_range_string>( | |||||
| "Invalid version range string '{}' in dependency declaration for " | |||||
| "'{}'", | |||||
| range_str_.as_string(), | |||||
| pkg_name); | |||||
| using namespace semester::walk_ops; | |||||
| auto push_depends_obj_kv = [&](std::string key, auto&& dat) { | |||||
| dependency pending_dep; | |||||
| if (!dat.is_string()) { | |||||
| return walk.reject("Dependency object values should be strings"); | |||||
| } | |||||
| try { | |||||
| auto rng = semver::range::parse_restricted(dat.as_string()); | |||||
| dependency dep{std::move(key), {rng.low(), rng.high()}}; | |||||
| ret.dependencies.push_back(std::move(dep)); | |||||
| } catch (const semver::invalid_range&) { | |||||
| throw_user_error<errc::invalid_version_range_string>( | |||||
| "Invalid version range string '{}' in dependency declaration for " | |||||
| "'{}'", | |||||
| dat.as_string(), | |||||
| key); | |||||
| } | |||||
| return walk.accept; | |||||
| }; | |||||
| walk(data, | |||||
| require_obj{"Root of package manifest should be a JSON object"}, | |||||
| mapping{ | |||||
| if_key{"$schema", just_accept}, | |||||
| required_key{"name", | |||||
| "A string 'name' is required", | |||||
| require_str{"'name' must be a string"}, | |||||
| put_into{ret.pkg_id.name}}, | |||||
| required_key{"namespace", | |||||
| "A string 'namespace' is a required ", | |||||
| require_str{"'namespace' must be a string"}, | |||||
| put_into{ret.namespace_}}, | |||||
| required_key{"version", | |||||
| "A 'version' string is requried", | |||||
| require_str{"'version' must be a string"}, | |||||
| put_into{ret.pkg_id.version, | |||||
| [](std::string s) { return semver::version::parse(s); }}}, | |||||
| if_key{"depends", | |||||
| [&](auto&& dat) { | |||||
| if (dat.is_object()) { | |||||
| spdlog::warn( | |||||
| "{}: Using a JSON object for 'depends' is deprecated. Use an" | |||||
| "array of strings instead.", | |||||
| fpath); | |||||
| return mapping{push_depends_obj_kv}(dat); | |||||
| } else if (dat.is_array()) { | |||||
| return for_each{put_into{std::back_inserter(ret.dependencies), | |||||
| [](const std::string& depstr) { | |||||
| return dependency::parse_depends_string( | |||||
| depstr); | |||||
| }}}(dat); | |||||
| } else { | |||||
| return walk.reject( | |||||
| "'depends' should be an array of dependency strings"); | |||||
| } | } | ||||
| return semester::dc_accept; | |||||
| }}, | }}, | ||||
| }, | |||||
| if_key{"test_driver", | |||||
| require_type<std::string>{"`test_driver` must be a string"}, | |||||
| [&](auto&& test_driver_str_) { | |||||
| auto& test_driver = test_driver_str_.as_string(); | |||||
| if (test_driver == "Catch-Main") { | |||||
| ret.test_driver = test_lib::catch_main; | |||||
| } else if (test_driver == "Catch") { | |||||
| ret.test_driver = test_lib::catch_; | |||||
| } else { | |||||
| auto dym = *did_you_mean(test_driver, {"Catch-Main", "Catch"}); | |||||
| throw_user_error<errc::unknown_test_driver>( | |||||
| "Unknown 'test_driver' '{}' (Did you mean '{}'?)", | |||||
| test_driver, | |||||
| dym); | |||||
| } | |||||
| return semester::dc_accept; | |||||
| }}, | |||||
| [&](auto key, auto&&) { | |||||
| return semester::dc_reject_t{ | |||||
| fmt::format("Unknown key `{}` in package manifest", key)}; | |||||
| }}}); | |||||
| auto rej = std::get_if<semester::dc_reject_t>(&res); | |||||
| if (rej) { | |||||
| throw_user_error<errc::invalid_pkg_manifest>(rej->message); | |||||
| } | |||||
| if_key{"test_driver", | |||||
| require_str{"'test_driver' must be a string"}, | |||||
| put_into{ret.test_driver, | |||||
| [](std::string const& td_str) { | |||||
| if (td_str == "Catch-Main") { | |||||
| return test_lib::catch_main; | |||||
| } else if (td_str == "Catch") { | |||||
| return test_lib::catch_; | |||||
| } else { | |||||
| auto dym = *did_you_mean(td_str, {"Catch-Main", "Catch"}); | |||||
| throw_user_error<errc::unknown_test_driver>( | |||||
| "Unknown 'test_driver' '{}' (Did you mean '{}'?)", | |||||
| td_str, | |||||
| dym); | |||||
| } | |||||
| }}}, | |||||
| }); | |||||
| return ret; | |||||
| } | |||||
| if (ret.pkg_id.name.empty()) { | |||||
| throw_user_error<errc::invalid_pkg_manifest>("The 'name' field is required."); | |||||
| } | |||||
| } // namespace | |||||
| if (ret.namespace_.empty()) { | |||||
| throw_user_error<errc::invalid_pkg_manifest>("The 'namespace'` field is required."); | |||||
| package_manifest package_manifest::load_from_file(const fs::path& fpath) { | |||||
| auto content = slurp_file(fpath); | |||||
| auto data = json5::parse_data(content); | |||||
| try { | |||||
| return parse_json(data, fpath.string()); | |||||
| } catch (const semester::walk_error& e) { | |||||
| throw_user_error<errc::invalid_pkg_manifest>(e.what()); | |||||
| } | } | ||||
| return ret; | |||||
| } | } | ||||
| std::optional<fs::path> package_manifest::find_in_directory(path_ref dirpath) { | std::optional<fs::path> package_manifest::find_in_directory(path_ref dirpath) { | ||||
| return std::nullopt; | return std::nullopt; | ||||
| } | } | ||||
| return load_from_file(*found); | return load_from_file(*found); | ||||
| } | |||||
| } |
| name: 'deps-test', | name: 'deps-test', | ||||
| "namespace": "test", | "namespace": "test", | ||||
| version: '0.0.0', | version: '0.0.0', | ||||
| depends: { | |||||
| 'neo-fun': '0.3.2', | |||||
| 'range-v3': '0.9.1', | |||||
| } | |||||
| depends: [ | |||||
| 'neo-fun@0.3.2', | |||||
| 'range-v3@0.9.1', | |||||
| ] | |||||
| } | } |
| name: 'use-catch2', | name: 'use-catch2', | ||||
| version: '1.0.0', | version: '1.0.0', | ||||
| namespace: 'test', | namespace: 'test', | ||||
| depends: { | |||||
| 'catch2': '2.12.4' | |||||
| } | |||||
| depends: [ | |||||
| 'catch2@2.12.4' | |||||
| ] | |||||
| } | } |
| name: 'use-cryptopp', | name: 'use-cryptopp', | ||||
| version: '1.0.0', | version: '1.0.0', | ||||
| namespace: 'test', | namespace: 'test', | ||||
| depends: { | |||||
| 'cryptopp': '8.2.0' | |||||
| } | |||||
| depends: [ | |||||
| 'cryptopp@8.2.0' | |||||
| ] | |||||
| } | } |
| name: 'use-libsodium', | name: 'use-libsodium', | ||||
| version: '1.0.0', | version: '1.0.0', | ||||
| namespace: 'test', | namespace: 'test', | ||||
| depends: { | |||||
| 'libsodium': '1.0.18' | |||||
| } | |||||
| depends: [ | |||||
| 'libsodium@1.0.18' | |||||
| ] | |||||
| } | } |
| "name": "json-test", | "name": "json-test", | ||||
| "version": "0.0.0", | "version": "0.0.0", | ||||
| "namespace": "test", | "namespace": "test", | ||||
| "depends": { | |||||
| "nlohmann-json": "3.7.1" | |||||
| } | |||||
| "depends": [ | |||||
| "nlohmann-json@3.7.1" | |||||
| ] | |||||
| } | } |
| name: 'test', | name: 'test', | ||||
| version: '0.0.0', | version: '0.0.0', | ||||
| "namespace": "test", | "namespace": "test", | ||||
| depends: { | |||||
| 'spdlog': '1.4.2', | |||||
| }, | |||||
| depends: [ | |||||
| 'spdlog@1.4.2', | |||||
| ], | |||||
| } | } |
| import pytest | import pytest | ||||
| from pathlib import Path | from pathlib import Path | ||||
| from typing import Sequence, NamedTuple | from typing import Sequence, NamedTuple | ||||
| import multiprocessing | |||||
| import subprocess | import subprocess | ||||
| import urllib.request | import urllib.request | ||||
| import shutil | import shutil | ||||
| if old_cat_path.is_file(): | if old_cat_path.is_file(): | ||||
| old_cat_path.unlink() | old_cat_path.unlink() | ||||
| ci_repo_dir = paths.PREBUILT_DIR / '_ci-repo' | |||||
| ci_repo_dir = paths.PREBUILT_DIR / 'ci-repo' | |||||
| if ci_repo_dir.exists(): | if ci_repo_dir.exists(): | ||||
| shutil.rmtree(ci_repo_dir) | shutil.rmtree(ci_repo_dir) | ||||
| proc.check_run([ | |||||
| self_build( | |||||
| paths.PREBUILT_DDS, | paths.PREBUILT_DDS, | ||||
| 'catalog', | |||||
| 'import', | |||||
| ('--catalog', old_cat_path), | |||||
| ('--json', paths.PROJECT_ROOT / 'catalog.json'), | |||||
| ]) | |||||
| self_build(paths.PREBUILT_DDS, | |||||
| toolchain=opts.toolchain, | |||||
| cat_path=old_cat_path, | |||||
| dds_flags=[('--repo-dir', ci_repo_dir)]) | |||||
| toolchain=opts.toolchain, | |||||
| cat_path=old_cat_path, | |||||
| cat_json_path=Path('catalog.old.json'), | |||||
| dds_flags=[('--repo-dir', ci_repo_dir)]) | |||||
| print('Main build PASSED!') | print('Main build PASSED!') | ||||
| print(f'A `dds` executable has been generated: {paths.CUR_BUILT_DDS}') | print(f'A `dds` executable has been generated: {paths.CUR_BUILT_DDS}') | ||||
| ) | ) | ||||
| return 0 | return 0 | ||||
| print('Bootstrapping myself:') | |||||
| new_cat_path = paths.BUILD_DIR / 'catalog.db' | new_cat_path = paths.BUILD_DIR / 'catalog.db' | ||||
| proc.check_run([ | |||||
| self_build( | |||||
| paths.CUR_BUILT_DDS, | paths.CUR_BUILT_DDS, | ||||
| 'catalog', | |||||
| 'import', | |||||
| ('--catalog', new_cat_path), | |||||
| ('--json', paths.PROJECT_ROOT / 'catalog.json'), | |||||
| ]) | |||||
| self_build(paths.CUR_BUILT_DDS, | |||||
| toolchain=opts.toolchain, | |||||
| cat_path=new_cat_path, | |||||
| dds_flags=[f'--repo-dir={ci_repo_dir}']) | |||||
| toolchain=opts.toolchain, | |||||
| cat_path=new_cat_path, | |||||
| dds_flags=[f'--repo-dir={ci_repo_dir}']) | |||||
| print('Bootstrap test PASSED!') | print('Bootstrap test PASSED!') | ||||
| return pytest.main([ | return pytest.main([ | ||||
| '-v', | '-v', | ||||
| '--durations=10', | '--durations=10', | ||||
| f'--basetemp={paths.BUILD_DIR / "_tmp"}', | f'--basetemp={paths.BUILD_DIR / "_tmp"}', | ||||
| '-n4', | |||||
| '-n', | |||||
| str(multiprocessing.cpu_count() + 2), | |||||
| 'tests/', | 'tests/', | ||||
| ]) | ]) | ||||
| import argparse | |||||
| import json | import json | ||||
| from typing import NamedTuple, Tuple, List, Sequence, Union, Optional, Mapping | from typing import NamedTuple, Tuple, List, Sequence, Union, Optional, Mapping | ||||
| import sys | import sys | ||||
| depends: Mapping[str, str] = {} | depends: Mapping[str, str] = {} | ||||
| description: str = '(No description provided)' | description: str = '(No description provided)' | ||||
| def to_dict(self) -> dict: | |||||
| def to_dict(self, new=False) -> dict: | |||||
| ret: dict = { | ret: dict = { | ||||
| 'description': self.description, | 'description': self.description, | ||||
| } | } | ||||
| ret['depends'] = self.depends | |||||
| if new: | |||||
| ret['depends'] = [k + v for k, v in self.depends.items()] | |||||
| else: | |||||
| ret['depends'] = self.depends | |||||
| if isinstance(self.remote, Git): | if isinstance(self.remote, Git): | ||||
| ret['git'] = self.remote.to_dict() | ret['git'] = self.remote.to_dict() | ||||
| return ret | return ret | ||||
| ]) | ]) | ||||
| packages = [ | |||||
| PACKAGES = [ | |||||
| many_versions( | many_versions( | ||||
| 'range-v3', | 'range-v3', | ||||
| ( | ( | ||||
| ), | ), | ||||
| ] | ] | ||||
| data = { | |||||
| 'version': 1, | |||||
| 'packages': { | |||||
| pkg.name: {ver.version: ver.to_dict() | |||||
| for ver in pkg.versions} | |||||
| for pkg in packages | |||||
| if __name__ == "__main__": | |||||
| parser = argparse.ArgumentParser() | |||||
| parser.add_argument('--new', action='store_true') | |||||
| args = parser.parse_args() | |||||
| data = { | |||||
| 'version': 1, | |||||
| 'packages': { | |||||
| pkg.name: | |||||
| {ver.version: ver.to_dict(new=args.new) | |||||
| for ver in pkg.versions} | |||||
| for pkg in PACKAGES | |||||
| } | |||||
| } | } | ||||
| } | |||||
| print(json.dumps(data, indent=2, sort_keys=True)) | |||||
| print(json.dumps(data, indent=2, sort_keys=True)) |
| toolchain: str, | toolchain: str, | ||||
| lmi_path: Path = None, | lmi_path: Path = None, | ||||
| cat_path: Path = Path('_build/catalog.db'), | cat_path: Path = Path('_build/catalog.db'), | ||||
| cat_json_path: Path = Path('catalog.json'), | |||||
| dds_flags: proc.CommandLine = ()): | dds_flags: proc.CommandLine = ()): | ||||
| # Copy the exe to another location, as windows refuses to let a binary be | # Copy the exe to another location, as windows refuses to let a binary be | ||||
| # replaced while it is executing | # replaced while it is executing | ||||
| 'catalog', | 'catalog', | ||||
| 'import', | 'import', | ||||
| f'--catalog={cat_path}', | f'--catalog={cat_path}', | ||||
| f'--json=catalog.json', | |||||
| f'--json={cat_json_path}', | |||||
| ) | ) | ||||
| proc.check_run( | proc.check_run( | ||||
| new_exe, | new_exe, |