From e133d0c97348a06514df790fef930775b9eb82a9 Mon Sep 17 00:00:00 2001 From: Myna <72279988+dmyna@users.noreply.github.com> Date: Thu, 6 Feb 2025 23:20:45 +0000 Subject: [PATCH] Merge Rust refactoring into master (#53) * build: fix wrong merge comments * refactor: type autoreport `chat`/`chatLog` correctly * refactor: use `SlashCommandOptionsOnlyBuilder` and `SlashCommandSubcommandsOnlyBuilder` for correct `data` function types * refactor: remove deprecated `SlashCommandBuilder` option * refactor: add type checking for `PartialGroupDMChannel` to avoid errors with `awaitMessages` method * build: fix incorrect typedoc version * build: add postinstall script to ensure `prisma generate` runs on some hosts * fix: reaction id/name not being filtered * fix: allow `console.log` logging for prod environment * fix: activate `PresetHandler.InicializateAll()` and implement it * feat: add new config models to schema (#9) * fix: implement no implemented case to autoreport autocomplete (#9) * refactor: remove unnecessary imports from `PresetHandler` * feat: prepare `PermissionsHandler` to use Prisma instead json files (#9) * feat: implement `PermissionsHandler` alterations (#9) * feat: base code of new `config` command (#9) * fix: put correct _id mapping for `CommandPermissions` model (#9) * fix: configure correctly `EnsureCommandsPermissions` and `AllowedRoles` (#9) * feat: allow guild owner to use `config` command without prior permissions (#9) * feat: implement `command-permissions` subcommand to`config` command (#9) * refactor: rename commands `mod` folder to `moderation` * feat: create base Rust code and modules (#38) * build: add Cargo files * build: add /target to .gitignore * chore: configure codelldb debug entry * refactor: add basic EventHandler (#38) * feat(handler): create `new` implementation to `Error` trait (#42) * feat(commands): improve `ping` command with gateway info * refactor(commands): add base of `kick` command (#41) * build(deps): add chrono and strum_macros as deps * refactor(database): implement prisma in Rust (#40) * refactor(database): implement `PunishmentHandler` add method in Rust (#40) * refactor(commands): implement kick command in Rust (#41) * chore: add `default-run`script * refactor(database): change prisma client provider (#40) * build(deps): add `regex` * refactor(utils): refactor `emojiFormat` and `customEmoji` in Rust (#42) * test(utils): rewrite `customEmoji` and `emojiFormat` tests in Rust (#42) * chore(docker): rewrite `Dockerfile` and `docker-compose.yml` to cover Rust refactoring (#42) * chore(scripts): create `dev` script` and rewrite `on-container_dev-init` to cover Rust refactoring (#42) * chore: add docker script for development on Windows * chore: remove useless lines from gitignore * refactor(utils): refactor `limitToMili` in Rust (#42) * test(utils): create unitary tests to `limit_to_milli` (#42) * chore(vscode): create debug entry to Rust debbuging with codelldb * feat: implement internationalization (#3) * feat: extract the remaining strings from the Rust code (#3) * build(deps): add strum * chore: implement Rust to the dev environment (#44) * feat: add supported locales (#52) * feat: implement i18n handler (#52) * feat(locales): add current locale strings (#52) * feat(command): prevent command base (#51) * refactor: create alias module --------- Co-authored-by: Vitor --- .gitignore | 45 +- .vscode/launch.json | 39 + Cargo.lock | 5020 +++++++++++++++++ Cargo.toml | 23 + Dockerfile | 22 +- __tests__/factorys/filter/customEmoji.test.ts | 28 - .../factorys/filter/sanitizeEmoji.test.ts | 32 - __tests__/factorys/verify/emojiFormat.test.ts | 32 - docker-compose.yml | 8 +- locales/command.yml | 33 + locales/error.yml | 23 + package.json | 5 +- permissions.json | 83 + prisma/schema.prisma | 90 +- scripts/dev | 21 + scripts/dev.ps1 | 4 + scripts/on-container_dev-init.bash | 16 +- src/bin/prisma.rs | 3 + src/commands/conf/config.ts | 202 + src/commands/conf/mod.rs | 0 src/commands/mod.rs | 12 + src/commands/{mod => moderation}/autoemote.ts | 0 .../{mod => moderation}/autoreport.ts | 39 +- src/commands/{mod => moderation}/ban.ts | 0 src/commands/{mod => moderation}/case.ts | 0 src/commands/moderation/kick.rs | 69 + src/commands/{mod => moderation}/kick.ts | 0 src/commands/moderation/mod.rs | 2 + .../{mod => moderation}/movecontent.ts | 3 +- src/commands/{mod => moderation}/mute.ts | 0 src/commands/moderation/prevent.rs | 98 + .../{mod => moderation}/punishment.ts | 5 +- src/commands/{mod => moderation}/warn.ts | 1 - src/commands/util/mod.rs | 1 + src/commands/util/ping.rs | 17 + src/handlers/command.rs | 0 src/handlers/error.rs | 79 + src/handlers/event.rs | 29 + src/handlers/i18n.rs | 49 + src/handlers/mod.rs | 5 + src/handlers/punishment.rs | 83 + src/index.ts | 5 +- src/lib/external/factories/preseted.f.ts | 7 +- src/lib/external/handlers/dmDialog.ts | 41 +- src/lib/system/factories/filter.f.ts | 96 - src/lib/system/factories/parse.f.ts | 123 - src/lib/system/factories/verify.f.ts | 35 +- src/lib/system/handlers/command.ts | 3 +- src/lib/system/handlers/interaction.ts | 14 +- src/lib/system/handlers/log.ts | 6 - src/lib/system/handlers/permission.ts | 189 +- .../system/handlers/presetDialogManager.ts | 13 + src/lib/system/handlers/presetHandler.ts | 53 +- src/main.rs | 101 + src/tests/mod.rs | 1 + src/tests/utils.rs | 105 + src/utils/filter.rs | 57 + src/utils/matchs.rs | 38 + src/utils/mod.rs | 5 + src/utils/parse.rs | 142 + src/utils/values/enums.rs | 16 + src/utils/values/mod.rs | 2 + src/utils/values/structs.rs | 9 + src/utils/verify.rs | 30 + yarn.lock | 376 +- 65 files changed, 7003 insertions(+), 685 deletions(-) create mode 100644 Cargo.lock create mode 100644 Cargo.toml delete mode 100755 __tests__/factorys/filter/customEmoji.test.ts delete mode 100755 __tests__/factorys/filter/sanitizeEmoji.test.ts delete mode 100755 __tests__/factorys/verify/emojiFormat.test.ts create mode 100644 locales/command.yml create mode 100755 locales/error.yml create mode 100755 permissions.json create mode 100755 scripts/dev create mode 100644 scripts/dev.ps1 create mode 100644 src/bin/prisma.rs create mode 100644 src/commands/conf/config.ts create mode 100644 src/commands/conf/mod.rs create mode 100644 src/commands/mod.rs rename src/commands/{mod => moderation}/autoemote.ts (100%) rename src/commands/{mod => moderation}/autoreport.ts (96%) rename src/commands/{mod => moderation}/ban.ts (100%) rename src/commands/{mod => moderation}/case.ts (100%) create mode 100644 src/commands/moderation/kick.rs rename src/commands/{mod => moderation}/kick.ts (100%) create mode 100644 src/commands/moderation/mod.rs rename src/commands/{mod => moderation}/movecontent.ts (99%) rename src/commands/{mod => moderation}/mute.ts (100%) create mode 100644 src/commands/moderation/prevent.rs rename src/commands/{mod => moderation}/punishment.ts (98%) rename src/commands/{mod => moderation}/warn.ts (99%) create mode 100644 src/commands/util/mod.rs create mode 100644 src/commands/util/ping.rs create mode 100644 src/handlers/command.rs create mode 100644 src/handlers/error.rs create mode 100644 src/handlers/event.rs create mode 100644 src/handlers/i18n.rs create mode 100644 src/handlers/mod.rs create mode 100644 src/handlers/punishment.rs delete mode 100755 src/lib/system/factories/filter.f.ts delete mode 100644 src/lib/system/factories/parse.f.ts create mode 100644 src/main.rs create mode 100644 src/tests/mod.rs create mode 100644 src/tests/utils.rs create mode 100644 src/utils/filter.rs create mode 100644 src/utils/matchs.rs create mode 100644 src/utils/mod.rs create mode 100644 src/utils/parse.rs create mode 100644 src/utils/values/enums.rs create mode 100644 src/utils/values/mod.rs create mode 100644 src/utils/values/structs.rs create mode 100644 src/utils/verify.rs diff --git a/.gitignore b/.gitignore index a768716..9dde1c1 100755 --- a/.gitignore +++ b/.gitignore @@ -23,27 +23,11 @@ lib-cov coverage *.lcov -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - # Compiled binary addons (https://nodejs.org/api/addons.html) build/Release # Dependency directories node_modules/ -jspm_packages/ - -# Snowpack dependency directory (https://snowpack.dev/) -web_modules/ # TypeScript cache *.tsbuildinfo @@ -57,12 +41,6 @@ web_modules/ # Optional stylelint cache .stylelintcache -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - # Optional REPL history .node_repl_history @@ -79,24 +57,6 @@ web_modules/ .env.production.local .env.local -# parcel-bundler cache (https://parceljs.org/) -.cache -.parcel-cache - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and not Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public -t - -# vuepress v2.x temp and cache directory -.temp -.cache - -# Docusaurus cache and generated files -.docusaurus - # Serverless directories .serverless/ @@ -125,4 +85,7 @@ discloud.config configs.json scripts/personal -config/default/permissions.json \ No newline at end of file +config/default/permissions.json + +/target +/src/prisma.rs \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json index 5f27571..5f1dd2a 100755 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -38,6 +38,45 @@ "outFiles": [ "${workspaceFolder}/dist/**/*.js" ] + }, + { + "name": "Test (Rust)", + "type": "lldb", + "request": "launch", + "cargo": { + "args": [ + "test", + "--no-run" + ] + }, + "args": [], + "cwd": "${workspaceFolder}", + }, + { + "name": "Run (Rust)", + "type": "lldb", + "request": "launch", + "cargo": { + "args": [ + "build", + "--bin=ifhany", + "--package=ifhany" + ], + "filter": { + "name": "ifhany", + "kind": "bin" + } + }, + "args": [], + "cwd": "${workspaceFolder}", + }, + { + "name": "Attach (Rust)", + "type": "lldb", + "request": "attach", + "pid": "${command:pickMyProcess}", + "program": "${workspaceFolder}/target/debug/ifhany", + "sourceLanguages": ["rust"] } ] } \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..a7a96c6 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,5020 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "addr2line" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom 0.2.15", + "once_cell", + "version_check", +] + +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "getrandom 0.2.15", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "0.7.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" +dependencies = [ + "memchr", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anyhow" +version = "1.0.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775" + +[[package]] +name = "arc-swap" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +dependencies = [ + "serde", +] + +[[package]] +name = "ascii" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eab1c04a571841102f5345a8fc0f6bb3d31c315dec879b5c6e42e40ce7ffa34e" + +[[package]] +name = "async-trait" +version = "0.1.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "atomic-shim" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67cd4b51d303cf3501c301e8125df442128d3c6d7c69f71b27833d253de47e77" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "autocfg" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + +[[package]] +name = "backtrace" +version = "0.3.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets 0.52.6", +] + +[[package]] +name = "base-x" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" + +[[package]] +name = "base36" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9c26bddc1271f7112e5ec797e8eeba6de2de211c1488e506b9500196dbf77c5" +dependencies = [ + "base-x", + "failure", +] + +[[package]] +name = "base62" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48fa474cf7492f9a299ba6019fb99ec673e1739556d48e8a90eabaea282ef0e4" + +[[package]] +name = "base64" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bigdecimal" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6773ddc0eafc0e509fb60e48dff7f450f8e674a0686ae8605e8d9901bd5eefa" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", + "serde", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bson" +version = "2.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "068208f2b6fcfa27a7f1ee37488d2bb8ba2640f68f5475d08e1d9130696aba59" +dependencies = [ + "ahash 0.8.11", + "base64 0.13.1", + "bitvec", + "chrono", + "hex", + "indexmap 2.6.0", + "js-sys", + "once_cell", + "rand 0.8.5", + "serde", + "serde_bytes", + "serde_json", + "time", + "uuid", +] + +[[package]] +name = "bstr" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "786a307d683a5bf92e6fd5fd69a7eb613751668d1d8d67d802846dfe367c62c8" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "builtin-psl-connectors" +version = "0.1.0" +source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.10#c4aeef82dbae310e974d6122160c7e3b5fb6df53" +dependencies = [ + "connection-string", + "either", + "enumflags2", + "indoc", + "lsp-types", + "once_cell", + "psl-core", + "regex", +] + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "bytecount" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ce89b21cab1437276d2650d57e971f9d548a2d9037cc231abdc0562b97498ce" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" + +[[package]] +name = "camino" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" +dependencies = [ + "camino", + "cargo-platform", + "semver 1.0.23", + "serde", + "serde_json", +] + +[[package]] +name = "cc" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd9de9f2205d5ef3fd67e685b0df337994ddd4495e2a28d185500d0e1edfea47" +dependencies = [ + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "serde", + "wasm-bindgen", + "windows-targets 0.52.6", +] + +[[package]] +name = "colored" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8" +dependencies = [ + "lazy_static", + "windows-sys 0.48.0", +] + +[[package]] +name = "combine" +version = "3.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da3da6baa321ec19e1cc41d31bf599f00c783d0517095cdaf0332e3fe8d20680" +dependencies = [ + "ascii", + "byteorder", + "either", + "memchr", + "unreachable", +] + +[[package]] +name = "command_attr" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fcc89439e1bb4e19050a9586a767781a3060000d2f3296fd2a40597ad9421c5" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "connection-string" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97faeec45f49581c458f8bf81992c5e3ec17d82cda99f59d3cea14eff62698d" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "convert_case" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb4a24b1aaf0fd0ce8b45161144d6f42cd91677fd5940fd431183eb023b3a2b8" + +[[package]] +name = "convert_case" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "cpufeatures" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ca741a962e1b0bff6d724a1a0958b686406e853bb14061f218562e1896f95e6" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "cuid" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7fe01ebbba358b9af4850d1a2b16d45f765137398e34134643790f19dc935a0" +dependencies = [ + "base36", + "cuid-util", + "cuid2", + "hostname 0.4.0", + "num", + "once_cell", + "rand 0.8.5", + "uuid", +] + +[[package]] +name = "cuid-util" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d59a706635108a7e8eaae7ec8e6154504fafa4a415ef38690d94fccea051757" + +[[package]] +name = "cuid2" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50e281dc36864ea88fae2ec4e21eb280e8239487acb1ddc59b528b0afa7997bd" +dependencies = [ + "cuid-util", + "getrandom 0.2.15", + "num", + "rand 0.8.5", + "sha3", +] + +[[package]] +name = "darling" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" +dependencies = [ + "darling_core 0.13.4", + "darling_macro 0.13.4", +] + +[[package]] +name = "darling" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +dependencies = [ + "darling_core 0.20.10", + "darling_macro 0.20.10", +] + +[[package]] +name = "darling_core" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 1.0.109", +] + +[[package]] +name = "darling_core" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.11.1", + "syn 2.0.89", +] + +[[package]] +name = "darling_macro" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" +dependencies = [ + "darling_core 0.13.4", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "darling_macro" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +dependencies = [ + "darling_core 0.20.10", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core 0.9.10", + "serde", +] + +[[package]] +name = "data-encoding" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" + +[[package]] +name = "datamodel-renderer" +version = "0.1.0" +source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.10#c4aeef82dbae310e974d6122160c7e3b5fb6df53" +dependencies = [ + "base64 0.13.1", + "once_cell", + "psl", + "regex", +] + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_more" +version = "0.99.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" +dependencies = [ + "convert_case 0.4.0", + "proc-macro2", + "quote", + "rustc_version 0.4.1", + "syn 2.0.89", +] + +[[package]] +name = "diagnostics" +version = "0.1.0" +source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.10#c4aeef82dbae310e974d6122160c7e3b5fb6df53" +dependencies = [ + "colored", + "indoc", + "pest", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer 0.10.4", + "crypto-common", + "subtle", +] + +[[package]] +name = "directories" +version = "4.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f51c5d4ddabd36886dd3e1438cb358cdcb0d7c499cb99cb4ac2e38e18b5cb210" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "dml" +version = "0.1.0" +source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.10#c4aeef82dbae310e974d6122160c7e3b5fb6df53" +dependencies = [ + "chrono", + "cuid", + "either", + "enumflags2", + "indoc", + "prisma-value", + "psl-core", + "schema-ast", + "serde", + "serde_json", + "uuid", +] + +[[package]] +name = "dmmf" +version = "0.1.0" +source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.10#c4aeef82dbae310e974d6122160c7e3b5fb6df53" +dependencies = [ + "bigdecimal", + "indexmap 1.9.3", + "prisma-models", + "psl", + "schema", + "schema-builder", + "serde", + "serde_json", +] + +[[package]] +name = "dotenv" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "endian-type" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" + +[[package]] +name = "enum-as-inner" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21cdad81446a7f7dc43f6a77409efeb9733d2fa65553efef6018ef257c959b73" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "enumflags2" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d232db7f5956f3f14313dc2f87985c58bd2c695ce124c8cdd984e08e15ac133d" +dependencies = [ + "enumflags2_derive", +] + +[[package]] +name = "enumflags2_derive" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "error-chain" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc" +dependencies = [ + "version_check", +] + +[[package]] +name = "failure" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86" +dependencies = [ + "backtrace", + "failure_derive", +] + +[[package]] +name = "failure_derive" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", + "synstructure 0.12.6", +] + +[[package]] +name = "fastrand" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "486f806e73c5707928240ddc295403b1b93c96a02038563881c4a2fd84b81ac4" + +[[package]] +name = "fixedbitset" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86d4de0081402f5e88cdac65c8dcdcc73118c1a7a465e2a05f0da05843a8ea33" + +[[package]] +name = "flate2" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "globset" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15f1ce686646e7f1e19bf7d5533fe443a45dbfb990e00629110797578b42fb19" +dependencies = [ + "aho-corasick 1.1.3", + "bstr", + "log", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "globwalk" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93e3af942408868f6934a7b85134a3230832b9977cf66125df2f9edcfce4ddcc" +dependencies = [ + "bitflags 1.3.2", + "ignore", + "walkdir", +] + +[[package]] +name = "graphql-parser" +version = "0.3.0" +source = "git+https://github.com/prisma/graphql-parser#6a3f58bd879065588e710cb02b5bd30c1ce182c3" +dependencies = [ + "combine", + "indexmap 1.9.3", + "thiserror", +] + +[[package]] +name = "h2" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap 2.6.0", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +dependencies = [ + "ahash 0.7.8", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.8", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + +[[package]] +name = "hashbrown" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3" + +[[package]] +name = "heck" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "hostname" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" +dependencies = [ + "libc", + "match_cfg", + "winapi", +] + +[[package]] +name = "hostname" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9c7c7c8ac16c798734b8a24560c1362120597c40d5e1459f09498f8f6c8f2ba" +dependencies = [ + "cfg-if", + "libc", + "windows", +] + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http 0.2.12", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hyper" +version = "0.14.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c08302e8fa335b151b788c775ff56e7a03ae64ff85c548ee820fecb70356e85" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http 0.2.12", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2 0.5.7", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +dependencies = [ + "futures-util", + "http 0.2.12", + "hyper", + "rustls 0.21.12", + "tokio", + "tokio-rustls 0.24.1", +] + +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper", + "native-tls", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" +dependencies = [ + "matches", + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "ifhany" +version = "2.0.0" +dependencies = [ + "chrono", + "dotenv", + "poise", + "prisma-client-rust", + "prisma-client-rust-cli", + "regex", + "rust-i18n", + "serde", + "serenity", + "strum", + "strum_macros", + "tokio", +] + +[[package]] +name = "ignore" +version = "0.4.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d89fd380afde86567dfba715db065673989d6253f42b88179abd3eae47bda4b" +dependencies = [ + "crossbeam-deque", + "globset", + "log", + "memchr", + "regex-automata", + "same-file", + "walkdir", + "winapi-util", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" +dependencies = [ + "equivalent", + "hashbrown 0.15.1", +] + +[[package]] +name = "indoc" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa799dd5ed20a7e349f3b4639aa80d74549c81716d9ec4f994c9b5815598306" + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "introspection-connector" +version = "0.1.0" +source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.10#c4aeef82dbae310e974d6122160c7e3b5fb6df53" +dependencies = [ + "anyhow", + "async-trait", + "enumflags2", + "psl", + "serde", + "serde_json", + "thiserror", + "user-facing-errors", +] + +[[package]] +name = "ipconfig" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" +dependencies = [ + "socket2 0.5.7", + "widestring", + "windows-sys 0.48.0", + "winreg", +] + +[[package]] +name = "ipnet" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "540654e97a3f4470a492cd30ff187bc95d89557a903a2bbf112e2fae98104ef2" + +[[package]] +name = "js-sys" +version = "0.3.72" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "json-rpc-api-build" +version = "0.1.0" +source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.10#c4aeef82dbae310e974d6122160c7e3b5fb6df53" +dependencies = [ + "backtrace", + "heck 0.3.3", + "serde", + "toml 0.5.11", +] + +[[package]] +name = "jsonrpc-core" +version = "17.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4467ab6dfa369b69e52bd0692e480c4d117410538526a57a304a0f2250fd95e" +dependencies = [ + "futures", + "futures-executor", + "futures-util", + "log", + "serde", + "serde_derive", + "serde_json", +] + +[[package]] +name = "keccak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "levenshtein" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db13adb97ab515a3691f56e4dbab09283d0b86cb45abd991d8634a9d6f501760" + +[[package]] +name = "libc" +version = "0.2.164" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "433bfe06b8c75da9b2e3fbea6e5329ff87748f0b144ef75306e674c3f6f7c13f" + +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.6.0", + "libc", +] + +[[package]] +name = "libyml" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64804cc6a5042d4f05379909ba25b503ec04e2c082151d62122d5dcaa274b961" + +[[package]] +name = "linked-hash-map" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "linux-raw-sys" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + +[[package]] +name = "litemap" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704" + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" + +[[package]] +name = "lru" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999beba7b6e8345721bd280141ed958096a2e4abdf74f67ff4ce49b4b54e47a" +dependencies = [ + "hashbrown 0.12.3", +] + +[[package]] +name = "lru-cache" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" +dependencies = [ + "linked-hash-map", +] + +[[package]] +name = "lsp-types" +version = "0.91.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2368312c59425dd133cb9a327afee65be0a633a8ce471d248e2202a48f8f68ae" +dependencies = [ + "bitflags 1.3.2", + "serde", + "serde_json", + "serde_repr", + "url", +] + +[[package]] +name = "mach" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" +dependencies = [ + "libc", +] + +[[package]] +name = "match_cfg" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" + +[[package]] +name = "matches" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" + +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if", + "digest 0.10.7", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "metrics" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e52eb6380b6d2a10eb3434aec0885374490f5b82c8aaf5cd487a183c98be834" +dependencies = [ + "ahash 0.7.8", + "metrics-macros", +] + +[[package]] +name = "metrics" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "142c53885123b68d94108295a09d4afe1a1388ed95b54d5dacd9a454753030f2" +dependencies = [ + "ahash 0.7.8", + "metrics-macros", +] + +[[package]] +name = "metrics-exporter-prometheus" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "953cbbb6f9ba4b9304f4df79b98cdc9d14071ed93065a9fca11c00c5d9181b66" +dependencies = [ + "hyper", + "indexmap 1.9.3", + "ipnet", + "metrics 0.19.0", + "metrics-util 0.13.0", + "parking_lot 0.11.2", + "quanta", + "thiserror", + "tokio", + "tracing", +] + +[[package]] +name = "metrics-macros" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49e30813093f757be5cf21e50389a24dc7dbb22c49f23b7e8f51d69b508a5ffa" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "metrics-util" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65a9e83b833e1d2e07010a386b197c13aa199bbd0fca5cf69bfa147972db890a" +dependencies = [ + "aho-corasick 0.7.20", + "atomic-shim", + "crossbeam-epoch", + "crossbeam-utils", + "hashbrown 0.11.2", + "indexmap 1.9.3", + "metrics 0.18.1", + "num_cpus", + "ordered-float", + "parking_lot 0.11.2", + "quanta", + "radix_trie", + "sketches-ddsketch", +] + +[[package]] +name = "metrics-util" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd1f4b69bef1e2b392b2d4a12902f2af90bb438ba4a66aa222d1023fa6561b50" +dependencies = [ + "atomic-shim", + "crossbeam-epoch", + "crossbeam-utils", + "hashbrown 0.11.2", + "metrics 0.19.0", + "num_cpus", + "parking_lot 0.11.2", + "quanta", + "sketches-ddsketch", +] + +[[package]] +name = "migration-connector" +version = "0.1.0" +source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.10#c4aeef82dbae310e974d6122160c7e3b5fb6df53" +dependencies = [ + "chrono", + "enumflags2", + "introspection-connector", + "psl", + "sha2 0.9.9", + "tracing", + "tracing-error", + "user-facing-errors", +] + +[[package]] +name = "migration-core" +version = "0.1.0" +source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.10#c4aeef82dbae310e974d6122160c7e3b5fb6df53" +dependencies = [ + "async-trait", + "chrono", + "enumflags2", + "json-rpc-api-build", + "jsonrpc-core", + "migration-connector", + "mongodb-migration-connector", + "psl", + "serde", + "serde_json", + "tokio", + "tracing", + "tracing-futures", + "tracing-subscriber", + "url", + "user-facing-errors", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "mini-moka" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c325dfab65f261f386debee8b0969da215b3fa0037e74c8a1234db7ba986d803" +dependencies = [ + "crossbeam-channel", + "crossbeam-utils", + "dashmap", + "skeptic", + "smallvec", + "tagptr", + "triomphe", +] + +[[package]] +name = "miniz_oxide" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +dependencies = [ + "adler2", +] + +[[package]] +name = "mio" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +dependencies = [ + "hermit-abi", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.52.0", +] + +[[package]] +name = "mongodb" +version = "2.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef206acb1b72389b49bc9985efe7eb1f8a9bb18e5680d262fac26c07f44025f1" +dependencies = [ + "async-trait", + "base64 0.13.1", + "bitflags 1.3.2", + "bson", + "chrono", + "derivative", + "derive_more", + "futures-core", + "futures-executor", + "futures-io", + "futures-util", + "hex", + "hmac", + "lazy_static", + "md-5", + "pbkdf2", + "percent-encoding", + "rand 0.8.5", + "rustc_version_runtime", + "rustls 0.21.12", + "rustls-pemfile", + "serde", + "serde_bytes", + "serde_with", + "sha-1", + "sha2 0.10.8", + "socket2 0.4.10", + "stringprep", + "strsim 0.10.0", + "take_mut", + "thiserror", + "tokio", + "tokio-rustls 0.24.1", + "tokio-util", + "trust-dns-proto", + "trust-dns-resolver", + "typed-builder", + "uuid", + "webpki-roots 0.25.4", +] + +[[package]] +name = "mongodb-client" +version = "0.1.0" +source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.10#c4aeef82dbae310e974d6122160c7e3b5fb6df53" +dependencies = [ + "mongodb", + "once_cell", + "percent-encoding", + "thiserror", +] + +[[package]] +name = "mongodb-introspection-connector" +version = "0.1.0" +source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.10#c4aeef82dbae310e974d6122160c7e3b5fb6df53" +dependencies = [ + "async-trait", + "convert_case 0.5.0", + "datamodel-renderer", + "enumflags2", + "futures", + "indoc", + "introspection-connector", + "mongodb", + "mongodb-client", + "mongodb-schema-describer", + "once_cell", + "psl", + "regex", + "serde_json", + "thiserror", + "user-facing-errors", +] + +[[package]] +name = "mongodb-migration-connector" +version = "0.1.0" +source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.10#c4aeef82dbae310e974d6122160c7e3b5fb6df53" +dependencies = [ + "enumflags2", + "futures", + "migration-connector", + "mongodb", + "mongodb-client", + "mongodb-introspection-connector", + "mongodb-schema-describer", + "psl", + "serde_json", + "tokio", + "tracing", +] + +[[package]] +name = "mongodb-query-connector" +version = "0.1.0" +source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.10#c4aeef82dbae310e974d6122160c7e3b5fb6df53" +dependencies = [ + "anyhow", + "async-trait", + "bigdecimal", + "bson", + "chrono", + "cuid", + "futures", + "indexmap 1.9.3", + "itertools 0.10.5", + "mongodb", + "mongodb-client", + "prisma-models", + "prisma-value", + "psl", + "query-connector", + "query-engine-metrics", + "rand 0.7.3", + "regex", + "serde", + "serde_json", + "thiserror", + "tokio", + "tracing", + "tracing-futures", + "user-facing-errors", + "uuid", +] + +[[package]] +name = "mongodb-schema-describer" +version = "0.1.0" +source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.10#c4aeef82dbae310e974d6122160c7e3b5fb6df53" +dependencies = [ + "futures", + "mongodb", + "serde", +] + +[[package]] +name = "native-tls" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "nibble_vec" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43" +dependencies = [ + "smallvec", +] + +[[package]] +name = "normpath" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8911957c4b1549ac0dc74e30db9c8b0e66ddcd6d7acc33098f4c63a64a6d7ed" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[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-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "object" +version = "0.36.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" + +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + +[[package]] +name = "openssl" +version = "0.10.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" +dependencies = [ + "bitflags 2.6.0", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "opentelemetry" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6105e89802af13fdf48c49d7646d3b533a70e536d818aae7e78ba0433d01acb8" +dependencies = [ + "async-trait", + "crossbeam-channel", + "futures-channel", + "futures-executor", + "futures-util", + "js-sys", + "lazy_static", + "percent-encoding", + "pin-project", + "rand 0.8.5", + "thiserror", +] + +[[package]] +name = "ordered-float" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" +dependencies = [ + "num-traits", +] + +[[package]] +name = "ordermap" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a86ed3f5f244b372d6b1a00b72ef7f8876d0bc6a78a4c9985c53614041512063" + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "parking_lot" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core 0.8.6", +] + +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core 0.9.10", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" +dependencies = [ + "cfg-if", + "instant", + "libc", + "redox_syscall 0.2.16", + "smallvec", + "winapi", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.5.7", + "smallvec", + "windows-targets 0.52.6", +] + +[[package]] +name = "parser-database" +version = "0.1.0" +source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.10#c4aeef82dbae310e974d6122160c7e3b5fb6df53" +dependencies = [ + "diagnostics", + "either", + "enumflags2", + "indexmap 1.9.3", + "schema-ast", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "pbkdf2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pest" +version = "2.7.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879952a81a83930934cbf1786752d6dedc3b1f29e8f8fb2ad1d0a36f377cf442" +dependencies = [ + "memchr", + "thiserror", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.7.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d214365f632b123a47fd913301e14c946c61d1c183ee245fa76eb752e59a02dd" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.7.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb55586734301717aea2ac313f50b2eb8f60d2fc3dc01d190eefa2e625f60c4e" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "pest_meta" +version = "2.7.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b75da2a70cf4d9cb76833c990ac9cd3923c9a8905a8929789ce347c84564d03d" +dependencies = [ + "once_cell", + "pest", + "sha2 0.10.8", +] + +[[package]] +name = "petgraph" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3659d1ee90221741f65dd128d9998311b0e40c5d3c23a62445938214abce4f" +dependencies = [ + "fixedbitset", + "ordermap", +] + +[[package]] +name = "pin-project" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" + +[[package]] +name = "poise" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1819d5a45e3590ef33754abce46432570c54a120798bdbf893112b4211fa09a6" +dependencies = [ + "async-trait", + "derivative", + "futures-util", + "parking_lot 0.12.3", + "poise_macros", + "regex", + "serenity", + "tokio", + "tracing", +] + +[[package]] +name = "poise_macros" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fa2c123c961e78315cd3deac7663177f12be4460f5440dbf62a7ed37b1effea" +dependencies = [ + "darling 0.20.10", + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "prisma-client-rust" +version = "0.6.11" +source = "git+https://github.com/Brendonovich/prisma-client-rust?tag=0.6.11#3ac68d0052533d3ae0332d93a56a8ad169c2ee18" +dependencies = [ + "base64 0.13.1", + "bigdecimal", + "chrono", + "diagnostics", + "dml", + "dmmf", + "dotenv", + "futures", + "indexmap 1.9.3", + "migration-core", + "paste", + "prisma-client-rust-macros", + "prisma-models", + "psl", + "query-connector", + "query-core", + "schema", + "serde", + "serde-value", + "serde_json", + "thiserror", + "user-facing-errors", + "uuid", +] + +[[package]] +name = "prisma-client-rust-cli" +version = "0.6.11" +source = "git+https://github.com/Brendonovich/prisma-client-rust?tag=0.6.11#3ac68d0052533d3ae0332d93a56a8ad169c2ee18" +dependencies = [ + "directories", + "flate2", + "http 0.2.12", + "prisma-client-rust-sdk", + "proc-macro2", + "quote", + "regex", + "reqwest", + "serde", + "serde_json", + "serde_path_to_error", + "syn 1.0.109", + "thiserror", +] + +[[package]] +name = "prisma-client-rust-macros" +version = "0.6.11" +source = "git+https://github.com/Brendonovich/prisma-client-rust?tag=0.6.11#3ac68d0052533d3ae0332d93a56a8ad169c2ee18" +dependencies = [ + "convert_case 0.6.0", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "prisma-client-rust-sdk" +version = "0.6.11" +source = "git+https://github.com/Brendonovich/prisma-client-rust?tag=0.6.11#3ac68d0052533d3ae0332d93a56a8ad169c2ee18" +dependencies = [ + "convert_case 0.5.0", + "dml", + "dmmf", + "prisma-models", + "proc-macro2", + "psl", + "query-core", + "quote", + "request-handlers", + "serde", + "serde_json", + "serde_path_to_error", + "syn 1.0.109", + "thiserror", +] + +[[package]] +name = "prisma-models" +version = "0.0.0" +source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.10#c4aeef82dbae310e974d6122160c7e3b5fb6df53" +dependencies = [ + "bigdecimal", + "chrono", + "itertools 0.10.5", + "once_cell", + "prisma-value", + "psl", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "prisma-value" +version = "0.1.0" +source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.10#c4aeef82dbae310e974d6122160c7e3b5fb6df53" +dependencies = [ + "base64 0.12.3", + "bigdecimal", + "chrono", + "once_cell", + "regex", + "serde", + "serde_json", + "uuid", +] + +[[package]] +name = "proc-macro2" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "psl" +version = "0.1.0" +source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.10#c4aeef82dbae310e974d6122160c7e3b5fb6df53" +dependencies = [ + "builtin-psl-connectors", + "dml", + "psl-core", +] + +[[package]] +name = "psl-core" +version = "0.1.0" +source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.10#c4aeef82dbae310e974d6122160c7e3b5fb6df53" +dependencies = [ + "bigdecimal", + "chrono", + "diagnostics", + "enumflags2", + "indoc", + "itertools 0.10.5", + "lsp-types", + "once_cell", + "parser-database", + "prisma-value", + "regex", + "schema-ast", + "serde", + "serde_json", + "url", +] + +[[package]] +name = "pulldown-cmark" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57206b407293d2bcd3af849ce869d52068623f19e1b5ff8e8778e3309439682b" +dependencies = [ + "bitflags 2.6.0", + "memchr", + "unicase", +] + +[[package]] +name = "quanta" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20afe714292d5e879d8b12740aa223c6a88f118af41870e8b6196e39a02238a8" +dependencies = [ + "crossbeam-utils", + "libc", + "mach", + "once_cell", + "raw-cpuid", + "wasi 0.10.2+wasi-snapshot-preview1", + "web-sys", + "winapi", +] + +[[package]] +name = "query-connector" +version = "0.1.0" +source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.10#c4aeef82dbae310e974d6122160c7e3b5fb6df53" +dependencies = [ + "anyhow", + "async-trait", + "chrono", + "futures", + "indexmap 1.9.3", + "itertools 0.10.5", + "prisma-models", + "prisma-value", + "serde", + "serde_json", + "thiserror", + "user-facing-errors", + "uuid", +] + +[[package]] +name = "query-core" +version = "0.1.0" +source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.10#c4aeef82dbae310e974d6122160c7e3b5fb6df53" +dependencies = [ + "async-trait", + "base64 0.12.3", + "bigdecimal", + "chrono", + "connection-string", + "crossbeam-queue", + "cuid", + "enumflags2", + "futures", + "indexmap 1.9.3", + "itertools 0.10.5", + "lazy_static", + "lru", + "mongodb-client", + "mongodb-query-connector", + "once_cell", + "opentelemetry", + "parking_lot 0.12.3", + "petgraph", + "pin-utils", + "prisma-models", + "prisma-value", + "psl", + "query-connector", + "query-engine-metrics", + "schema", + "schema-builder", + "serde", + "serde_json", + "thiserror", + "tokio", + "tracing", + "tracing-futures", + "tracing-opentelemetry", + "tracing-subscriber", + "url", + "user-facing-errors", + "uuid", +] + +[[package]] +name = "query-engine-metrics" +version = "0.1.0" +source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.10#c4aeef82dbae310e974d6122160c7e3b5fb6df53" +dependencies = [ + "metrics 0.18.1", + "metrics-exporter-prometheus", + "metrics-util 0.12.1", + "once_cell", + "parking_lot 0.12.3", + "serde", + "serde_json", + "tracing", + "tracing-futures", + "tracing-subscriber", +] + +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + +[[package]] +name = "quote" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "radix_trie" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd" +dependencies = [ + "endian-type", + "nibble_vec", +] + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.15", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "raw-cpuid" +version = "10.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c297679cb867470fa8c9f67dbba74a78d78e3e98d7cf2b08d6d71540f797332" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" +dependencies = [ + "bitflags 2.6.0", +] + +[[package]] +name = "redox_users" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom 0.2.15", + "libredox", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick 1.1.3", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick 1.1.3", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + +[[package]] +name = "request-handlers" +version = "0.1.0" +source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.10#c4aeef82dbae310e974d6122160c7e3b5fb6df53" +dependencies = [ + "bigdecimal", + "connection-string", + "dmmf", + "futures", + "graphql-parser", + "indexmap 1.9.3", + "itertools 0.10.5", + "psl", + "query-core", + "serde", + "serde_json", + "thiserror", + "tracing", + "url", + "user-facing-errors", +] + +[[package]] +name = "reqwest" +version = "0.11.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +dependencies = [ + "base64 0.21.7", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http 0.2.12", + "http-body", + "hyper", + "hyper-rustls", + "hyper-tls", + "ipnet", + "js-sys", + "log", + "mime", + "mime_guess", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls 0.21.12", + "rustls-pemfile", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "system-configuration", + "tokio", + "tokio-native-tls", + "tokio-rustls 0.24.1", + "tokio-util", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "webpki-roots 0.25.4", + "winreg", +] + +[[package]] +name = "resolv-conf" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" +dependencies = [ + "hostname 0.3.1", + "quick-error", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.15", + "libc", + "spin", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rust-i18n" +version = "3.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "039f57d22229db401af3458ca939300178e99e88b938573cea12b7c2b0f09724" +dependencies = [ + "globwalk", + "once_cell", + "regex", + "rust-i18n-macro", + "rust-i18n-support", + "smallvec", +] + +[[package]] +name = "rust-i18n-macro" +version = "3.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dde5c022360a2e54477882843d56b6f9bcb4bc62f504b651a2f497f0028d174f" +dependencies = [ + "glob", + "once_cell", + "proc-macro2", + "quote", + "rust-i18n-support", + "serde", + "serde_json", + "serde_yml", + "syn 2.0.89", +] + +[[package]] +name = "rust-i18n-support" +version = "3.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75d2844d36f62b5d6b66f9cf8f8cbdbbbdcdb5fd37a473a9cc2fb45fdcf485d2" +dependencies = [ + "arc-swap", + "base62", + "globwalk", + "itertools 0.11.0", + "lazy_static", + "normpath", + "once_cell", + "proc-macro2", + "regex", + "serde", + "serde_json", + "serde_yml", + "siphasher", + "toml 0.7.8", + "triomphe", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver 0.9.0", +] + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver 1.0.23", +] + +[[package]] +name = "rustc_version_runtime" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d31b7153270ebf48bf91c65ae5b0c00e749c4cfad505f66530ac74950249582f" +dependencies = [ + "rustc_version 0.2.3", + "semver 0.9.0", +] + +[[package]] +name = "rustix" +version = "0.38.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7f649912bc1495e167a6edee79151c84b1bad49748cb4f1f1167f459f6224f6" +dependencies = [ + "bitflags 2.6.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls" +version = "0.21.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "log", + "ring", + "rustls-webpki 0.101.7", + "sct", +] + +[[package]] +name = "rustls" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" +dependencies = [ + "log", + "ring", + "rustls-pki-types", + "rustls-webpki 0.102.8", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] + +[[package]] +name = "rustls-pki-types" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "rustls-webpki" +version = "0.102.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schannel" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "schema" +version = "0.1.0" +source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.10#c4aeef82dbae310e974d6122160c7e3b5fb6df53" +dependencies = [ + "once_cell", + "prisma-models", + "psl", +] + +[[package]] +name = "schema-ast" +version = "0.1.0" +source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.10#c4aeef82dbae310e974d6122160c7e3b5fb6df53" +dependencies = [ + "diagnostics", + "pest", + "pest_derive", +] + +[[package]] +name = "schema-builder" +version = "0.1.0" +source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.10#c4aeef82dbae310e974d6122160c7e3b5fb6df53" +dependencies = [ + "itertools 0.10.5", + "lazy_static", + "once_cell", + "prisma-models", + "psl", + "schema", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "secrecy" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e" +dependencies = [ + "serde", + "zeroize", +] + +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags 2.6.0", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa39c7303dc58b5543c94d22c1766b0d31f2ee58306363ea622b10bbc075eaa2" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +dependencies = [ + "serde", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + +[[package]] +name = "serde" +version = "1.0.215" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-value" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c" +dependencies = [ + "ordered-float", + "serde", +] + +[[package]] +name = "serde_bytes" +version = "0.11.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "387cc504cb06bb40a96c8e04e951fe01854cf6bc921053c954e4a606d9675c6a" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_cow" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7bbbec7196bfde255ab54b65e34087c0849629280028238e67ee25d6a4b7da" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.215" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "serde_json" +version = "1.0.133" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" +dependencies = [ + "indexmap 2.6.0", + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_path_to_error" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" +dependencies = [ + "itoa", + "serde", +] + +[[package]] +name = "serde_repr" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "serde_spanned" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_with" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff" +dependencies = [ + "serde", + "serde_with_macros", +] + +[[package]] +name = "serde_with_macros" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082" +dependencies = [ + "darling 0.13.4", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "serde_yml" +version = "0.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48e76bab63c3fd98d27c17f9cbce177f64a91f5e69ac04cafe04e1bb25d1dc3c" +dependencies = [ + "indexmap 2.6.0", + "itoa", + "libyml", + "log", + "memchr", + "ryu", + "serde", + "serde_json", + "tempfile", +] + +[[package]] +name = "serenity" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d72ec4323681bf9a3cabe40fd080abc2435859b502a1b5aa9bf693f125bfa76" +dependencies = [ + "arrayvec", + "async-trait", + "base64 0.22.1", + "bitflags 2.6.0", + "bytes", + "chrono", + "command_attr", + "dashmap", + "flate2", + "futures", + "fxhash", + "levenshtein", + "mime_guess", + "parking_lot 0.12.3", + "percent-encoding", + "reqwest", + "secrecy", + "serde", + "serde_cow", + "serde_json", + "static_assertions", + "time", + "tokio", + "tokio-tungstenite", + "tracing", + "typemap_rev", + "typesize", + "url", + "uwl", +] + +[[package]] +name = "sha-1" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "digest 0.10.7", + "keccak", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + +[[package]] +name = "siphasher" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" + +[[package]] +name = "skeptic" +version = "0.13.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16d23b015676c90a0f01c197bfdc786c20342c73a0afdda9025adb0bc42940a8" +dependencies = [ + "bytecount", + "cargo_metadata", + "error-chain", + "glob", + "pulldown-cmark", + "tempfile", + "walkdir", +] + +[[package]] +name = "sketches-ddsketch" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04d2ecae5fcf33b122e2e6bd520a57ccf152d2dde3b38c71039df1a6867264ee" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "socket2" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "socket2" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "stringprep" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" +dependencies = [ + "unicode-bidi", + "unicode-normalization", + "unicode-properties", +] + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" + +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.89", +] + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d46482f1c1c87acd84dea20c1bf5ebff4c757009ed6bf19cfd36fb10e92c4e" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "synstructure" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", + "unicode-xid", +] + +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tagptr" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" + +[[package]] +name = "take_mut" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f764005d11ee5f36500a149ace24e00e3da98b0158b3e2d53a7495660d3f4d60" + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "tempfile" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" +dependencies = [ + "cfg-if", + "fastrand", + "once_cell", + "rustix", + "windows-sys 0.59.0", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "time" +version = "0.3.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.41.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22cfb5bee7a6a52939ca9224d6ac897bb669134078daa8735560897f69de4d33" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "parking_lot 0.12.3", + "pin-project-lite", + "signal-hook-registry", + "socket2 0.5.7", + "tokio-macros", + "windows-sys 0.52.0", +] + +[[package]] +name = "tokio-macros" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls 0.21.12", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" +dependencies = [ + "rustls 0.22.4", + "rustls-pki-types", + "tokio", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c83b561d025642014097b66e6c1bb422783339e0909e4429cde4749d1990bc38" +dependencies = [ + "futures-util", + "log", + "rustls 0.22.4", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.25.0", + "tungstenite", + "webpki-roots 0.26.7", +] + +[[package]] +name = "tokio-util" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" +dependencies = [ + "bytes", + "futures-core", + "futures-io", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +dependencies = [ + "serde", +] + +[[package]] +name = "toml" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.6.0", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-error" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d686ec1c0f384b1277f097b2f279a2ecc11afe8c133c1aabf036a27cb4cd206e" +dependencies = [ + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "tracing-futures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" +dependencies = [ + "pin-project", + "tracing", +] + +[[package]] +name = "tracing-log" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-opentelemetry" +version = "0.17.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbbe89715c1dbbb790059e2565353978564924ee85017b5fff365c872ff6721f" +dependencies = [ + "once_cell", + "opentelemetry", + "tracing", + "tracing-core", + "tracing-log 0.1.4", + "tracing-subscriber", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "nu-ansi-term", + "sharded-slab", + "smallvec", + "thread_local", + "tracing-core", + "tracing-log 0.2.0", +] + +[[package]] +name = "triomphe" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef8f7726da4807b58ea5c96fdc122f80702030edc33b35aff9190a51148ccc85" +dependencies = [ + "arc-swap", + "serde", + "stable_deref_trait", +] + +[[package]] +name = "trust-dns-proto" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c31f240f59877c3d4bb3b3ea0ec5a6a0cff07323580ff8c7a605cd7d08b255d" +dependencies = [ + "async-trait", + "cfg-if", + "data-encoding", + "enum-as-inner", + "futures-channel", + "futures-io", + "futures-util", + "idna 0.2.3", + "ipnet", + "lazy_static", + "log", + "rand 0.8.5", + "smallvec", + "thiserror", + "tinyvec", + "tokio", + "url", +] + +[[package]] +name = "trust-dns-resolver" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4ba72c2ea84515690c9fcef4c6c660bb9df3036ed1051686de84605b74fd558" +dependencies = [ + "cfg-if", + "futures-util", + "ipconfig", + "lazy_static", + "log", + "lru-cache", + "parking_lot 0.12.3", + "resolv-conf", + "smallvec", + "thiserror", + "tokio", + "trust-dns-proto", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "tungstenite" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ef1a641ea34f399a848dea702823bbecfb4c486f911735368f1f137cb8257e1" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http 1.1.0", + "httparse", + "log", + "rand 0.8.5", + "rustls 0.22.4", + "rustls-pki-types", + "sha1", + "thiserror", + "url", + "utf-8", +] + +[[package]] +name = "typed-builder" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89851716b67b937e393b3daa8423e67ddfc4bbbf1654bcf05488e95e0828db0c" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "typemap_rev" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74b08b0c1257381af16a5c3605254d529d3e7e109f3c62befc5d168968192998" + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "typesize" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "549e54551d85ba6718a95333d9bc4367f69793d7aba638de30f8d25a1f554a1d" +dependencies = [ + "chrono", + "dashmap", + "hashbrown 0.14.5", + "mini-moka", + "parking_lot 0.12.3", + "secrecy", + "serde_json", + "time", + "typesize-derive", + "url", +] + +[[package]] +name = "typesize-derive" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd9fc0ad9e03a2b0c2e2a0eafaecccef2121829e1ab6ce9c9d790e6c6766bd1c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "ucd-trie" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" + +[[package]] +name = "unicase" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df" + +[[package]] +name = "unicode-bidi" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" + +[[package]] +name = "unicode-ident" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" + +[[package]] +name = "unicode-normalization" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-properties" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" + +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "unreachable" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" +dependencies = [ + "void", +] + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d157f1b96d14500ffdc1f10ba712e780825526c03d9a49b4d0324b0d9113ada" +dependencies = [ + "form_urlencoded", + "idna 1.0.3", + "percent-encoding", + "serde", +] + +[[package]] +name = "user-facing-error-macros" +version = "0.1.0" +source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.10#c4aeef82dbae310e974d6122160c7e3b5fb6df53" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "user-facing-errors" +version = "0.1.0" +source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.10#c4aeef82dbae310e974d6122160c7e3b5fb6df53" +dependencies = [ + "backtrace", + "indoc", + "serde", + "serde_json", + "tracing", + "user-facing-error-macros", +] + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "uuid" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" +dependencies = [ + "getrandom 0.2.15", + "serde", +] + +[[package]] +name = "uwl" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4bf03e0ca70d626ecc4ba6b0763b934b6f2976e8c744088bb3c1d646fbb1ad0" + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.10.2+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" +dependencies = [ + "cfg-if", + "once_cell", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.89", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" + +[[package]] +name = "wasm-streams" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "web-sys" +version = "0.3.72" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-roots" +version = "0.25.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" + +[[package]] +name = "webpki-roots" +version = "0.26.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "widestring" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" +dependencies = [ + "windows-core", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "yoke" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", + "synstructure 0.13.1", +] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "zerofrom" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", + "synstructure 0.13.1", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..269b77b --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,23 @@ +[package] +name = "ifhany" +version = "2.0.0" +edition = "2021" +default-run = "ifhany" + +[dependencies] +serde = "1.0.215" +serenity = "0.12.4" +prisma-client-rust = { git = "https://github.com/Brendonovich/prisma-client-rust", tag = "0.6.11", default-features = false, features = [ + "mongodb", +] } +prisma-client-rust-cli = { git = "https://github.com/Brendonovich/prisma-client-rust", tag = "0.6.11", default-features = false, features = [ + "mongodb", +] } +dotenv = "0.15.0" +tokio = "1.41.1" +poise = "0.6.1" +chrono = "0.4.38" +strum_macros = "0.26.4" +regex = "1.11.1" +rust-i18n = "3.1.2" +strum = "0.26.3" diff --git a/Dockerfile b/Dockerfile index 5cdfd67..1dc211a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,31 +15,19 @@ RUN pacman-key --init \ && sed -i "s/^ParallelDownloads.*/ParallelDownloads = ${PACMAN_PARALLELDOWNLOADS}/g" /etc/pacman.conf # Install basic tools -RUN pacman -Syu --noconfirm base base-devel git sudo go wget +RUN pacman -Syu --noconfirm base base-devel git sudo go wget lldb # ---------- ifhany ---------- # USER ifhany -# Install Yay -WORKDIR /home/ifhany -RUN git clone https://aur.archlinux.org/yay.git -WORKDIR /home/ifhany/yay -RUN makepkg --noconfirm +# Install Rust +RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y -# ---------- Root ---------- # -USER root +ENV PATH="$PATH:/home/ifhany/.cargo/bin" -RUN pacman -U --noconfirm /home/ifhany/yay/*.pkg.tar.zst -RUN yay -Syyuu --noconfirm - -RUN yay -S npm --noconfirm -RUN yay -S yarn --noconfirm +RUN rustup default stable ENV TERM=xterm ENV FORCE_COLOR=true -# ---------- ifhany ---------- # -USER ifhany - - WORKDIR /app \ No newline at end of file diff --git a/__tests__/factorys/filter/customEmoji.test.ts b/__tests__/factorys/filter/customEmoji.test.ts deleted file mode 100755 index d518bd2..0000000 --- a/__tests__/factorys/filter/customEmoji.test.ts +++ /dev/null @@ -1,28 +0,0 @@ -/** @format */ - -import { expect } from "chai"; - -import filter from "@/system/factories/filter.f"; - -describe("customEmoji", () => { - test("Caso de emoji unicode simples", () => { - const string = ":possible_name:"; - - const result = filter.customEmoji(string); - - expect(result.val).to.be.ok.and.to.contain({ - name: "possible_name", - }); - }); - - test("Caso de emoji customizado", () => { - const string = ":possible_name:12345678987654321"; - - const result = filter.customEmoji(string); - - expect(result.val).to.be.ok.and.to.contain({ - name: "possible_name", - id: "12345678987654321", - }); - }); -}); diff --git a/__tests__/factorys/filter/sanitizeEmoji.test.ts b/__tests__/factorys/filter/sanitizeEmoji.test.ts deleted file mode 100755 index 8920cd7..0000000 --- a/__tests__/factorys/filter/sanitizeEmoji.test.ts +++ /dev/null @@ -1,32 +0,0 @@ -/** @format */ - -import { expect } from "chai"; -import filter from "@/system/factories/filter.f"; - -describe("sanitizeEmoji", () => { - test("Caso de um emoji simples", () => { - const emoji = "☁️"; - - const result = filter.sanitizeEmoji(`:${emoji}:`); - - expect(result.val).to.deep.equal({ - filteredEmoji: { name: "☁️" }, - emojiFormat: "unicode" - }); - }); - - test( - "Caso de um emoji customizado", - () => { - const emoji = "possible_name"; - const emojiId = "12345678987654321"; - - const result = filter.sanitizeEmoji(`<:${emoji}:${emojiId}>`); - - expect(result.val).to.deep.equal({ - filteredEmoji: { name: emoji, id: emojiId }, - emojiFormat: "custom" - }); - } - ); -}); diff --git a/__tests__/factorys/verify/emojiFormat.test.ts b/__tests__/factorys/verify/emojiFormat.test.ts deleted file mode 100755 index c65e369..0000000 --- a/__tests__/factorys/verify/emojiFormat.test.ts +++ /dev/null @@ -1,32 +0,0 @@ -/** @format */ - -import { expect } from "chai"; - -import verify from "@/system/factories/verify.f"; - -describe("emojiFormat", () => { - test("Formato de emoji unicode", () => { - const emoji = "\u{2601}"; - - const result = verify.emojiFormat(emoji); - - expect(result.val).to.deep.equal("unicode"); - }); - - test("Formato de emoji customizado", () => { - const emoji = "possible_name"; - const emojiId = "12345678987654321"; - - const firstEmoji = `<:${emoji}:${emojiId}>`; - const firstResult = verify.emojiFormat(firstEmoji); - - expect(firstResult.val).to.deep.equal("custom"); - }); - - test("Formato inexistente", () => { - const emoji = "mocha_undefined_emoji_test"; - const result = verify.emojiFormat(emoji); - - expect(result.val).to.deep.equal(false); - }); -}); diff --git a/docker-compose.yml b/docker-compose.yml index 42eac9e..a6c700b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -17,7 +17,7 @@ services: - 27017:27017 app: build: . - user: root + user: ifhany container_name: ifhany_app ports: - 2129:2129 @@ -27,5 +27,11 @@ services: - ifhany_net depends_on: - database + + # Please, these values are only for development. Don't be an idiot. + cap_add: + - SYS_PTRACE + security_opt: + - seccomp=unconfined volumes: ifhany_vol: diff --git a/locales/command.yml b/locales/command.yml new file mode 100644 index 0000000..882c143 --- /dev/null +++ b/locales/command.yml @@ -0,0 +1,33 @@ +# Creating a new command: +# +# command..name: +# en: "" +# command..description: +# en: "" +# command...name: +# en: "" +# command...description: +# en: "" +# -------------------------------------------------- + +command.general.ephemeral_description: + en: "Do you want to hide this message?" + + + +command.kick.name: + en: "kick" + pt-BR: "remover" +command.kick.description: + en: "Kick a user and specify a reason!" + pt-BR: "Remova um usuário e especifique um motivo!" +command.kick.user.name: + en: "user" + pt-BR: "usuário" +command.kick.user.description: + en: "Who do you want to kick?" +command.kick.reason.name: + en: "reason" + pt-BR: "motivo" +command.kick.reason.description: + en: "What is the reason?" \ No newline at end of file diff --git a/locales/error.yml b/locales/error.yml new file mode 100755 index 0000000..9323435 --- /dev/null +++ b/locales/error.yml @@ -0,0 +1,23 @@ +syntax.limit.end_operators: + en: "You are using operators in the end of the `limit` parameter!" + pt-BR: "Você está usando operadores no fim do parâmetro `limit`!" +syntax.limit.unit_syntax_err: + en: "Something between the operators is wrong, verify it!" + pt-BR: "Algo entre os operadores està errado, verifique!" +syntax.limit.invalid_unit_match: + en: "The unit doesn't match the limit part!" + pt-BR: "A unidade não bate com o limite!" +syntax.emoji.is_not: + en: "This is not an emoji!" + pt-BR: "Isto não é um emoji!" + +command.only_server: + en: "This command can only be used in a server!" + +log.current.gateway_heartbeat: + en: "The current gateway heartbeat is ${heartbeat}ms!" + pt-BR: "O gateway heartbeat atual é ${heartbeat}ms!" + + +reply.kick.success: + en: "User has been kicked!" \ No newline at end of file diff --git a/package.json b/package.json index 96aa0e0..a85951c 100755 --- a/package.json +++ b/package.json @@ -25,7 +25,8 @@ "watch": "tsc -w", "build": "./scripts/build", "build-cl": "rm -r ./dist/*", - "build-doc": "npx typedoc --plugin @mxssfd/typedoc-theme --theme my-theme ./src/**/*.ts" + "build-doc": "npx typedoc --plugin @mxssfd/typedoc-theme --theme my-theme ./src/**/*.ts", + "postinstall": "npx prisma generate" }, "devDependencies": { "@babel/core": "^7.22.9", @@ -55,7 +56,7 @@ "ts-node": "^10.9.1", "tsc-alias": "^1.8.7", "tsconfig-paths": "^4.2.0", - "typedoc": "^0.24.8", + "typedoc": "^0.26.7", "typedoc-material-theme": "^1.0.1", "typescript-json-schema": "^0.62.0" }, diff --git a/permissions.json b/permissions.json new file mode 100755 index 0000000..8dea492 --- /dev/null +++ b/permissions.json @@ -0,0 +1,83 @@ +{ + "745049338396409886": { + "name": "Servidor da Fhany", + "commands": { + "autoreport": { + "roles": { + "allowed": [ + "745055012597792816" + ] + } + }, + "autoemote": { + "roles": { + "allowed": [ + "745055012597792816" + ] + } + }, + "movecontent": { + "roles": { + "allowed": [ + "745055012597792816" + ] + } + }, + "chatfilter": { + "roles": { + "allowed": [ + "745055012597792816" + ] + } + }, + "ban": { + "roles": { + "allowed": [ + "745055012597792816" + ], + "minViewer": "private" + } + }, + "case": { + "roles": { + "allowed": [ + "745055012597792816" + ], + "minViewer": "private" + } + }, + "kick": { + "roles": { + "allowed": [ + "745055012597792816" + ], + "minViewer": "private" + } + }, + "mute": { + "roles": { + "allowed": [ + "745055012597792816" + ], + "minViewer": "private" + } + }, + "punishment": { + "roles": { + "allowed": [ + "745055012597792816" + ], + "minViewer": "private" + } + }, + "warn": { + "roles": { + "allowed": [ + "745055012597792816" + ], + "minViewer": "private" + } + } + } + } +} \ No newline at end of file diff --git a/prisma/schema.prisma b/prisma/schema.prisma index c896c83..5f4111d 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -1,5 +1,6 @@ generator client { - provider = "prisma-client-js" + provider = "cargo run --bin prisma" + output = "../src/prisma.rs" } datasource db { @@ -7,41 +8,60 @@ datasource db { url = env("DATABASE_URL") } -model AutoReportPresetInfo { - uuid String @id @default(uuid()) @map("_id") - name String @unique - chatID String - logChatID String - emoji String - emojiID String? - customEmoji Boolean - reactNewMessages Boolean +// # -------------------------------------------------- # +// Guild/User +model Guild { + id String @id @map("_id") + name String + cases UserPunishment[] @relation + commandsPermissions CommandPermissions[] @relation +} - info AutoReportPresetData? @relation +model User { + id String @id @map("_id") + isModerator Boolean + + appliedPunishments UserPunishment[] @relation("AppliedPunishment") + sufferedPunishments UserPunishment[] @relation("SufferedPunishment") } -model AutoReportPresetData { - uuid String @id @default(uuid()) @map("_id") - name String @unique - alreadyReported String[] +// # -------------------------------------------------- # +// Config +model CommandPermissions { + commandName String @id @map("_id") + allowed String[] @default(["private"]) + minViewer String @default("private") - infoUUID String @unique - data AutoReportPresetInfo? @relation(fields: [infoUUID], references: [uuid]) + guildId String + guild Guild @relation(fields: [guildId], references: [id]) } -model Guild { - id String @id @map("_id") - cases UserPunishment[] @relation +// # -------------------------------------------------- # +// Autoreport +model AutoReportPresetInfo { + uuid String @id @default(uuid()) @map("_id") + name String @unique + chatID String + logChatID String + emoji String + emojiID String? + customEmoji Boolean + reactNewMessages Boolean + + info AutoReportPresetData? @relation } -model User { - id String @id @map("_id") - isModerator Boolean +model AutoReportPresetData { + uuid String @id @default(uuid()) @map("_id") + name String @unique + alreadyReported String[] - appliedPunishments UserPunishment[] @relation("AppliedPunishment") - sufferedPunishments UserPunishment[] @relation("SufferedPunishment") + infoUUID String @unique + data AutoReportPresetInfo? @relation(fields: [infoUUID], references: [uuid]) } +// # -------------------------------------------------- # +// Punishment enum PunishmentType { kick warn @@ -54,19 +74,19 @@ enum PunishmentType { } model UserPunishment { - case Int @id @map("_id") - createdAt DateTime - expiresAt DateTime - reason String - type PunishmentType - undone Boolean + case Int @id @map("_id") + createdAt DateTime + expiresAt DateTime + reason String + type PunishmentType + undone Boolean moderatorId String @unique moderator User @relation("AppliedPunishment", fields: [moderatorId], references: [id]) - userId String @unique - user User @relation("SufferedPunishment", fields: [userId], references: [id]) + userId String @unique + user User @relation("SufferedPunishment", fields: [userId], references: [id]) - guildId String @unique - guild Guild @relation(fields: [guildId], references: [id]) + guildId String @unique + guild Guild @relation(fields: [guildId], references: [id]) } diff --git a/scripts/dev b/scripts/dev new file mode 100755 index 0000000..eb487d6 --- /dev/null +++ b/scripts/dev @@ -0,0 +1,21 @@ +#!/bin/bash + +docker rm ifhany_db; docker compose -f docker-compose.yml -f config/docker-compose_dev.yml up -d + +echo "Starting dev mode"; + +STARTED=false +TRIES=1 +while [ $STARTED = false ]; do + sleep 1; + + echo "Waiting for dev mode to start... ($TRIES)"; + + if docker ps | grep -q ifhany_app; then + STARTED=true; + fi + + TRIES=$((TRIES + 1)) +done + +dockersh ifhany_app \ No newline at end of file diff --git a/scripts/dev.ps1 b/scripts/dev.ps1 new file mode 100644 index 0000000..fc354ab --- /dev/null +++ b/scripts/dev.ps1 @@ -0,0 +1,4 @@ + +docker rm ifhany_db + +docker-compose -f docker-compose.yml -f config/docker-compose_dev.yml up --build --remove-orphans \ No newline at end of file diff --git a/scripts/on-container_dev-init.bash b/scripts/on-container_dev-init.bash index 4943596..b80772d 100755 --- a/scripts/on-container_dev-init.bash +++ b/scripts/on-container_dev-init.bash @@ -2,15 +2,17 @@ case "$1" in "--no-build") ;; - "--no-clean") - /app/scripts/build --no-clean - ;; *) - /app/scripts/build + #cargo run --bin prisma -- generate ;; esac -export DEV_MODE='true'; -export NODE_OPTIONS='--inspect-brk=0.0.0.0:2129'; +rustup default stable + +#cargo build + +#lldb-server g 0.0.0.0:2129 -- /app/target/debug/ifhany -node . "$@" \ No newline at end of file +while true; do + sleep 5; +done \ No newline at end of file diff --git a/src/bin/prisma.rs b/src/bin/prisma.rs new file mode 100644 index 0000000..8bdc6c4 --- /dev/null +++ b/src/bin/prisma.rs @@ -0,0 +1,3 @@ +fn main() { + prisma_client_rust_cli::run(); +} \ No newline at end of file diff --git a/src/commands/conf/config.ts b/src/commands/conf/config.ts new file mode 100644 index 0000000..b72a95c --- /dev/null +++ b/src/commands/conf/config.ts @@ -0,0 +1,202 @@ +/** @format */ +//#region External Libs +import { Ok } from "ts-results"; +import { + APIEmbed, + AutocompleteInteraction, + ChatInputCommandInteraction, + PermissionFlagsBits, + SlashCommandBuilder, + SlashCommandSubcommandsOnlyBuilder, +} from "discord.js"; +//#endregion +//#region Modules +import { + BotErr, + ErrorKind, + ErrorOrigin, + Result, +} from "@/system/handlers/errHandlers"; +import { types as commandTypes } from "@/system/handlers/command"; +import { EmbedMessagesHandler } from "//lib/external/handlers/embed"; +import { LOCALE, prisma } from "../.."; +//#endregion +//#region Typing +export namespace types { + export type data = () => Promise< + Ok> + >; + export type subcommands = { + commandPermissions: ( + interaction: ChatInputCommandInteraction + ) => Promise>; + }; + export type execute = ( + interaction: ChatInputCommandInteraction + ) => Promise>; + export type autocomplete = ( + interaction: AutocompleteInteraction + ) => Promise>; +} +//#endregion +//#region Variables +const commandName = "config"; +const commandLabel = "Configurações"; +export enum ConfigEntries { + commandPermissions = "commandPermissions", +} + +//#endregion +//#region Implementation +export const data: types.data = async () => { + const description = { + comm: "Altere as configurações de algo!", + commandAllowedRoles: { + comm: "Altere as permissões para um comando!", + command: "Você quer modificar as permissões de qual comando?", + allowList: + "Quais roles podem executar esse comando? Você também pode " + + "especificar 'private' ou 'public'", + }, + ephemeral: "Deseja que eu esconda essa mensagem?", + }; + + return new Ok({ + properties: { + guild: false, + }, + slashData: new SlashCommandBuilder() + .setName(commandName) + .setDescription(description.comm) + .setDefaultMemberPermissions(PermissionFlagsBits.BanMembers) + .addSubcommand((commandAllowedRoles) => + commandAllowedRoles + .setName("command-permissions") + .setDescription(description.commandAllowedRoles.comm) + .addStringOption((command) => + command + .setName("command") + .setDescription( + description.commandAllowedRoles.command + ) + .setRequired(true) + ) + .addStringOption((allowList) => + allowList + .setName("allow-list") + .setDescription( + description.commandAllowedRoles.allowList + ) + .setRequired(true) + ) + .addBooleanOption((ephemeral) => + ephemeral + .setName("ephemeral") + .setDescription(description.ephemeral) + .setRequired(false) + ) + ), + }); +}; +const subcommands: Factory = () => { + const factory: FactoryObj = { + commandPermissions: async (interaction) => { + const commandName = interaction.options.getString("command", true); + const allowList = interaction.options.getString("allow-list", true); + + let allowed = []; + + for (const substring of allowList.split(",")) { + if (substring === "private" || substring === "public") { + allowed = [substring]; + + break; + } else { + const role = await interaction.guild?.roles.fetch( + substring + ); + + if (role) { + allowed.push(role.id); + } + } + } + + await prisma.commandPermissions.update({ + where: { + guildId: interaction.guild?.id, + commandName, + }, + data: { + allowed, + }, + }); + + const embed = await new EmbedMessagesHandler( + "info.simpleResponse" + ).Mount({ + title: "Permissões de comando", + description: + `As permissões de \`${commandName}\` ` + + `foram alteradas para \`${allowList}\` com sucesso!`, + createdAt: interaction.createdAt.toLocaleString(LOCALE), + username: interaction.user.username, + }); + + return new Ok(embed.unwrap().data); + }, + }; + + return factory; +}; +export const execute: types.execute = async (interaction) => { + if (interaction.guild === null) + return new BotErr({ + message: + "Você está tentando acessar isso de fora de um servidor?" + + "Essa função não é suportada ainda!", + kind: ErrorKind.NotFound, + origin: ErrorOrigin.Unknown, + }); + + const scomms = subcommands(); + const subcommand = interaction.options.getSubcommand(true); + + var response: Result; + const getEphemeral = interaction.options.getBoolean("ephemeral"); + + await interaction.deferReply({ + ephemeral: getEphemeral !== null ? getEphemeral : true, + }); + + switch (subcommand) { + case "command-permissions": + response = await scomms.commandPermissions(interaction); + break; + default: + throw new BotErr({ + message: "Nenhum subcomando foi atingido!", + origin: ErrorOrigin.Internal, + kind: ErrorKind.LogicError, + }); + } + + await interaction.editReply({ embeds: [response.unwrap()] }); + + return Ok.EMPTY; +}; +export const autocomplete: types.autocomplete = async (interaction) => { + const focused = interaction.options.getFocused(true); + + if (focused.name === "config-entry") { + await interaction.respond( + Object.values(ConfigEntries).map((value) => ({ + value, + name: value, + })) + ); + } + + return Ok.EMPTY; +}; +//#endregion diff --git a/src/commands/conf/mod.rs b/src/commands/conf/mod.rs new file mode 100644 index 0000000..e69de29 diff --git a/src/commands/mod.rs b/src/commands/mod.rs new file mode 100644 index 0000000..4aefab2 --- /dev/null +++ b/src/commands/mod.rs @@ -0,0 +1,12 @@ +use crate::BotData; + +pub mod moderation; +pub mod conf; +pub mod util; + +pub fn get_commands() -> Vec> { + vec![ + util::ping::ping(), + moderation::kick::kick(), + ] +} \ No newline at end of file diff --git a/src/commands/mod/autoemote.ts b/src/commands/moderation/autoemote.ts similarity index 100% rename from src/commands/mod/autoemote.ts rename to src/commands/moderation/autoemote.ts diff --git a/src/commands/mod/autoreport.ts b/src/commands/moderation/autoreport.ts similarity index 96% rename from src/commands/mod/autoreport.ts rename to src/commands/moderation/autoreport.ts index b61d3c9..af3db84 100755 --- a/src/commands/mod/autoreport.ts +++ b/src/commands/moderation/autoreport.ts @@ -10,6 +10,7 @@ import { Message, MessageReaction, SlashCommandBuilder, + SlashCommandSubcommandsOnlyBuilder, Snowflake, TextBasedChannel, TextChannel, @@ -30,13 +31,13 @@ import { BotErr, ErrorKind, ErrorOrigin, + Result, } from "@/system/handlers/errHandlers"; import { Log } from "@/system/handlers/log"; import { client, prisma } from "//index"; import { ListenerHandler } from "@/system/handlers/listener"; //#endregion //#region Typing -import { types as reactTypes } from "@/external/factories/react.f"; import { types as commandTypes } from "@/system/handlers/command"; export namespace types { export type PresetParams = { @@ -98,7 +99,9 @@ export namespace types { message: Message, emoji: GuildEmoji | string ) => Ok; - export type data = () => Ok>; + export type data = () => Ok< + commandTypes.CommandData + >; export type actionFunction = ( params: types.ReceivedStoredParams ) => Promise>; @@ -107,7 +110,7 @@ export namespace types { ) => Promise>; export type autocomplete = ( interaction: AutocompleteInteraction - ) => Promise>; + ) => Promise>; } //#endregion //#region Variables @@ -283,7 +286,7 @@ export const action: types.actionFunction = async (params) => { "Na requisição de verificação, o emoji existia, porém não mais!"; const wrongTypeErr = "Você precisa entregar um canal de texto!"; - var chat: TextBasedChannel; + var chat: TextChannel; const getChat = await client.channels.fetch(params.chatID); { @@ -293,8 +296,7 @@ export const action: types.actionFunction = async (params) => { origin: ErrorOrigin.External, kind: ErrorKind.NotFound, }); - } - if (getChat.isTextBased()) { + } else if (getChat instanceof TextChannel) { chat = getChat; } else { throw new BotErr({ @@ -305,7 +307,7 @@ export const action: types.actionFunction = async (params) => { } } - var logChat: TextBasedChannel; + var logChat: TextChannel; const getLogChat = await client.channels.fetch(params.logChatID); { if (!getLogChat) { @@ -314,8 +316,7 @@ export const action: types.actionFunction = async (params) => { origin: ErrorOrigin.External, kind: ErrorKind.NotFound, }); - } - if (getLogChat.isTextBased()) { + } else if (getLogChat instanceof TextChannel) { logChat = getLogChat; } else { throw new BotErr({ @@ -355,10 +356,12 @@ export const action: types.actionFunction = async (params) => { reaction: MessageReaction, user: User ): Promise> => { - if (reaction.message.channel.id !== params.chatID) { - return Ok.EMPTY; - } - if (user.bot) { + if ( + reaction.message.channel.id !== params.chatID || + user.bot || + (reaction.emoji.id !== params.emojiID && + reaction.emoji.name !== params.emoji) + ) { return Ok.EMPTY; } @@ -396,7 +399,7 @@ export const action: types.actionFunction = async (params) => { await prisma.autoReportPresetData.update({ where: { name: params.name }, data: { - alreadyReported: dataTable.alreadyReported + alreadyReported: dataTable.alreadyReported, }, }); } @@ -824,6 +827,14 @@ export const autocomplete: types.autocomplete = async (interaction) => { .map((value) => ({ value: value.name, name: value.name })) ); } + } else { + return new BotErr({ + message: + "You're enabling autocomplete for a subcommand " + + "that doesn't implement it!", + origin: ErrorOrigin.Internal, + kind: ErrorKind.Other, + }); } return Ok.EMPTY; diff --git a/src/commands/mod/ban.ts b/src/commands/moderation/ban.ts similarity index 100% rename from src/commands/mod/ban.ts rename to src/commands/moderation/ban.ts diff --git a/src/commands/mod/case.ts b/src/commands/moderation/case.ts similarity index 100% rename from src/commands/mod/case.ts rename to src/commands/moderation/case.ts diff --git a/src/commands/moderation/kick.rs b/src/commands/moderation/kick.rs new file mode 100644 index 0000000..398606a --- /dev/null +++ b/src/commands/moderation/kick.rs @@ -0,0 +1,69 @@ +use poise::Context; +use serenity::all::{GuildId, User}; + +use crate::{ + handlers::{ + error::{BotErr, BotError, Error, ErrorKind, ErrorOrigin}, + punishment::PunishmentHandler, + }, + prisma::PunishmentType, + utils, BotData, +}; + +pub async fn action( + ctx: Context<'_, BotData, BotErr>, + guild_id: GuildId, + user: User, + reason: String, +) -> Result<(), BotErr> { + let http = ctx.http(); + + //let member = guild_id.member(&http, user.id).await?; + //member.kick_with_reason(&http, reason.as_str()).await?; + + let create_punishment = PunishmentHandler { + guild_id, + prisma: ctx.data().prisma.clone(), + } + .add( + user.id, + ctx.author().id, + PunishmentType::Kick, + reason, + ctx.created_at().to_utc(), + ctx.created_at().to_utc(), + ) + .await; + + if let Err(err) = create_punishment { + return Err(BotError::new( + err.to_string(), + ErrorKind::Other, + ErrorOrigin::Unknown, + )); + } + + Ok(()) +} + +/// Kick a user and specify a reason! +#[poise::command(slash_command)] +pub async fn kick( + ctx: Context<'_, BotData, BotErr>, + user: User, + reason: String, + ephemeral: Option< + bool, + >, +) -> Result<(), BotErr> { + utils::matchs::ephemeral(&ctx, ephemeral).await?; + + let guild_id = + utils::matchs::required_guild_id(&ctx, t!("use.command.only_server").to_string().as_str()).await?; + + action(ctx, guild_id, user, reason.to_string()).await?; + + ctx.say(t!("reply.kick.success")).await?; + + Ok(()) +} diff --git a/src/commands/mod/kick.ts b/src/commands/moderation/kick.ts similarity index 100% rename from src/commands/mod/kick.ts rename to src/commands/moderation/kick.ts diff --git a/src/commands/moderation/mod.rs b/src/commands/moderation/mod.rs new file mode 100644 index 0000000..fab46db --- /dev/null +++ b/src/commands/moderation/mod.rs @@ -0,0 +1,2 @@ +pub mod kick; +pub mod prevent; \ No newline at end of file diff --git a/src/commands/mod/movecontent.ts b/src/commands/moderation/movecontent.ts similarity index 99% rename from src/commands/mod/movecontent.ts rename to src/commands/moderation/movecontent.ts index a4ce534..565ef4c 100755 --- a/src/commands/mod/movecontent.ts +++ b/src/commands/moderation/movecontent.ts @@ -17,6 +17,7 @@ import { PermissionFlagsBits, SlashCommandBuilder, ChatInputCommandInteraction, + SlashCommandOptionsOnlyBuilder, } from "discord.js"; //#endregion //#region Modules @@ -106,7 +107,7 @@ export namespace types { ) => Promise>; export type data = () => Ok< commandTypes.CommandData< - Omit + Omit > >; export type execute = ( diff --git a/src/commands/mod/mute.ts b/src/commands/moderation/mute.ts similarity index 100% rename from src/commands/mod/mute.ts rename to src/commands/moderation/mute.ts diff --git a/src/commands/moderation/prevent.rs b/src/commands/moderation/prevent.rs new file mode 100644 index 0000000..1d522b2 --- /dev/null +++ b/src/commands/moderation/prevent.rs @@ -0,0 +1,98 @@ +use poise::{command, + serenity_prelude::{ + GuildId, User, + Timestamp, + } +}; +use chrono::Duration; +use rust_i18n::t; + +use crate::{ + handlers::{ + error::{BotErr, BotError, Error, ErrorKind, ErrorOrigin}, + punishment::PunishmentHandler, + }, + prisma::PunishmentType, + utils, BotData, + Context, +}; + +pub async fn action( + ctx: Context<'_>, + guild_id: GuildId, + user: User, + reason: String, +) -> Result<(), BotErr> { + let http = ctx.http(); + + //let member = guild_id.member(&http, user.id).await?; + //member.kick_with_reason(&http, reason.as_str()).await?; + + let create_punishment = PunishmentHandler { + guild_id, + prisma: ctx.data().prisma.clone(), + } + .add( + user.id, + ctx.author().id, + PunishmentType::Mute, + reason, + ctx.created_at().to_utc(), + ctx.created_at().to_utc(), + ) + .await; + + if let Err(err) = create_punishment { + return Err(BotError::new( + err.to_string(), + ErrorKind::Other, + ErrorOrigin::Unknown, + )); + } + + Ok(()) +} + +#[command( + prefix_command, + slash_command, + user_cooldown = "2", + track_edits, + guild_only, + required_permissions = "MODERATE_MEMBERS" +)] +pub async fn prevent( + ctx: Context<'_>, + #[description = ""] user: User, + #[description = ""] topcase: Option, + #[description = ""] limit: Option, +) -> Result<(), BotErr> { + let guild_id = + utils::matchs::required_guild_id(&ctx, t!("use.command.only_server").to_string().as_str()).await?; + let http = ctx.serenity_context().http.clone(); + let mut member = guild_id.member(http, user.id).await?; + let topcase = topcase.unwrap_or_else(|| false); + let limit = limit.unwrap_or_else(|| 30); + + let end_time = Timestamp::now() + .checked_add_signed(Duration::minutes(limit as i64)) + .ok_or_else(|| BotError::new( + "Error calculating the end of the timeout.".to_string(), + ErrorKind::Other, + ErrorOrigin::Unknown, + ))?; + let end_timeout = Timestamp::from(end_time); + + member.disable_communication_until_datetime(&http, end_timeout).await?; + + let http_clone = http.clone(); + let guild_id_clone = guild_id.clone(); + tokio::spawn(async move { + tokio::time::sleep(tokio::time::Duration::from_secs(limit as u64 * 60)).await; + if let Ok(mut mut_member) = guild_id_clone.member(&http_clone, user.id).await { + let _ = mut_member.enable_communication(&http_clone).await; + } + }); + + Ok(()) +} \ No newline at end of file diff --git a/src/commands/mod/punishment.ts b/src/commands/moderation/punishment.ts similarity index 98% rename from src/commands/mod/punishment.ts rename to src/commands/moderation/punishment.ts index 0580dd0..6d4a2cc 100644 --- a/src/commands/mod/punishment.ts +++ b/src/commands/moderation/punishment.ts @@ -7,6 +7,7 @@ import { Guild, PermissionFlagsBits, SlashCommandBuilder, + SlashCommandSubcommandsOnlyBuilder, User, } from "discord.js"; //#endregion @@ -25,7 +26,9 @@ import { $Enums } from "@prisma/client"; //#endregion //#region Typing export namespace types { - export type data = () => Promise>; + export type data = () => Promise< + Ok> + >; export type execute = ( interaction: ChatInputCommandInteraction ) => Promise>; diff --git a/src/commands/mod/warn.ts b/src/commands/moderation/warn.ts similarity index 99% rename from src/commands/mod/warn.ts rename to src/commands/moderation/warn.ts index fe1d200..d307bb4 100644 --- a/src/commands/mod/warn.ts +++ b/src/commands/moderation/warn.ts @@ -75,7 +75,6 @@ export const data: types.data = async () => { .setDescription(description.ephemeral) .setRequired(false) ) - .setDMPermission(false), }); }; export const action: types.action = async ( diff --git a/src/commands/util/mod.rs b/src/commands/util/mod.rs new file mode 100644 index 0000000..924dabf --- /dev/null +++ b/src/commands/util/mod.rs @@ -0,0 +1 @@ +pub mod ping; \ No newline at end of file diff --git a/src/commands/util/ping.rs b/src/commands/util/ping.rs new file mode 100644 index 0000000..adcb7e3 --- /dev/null +++ b/src/commands/util/ping.rs @@ -0,0 +1,17 @@ +use poise::Context; + +use crate::{handlers::error::BotErr, BotData}; + +/// Check the heartbeat of the gateway +#[poise::command(slash_command)] +pub async fn ping(ctx: Context<'_, BotData, BotErr>) -> Result<(), BotErr> { + let ping = ctx.ping().await; + + ctx.say(t!( + "log.current.gateway_heartbeat", + heartbeat = ping.as_millis().to_string() + )) + .await?; + + Ok(()) +} diff --git a/src/handlers/command.rs b/src/handlers/command.rs new file mode 100644 index 0000000..e69de29 diff --git a/src/handlers/error.rs b/src/handlers/error.rs new file mode 100644 index 0000000..b233577 --- /dev/null +++ b/src/handlers/error.rs @@ -0,0 +1,79 @@ +use poise::serenity_prelude::Error as SerenityError; +use std::fmt::Display; + +#[derive(Debug, Clone)] +pub enum ErrorOrigin { + User, + Internal, + External, + Unknown, +} + +#[derive(Debug, Clone)] +pub enum ErrorKind { + AlreadyExists, + BlockedAction, + CanceledAction, + CorruptedFile, + EmptyValue, + GhostEditing, + InvalidValue, + LogicError, + MissingParam, + MissingVariable, + NotEnoughArgs, + NotFound, + NotSent, + NullishValue, + SyntaxError, + Other, + TimeOut, + TypeError, +} + +#[derive(Debug, Clone)] +pub struct BotError { + pub message: String, + pub origin: ErrorOrigin, + pub kind: ErrorKind, +} + +pub trait Error: std::error::Error + Display { + fn kind(&self) -> ErrorKind; + fn new(message: String, kind: ErrorKind, origin: ErrorOrigin) -> BotErr + where + Self: Sized; +} + +impl Display for BotError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", self.message) + } +} + +impl std::error::Error for BotError {} + +impl Error for BotError { + fn kind(&self) -> ErrorKind { + self.kind.clone() + } + fn new(message: String, kind: ErrorKind, origin: ErrorOrigin) -> BotErr { + Box::new(BotError { + message, + origin, + kind, + }) + } +} + +impl From for BotErr { + fn from(value: SerenityError) -> Self { + Box::new(BotError { + message: value.to_string(), + origin: ErrorOrigin::Unknown, + kind: ErrorKind::Other, + }) + } +} + +pub type BotErr = Box; diff --git a/src/handlers/event.rs b/src/handlers/event.rs new file mode 100644 index 0000000..0e4f1ed --- /dev/null +++ b/src/handlers/event.rs @@ -0,0 +1,29 @@ +use serenity::all::{Context, EventHandler, Message, Ready}; +use poise::serenity_prelude::FullEvent; +use serenity::async_trait; + +pub struct Handler; + +#[async_trait] +impl EventHandler for Handler { + async fn ready(&self, _ctx: Context, _ready: Ready) { + println!("{} is connected!", _ready.user.name); + } + async fn message(&self, _ctx: Context, _msg: Message) { + println!("{} said: {}", _msg.author.name, _msg.content); + } +} + +impl Handler { + pub async fn match_event(&self, ctx: &Context, event: &FullEvent) -> () { + match event { + FullEvent::Message { new_message } => { + self.message(ctx.clone(), new_message.clone()).await; + } + FullEvent::Ready { data_about_bot } => { + self.ready(ctx.clone(), data_about_bot.clone()).await; + } + _ => {} + } + } +} \ No newline at end of file diff --git a/src/handlers/i18n.rs b/src/handlers/i18n.rs new file mode 100644 index 0000000..6570b84 --- /dev/null +++ b/src/handlers/i18n.rs @@ -0,0 +1,49 @@ +use crate::{utils::values::enums, BotData}; +use strum::IntoEnumIterator; + +// Implement internationalization +type Commands = Vec>; + +pub struct I18nHandler; +impl I18nHandler { + pub fn internationalize_slash(commands: Commands) -> Commands { + let mut new_commands = vec![]; + + for mut command in commands { + for locale in enums::SupportedLocales::iter() { + let name_locale_index = format!("command.{}.name", command.name); + let description_locale_index = + format!("command.{}.description", command.name); + + command + .name_localizations + .insert(locale.to_string(), t!(name_locale_index).into()); + + command + .description_localizations + .insert(locale.to_string(), t!(description_locale_index).into()); + + for param in command.parameters.iter_mut() { + let param_name_locale_index = + format!("command.{}.{}.name", command.name, param.name); + let param_description_locale_index = + format!("command.{}.{}.description", command.name, param.name); + + param.name_localizations.insert( + locale.to_string(), + t!(param_name_locale_index).into(), + ); + param.description_localizations.insert( + locale.to_string(), + t!(param_description_locale_index) + .into(), + ); + } + } + + new_commands.push(command); + } + + new_commands + } +} diff --git a/src/handlers/mod.rs b/src/handlers/mod.rs new file mode 100644 index 0000000..abfd462 --- /dev/null +++ b/src/handlers/mod.rs @@ -0,0 +1,5 @@ +pub mod command; +pub mod event; +pub mod error; +pub mod punishment; +pub mod i18n; \ No newline at end of file diff --git a/src/handlers/punishment.rs b/src/handlers/punishment.rs new file mode 100644 index 0000000..023ce74 --- /dev/null +++ b/src/handlers/punishment.rs @@ -0,0 +1,83 @@ +use std::sync::Arc; + +use chrono::DateTime; +use chrono::Utc; +use prisma_client_rust::Direction; +use prisma_client_rust::QueryError; +use serenity::all::{GuildId, UserId}; +use tokio::sync::Mutex; + +use crate::prisma; +use crate::prisma::user_punishment; +use crate::prisma::PrismaClient; +use crate::prisma::PunishmentType; + +pub struct PunishmentHandler { + pub guild_id: GuildId, + pub prisma: Arc>, +} + +impl PunishmentHandler { + /// Adds a punishment to a user. + /// + /// # Arguments + /// + /// * `user_id`: The ID of the user to punish. + /// * `moderator_id`: The ID of the moderator who is punishing. + /// * `punishment_type`: The type of punishment. + /// * `reason`: The reason why the user is being punished. + /// * `created_at`: The time when the punishment is created. + /// * `expires_at`: The time when the punishment expires. + /// + /// # Errors + /// + /// * A `QueryError` if the query fails. + pub async fn add( + &self, + user_id: UserId, + moderator_id: UserId, + punishment_type: PunishmentType, + reason: String, + created_at: DateTime, + expires_at: DateTime, + ) -> Result<(), QueryError> { + let prisma = self.prisma.lock().await; + + let current_case: i32; + { + let last_punishment = prisma + .user_punishment() + .find_first(vec![user_punishment::guild_id::equals( + self.guild_id.to_string(), + )]) + .order_by(user_punishment::case::order(Direction::Desc)) + .exec() + .await?; + + if let Some(last_punishment) = last_punishment { + current_case = last_punishment.case + 1; + } else { + current_case = 1; + } + } + + prisma + .user_punishment() + .create( + current_case, + created_at.into(), + expires_at.into(), + reason, + punishment_type, + false, + prisma::user::UniqueWhereParam::IdEquals(moderator_id.to_string()), + prisma::user::UniqueWhereParam::IdEquals(user_id.to_string()), + prisma::guild::UniqueWhereParam::IdEquals(self.guild_id.to_string()), + vec![], + ) + .exec() + .await?; + + Ok(()) + } +} diff --git a/src/index.ts b/src/index.ts index 58ec6aa..4efb91c 100755 --- a/src/index.ts +++ b/src/index.ts @@ -19,6 +19,7 @@ import { ListenerHandler } from "@/system/handlers/listener"; dotenv.config(); import pkg from "../package.json"; +import { PresetHandler } from "./lib/system/handlers/presetHandler"; const token = process.env.TOKEN || process.exit(1); const clientId = process.env.CLIENT_ID || process.exit(1); @@ -50,13 +51,13 @@ const main = async (): Promise> => { // Ensure the databases and their files { - await new PermissionsHandler().EnsureCommandsPermissions(); + (await PermissionsHandler.EnsureCommandsPermissions(guild)).unwrap(); } // Initializate listeners and other essential stuff { InteractionHandler.LaunchListener(); ListenerHandler.PredefinedListeners(); - //await PresetHandler.InitializateAll(); + await PresetHandler.InitializateAll(); } new Log("success.endOfMain").Print(); diff --git a/src/lib/external/factories/preseted.f.ts b/src/lib/external/factories/preseted.f.ts index 27bd918..a0d3935 100644 --- a/src/lib/external/factories/preseted.f.ts +++ b/src/lib/external/factories/preseted.f.ts @@ -5,7 +5,7 @@ import { EmbedBuilder, Message, MessageReaction, - TextBasedChannel, + TextChannel, User, } from "discord.js"; import { Ok } from "ts-results"; @@ -18,7 +18,6 @@ import { EmbedMessagesHandler } from "@/external/handlers/embed"; import { BotErr, ErrorOrigin, ErrorKind } from "@/system/handlers/errHandlers"; //#endregion //#region Types -import { types as reactTypes } from "@/external/factories/react.f"; import { types as embedTypes } from "@/external/handlers/embed"; import { types as autoReportTypes } from ">/mod/autoreport"; import { prisma } from "//index"; @@ -26,7 +25,7 @@ export namespace types { export type PresetedFuns = { embed: { sendReportMessage: (params: { - logChat: TextBasedChannel; + logChat: TextChannel; interaction: MessageReaction; user: User; reason: embedTypes.ReportReason | false; @@ -99,8 +98,6 @@ const Default: Factory = () => { const getEmbed = await EmbedHandler.Mount(embedParams); const embed = getEmbed.unwrap().data; - console.log(embed); - if (description === reportedMessage.content) { delete embed.title; } diff --git a/src/lib/external/handlers/dmDialog.ts b/src/lib/external/handlers/dmDialog.ts index 555f424..1b7ade5 100755 --- a/src/lib/external/handlers/dmDialog.ts +++ b/src/lib/external/handlers/dmDialog.ts @@ -11,6 +11,7 @@ import { Message, MessagePayload, Collection, + PartialGroupDMChannel, } from "discord.js"; //#endregion //#region Modules @@ -57,6 +58,15 @@ export class DMDialog { var messageSent = await this.user.send(message); } catch (err) { if (err instanceof DiscordAPIError) { + if (this.context.message.channel instanceof PartialGroupDMChannel) { + throw new BotErr({ + message: + "You can't use it with a channel of GroupDMChannel class!", + origin: ErrorOrigin.User, + kind: ErrorKind.TypeError, + }); + } + const dmWarn = await this.context.message.channel.send({ content: `Ei! Você precisa ter a DM aberta.\n\n||${this.user}||`, }); @@ -103,11 +113,11 @@ export class DMDialog { // Add reaction await messageSent.react(this.cancelEmoji); } catch (err) { - if (err instanceof BotErr) { - if (err.val.message === dmClosedWarn) return new Ok("dmclosed"); - } else { - throw err; + if (err instanceof BotErr && err.val.message === dmClosedWarn) { + return new Ok("dmclosed"); } + + throw err; } const cancelOptions: AwaitReactionsOptions = { @@ -134,12 +144,23 @@ export class DMDialog { return void 0; }); - // Listen to response - messageSent.channel - .awaitMessages(messageOptions) - .then(async (response) => { - finish(response); - }); + { + if (messageSent.channel instanceof PartialGroupDMChannel) { + throw new BotErr({ + message: + "You can't use it with a channel of GroupDMChannel class!", + origin: ErrorOrigin.User, + kind: ErrorKind.TypeError, + }); + } + + // Listen to response + messageSent.channel + .awaitMessages(messageOptions) + .then(async (response) => { + finish(response); + }); + } // Finish it if time is over if (timeout) diff --git a/src/lib/system/factories/filter.f.ts b/src/lib/system/factories/filter.f.ts deleted file mode 100755 index c7d87ac..0000000 --- a/src/lib/system/factories/filter.f.ts +++ /dev/null @@ -1,96 +0,0 @@ -/** @format */ -//#region External Libs -import { Ok } from "ts-results"; -//#endregion -//#region Modules -import verify from "@/system/factories/verify.f"; -import filter from "@/system/factories/filter.f"; -//#endregion -//#region Typing -export namespace types { - export type FilteredEmoji = { - name: string; - id?: string; - }; - export type EmojiFormat = "custom" | "unicode" | false; - export type SanitizedEmoji = { - filteredEmoji: FilteredEmoji; - emojiFormat: EmojiFormat; - }; - - export interface Functions { - /** - * Filter an emoji. - * - * It will return an object that will separate - * the name from a possible id (if it's a custom emoji) - * and will remove the characters that Discord uses to - * identify an emoji (`<,:,>`) - * @param emoji String of the emoji. - * @example - * const emoji = "<:emoji:123456789>" - * const filteredEmoji = filter.customEmoji(emoji).val - * - * console.log(filteredEmoji) - * // { - * // name: "emoji", - * // id: "123456789" - * //} - */ - customEmoji: (emoji: string) => Ok; - /** - * Sanitize an emoji. - * - * This merged function will use `filter.customEmoji` - * and `verify.emojiFormat` to return - * the emoji name, id and format. - * @param receivedEmoji String of the emoji. - * @example - * const emoji = "<:emoji:123456789>" - * const sanitizedEmoji = filter.sanitizeEmoji(emoji).val - * - * console.log(sanitizedEmoji) - * // { - * // filteredEmoji: { - * // name: "emoji", - * // }, - * // emojiFormat: "custom" - * // } - */ - sanitizeEmoji: (receivedEmoji: string) => Ok; - }; -} -//#endregion -//#region Implementation -const Default: Factory = () => { - const factory: FactoryObj = { - customEmoji: (emoji) => { - const obj: types.FilteredEmoji = { - name: "", - }; - - obj.name = emoji.replace(/\\/g, ""); - obj.name = obj.name.replace(/[<>]/g, ""); - - // Adds ID if it's a custom emoji - if (/:\d+/g.test(obj.name)) - obj.id = obj.name.replace(/[^0-9]+|[_:]/g, ""); - - obj.name = obj.name.replace(/[:\d+]/g, ""); - - return Ok(obj); - }, - sanitizeEmoji: (receivedEmoji) => { - const filteredEmoji: types.FilteredEmoji = - filter.customEmoji(receivedEmoji).val; - const emojiFormat: types.EmojiFormat = - verify.emojiFormat(receivedEmoji).val; - - return Ok({ filteredEmoji, emojiFormat }); - }, - }; - - return factory; -}; -export default Default(); -//#endregion diff --git a/src/lib/system/factories/parse.f.ts b/src/lib/system/factories/parse.f.ts deleted file mode 100644 index 7c72af1..0000000 --- a/src/lib/system/factories/parse.f.ts +++ /dev/null @@ -1,123 +0,0 @@ -/** @format */ -//#region External Libs -import { Ok } from "ts-results"; -//#endregion -//#region Modules -import { - Result, - ErrorKind, - ErrorOrigin, - BotErr, -} from "@/system/handlers/errHandlers"; -//#endregion -//#region Typing -export namespace types { - export interface Functions { - /** - * A parser to convert a string with date limit - * to a number of milliseconds. - * - * @param limit The limit to parse. Possible values are: - * "s" (second), "min" (minute), "h" (hour), "d" (day), - * "w" (week), "m" (month), "y" (year). - * The possible operators are "+" and "-". - * - * Values as "tomorrow", - * "mon" (Monday), "sun" (Sunday) aren't yet implemented. - * @example - * const now = new Date(); - * const limit = "3h+40min"; - * - * const parsedLimit = parse.limitToMili(limit).unwrap(); - * - * const finalDate = new Date(now + parsedLimit); - */ - limitToMili: (limit: string) => Result; - } -} -//# endregion -//#region Implementation -const Default: Factory = () => { - const factory: FactoryObj = { - limitToMili: (limit: string) => { - const wrongFormatErr = { - message: - "Ei! Você entregou o parâmetro limit com um formato errado!", - origin: ErrorOrigin.User, - kind: ErrorKind.SyntaxError, - }; - - const unitsMilisseconds: Record = { - s: 1000, - min: 1000 * 60, - h: 1000 * 60 * 60, - d: 1000 * 60 * 60 * 24, - w: 1000 * 60 * 60 * 24 * 7, - m: 1000 * 60 * 60 * 24 * 30, - y: 1000 * 60 * 60 * 24 * 365, - }; - const operators = { plus: "+", minus: "-" }; - let divisorsString = "(["; - { - for (const [, value] of Object.entries(operators)) { - divisorsString += `\\${value}`; - } - - divisorsString += "])"; - } - - const unitsRegex = /(s|min|h|d|w|m|y)/; - const numbersRegex = /(\d+)/; - const divisorsRegex = new RegExp(divisorsString, "g"); - - let finalLimit = 0; - { - limit = limit.replace(/\s/g, ""); - - const operations = []; - const limitParts = limit.split(divisorsRegex); - - for (const limitPart of limitParts) { - if (Object.values(operators).includes(limitPart)) { - if (operations.length === 0 && limitPart === "+") - continue; - - operations.push(limitPart); - } else { - const unitParts = limitPart.match( - new RegExp(numbersRegex.source + unitsRegex.source) - ); - - if (unitParts === null) return new BotErr(wrongFormatErr); - - if (limitPart.replace(unitParts[0], "") !== "") - return new BotErr(wrongFormatErr); - - const unitNumber = parseInt(unitParts[1], 10); - const unitMili = unitsMilisseconds[unitParts[2]]; - operations.push((unitNumber * unitMili).toString()); - } - } - - let lastOperator = operators.plus; - for (const operationPart of operations) { - if (Object.values(operators).includes(operationPart)) { - lastOperator = operationPart; - } else { - const parsedNumber = parseInt(operationPart, 10); - - if (lastOperator === operators.plus) { - finalLimit += parsedNumber; - } else { - finalLimit += -parsedNumber; - } - } - } - } - return Ok(finalLimit); - }, - }; - return factory; -}; -export default Default(); -//#endregion diff --git a/src/lib/system/factories/verify.f.ts b/src/lib/system/factories/verify.f.ts index 333b126..e5f1a3a 100755 --- a/src/lib/system/factories/verify.f.ts +++ b/src/lib/system/factories/verify.f.ts @@ -13,9 +13,6 @@ import { // * Modules import { PermissionsHandler } from "@/system/handlers/permission"; -// * Typing -import { types as filterTypes } from "@/system/factories/filter.f"; - export namespace types { export interface VerifyFunctions { /** @@ -30,17 +27,6 @@ export namespace types { interaction: Interaction, emoji: string ) => Ok; - /** - * Verify what kind of emoji is used. - * @param emoji Emoji to be verified. - * @example - * const emoji = "<:emoji:123456789>" - * const emojiFormat = verify.emojiFormat(emoji).val - * - * console.log(emojiFormat) - * // "custom" - */ - emojiFormat: (emoji: string) => Ok; /** * Verify if a message has a certain length. * @@ -103,21 +89,6 @@ const Default: Factory = () => { if (searchEmoji) return Ok(true); else return Ok(false); }, - emojiFormat: (emoji) => { - const emojiTest = /<:[a-zA-Z_]+:\d+>/.test(emoji); - const unicodeTestString = - "(\\u00a9|\\u00ae|[\\u2000-\\u3300]|" + - "\\ud83c[\\ud000-\\udfff]|" + - "\\ud83d[\\ud000-\\udfff]|" + - "\\ud83e[\\ud000-\\udfff])"; - const emojiUnicodeTest = new RegExp(unicodeTestString, "g").test( - emoji - ); - - if (emojiUnicodeTest) return Ok("unicode"); - else if (emojiTest) return Ok("custom"); - else return Ok(false); - }, messageLenght: async function (message, repeatFn?) { if (message.content.length > 200) { if (repeatFn) { @@ -130,8 +101,10 @@ const Default: Factory = () => { return Ok(message); }, permissions: async (interaction) => { - const allowedIds = await new PermissionsHandler().AllowedRoles( - interaction.commandName + + const allowedIds = await PermissionsHandler.AllowedRoles( + interaction.commandName, + interaction.guild?.id || "" //!DEV ); if (typeof allowedIds.val === "boolean") diff --git a/src/lib/system/handlers/command.ts b/src/lib/system/handlers/command.ts index 952d20c..e1a30f6 100755 --- a/src/lib/system/handlers/command.ts +++ b/src/lib/system/handlers/command.ts @@ -11,6 +11,7 @@ import { RESTPostAPIChatInputApplicationCommandsJSONBody, Routes, SlashCommandBuilder, + SlashCommandOptionsOnlyBuilder, } from "discord.js"; //#endregion //#region Modules @@ -23,7 +24,7 @@ export namespace types { export type CommandsSlashDataJSON = RESTPostAPIChatInputApplicationCommandsJSONBody; - export type CommandData = { + export type CommandData = { properties: { guild: boolean; }; diff --git a/src/lib/system/handlers/interaction.ts b/src/lib/system/handlers/interaction.ts index 135b8aa..4973ffe 100755 --- a/src/lib/system/handlers/interaction.ts +++ b/src/lib/system/handlers/interaction.ts @@ -4,6 +4,7 @@ import { AutocompleteInteraction, ChatInputCommandInteraction, + DMChannel, Events, Interaction, } from "discord.js"; @@ -73,8 +74,15 @@ export class InteractionHandler { interaction: Interaction ): Promise> { try { - if (interaction.isChatInputCommand()) { - if (!(await verify.permissions(interaction)).val) { + if ( + interaction instanceof ChatInputCommandInteraction && + !(interaction instanceof DMChannel) + ) { + if ( + !(await verify.permissions(interaction)).val && + (interaction.user.id !== interaction.guild?.ownerId || + interaction.commandName !== "config") + ) { const message = await messages.embed.warn.missingPermission( interaction ); @@ -147,4 +155,4 @@ export class InteractionHandler { return Ok.EMPTY; } } -//#endregion \ No newline at end of file +//#endregion diff --git a/src/lib/system/handlers/log.ts b/src/lib/system/handlers/log.ts index c7b94ad..a27bc99 100755 --- a/src/lib/system/handlers/log.ts +++ b/src/lib/system/handlers/log.ts @@ -192,8 +192,6 @@ export class Log { if (this._write_in_log) { await this.Utils().printInGeneralLog(firstMessage); await this.Utils().printInGeneralLog(secondMessage); - - return Ok.EMPTY; } console.log(firstMessage); @@ -209,8 +207,6 @@ export class Log { if (this._write_in_log) { await this.Utils().printInGeneralLog(message); - - return Ok.EMPTY; } console.log(message); @@ -226,8 +222,6 @@ export class Log { if (this._write_in_log) { await this.Utils().printInGeneralLog(message); - - return Ok.EMPTY; } console.log(message); diff --git a/src/lib/system/handlers/permission.ts b/src/lib/system/handlers/permission.ts index 207c663..27a18a2 100755 --- a/src/lib/system/handlers/permission.ts +++ b/src/lib/system/handlers/permission.ts @@ -1,16 +1,17 @@ /** @format */ //#region External Libs -import path from "path"; -import lockfile from "proper-lockfile"; import { Ok } from "ts-results"; import { Snowflake } from "discord.js"; //#endregion //#region Modules -import write from "@/system/factories/fs/write.f"; -import read from "@/system/factories/fs/read.f"; import { Log } from "@/system/handlers/log"; -import { BotErr, ErrorOrigin, ErrorKind } from "@/system/handlers/errHandlers"; +import { + Result, + BotErr, + ErrorOrigin, + ErrorKind, +} from "@/system/handlers/errHandlers"; //#endregion //#region Typing export namespace types { @@ -44,85 +45,49 @@ export namespace types { } //#endregion //#region Variables -import { client, guild } from "//index"; +import { client, guild, prisma } from "//index"; //#endregion //#region Implementation export class PermissionsHandler { - private _configs: types.SettingsFile; - - protected readonly _configs_dir: string; - - constructor() { - this._configs = {}; - this._configs_dir = path.resolve( - __dirname, - "../../../../../config/default/permissions.json" - ); - } - //#region Data Manipulation - /** - * Get the permissions data and put it in `this._configs`. - * - * This function returns a release function. - */ - private async GetPermissionsData(): Promise> { - var release = await lockfile.lock(this._configs_dir, { - retries: { - retries: 5, - minTimeout: 100, - maxTimeout: 1000, - }, - }); - - const data = (await read.JSON(this._configs_dir)).val; - - this._configs = data as types.SettingsFile; - - return Ok(release); - } - /** - * Write the current data in `this._configs` to the disk. - * @param release The function that releases the lock. - * @example - * const release = (await this.GetPermissionsData()).val; - * - * await this.WritePermissionsData(release); - * // This will write the data to the disk and release the lock. - */ - private async WritePermissionsData( - release: AsyncAnyFunction - ): Promise> { - await write.JSON(this._configs_dir, this._configs); - - await release(); - - return Ok.EMPTY; - } - //#endregion //#region Getters /** * Check the visibility bitfield based on the roles. * @param commandName The name of the command. * @returns The bigint permission bitfield. */ - public async MinViewers(commandName: string): Promise> { - const release = (await this.GetPermissionsData()).val; - - const command = this._configs[guild].commands[commandName]; - - // Check general states - { - var minViewer = command.roles.minViewer; + public static async MinViewers( + commandName: string, + guildId: Snowflake + ): Promise> { + const configs = await prisma.commandPermissions.findMany({ + where: { + guildId, + }, + }); - if (minViewer === "public") return Ok(0n); - else if (minViewer === "private") return Ok(8n); + const commandPermissions = configs.find( + (config) => config.commandName === commandName + ); + if (!commandPermissions) { + return new BotErr({ + message: + `The command with the name: ${commandName} was not ` + + "found in the config file! Problably there is a problem in " + + "the PermissionsHandler.EnsureCommandsPermissions() call!", + origin: ErrorOrigin.Internal, + kind: ErrorKind.NotFound, + }); } + const minViewer = commandPermissions.minViewer; + + if (minViewer === "public") return Ok(0n); + else if (minViewer === "private") return Ok(8n); const gld = await client.guilds.fetch(guild); const rolePermissions = await gld.roles.fetch(minViewer); if (!rolePermissions) - throw new BotErr({ + return new BotErr({ message: `The role with the id: ${minViewer} was not found!`, origin: ErrorOrigin.Internal, kind: ErrorKind.NotFound, @@ -130,8 +95,6 @@ export class PermissionsHandler { const bitFieldPerms = rolePermissions.permissions.bitfield; - await release(); - return Ok(bitFieldPerms); } /** @@ -142,34 +105,42 @@ export class PermissionsHandler { * Return a `boolean` if the command is * public (true) or private (false). */ - public async AllowedRoles( - commandName: string - ): Promise> { - const release = (await this.GetPermissionsData()).val; - await release(); + public static async AllowedRoles( + commandName: string, + guildId: Snowflake + ): Promise> { + const configs = await prisma.commandPermissions.findMany({ + where: { + guildId, + }, + }); - const commandPermissions = this._configs[guild].commands[commandName]; - const allowed = commandPermissions.roles.allowed; + const commandPermissions = configs.find( + (config) => config.commandName === commandName + ); + if (!commandPermissions) { + return new BotErr({ + message: + `The command with the name: ${commandName} was not ` + + "found in the config file! Problably there is a problem in " + + "the PermissionsHandler.EnsureCommandsPermissions() call!", + origin: ErrorOrigin.Internal, + kind: ErrorKind.NotFound, + }); + } + const allowed = commandPermissions.allowed; const gld = await client.guilds.fetch(guild); if (!gld) - throw new BotErr({ + return new BotErr({ message: `The guild with the id: ${guild} was not found!`, origin: ErrorOrigin.Internal, kind: ErrorKind.NotFound, }); - if (typeof allowed === "string") { - if (allowed === "public") return Ok(true); - else if (allowed === "private") return Ok(false); - else { - throw new BotErr({ - message: "The allowed property of the command is invalid!", - origin: ErrorOrigin.Internal, - kind: ErrorKind.InvalidValue, - }); - } - } else if (Array.isArray(allowed)) { + if (allowed[0] === "public") return Ok(true); + else if (allowed[0] === "private") return Ok(false); + else { var roles = []; for (let i = 0; i < allowed.length; i++) { const roleObj = await gld.roles.fetch(allowed[i]); @@ -190,13 +161,6 @@ export class PermissionsHandler { } return new Ok(roles); - } else { - throw new BotErr({ - message: - "The allowed property of the command is not a string or an array!", - origin: ErrorOrigin.Internal, - kind: ErrorKind.TypeError, - }); } } //#endregion @@ -206,27 +170,32 @@ export class PermissionsHandler { * commands, if not, it will add them with a empty * configuration. (allowed: private, minViewer: private) */ - public async EnsureCommandsPermissions(): Promise> { - const release = (await this.GetPermissionsData()).val; - - var configuredCommands = []; + public static async EnsureCommandsPermissions( + guildId: Snowflake + ): Promise> { + const configs = await prisma.commandPermissions.findMany({ + where: { + guildId, + }, + }); - for (const entry in this._configs[guild].commands) { - configuredCommands.push(entry); - } for (const [key] of client.commands) { - if (!configuredCommands.includes(key)) { - this._configs[guild].commands[key] = { - roles: { - allowed: "private", + const hasCommand = configs.some( + (config) => config.commandName === key + ); + + if (!hasCommand) { + await prisma.commandPermissions.create({ + data: { + commandName: key, + allowed: ["private"], minViewer: "private", + guildId, }, - }; + }); } } - await this.WritePermissionsData(release); - return Ok.EMPTY; } //#endregion diff --git a/src/lib/system/handlers/presetDialogManager.ts b/src/lib/system/handlers/presetDialogManager.ts index 5574ab7..f852482 100755 --- a/src/lib/system/handlers/presetDialogManager.ts +++ b/src/lib/system/handlers/presetDialogManager.ts @@ -12,6 +12,7 @@ import { ChannelType, ChatInputCommandInteraction, ColorResolvable, + PartialGroupDMChannel, Snowflake, StringSelectMenuBuilder, StringSelectMenuInteraction, @@ -198,6 +199,12 @@ export class PresetDialogHandler { origin: ErrorOrigin.User, kind: ErrorKind.TypeError, }); + } else if (this.interaction.channel instanceof PartialGroupDMChannel) { + throw new BotErr({ + message: "You can't use it with a channel of GroupDMChannel class!", + origin: ErrorOrigin.User, + kind: ErrorKind.TypeError, + }); } const verifyPresetExistence = async ( @@ -311,6 +318,12 @@ export class PresetDialogHandler { origin: ErrorOrigin.User, kind: ErrorKind.TypeError, }); + } else if (interaction.channel instanceof PartialGroupDMChannel) { + throw new BotErr({ + message: "You can't use it with a channel of GroupDMChannel class!", + origin: ErrorOrigin.User, + kind: ErrorKind.TypeError, + }); } const awaitResponse = ( diff --git a/src/lib/system/handlers/presetHandler.ts b/src/lib/system/handlers/presetHandler.ts index b3eba06..7b46bd3 100755 --- a/src/lib/system/handlers/presetHandler.ts +++ b/src/lib/system/handlers/presetHandler.ts @@ -3,14 +3,12 @@ */ //#region External Libs -import path from "path"; -import fsp from "fs/promises"; import { Ok } from "ts-results"; import { Collection } from "discord.js"; //#endregion //#region Modules -import read from "@/system/factories/fs/read.f"; -import string from "@/system/factories/string.f"; +import { prisma } from "//index"; +import { action as autoReportAction } from "//commands/mod/autoreport"; //#endregion //#region Typing export namespace types { @@ -31,14 +29,6 @@ export namespace types { }; } //#endregion - -//#region Variables -export const basePresetDir = path.join( - __dirname, - "../../../../../config/presets/info" -); -const baseCommandsDir = path.join(__dirname, "../../../../src/commands"); -//#endregion //#region Implementation /** * Manipulador de Presets. @@ -46,34 +36,23 @@ const baseCommandsDir = path.join(__dirname, "../../../../src/commands"); export class PresetHandler { // Utilitários Externos public static async InitializateAll(): Promise> { - const presetDirFiles = await fsp.readdir(basePresetDir); - - for (const presetFile of presetDirFiles) { - const commandName = string.extractFilename(presetFile).val; - - const loadPreset = await read.JSON( - path.resolve(basePresetDir, presetFile) - ); - - for (const key in loadPreset.val) { - const preset = loadPreset.val[key]; - const command = await import( - ( - await read.findFilePath( - baseCommandsDir, - `${commandName}.js`, - { - recursive: true, - } - ) - ).val - ); - - await command.action({ name: preset.name, ...preset.data }); + // Inicializate Autoreport + { + const presets = await prisma.autoReportPresetInfo.findMany(); + + for (const preset of presets) { + await autoReportAction({ + name: preset.name, + chatID: preset.chatID, + logChatID: preset.logChatID, + emoji: preset.emoji, + emojiID: preset.emojiID ? preset.emojiID : undefined, + customEmoji: preset.customEmoji, + }); } } return Ok.EMPTY; } } -//#endregion \ No newline at end of file +//#endregion diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..c813ced --- /dev/null +++ b/src/main.rs @@ -0,0 +1,101 @@ +#[macro_use] +extern crate rust_i18n; + +use dotenv::dotenv; + +use handlers::error::BotErr; +use poise::serenity_prelude as serenity; + +use serenity::all::{ApplicationId, ClientBuilder, GatewayIntents, GuildId}; +use std::{env, sync::Arc}; +use tokio::sync::Mutex; + +mod commands; +mod handlers; +#[allow(warnings, unused)] +mod prisma; +mod tests; +mod utils; + +pub struct BotData { + pub prisma: Arc>, +} + +pub type Context<'a> = poise::Context<'a, BotData, BotErr>; + +rust_i18n::i18n!(); + +#[tokio::main] +async fn main() { + dotenv().ok(); + + let intents = GatewayIntents::GUILDS + | GatewayIntents::GUILD_MESSAGES + | GatewayIntents::GUILD_MESSAGE_REACTIONS + | GatewayIntents::GUILD_EMOJIS_AND_STICKERS + | GatewayIntents::MESSAGE_CONTENT + | GatewayIntents::DIRECT_MESSAGES + | GatewayIntents::DIRECT_MESSAGE_REACTIONS; + + let token = env::var("TOKEN").expect("Expected a token"); + let app_id: ApplicationId = env::var("CLIENT_ID") + .expect("Expected a client id") + .parse() + .unwrap(); + + env::remove_var("TOKEN"); + env::remove_var("CLIENT_ID"); + + let prisma_client = Arc::new(Mutex::new( + prisma::PrismaClient::_builder().build().await.unwrap(), + )); + + let get_commands = commands::get_commands(); + let commands = handlers::i18n::I18nHandler::internationalize_slash(get_commands); + + let framework = poise::Framework::::builder() + .options(poise::FrameworkOptions { + commands, + prefix_options: poise::PrefixFrameworkOptions { + prefix: Some("f.".to_string()), + ..Default::default() + }, + event_handler: |ctx, event, _framework, _err| { + Box::pin(async move { + let handler = handlers::event::Handler {}; + + handler.match_event(ctx, event).await; + + Ok(()) + }) + }, + ..Default::default() + }) + .setup(|ctx, _ready, framework| { + Box::pin(async move { + //poise::builtins::register_globally(ctx, &framework.options().commands).await?; + + // dev + poise::builtins::register_in_guild( + ctx, + &framework.options().commands, + GuildId::new(1102710490922238042), + ) + .await?; + + Ok(BotData { + prisma: prisma_client, + }) + }) + }) + .build(); + + let mut discord_client = ClientBuilder::new(&token, intents) + .framework(framework) + .application_id(app_id) + .status(serenity::OnlineStatus::Online) + .await + .expect("Error creating client"); + + discord_client.start().await.unwrap() +} diff --git a/src/tests/mod.rs b/src/tests/mod.rs new file mode 100644 index 0000000..fab870e --- /dev/null +++ b/src/tests/mod.rs @@ -0,0 +1 @@ +pub mod utils; \ No newline at end of file diff --git a/src/tests/utils.rs b/src/tests/utils.rs new file mode 100644 index 0000000..638cb18 --- /dev/null +++ b/src/tests/utils.rs @@ -0,0 +1,105 @@ +#[cfg(test)] +pub mod filter { + use crate::utils::filter::extract_emoji; + use crate::utils::values::{enums::EmojiFormat, structs::ExtractedEmoji}; + + #[test] + pub fn extract_complex_emoji() { + let emoji = "<:emoji:123456789>".to_string(); + + let extracted_emoji = extract_emoji(&emoji).unwrap(); + + assert_eq!( + extracted_emoji, + ExtractedEmoji { + is_custom: true, + kind: EmojiFormat::Custom, + name: "emoji".to_string(), + id: Some("123456789".to_string()) + } + ); + } + #[test] + pub fn extract_simple_emoji() { + let emoji = ":heart:".to_string(); + + let extracted_emoji = extract_emoji(&emoji).unwrap(); + + assert_eq!( + extracted_emoji, + ExtractedEmoji { + is_custom: false, + kind: EmojiFormat::Discord, + name: "heart".to_string(), + id: None + } + ); + } +} +#[cfg(test)] +pub mod verify { + use crate::utils::{values::enums::EmojiFormat, verify::get_emoji_format}; + + #[test] + pub fn emoji_discord() { + let emoji = ":heart:".to_string(); + + assert_eq!(get_emoji_format(&emoji), EmojiFormat::Discord); + } + #[test] + pub fn emoji_custom() { + let emoji = "<:emoji:123456789>".to_string(); + + assert_eq!(get_emoji_format(&emoji), EmojiFormat::Custom); + } + #[test] + pub fn emoji_unicode() { + let emoji = "\u{2764}\u{FE0F}".to_string(); + + assert_eq!(get_emoji_format(&emoji), EmojiFormat::Unicode); + } +} +#[cfg(test)] +pub mod parse { + use crate::utils::parse::limit_to_milli; + + #[test] + pub fn limit_basic_minutes_sum() { + assert_eq!( + limit_to_milli("1min".to_string()).unwrap(), + 60000, + "Test simple conversion, 1min to 120000" + ); + + assert_eq!( + limit_to_milli("1min + 1min".to_string()).unwrap(), + 120000, + "Test simple sum, 1min + 1min to 240000" + ); + } + #[test] + pub fn limit_basic_sum_and_subtract() { + assert_eq!( + limit_to_milli("1min - 1min".to_string()).unwrap(), + 0, + "Test simple subtraction, 1min - 1min to 0" + ); + + assert_eq!( + limit_to_milli("1min + 1min - 1min".to_string()).unwrap(), + 60000, + "Test simple sum and subtraction, 1min + 1min - 1min to 60000" + ); + + assert_eq!( + limit_to_milli("1min - 1min + 1d".to_string()).unwrap(), + 60000, + "Test inverted sum and subtraction, 1min - 1min + 1min to 60000" + ); + } + #[test] + #[should_panic(expected = "attempt to subtract with overflow")] + pub fn limit_negative_case() { + limit_to_milli("1min - 2min".to_string()).unwrap(); + } +} diff --git a/src/utils/filter.rs b/src/utils/filter.rs new file mode 100644 index 0000000..8e83ca6 --- /dev/null +++ b/src/utils/filter.rs @@ -0,0 +1,57 @@ +use regex::Regex; + +use crate::handlers::error::{BotErr, Error, BotError, ErrorKind, ErrorOrigin}; + +use super::{values::structs::ExtractedEmoji, verify}; + +/// Extract an emoji +/// +/// It will return an struct that will separate +/// the name from a possible id (if it's a custom emoji) +/// and will remove the characters that Discord uses to +/// identify an emoji (`<,:,>`) +/// +/// # Example +/// +/// ``` +/// let emoji = "<:emoji:123456789>".to_string(); +/// let extracted_emoji = custom_emoji(&emoji).unwrap(); +/// +/// dbg!(extracted_emoji) +/// // { +/// // is_custom: true, +/// // name: "emoji", +/// // id: Some("123456789"), +/// //} +/// ``` +pub fn extract_emoji(emoji: &String) -> Result { + let re = Regex::new(r"<:(\w+):(\d+)>|:(\w+):").unwrap(); + + let emoji_kind = verify::get_emoji_format(emoji); + + if let Some(captures) = re.captures(emoji) { + dbg!(re.captures(emoji)); + + if let (Some(name), Some(id)) = (captures.get(1), captures.get(2)) { + return Ok(ExtractedEmoji { + is_custom: true, + kind: emoji_kind, + name: name.as_str().to_string(), + id: Some(id.as_str().to_string()) + }); + } else if let Some(name) = captures.get(3) { + return Ok(ExtractedEmoji { + is_custom: false, + kind: emoji_kind, + name: name.as_str().to_string(), + id: None + }); + } + } + + Err(BotError::new( + t!("syntax.emoji.is_not").to_string(), + ErrorKind::InvalidValue, + ErrorOrigin::User + )) +} diff --git a/src/utils/matchs.rs b/src/utils/matchs.rs new file mode 100644 index 0000000..ccae61e --- /dev/null +++ b/src/utils/matchs.rs @@ -0,0 +1,38 @@ +use poise::Context; +use serenity::all::GuildId; + +use crate::{ + handlers::error::{BotErr, BotError, Error, ErrorKind, ErrorOrigin}, + BotData, +}; + +pub async fn ephemeral( + ctx: &Context<'_, BotData, BotErr>, + ephemeral: Option, +) -> Result<(), BotErr> { + if ephemeral.is_none() || ephemeral.unwrap() { + ctx.defer_ephemeral().await?; + } else { + ctx.defer().await?; + } + + Ok(()) +} + +pub async fn required_guild_id( + ctx: &Context<'_, BotData, BotErr>, + error_msg: &str, +) -> Result { + let guild_id = match ctx.guild_id() { + Some(guild_id) => guild_id, + None => { + return Err(BotError::new( + error_msg.to_string(), + ErrorKind::Other, + ErrorOrigin::User, + )) + } + }; + + Ok(guild_id) +} diff --git a/src/utils/mod.rs b/src/utils/mod.rs new file mode 100644 index 0000000..419dfd0 --- /dev/null +++ b/src/utils/mod.rs @@ -0,0 +1,5 @@ +pub mod values; +pub mod matchs; +pub mod filter; +pub mod verify; +pub mod parse; \ No newline at end of file diff --git a/src/utils/parse.rs b/src/utils/parse.rs new file mode 100644 index 0000000..2987aef --- /dev/null +++ b/src/utils/parse.rs @@ -0,0 +1,142 @@ +use std::collections::HashMap; + +use regex::Regex; + +use crate::handlers::error::{BotErr, BotError, Error, ErrorKind, ErrorOrigin}; + +/// Transforms a given string into milliseconds. +/// +/// The given string is expected to have the following format: `number operator unit` +/// where `number` is a number, `operator` is either `+` or `-`, and `unit` is one of the +/// following: `s` for seconds, `min` for minutes, `h` for hours, `d` for days, `w` for weeks, +/// `m` for months, and `y` for years. +/// +/// The function will iterate over the string, separating it into parts. If a part is an operator, +/// it will be stored in a vector. If a part is not an operator, it will be transformed into +/// milliseconds and added to another vector. +/// +/// The function will then iterate over the vector of operations and calculate the result of the +/// string. +/// +/// For example, if the given string is `1d-2h+3min`, the function will return `93600000` (1 day +/// minus 2 hours plus 3 minutes in milliseconds). +/// +/// # Errors +/// +/// The function will return an error if the given string is empty, if the string contains an +/// invalid operator, if the string contains an invalid unit, if the string contains an invalid +/// number, or if the string does not match the expected format. +pub fn limit_to_milli(mut limit: String) -> Result { + limit = limit.replace(" ", ""); + + let mut units = HashMap::new(); + { + units.insert("s", 1000); + units.insert("min", 1000 * 60); + units.insert("h", 1000 * 60 * 60); + units.insert("d", 1000 * 60 * 60 * 24); + units.insert("w", 1000 * 60 * 60 * 24 * 7); + units.insert("m", 1000 * 60 * 60 * 24 * 30); + units.insert("y", 1000 * 60 * 60 * 24 * 365); + } + let operators = ["+", "-"]; + + let units_regex = r"(s|min|h|d|w|m|y)"; + let numbers_regex = r"(\d+)"; + let mut divisors_regex = vec!["([".to_string()]; + { + for operator in &operators { + divisors_regex.push(format!(r"\{}", operator)); + } + divisors_regex.push("])".to_string()); + } + let limit_regex = Regex::new(&divisors_regex.join("")).unwrap(); + + let limit_len = limit.len(); + let mut limit_parts = vec![]; + let mut operations_in_milli: Vec = vec![]; + let mut limit_milli: u64 = 0; + + { + let mut last_index = 0; + for mat in limit_regex.find_iter(&limit) { + if mat.start() != last_index { + limit_parts.push(limit[last_index..mat.start()].to_string()); + } + + limit_parts.push(mat.as_str().to_string()); + last_index = mat.end(); + } + if last_index == 0 || last_index < limit_len { + limit_parts.push(limit[last_index..limit_len].to_string()) + } else { + return Err(BotError::new( + t!("syntax.limit.end_operators").to_string(), + ErrorKind::SyntaxError, + ErrorOrigin::User, + )); + } + + // Transform the values into milliseconds and place them in the operations vector + for (_, limit_part) in limit_parts.iter().enumerate() { + if operators.contains(&limit_part.as_str()) { + if operations_in_milli.len() == 0 && limit_part == operators[0] { + continue; + } + + operations_in_milli.push(limit_part.to_string()); + } else { + let wrong_unit_syntax_err = BotError::new( + t!("syntax.limit.unit_syntax_err").to_string(), + ErrorKind::SyntaxError, + ErrorOrigin::User, + ); + let unit_parts = Regex::new(format!("{}{}", numbers_regex, units_regex).as_str()) + .unwrap() + .captures(limit_part); + + if let Some(unit_parts) = unit_parts { + let unit_len = unit_parts.len(); + + if unit_len != 3 { + return Err(wrong_unit_syntax_err); + } + + if limit_part != unit_parts.get(0).unwrap().as_str() { + return Err(BotError::new( + t!("syntax.limit.invalid_unit_match").to_string(), + ErrorKind::SyntaxError, + ErrorOrigin::User, + )); + } + + let unit_number = unit_parts.get(1).unwrap().as_str().parse::().unwrap(); + + if let Some(unit) = units.get(unit_parts.get(2).unwrap().as_str()) { + operations_in_milli.push((unit_number * unit).to_string()); + + continue; + } + } + + return Err(wrong_unit_syntax_err); + } + } + + // Calculate operations + let mut last_operator = operators[0]; + for (_, operation) in operations_in_milli.iter().enumerate() { + if operators.contains(&operation.as_str()) { + last_operator = operation; + } else { + if last_operator == operators[0] { + limit_milli += operation.parse::().unwrap(); + } else { + limit_milli -= operation.parse::().unwrap(); + } + } + } + } + + Ok(limit_milli) +} diff --git a/src/utils/values/enums.rs b/src/utils/values/enums.rs new file mode 100644 index 0000000..6630233 --- /dev/null +++ b/src/utils/values/enums.rs @@ -0,0 +1,16 @@ +use strum_macros::{EnumIter, Display}; + +#[derive(PartialEq, Debug)] +pub enum EmojiFormat { + Unicode, + Custom, + Discord +} + +#[derive(EnumIter, Display)] +pub enum SupportedLocales { + #[strum(serialize = "en-US")] + EnUs, + #[strum(serialize = "pt-BR")] + PtBr, +} \ No newline at end of file diff --git a/src/utils/values/mod.rs b/src/utils/values/mod.rs new file mode 100644 index 0000000..f5b56e9 --- /dev/null +++ b/src/utils/values/mod.rs @@ -0,0 +1,2 @@ +pub mod structs; +pub mod enums; \ No newline at end of file diff --git a/src/utils/values/structs.rs b/src/utils/values/structs.rs new file mode 100644 index 0000000..89ed6c7 --- /dev/null +++ b/src/utils/values/structs.rs @@ -0,0 +1,9 @@ +use super::enums::EmojiFormat; + +#[derive(PartialEq, Debug)] +pub struct ExtractedEmoji { + pub is_custom: bool, + pub kind: EmojiFormat, + pub name: String, + pub id: Option, +} \ No newline at end of file diff --git a/src/utils/verify.rs b/src/utils/verify.rs new file mode 100644 index 0000000..66644ae --- /dev/null +++ b/src/utils/verify.rs @@ -0,0 +1,30 @@ +use regex::Regex; + +use super::values::enums::EmojiFormat; + +/// Verify what kind of emoji is used. +/// +/// # Example +/// ``` +/// let emoji = "<:emoji:123456789>".to_string(); +/// let emoji_format = get_emoji_format(&emoji); +/// +/// dbg!(emoji_format); +/// // EmojiFormat::Custom +/// ``` +pub fn get_emoji_format(emoji: &String) -> EmojiFormat { + let custom_test = Regex::new(r"<:(\w+):(\d+)>").unwrap().is_match(emoji); + let unicode_test = Regex::new( + r"[\u{1F600}-\u{1F64F}\u{1F300}-\u{1F5FF}\u{1F680}-\u{1F6FF}\u{2600}-\u{26FF}\u{2700}-\u{27BF}\u{1F004}-\u{1F0CF}\u{1F1E6}-\u{1F1FF}\u{FE0F}\u{200D}]" + ) + .unwrap() + .is_match(emoji); + + if unicode_test { + EmojiFormat::Unicode + } else if custom_test { + EmojiFormat::Custom + } else { + EmojiFormat::Discord + } +} diff --git a/yarn.lock b/yarn.lock index c149d04..6aee4b4 100755 --- a/yarn.lock +++ b/yarn.lock @@ -858,12 +858,6 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -<<<<<<< Updated upstream -"@sapphire/async-queue@^1.5.0": - version "1.5.2" - resolved "https://registry.yarnpkg.com/@sapphire/async-queue/-/async-queue-1.5.2.tgz#2982dce16e5b8b1ea792604d20c23c0585877b97" - integrity sha512-7X7FFAA4DngXUl95+hYbUF19bp1LGiffjJtu7ygrZrbdCSsdDDBaSjB7Akw0ZbOu6k0xpXyljnJ6/RZUvLfRdg== -======= "@prisma/client@5.18.0": version "5.18.0" resolved "https://registry.yarnpkg.com/@prisma/client/-/client-5.18.0.tgz#526e4281a448f214c0ff81d65c39243608c98294" @@ -909,7 +903,6 @@ version "1.5.3" resolved "https://registry.yarnpkg.com/@sapphire/async-queue/-/async-queue-1.5.3.tgz#03cd2a2f3665068f314736bdc56eee2025352422" integrity sha512-x7zadcfJGxFka1Q3f8gCts1F0xMwCKbZweM85xECGI0hBTeIZJGGCrHgLggihBoprlQ/hBmDR5LKfIPqnmHM3w== ->>>>>>> Stashed changes "@sapphire/shapeshift@^4.0.0": version "4.0.0" @@ -924,6 +917,48 @@ resolved "https://registry.yarnpkg.com/@sapphire/snowflake/-/snowflake-3.5.3.tgz#0c102aa2ec5b34f806e9bc8625fc6a5e1d0a0c6a" integrity sha512-jjmJywLAFoWeBi1W7994zZyiNWPIiqRRNAmSERxyg93xRGzNYvGjlZ0gR6x0F4gPRi2+0O6S71kOZYyr3cxaIQ== +"@shikijs/core@1.22.2": + version "1.22.2" + resolved "https://registry.yarnpkg.com/@shikijs/core/-/core-1.22.2.tgz#9c22bd4cc8a4d6c062461cfd35e1faa6c617ca25" + integrity sha512-bvIQcd8BEeR1yFvOYv6HDiyta2FFVePbzeowf5pPS1avczrPK+cjmaxxh0nx5QzbON7+Sv0sQfQVciO7bN72sg== + dependencies: + "@shikijs/engine-javascript" "1.22.2" + "@shikijs/engine-oniguruma" "1.22.2" + "@shikijs/types" "1.22.2" + "@shikijs/vscode-textmate" "^9.3.0" + "@types/hast" "^3.0.4" + hast-util-to-html "^9.0.3" + +"@shikijs/engine-javascript@1.22.2": + version "1.22.2" + resolved "https://registry.yarnpkg.com/@shikijs/engine-javascript/-/engine-javascript-1.22.2.tgz#62e90dbd2ed1d78b972ad7d0a1f8ffaaf5e43279" + integrity sha512-iOvql09ql6m+3d1vtvP8fLCVCK7BQD1pJFmHIECsujB0V32BJ0Ab6hxk1ewVSMFA58FI0pR2Had9BKZdyQrxTw== + dependencies: + "@shikijs/types" "1.22.2" + "@shikijs/vscode-textmate" "^9.3.0" + oniguruma-to-js "0.4.3" + +"@shikijs/engine-oniguruma@1.22.2": + version "1.22.2" + resolved "https://registry.yarnpkg.com/@shikijs/engine-oniguruma/-/engine-oniguruma-1.22.2.tgz#b12a44e3faf486e19fbcf8952f4b56b9b9b8d9b8" + integrity sha512-GIZPAGzQOy56mGvWMoZRPggn0dTlBf1gutV5TdceLCZlFNqWmuc7u+CzD0Gd9vQUTgLbrt0KLzz6FNprqYAxlA== + dependencies: + "@shikijs/types" "1.22.2" + "@shikijs/vscode-textmate" "^9.3.0" + +"@shikijs/types@1.22.2": + version "1.22.2" + resolved "https://registry.yarnpkg.com/@shikijs/types/-/types-1.22.2.tgz#695a283f19963fe0638fc2646862ba5cfc4623a8" + integrity sha512-NCWDa6LGZqTuzjsGfXOBWfjS/fDIbDdmVDug+7ykVe1IKT4c1gakrvlfFYp5NhAXH/lyqLM8wsAPo5wNy73Feg== + dependencies: + "@shikijs/vscode-textmate" "^9.3.0" + "@types/hast" "^3.0.4" + +"@shikijs/vscode-textmate@^9.3.0": + version "9.3.0" + resolved "https://registry.yarnpkg.com/@shikijs/vscode-textmate/-/vscode-textmate-9.3.0.tgz#b2f1776e488c1d6c2b6cd129bab62f71bbc9c7ab" + integrity sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA== + "@sinclair/typebox@^0.27.8": version "0.27.8" resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" @@ -1115,6 +1150,13 @@ dependencies: "@types/node" "*" +"@types/hast@^3.0.0", "@types/hast@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa" + integrity sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ== + dependencies: + "@types/unist" "*" + "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.6" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" @@ -1152,6 +1194,13 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== +"@types/mdast@^4.0.0": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-4.0.4.tgz#7ccf72edd2f1aa7dd3437e180c64373585804dd6" + integrity sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA== + dependencies: + "@types/unist" "*" + "@types/minimist@^1.2.0": version "1.2.5" resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.5.tgz#ec10755e871497bcd83efe927e43ec46e8c0747e" @@ -1225,6 +1274,11 @@ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== +"@types/unist@*", "@types/unist@^3.0.0": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.3.tgz#acaab0f919ce69cce629c2d4ed2eb4adc1b6c20c" + integrity sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q== + "@types/ws@^8.5.10": version "8.5.12" resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.12.tgz#619475fe98f35ccca2a2f6c137702d85ec247b7e" @@ -1328,7 +1382,7 @@ "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" -"@ungap/structured-clone@^1.2.0": +"@ungap/structured-clone@^1.0.0", "@ungap/structured-clone@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== @@ -1403,11 +1457,6 @@ ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-sequence-parser@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz#e0aa1cdcbc8f8bb0b5bca625aac41f5f056973cf" - integrity sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg== - ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -1718,6 +1767,11 @@ caniuse-lite@^1.0.30001580: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001582.tgz#db3070547ce0b48d9f44a509b86c4a02ba5d9055" integrity sha512-vsJG3V5vgfduaQGVxL53uSX/HUzxyr2eA8xCo36OLal7sRcSZbibJtLeh0qja4sFOr/QQGt4opB4tOy+eOgAxg== +ccount@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" + integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== + chai@^4.3.7: version "4.4.1" resolved "https://registry.yarnpkg.com/chai/-/chai-4.4.1.tgz#3603fa6eba35425b0f2ac91a009fe924106e50d1" @@ -1753,6 +1807,16 @@ char-regex@^1.0.2: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== +character-entities-html4@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b" + integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA== + +character-entities-legacy@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b" + integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== + check-error@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" @@ -1854,6 +1918,11 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" +comma-separated-tokens@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" + integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== + commander@^9.0.0: version "9.5.0" resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" @@ -2021,11 +2090,23 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== +dequal@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + detect-newline@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== +devlop@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/devlop/-/devlop-1.1.0.tgz#4db7c2ca4dc6e0e834c30be70c94bbc976dc7018" + integrity sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA== + dependencies: + dequal "^2.0.0" + diff-sequences@^29.6.3: version "29.6.3" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" @@ -2137,6 +2218,11 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +entities@^4.4.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -2796,6 +2882,30 @@ hasown@^2.0.0: dependencies: function-bind "^1.1.2" +hast-util-to-html@^9.0.3: + version "9.0.3" + resolved "https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-9.0.3.tgz#a9999a0ba6b4919576a9105129fead85d37f302b" + integrity sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg== + dependencies: + "@types/hast" "^3.0.0" + "@types/unist" "^3.0.0" + ccount "^2.0.0" + comma-separated-tokens "^2.0.0" + hast-util-whitespace "^3.0.0" + html-void-elements "^3.0.0" + mdast-util-to-hast "^13.0.0" + property-information "^6.0.0" + space-separated-tokens "^2.0.0" + stringify-entities "^4.0.0" + zwitch "^2.0.4" + +hast-util-whitespace@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz#7778ed9d3c92dd9e8c5c8f648a49c21fc51cb621" + integrity sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw== + dependencies: + "@types/hast" "^3.0.0" + homedir-polyfill@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" @@ -2820,6 +2930,11 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== +html-void-elements@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-3.0.0.tgz#fc9dbd84af9e747249034d4d62602def6517f1d7" + integrity sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg== + human-signals@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" @@ -3557,11 +3672,6 @@ json5@^2.2.2, json5@^2.2.3: resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -jsonc-parser@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz#031904571ccf929d7670ee8c547545081cb37f1a" - integrity sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA== - jsonfile@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" @@ -3623,6 +3733,13 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== +linkify-it@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-5.0.0.tgz#9ef238bfa6dc70bd8e7f9572b52d369af569b421" + integrity sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ== + dependencies: + uc.micro "^2.0.0" + load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" @@ -3778,10 +3895,37 @@ map-obj@^4.0.0: resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== -marked@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3" - integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== +markdown-it@^14.1.0: + version "14.1.0" + resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-14.1.0.tgz#3c3c5992883c633db4714ccb4d7b5935d98b7d45" + integrity sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg== + dependencies: + argparse "^2.0.1" + entities "^4.4.0" + linkify-it "^5.0.0" + mdurl "^2.0.0" + punycode.js "^2.3.1" + uc.micro "^2.1.0" + +mdast-util-to-hast@^13.0.0: + version "13.2.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz#5ca58e5b921cc0a3ded1bc02eed79a4fe4fe41f4" + integrity sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA== + dependencies: + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + "@ungap/structured-clone" "^1.0.0" + devlop "^1.0.0" + micromark-util-sanitize-uri "^2.0.0" + trim-lines "^3.0.0" + unist-util-position "^5.0.0" + unist-util-visit "^5.0.0" + vfile "^6.0.0" + +mdurl@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-2.0.0.tgz#80676ec0433025dd3e17ee983d0fe8de5a2237e0" + integrity sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w== meow@^8.0.0, meow@^8.1.2: version "8.1.2" @@ -3815,6 +3959,38 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== +micromark-util-character@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-2.1.0.tgz#31320ace16b4644316f6bf057531689c71e2aee1" + integrity sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ== + dependencies: + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-encode@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz#0921ac7953dc3f1fd281e3d1932decfdb9382ab1" + integrity sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA== + +micromark-util-sanitize-uri@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz#ec8fbf0258e9e6d8f13d9e4770f9be64342673de" + integrity sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-encode "^2.0.0" + micromark-util-symbol "^2.0.0" + +micromark-util-symbol@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz#12225c8f95edf8b17254e47080ce0862d5db8044" + integrity sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw== + +micromark-util-types@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.0.tgz#63b4b7ffeb35d3ecf50d1ca20e68fc7caa36d95e" + integrity sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w== + micromatch@^4.0.4: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" @@ -3852,10 +4028,10 @@ minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" -minimatch@^9.0.0: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== +minimatch@^9.0.5: + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== dependencies: brace-expansion "^2.0.1" @@ -4040,6 +4216,13 @@ onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" +oniguruma-to-js@0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/oniguruma-to-js/-/oniguruma-to-js-0.4.3.tgz#8d899714c21f5c7d59a3c0008ca50e848086d740" + integrity sha512-X0jWUcAlxORhOqqBREgPMgnshB7ZGYszBNspP+tS9hPD3l13CdaXcHbgImoHUHlrvGx/7AvFEkTRhAGYh+jzjQ== + dependencies: + regex "^4.3.2" + optionator@^0.9.3: version "0.9.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" @@ -4271,6 +4454,11 @@ proper-lockfile@^4.1.2: retry "^0.12.0" signal-exit "^3.0.2" +property-information@^6.0.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.5.0.tgz#6212fbb52ba757e92ef4fb9d657563b933b7ffec" + integrity sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig== + proxy-from-env@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" @@ -4285,6 +4473,11 @@ proxyquire@^2.1.3: module-not-found-error "^1.0.1" resolve "^1.11.1" +punycode.js@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode.js/-/punycode.js-2.3.1.tgz#6b53e56ad75588234e79f4affa90972c7dd8cdb7" + integrity sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA== + punycode@^2.1.0: version "2.3.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" @@ -4375,6 +4568,11 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" +regex@^4.3.2: + version "4.4.0" + resolved "https://registry.yarnpkg.com/regex/-/regex-4.4.0.tgz#cb731e2819f230fad69089e1bd854fef7569e90a" + integrity sha512-uCUSuobNVeqUupowbdZub6ggI5/JZkYyJdDogddJr60L764oxC2pMZov1fQ3wM9bdyzUILDG+Sqx6NAKAz9rKQ== + regexp.prototype.flags@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" @@ -4544,15 +4742,17 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shiki@^0.14.1: - version "0.14.7" - resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.14.7.tgz#c3c9e1853e9737845f1d2ef81b31bcfb07056d4e" - integrity sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg== +shiki@^1.16.2: + version "1.22.2" + resolved "https://registry.yarnpkg.com/shiki/-/shiki-1.22.2.tgz#ed109a3d0850504ad5a1edf8496470a2121c5b7b" + integrity sha512-3IZau0NdGKXhH2bBlUk4w1IHNxPh6A5B2sUpyY+8utLu2j/h1QpFkAaUA1bAMxOWWGtTWcAh531vnS4NJKS/lA== dependencies: - ansi-sequence-parser "^1.1.0" - jsonc-parser "^3.2.0" - vscode-oniguruma "^1.7.0" - vscode-textmate "^8.0.0" + "@shikijs/core" "1.22.2" + "@shikijs/engine-javascript" "1.22.2" + "@shikijs/engine-oniguruma" "1.22.2" + "@shikijs/types" "1.22.2" + "@shikijs/vscode-textmate" "^9.3.0" + "@types/hast" "^3.0.4" side-channel@^1.0.4: version "1.0.4" @@ -4603,6 +4803,11 @@ source-map@^0.6.0, source-map@^0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +space-separated-tokens@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" + integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== + spdx-correct@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" @@ -4708,6 +4913,14 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" +stringify-entities@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.4.tgz#b3b79ef5f277cc4ac73caeb0236c5ba939b3a4f3" + integrity sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg== + dependencies: + character-entities-html4 "^2.0.0" + character-entities-legacy "^3.0.0" + strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" @@ -4830,6 +5043,11 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" +trim-lines@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" + integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== + trim-newlines@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" @@ -5014,15 +5232,16 @@ typedoc-material-theme@^1.0.1: dependencies: "@material/material-color-utilities" "^0.2.7" -typedoc@^0.24.8: - version "0.24.8" - resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.24.8.tgz#cce9f47ba6a8d52389f5e583716a2b3b4335b63e" - integrity sha512-ahJ6Cpcvxwaxfu4KtjA8qZNqS43wYt6JL27wYiIgl1vd38WW/KWX11YuAeZhuz9v+ttrutSsgK+XO1CjL1kA3w== +typedoc@^0.26.7: + version "0.26.11" + resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.26.11.tgz#124b43a5637b7f3237b8c721691b44738c5c9dc9" + integrity sha512-sFEgRRtrcDl2FxVP58Ze++ZK2UQAEvtvvH8rRlig1Ja3o7dDaMHmaBfvJmdGnNEFaLTpQsN8dpvZaTqJSu/Ugw== dependencies: lunr "^2.3.9" - marked "^4.3.0" - minimatch "^9.0.0" - shiki "^0.14.1" + markdown-it "^14.1.0" + minimatch "^9.0.5" + shiki "^1.16.2" + yaml "^2.5.1" typescript-json-schema@^0.62.0: version "0.62.0" @@ -5053,6 +5272,11 @@ typescript@~5.1.0: resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.6.tgz#02f8ac202b6dad2c0dd5e0913745b47a37998274" integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA== +uc.micro@^2.0.0, uc.micro@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-2.1.0.tgz#f8d3f7d0ec4c3dea35a7e3c8efa4cb8b45c9e7ee" + integrity sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A== + unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" @@ -5073,6 +5297,44 @@ undici@6.19.8: resolved "https://registry.yarnpkg.com/undici/-/undici-6.19.8.tgz#002d7c8a28f8cc3a44ff33c3d4be4d85e15d40e1" integrity sha512-U8uCCl2x9TK3WANvmBavymRzxbfFYG+tAu+fgx3zxQy3qdagQqBLwJVrdyO1TBfUXvfKveMKJZhpvUYoOjM+4g== +unist-util-is@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-6.0.0.tgz#b775956486aff107a9ded971d996c173374be424" + integrity sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw== + dependencies: + "@types/unist" "^3.0.0" + +unist-util-position@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-5.0.0.tgz#678f20ab5ca1207a97d7ea8a388373c9cf896be4" + integrity sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA== + dependencies: + "@types/unist" "^3.0.0" + +unist-util-stringify-position@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz#449c6e21a880e0855bf5aabadeb3a740314abac2" + integrity sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ== + dependencies: + "@types/unist" "^3.0.0" + +unist-util-visit-parents@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz#4d5f85755c3b8f0dc69e21eca5d6d82d22162815" + integrity sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw== + dependencies: + "@types/unist" "^3.0.0" + unist-util-is "^6.0.0" + +unist-util-visit@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-5.0.0.tgz#a7de1f31f72ffd3519ea71814cccf5fd6a9217d6" + integrity sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg== + dependencies: + "@types/unist" "^3.0.0" + unist-util-is "^6.0.0" + unist-util-visit-parents "^6.0.0" + universalify@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" @@ -5120,15 +5382,21 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -vscode-oniguruma@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz#439bfad8fe71abd7798338d1cd3dc53a8beea94b" - integrity sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA== +vfile-message@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-4.0.2.tgz#c883c9f677c72c166362fd635f21fc165a7d1181" + integrity sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw== + dependencies: + "@types/unist" "^3.0.0" + unist-util-stringify-position "^4.0.0" -vscode-textmate@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-8.0.0.tgz#2c7a3b1163ef0441097e0b5d6389cd5504b59e5d" - integrity sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg== +vfile@^6.0.0: + version "6.0.3" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-6.0.3.tgz#3652ab1c496531852bf55a6bac57af981ebc38ab" + integrity sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q== + dependencies: + "@types/unist" "^3.0.0" + vfile-message "^4.0.0" walker@^1.0.8: version "1.0.8" @@ -5231,6 +5499,11 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +yaml@^2.5.1: + version "2.6.0" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.6.0.tgz#14059ad9d0b1680d0f04d3a60fe00f3a857303c3" + integrity sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ== + yargs-parser@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4" @@ -5291,3 +5564,8 @@ yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zwitch@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" + integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==