From 9b8a96c6514d6824eeac4d23d36af4e7d15212d8 Mon Sep 17 00:00:00 2001
From: Ren Amamiya <123083837+reyamir@users.noreply.github.com>
Date: Sun, 2 Apr 2023 08:30:36 +0700
Subject: [PATCH 05/21] replaced tauri-sql with prisma-client-rust
---
src-tauri/.cargo/config.toml | 2 +
src-tauri/.gitignore | 2 +
src-tauri/Cargo.lock | 2406 +++++++++++++++++++++++++----
src-tauri/Cargo.toml | 9 +-
src-tauri/prisma/migrations/.keep | 0
src-tauri/prisma/schema.prisma | 11 +
src-tauri/src/bin/prisma.rs | 3 +
src-tauri/src/main.rs | 15 +-
8 files changed, 2117 insertions(+), 331 deletions(-)
create mode 100644 src-tauri/.cargo/config.toml
create mode 100644 src-tauri/prisma/migrations/.keep
create mode 100644 src-tauri/prisma/schema.prisma
create mode 100644 src-tauri/src/bin/prisma.rs
diff --git a/src-tauri/.cargo/config.toml b/src-tauri/.cargo/config.toml
new file mode 100644
index 00000000..97680697
--- /dev/null
+++ b/src-tauri/.cargo/config.toml
@@ -0,0 +1,2 @@
+[alias]
+prisma = "run --bin prisma --"
diff --git a/src-tauri/.gitignore b/src-tauri/.gitignore
index f4dfb82b..d35e841c 100644
--- a/src-tauri/.gitignore
+++ b/src-tauri/.gitignore
@@ -2,3 +2,5 @@
# will have compiled files and executables
/target/
+# prisma
+src/prisma.rs
diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock
index b1dd6ce0..7640a8e0 100644
--- a/src-tauri/Cargo.lock
+++ b/src-tauri/Cargo.lock
@@ -2,6 +2,21 @@
# It is not intended for manual editing.
version = 3
+[[package]]
+name = "Inflector"
+version = "0.11.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3"
+
+[[package]]
+name = "addr2line"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97"
+dependencies = [
+ "gimli",
+]
+
[[package]]
name = "adler"
version = "1.0.2"
@@ -43,12 +58,38 @@ dependencies = [
"alloc-no-stdlib",
]
+[[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.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800"
+[[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.68"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.13",
+]
+
[[package]]
name = "atk"
version = "0.15.1"
@@ -74,12 +115,12 @@ dependencies = [
]
[[package]]
-name = "atoi"
-version = "1.0.0"
+name = "atomic-shim"
+version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d7c57d12312ff59c811c0643f4d80830505833c9ffaebd193d819392b265be8e"
+checksum = "67cd4b51d303cf3501c301e8125df442128d3c6d7c69f71b27833d253de47e77"
dependencies = [
- "num-traits",
+ "crossbeam-utils",
]
[[package]]
@@ -98,12 +139,60 @@ dependencies = [
"url",
]
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi",
+]
+
[[package]]
name = "autocfg"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+[[package]]
+name = "backtrace"
+version = "0.3.67"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[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 = "base64"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff"
+
[[package]]
name = "base64"
version = "0.13.1"
@@ -116,6 +205,43 @@ version = "0.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a"
+[[package]]
+name = "bigdecimal"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6aaf33151a6429fe9211d1b276eafdf70cdff28b071e76c0b0e1503221ea3744"
+dependencies = [
+ "num-bigint",
+ "num-integer",
+ "num-traits",
+ "serde",
+]
+
+[[package]]
+name = "bigint"
+version = "4.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0e8c8a600052b52482eff2cf4d810e462fdff1f656ac1ecb6232132a1ed7def"
+dependencies = [
+ "byteorder",
+ "crunchy",
+]
+
+[[package]]
+name = "bit-set"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1"
+dependencies = [
+ "bit-vec",
+]
+
+[[package]]
+name = "bit-vec"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
+
[[package]]
name = "bitflags"
version = "1.3.2"
@@ -128,6 +254,15 @@ version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
+[[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.3"
@@ -168,6 +303,21 @@ dependencies = [
"serde",
]
+[[package]]
+name = "builtin-psl-connectors"
+version = "0.1.0"
+source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.5#7cc20cc54a7ab0b5e38c81901826939a91a17ba0"
+dependencies = [
+ "connection-string",
+ "either",
+ "enumflags2",
+ "indoc 1.0.9",
+ "lsp-types",
+ "once_cell",
+ "psl-core",
+ "regex",
+]
+
[[package]]
name = "bumpalo"
version = "3.12.0"
@@ -272,6 +422,22 @@ version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+[[package]]
+name = "chrono"
+version = "0.4.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b"
+dependencies = [
+ "iana-time-zone",
+ "js-sys",
+ "num-integer",
+ "num-traits",
+ "serde",
+ "time 0.1.43",
+ "wasm-bindgen",
+ "winapi",
+]
+
[[package]]
name = "cocoa"
version = "0.24.1"
@@ -303,12 +469,46 @@ dependencies = [
"objc",
]
+[[package]]
+name = "codespan-reporting"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
+dependencies = [
+ "termcolor",
+ "unicode-width",
+]
+
[[package]]
name = "color_quant"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
+[[package]]
+name = "colored"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b3616f750b84d8f0de8a58bda93e08e2a81ad3f523089b05f1dffecab48c6cbd"
+dependencies = [
+ "atty",
+ "lazy_static",
+ "winapi",
+]
+
+[[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 = "combine"
version = "4.6.6"
@@ -319,12 +519,37 @@ dependencies = [
"memchr",
]
+[[package]]
+name = "connection-string"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c4ecb0dc8c35d2c626e45ae70bbfcb1050b302f42bcdf025d913cc0c5a0b443"
+dependencies = [
+ "js-sys",
+ "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.3"
@@ -375,21 +600,6 @@ dependencies = [
"libc",
]
-[[package]]
-name = "crc"
-version = "3.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "86ec7a15cbe22e59248fc7eadb1907dab5ba09372595da4d73dd805ed4417dfe"
-dependencies = [
- "crc-catalog",
-]
-
-[[package]]
-name = "crc-catalog"
-version = "2.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9cace84e55f07e7301bae1c519df89cdad8cc3cd868413d3fdbdeca9ff3db484"
-
[[package]]
name = "crc32fast"
version = "1.3.2"
@@ -409,6 +619,19 @@ dependencies = [
"crossbeam-utils",
]
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "crossbeam-utils",
+ "memoffset 0.8.0",
+ "scopeguard",
+]
+
[[package]]
name = "crossbeam-queue"
version = "0.3.8"
@@ -428,6 +651,12 @@ dependencies = [
"cfg-if",
]
+[[package]]
+name = "crunchy"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2f4a431c5c9f662e1200b7c7f02c34e91361150e382089a8f2dec3ba680cbda"
+
[[package]]
name = "crypto-common"
version = "0.1.6"
@@ -452,7 +681,7 @@ dependencies = [
"proc-macro2",
"quote",
"smallvec",
- "syn",
+ "syn 1.0.107",
]
[[package]]
@@ -462,7 +691,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dfae75de57f2b2e85e8768c3ea840fd159c8f33e2b6522c7835b7abac81be16e"
dependencies = [
"quote",
- "syn",
+ "syn 1.0.107",
]
[[package]]
@@ -472,7 +701,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096"
dependencies = [
"quote",
- "syn",
+ "syn 1.0.107",
]
[[package]]
@@ -481,6 +710,77 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35"
+[[package]]
+name = "cuid"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe5d03ac594f5f9cc680b142fff46f3ad9f197e19272042ebf1a40b383fee6fb"
+dependencies = [
+ "base36",
+ "bigint",
+ "cuid2",
+ "hostname",
+ "num",
+ "once_cell",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "cuid2"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1debbff0c0f0b54e681296c6f064a78f8ecec8e89e7fcc472443d9f85b98ca9a"
+dependencies = [
+ "num",
+ "proptest",
+ "rand 0.8.5",
+ "sha3",
+]
+
+[[package]]
+name = "cxx"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93"
+dependencies = [
+ "cc",
+ "cxxbridge-flags",
+ "cxxbridge-macro",
+ "link-cplusplus",
+]
+
+[[package]]
+name = "cxx-build"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b"
+dependencies = [
+ "cc",
+ "codespan-reporting",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "scratch",
+ "syn 2.0.13",
+]
+
+[[package]]
+name = "cxxbridge-flags"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb"
+
+[[package]]
+name = "cxxbridge-macro"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.13",
+]
+
[[package]]
name = "darling"
version = "0.13.4"
@@ -502,7 +802,7 @@ dependencies = [
"proc-macro2",
"quote",
"strsim",
- "syn",
+ "syn 1.0.107",
]
[[package]]
@@ -513,7 +813,18 @@ checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835"
dependencies = [
"darling_core",
"quote",
- "syn",
+ "syn 1.0.107",
+]
+
+[[package]]
+name = "datamodel-renderer"
+version = "0.1.0"
+source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.5#7cc20cc54a7ab0b5e38c81901826939a91a17ba0"
+dependencies = [
+ "base64 0.13.1",
+ "once_cell",
+ "psl",
+ "regex",
]
[[package]]
@@ -522,11 +833,30 @@ version = "0.99.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
dependencies = [
- "convert_case",
+ "convert_case 0.4.0",
"proc-macro2",
"quote",
"rustc_version 0.4.0",
- "syn",
+ "syn 1.0.107",
+]
+
+[[package]]
+name = "diagnostics"
+version = "0.1.0"
+source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.5#7cc20cc54a7ab0b5e38c81901826939a91a17ba0"
+dependencies = [
+ "colored",
+ "indoc 1.0.9",
+ "pest",
+]
+
+[[package]]
+name = "digest"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
+dependencies = [
+ "generic-array",
]
[[package]]
@@ -535,10 +865,19 @@ version = "0.10.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f"
dependencies = [
- "block-buffer",
+ "block-buffer 0.10.3",
"crypto-common",
]
+[[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-next"
version = "2.0.0"
@@ -549,6 +888,17 @@ dependencies = [
"dirs-sys-next",
]
+[[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 = "dirs-sys-next"
version = "0.1.2"
@@ -567,10 +917,52 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
[[package]]
-name = "dotenvy"
-version = "0.15.6"
+name = "dml"
+version = "0.1.0"
+source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.5#7cc20cc54a7ab0b5e38c81901826939a91a17ba0"
+dependencies = [
+ "chrono",
+ "cuid",
+ "either",
+ "enumflags2",
+ "indoc 1.0.9",
+ "prisma-value",
+ "psl-core",
+ "schema-ast",
+ "serde",
+ "serde_json",
+ "uuid 1.3.0",
+]
+
+[[package]]
+name = "dmmf"
+version = "0.1.0"
+source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.5#7cc20cc54a7ab0b5e38c81901826939a91a17ba0"
+dependencies = [
+ "bigdecimal",
+ "indexmap",
+ "prisma-models",
+ "psl",
+ "schema",
+ "schema-builder",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "document-features"
+version = "0.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "03d8c417d7a8cb362e0c37e5d815f5eb7c37f79ff93707329d5a194e42e54ca0"
+checksum = "e493c573fce17f00dcab13b6ac057994f3ce17d1af4dc39bfd482b83c6eb6157"
+dependencies = [
+ "litrs",
+]
+
+[[package]]
+name = "dotenv"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f"
[[package]]
name = "dtoa"
@@ -615,10 +1007,64 @@ dependencies = [
]
[[package]]
-name = "event-listener"
-version = "2.5.3"
+name = "endian-type"
+version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
+checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d"
+
+[[package]]
+name = "enumflags2"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0044ebdf7fbb2a772e0c0233a9d3173c5cd8af8ae7078d4c5188af44ffffaa4b"
+dependencies = [
+ "enumflags2_derive",
+]
+
+[[package]]
+name = "enumflags2_derive"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d2c772ccdbdfd1967b4f5d79d17c98ebf92009fdcc838db7aa434462f600c26"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.13",
+]
+
+[[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.107",
+ "synstructure",
+]
+
+[[package]]
+name = "fallible-iterator"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7"
+
+[[package]]
+name = "fallible-streaming-iterator"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a"
[[package]]
name = "fastrand"
@@ -635,7 +1081,7 @@ version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e1c54951450cbd39f3dbcf1005ac413b49487dabf18a720ad2383eccfeffb92"
dependencies = [
- "memoffset",
+ "memoffset 0.6.5",
"rustc_version 0.3.3",
]
@@ -651,6 +1097,12 @@ dependencies = [
"windows-sys 0.42.0",
]
+[[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.25"
@@ -661,18 +1113,6 @@ dependencies = [
"miniz_oxide",
]
-[[package]]
-name = "flume"
-version = "0.10.14"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577"
-dependencies = [
- "futures-core",
- "futures-sink",
- "pin-project",
- "spin 0.9.4",
-]
-
[[package]]
name = "fnv"
version = "1.0.7"
@@ -703,6 +1143,12 @@ dependencies = [
"percent-encoding",
]
+[[package]]
+name = "fuchsia-cprng"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
+
[[package]]
name = "futf"
version = "0.1.5"
@@ -755,17 +1201,6 @@ dependencies = [
"futures-util",
]
-[[package]]
-name = "futures-intrusive"
-version = "0.4.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a604f7a68fbf8103337523b1fadc8ade7361ee3f112f7c680ad179651616aed5"
-dependencies = [
- "futures-core",
- "lock_api",
- "parking_lot 0.11.2",
-]
-
[[package]]
name = "futures-io"
version = "0.3.26"
@@ -780,7 +1215,7 @@ checksum = "95a73af87da33b5acf53acfebdc339fe592ecf5357ac7c0a7734ab9d8c876a70"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.107",
]
[[package]]
@@ -795,6 +1230,12 @@ version = "0.3.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dcf79a1bf610b10f42aea489289c5a2c478a786509693b80cd39c44ccd936366"
+[[package]]
+name = "futures-timer"
+version = "3.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c"
+
[[package]]
name = "futures-util"
version = "0.3.26"
@@ -939,6 +1380,12 @@ dependencies = [
"wasi 0.11.0+wasi-snapshot-preview1",
]
+[[package]]
+name = "gimli"
+version = "0.27.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4"
+
[[package]]
name = "gio"
version = "0.15.12"
@@ -1001,7 +1448,7 @@ dependencies = [
"proc-macro-error",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.107",
]
[[package]]
@@ -1044,6 +1491,16 @@ dependencies = [
"system-deps 6.0.3",
]
+[[package]]
+name = "graphql-parser"
+version = "0.3.0"
+source = "git+https://github.com/prisma/graphql-parser#6a3f58bd879065588e710cb02b5bd30c1ce182c3"
+dependencies = [
+ "combine 3.8.1",
+ "indexmap",
+ "thiserror",
+]
+
[[package]]
name = "gtk"
version = "0.15.5"
@@ -1096,7 +1553,35 @@ dependencies = [
"proc-macro-error",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.107",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5be7b54589b581f624f566bf5d8eb2bab1db736c51528720b6bd36b96b55924d"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "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",
]
[[package]]
@@ -1110,11 +1595,11 @@ dependencies = [
[[package]]
name = "hashlink"
-version = "0.8.1"
+version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "69fe1fcf8b4278d860ad0548329f892a3631fb63f82574df68275f34cdbe0ffa"
+checksum = "7249a3129cbc1ffccd74857f81464a323a152173cdb134e0fd81bc803b29facf"
dependencies = [
- "hashbrown",
+ "hashbrown 0.11.2",
]
[[package]]
@@ -1131,8 +1616,14 @@ name = "heck"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
dependencies = [
- "unicode-segmentation",
+ "libc",
]
[[package]]
@@ -1150,6 +1641,17 @@ version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+[[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 = "html5ever"
version = "0.25.2"
@@ -1161,7 +1663,7 @@ dependencies = [
"markup5ever",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.107",
]
[[package]]
@@ -1175,12 +1677,96 @@ dependencies = [
"itoa 1.0.5",
]
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
[[package]]
name = "http-range"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573"
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+
+[[package]]
+name = "hyper"
+version = "0.14.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc5e554ff619822309ffd57d8734d77cd5ce6238bc956f037ea06c58238c9899"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa 1.0.5",
+ "pin-project-lite",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[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.53"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca"
+dependencies = [
+ "cxx",
+ "cxx-build",
+]
+
[[package]]
name = "ico"
version = "0.2.0"
@@ -1238,6 +1824,25 @@ dependencies = [
"num-traits",
]
+[[package]]
+name = "include_dir"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18762faeff7122e89e0857b02f7ce6fcc0d101d5e9ad2ad7846cc01d61b7f19e"
+dependencies = [
+ "include_dir_macros",
+]
+
+[[package]]
+name = "include_dir_macros"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b139284b5cf57ecfa712bcc66950bb635b31aff41c188e8a4cfc758eca374a3f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+]
+
[[package]]
name = "indexmap"
version = "1.9.2"
@@ -1245,9 +1850,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399"
dependencies = [
"autocfg",
- "hashbrown",
+ "hashbrown 0.12.3",
+ "serde",
]
+[[package]]
+name = "indoc"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa799dd5ed20a7e349f3b4639aa80d74549c81716d9ec4f994c9b5815598306"
+
+[[package]]
+name = "indoc"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f2cb48b81b1dc9f39676bf99f5499babfec7cd8fe14307f7b3d747208fb5690"
+
[[package]]
name = "infer"
version = "0.7.0"
@@ -1266,6 +1884,27 @@ dependencies = [
"cfg-if",
]
+[[package]]
+name = "introspection-connector"
+version = "0.1.0"
+source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.5#7cc20cc54a7ab0b5e38c81901826939a91a17ba0"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "enumflags2",
+ "psl",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "user-facing-errors",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f"
+
[[package]]
name = "itertools"
version = "0.10.5"
@@ -1317,7 +1956,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c"
dependencies = [
"cesu8",
- "combine",
+ "combine 4.6.6",
"jni-sys",
"log",
"thiserror",
@@ -1332,9 +1971,9 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
[[package]]
name = "js-sys"
-version = "0.3.61"
+version = "0.3.56"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730"
+checksum = "a38fc24e30fd564ce974c02bf1d337caddff65be6cc4735a1f7eab22a7440f04"
dependencies = [
"wasm-bindgen",
]
@@ -1350,6 +1989,41 @@ dependencies = [
"treediff",
]
+[[package]]
+name = "json-rpc-api-build"
+version = "0.1.0"
+source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.5#7cc20cc54a7ab0b5e38c81901826939a91a17ba0"
+dependencies = [
+ "backtrace",
+ "heck 0.3.3",
+ "serde",
+ "toml",
+]
+
+[[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.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3afef3b6eff9ce9d8ff9b3601125eec7f0c8cbac7abd14f355d053fa56c98768"
+dependencies = [
+ "cpufeatures",
+]
+
[[package]]
name = "kuchiki"
version = "0.8.1"
@@ -1409,10 +2083,16 @@ dependencies = [
]
[[package]]
-name = "libsqlite3-sys"
-version = "0.24.2"
+name = "libm"
+version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "898745e570c7d0453cc1fbc4a701eb6c662ed54e8fec8b7d14be137ebeeb9d14"
+checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb"
+
+[[package]]
+name = "libsqlite3-sys"
+version = "0.22.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "290b64917f8b0cb885d9de0f9959fe1f775d7fa12f1da2db9001c1c8ab60f89d"
dependencies = [
"cc",
"pkg-config",
@@ -1428,6 +2108,21 @@ dependencies = [
"safemem",
]
+[[package]]
+name = "link-cplusplus"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "litrs"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9275e0933cf8bb20f008924c0cb07a0692fe54d8064996520bf998de9eb79aa"
+
[[package]]
name = "lock_api"
version = "0.4.9"
@@ -1462,17 +2157,42 @@ dependencies = [
"tracing-subscriber",
]
+[[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 = "lsp-types"
+version = "0.91.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2368312c59425dd133cb9a327afee65be0a633a8ce471d248e2202a48f8f68ae"
+dependencies = [
+ "bitflags",
+ "serde",
+ "serde_json",
+ "serde_repr",
+ "url",
+]
+
[[package]]
name = "lume"
version = "0.2.1"
dependencies = [
"cocoa",
"objc",
+ "prisma-client-rust",
+ "prisma-client-rust-cli",
"serde",
"serde_json",
+ "specta",
"tauri",
"tauri-build",
- "tauri-plugin-sql",
+ "tauri-specta",
]
[[package]]
@@ -1481,6 +2201,15 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4"
+[[package]]
+name = "mach"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa"
+dependencies = [
+ "libc",
+]
+
[[package]]
name = "malloc_buf"
version = "0.0.6"
@@ -1504,6 +2233,12 @@ dependencies = [
"tendril",
]
+[[package]]
+name = "match_cfg"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4"
+
[[package]]
name = "matchers"
version = "0.1.0"
@@ -1534,6 +2269,146 @@ dependencies = [
"autocfg",
]
+[[package]]
+name = "memoffset"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "metrics"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e52eb6380b6d2a10eb3434aec0885374490f5b82c8aaf5cd487a183c98be834"
+dependencies = [
+ "ahash",
+ "metrics-macros",
+]
+
+[[package]]
+name = "metrics"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "142c53885123b68d94108295a09d4afe1a1388ed95b54d5dacd9a454753030f2"
+dependencies = [
+ "ahash",
+ "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",
+ "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.107",
+]
+
+[[package]]
+name = "metrics-util"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "65a9e83b833e1d2e07010a386b197c13aa199bbd0fca5cf69bfa147972db890a"
+dependencies = [
+ "aho-corasick",
+ "atomic-shim",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+ "hashbrown 0.11.2",
+ "indexmap",
+ "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.5#7cc20cc54a7ab0b5e38c81901826939a91a17ba0"
+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.5#7cc20cc54a7ab0b5e38c81901826939a91a17ba0"
+dependencies = [
+ "async-trait",
+ "chrono",
+ "enumflags2",
+ "json-rpc-api-build",
+ "jsonrpc-core",
+ "migration-connector",
+ "psl",
+ "serde",
+ "serde_json",
+ "sql-migration-connector",
+ "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 = "minimal-lexical"
version = "0.2.1"
@@ -1561,6 +2436,24 @@ dependencies = [
"windows-sys 0.42.0",
]
+[[package]]
+name = "mobc"
+version = "0.7.3"
+source = "git+https://github.com/prisma/mobc?tag=1.0.6#80462c4870a2bf6aab49da15c88c021bae531da8"
+dependencies = [
+ "async-trait",
+ "futures-channel",
+ "futures-core",
+ "futures-timer",
+ "futures-util",
+ "log",
+ "metrics 0.18.1",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "tracing-subscriber",
+]
+
[[package]]
name = "native-tls"
version = "0.2.11"
@@ -1613,6 +2506,15 @@ version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
+[[package]]
+name = "nibble_vec"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43"
+dependencies = [
+ "smallvec",
+]
+
[[package]]
name = "nodrop"
version = "0.1.14"
@@ -1648,6 +2550,40 @@ dependencies = [
"winapi",
]
+[[package]]
+name = "num"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43db66d1170d347f9a065114077f7dccb00c1b9478c89384490a3425279a4606"
+dependencies = [
+ "num-bigint",
+ "num-complex",
+ "num-integer",
+ "num-iter",
+ "num-rational",
+ "num-traits",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-complex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d"
+dependencies = [
+ "num-traits",
+]
+
[[package]]
name = "num-integer"
version = "0.1.45"
@@ -1658,6 +2594,17 @@ dependencies = [
"num-traits",
]
+[[package]]
+name = "num-iter"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
[[package]]
name = "num-rational"
version = "0.4.1"
@@ -1665,6 +2612,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
dependencies = [
"autocfg",
+ "num-bigint",
"num-integer",
"num-traits",
]
@@ -1676,6 +2624,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
dependencies = [
"autocfg",
+ "libm",
]
[[package]]
@@ -1684,7 +2633,7 @@ version = "1.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
dependencies = [
- "hermit-abi",
+ "hermit-abi 0.2.6",
"libc",
]
@@ -1706,7 +2655,7 @@ dependencies = [
"proc-macro-crate",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.107",
]
[[package]]
@@ -1737,12 +2686,27 @@ dependencies = [
"objc",
]
+[[package]]
+name = "object"
+version = "0.30.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439"
+dependencies = [
+ "memchr",
+]
+
[[package]]
name = "once_cell"
version = "1.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66"
+[[package]]
+name = "opaque-debug"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
+
[[package]]
name = "open"
version = "3.2.0"
@@ -1776,7 +2740,7 @@ checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.107",
]
[[package]]
@@ -1798,6 +2762,41 @@ dependencies = [
"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",
+ "tokio",
+]
+
+[[package]]
+name = "ordered-float"
+version = "2.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7940cf2ca942593318d07fcf2596cdca60a85c9e7fab408a5e21a4f9dcd40d87"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "ordermap"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a86ed3f5f244b372d6b1a00b72ef7f8876d0bc6a78a4c9985c53614041512063"
+
[[package]]
name = "os_info"
version = "3.6.0"
@@ -1888,6 +2887,18 @@ dependencies = [
"windows-sys 0.45.0",
]
+[[package]]
+name = "parser-database"
+version = "0.1.0"
+source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.5#7cc20cc54a7ab0b5e38c81901826939a91a17ba0"
+dependencies = [
+ "diagnostics",
+ "either",
+ "enumflags2",
+ "indexmap",
+ "schema-ast",
+]
+
[[package]]
name = "paste"
version = "1.0.11"
@@ -1916,6 +2927,50 @@ dependencies = [
"ucd-trie",
]
+[[package]]
+name = "pest_derive"
+version = "2.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8bf026e2d0581559db66d837fe5242320f525d85c76283c61f4d51a1238d65ea"
+dependencies = [
+ "pest",
+ "pest_generator",
+]
+
+[[package]]
+name = "pest_generator"
+version = "2.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b27bd18aa01d91c8ed2b61ea23406a676b42d82609c6e2581fba42f0c15f17f"
+dependencies = [
+ "pest",
+ "pest_meta",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.107",
+]
+
+[[package]]
+name = "pest_meta"
+version = "2.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f02b677c1859756359fc9983c2e56a0237f18624a3789528804406b7e915e5d"
+dependencies = [
+ "once_cell",
+ "pest",
+ "sha2 0.10.6",
+]
+
+[[package]]
+name = "petgraph"
+version = "0.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c3659d1ee90221741f65dd128d9998311b0e40c5d3c23a62445938214abce4f"
+dependencies = [
+ "fixedbitset",
+ "ordermap",
+]
+
[[package]]
name = "phf"
version = "0.8.0"
@@ -1979,7 +3034,7 @@ dependencies = [
"proc-macro-hack",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.107",
]
[[package]]
@@ -1993,7 +3048,7 @@ dependencies = [
"proc-macro-hack",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.107",
]
[[package]]
@@ -2031,7 +3086,7 @@ checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.107",
]
[[package]]
@@ -2063,7 +3118,7 @@ dependencies = [
"line-wrap",
"quick-xml",
"serde",
- "time",
+ "time 0.3.17",
]
[[package]]
@@ -2090,6 +3145,125 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
+[[package]]
+name = "prisma-client-rust"
+version = "0.6.7"
+source = "git+https://github.com/Brendonovich/prisma-client-rust?tag=0.6.7#f71ad9122537c4ed29bf496a4a643947a5fe9aef"
+dependencies = [
+ "base64 0.13.1",
+ "bigdecimal",
+ "chrono",
+ "diagnostics",
+ "dml",
+ "dmmf",
+ "dotenv",
+ "futures",
+ "include_dir",
+ "indexmap",
+ "migration-core",
+ "paste",
+ "prisma-client-rust-macros",
+ "prisma-models",
+ "psl",
+ "query-connector",
+ "query-core",
+ "schema",
+ "serde",
+ "serde-value",
+ "serde_json",
+ "specta",
+ "tempdir",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "user-facing-errors",
+ "uuid 1.3.0",
+]
+
+[[package]]
+name = "prisma-client-rust-cli"
+version = "0.6.7"
+source = "git+https://github.com/Brendonovich/prisma-client-rust?tag=0.6.7#f71ad9122537c4ed29bf496a4a643947a5fe9aef"
+dependencies = [
+ "directories",
+ "flate2",
+ "http",
+ "prisma-client-rust-sdk",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "serde_path_to_error",
+ "syn 1.0.107",
+ "thiserror",
+]
+
+[[package]]
+name = "prisma-client-rust-macros"
+version = "0.6.7"
+source = "git+https://github.com/Brendonovich/prisma-client-rust?tag=0.6.7#f71ad9122537c4ed29bf496a4a643947a5fe9aef"
+dependencies = [
+ "convert_case 0.6.0",
+ "proc-macro2",
+ "quote",
+ "specta",
+ "syn 1.0.107",
+]
+
+[[package]]
+name = "prisma-client-rust-sdk"
+version = "0.6.7"
+source = "git+https://github.com/Brendonovich/prisma-client-rust?tag=0.6.7#f71ad9122537c4ed29bf496a4a643947a5fe9aef"
+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.107",
+ "thiserror",
+]
+
+[[package]]
+name = "prisma-models"
+version = "0.0.0"
+source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.5#7cc20cc54a7ab0b5e38c81901826939a91a17ba0"
+dependencies = [
+ "bigdecimal",
+ "chrono",
+ "itertools",
+ "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.5#7cc20cc54a7ab0b5e38c81901826939a91a17ba0"
+dependencies = [
+ "base64 0.12.3",
+ "bigdecimal",
+ "chrono",
+ "once_cell",
+ "regex",
+ "serde",
+ "serde_json",
+ "uuid 1.3.0",
+]
+
[[package]]
name = "proc-macro-crate"
version = "1.3.0"
@@ -2109,7 +3283,7 @@ dependencies = [
"proc-macro-error-attr",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.107",
"version_check",
]
@@ -2132,13 +3306,203 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
[[package]]
name = "proc-macro2"
-version = "1.0.51"
+version = "1.0.55"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6"
+checksum = "1d0dd4be24fcdcfeaa12a432d588dc59bbad6cad3510c67e74a2b6b2fc950564"
dependencies = [
"unicode-ident",
]
+[[package]]
+name = "proptest"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29f1b898011ce9595050a68e60f90bad083ff2987a695a42357134c8381fba70"
+dependencies = [
+ "bit-set",
+ "bitflags",
+ "byteorder",
+ "lazy_static",
+ "num-traits",
+ "quick-error 2.0.1",
+ "rand 0.8.5",
+ "rand_chacha 0.3.1",
+ "rand_xorshift",
+ "regex-syntax",
+ "rusty-fork",
+ "tempfile",
+ "unarray",
+]
+
+[[package]]
+name = "psl"
+version = "0.1.0"
+source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.5#7cc20cc54a7ab0b5e38c81901826939a91a17ba0"
+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.5#7cc20cc54a7ab0b5e38c81901826939a91a17ba0"
+dependencies = [
+ "bigdecimal",
+ "chrono",
+ "diagnostics",
+ "enumflags2",
+ "indoc 1.0.9",
+ "itertools",
+ "lsp-types",
+ "once_cell",
+ "parser-database",
+ "prisma-value",
+ "regex",
+ "schema-ast",
+ "serde",
+ "serde_json",
+ "url",
+]
+
+[[package]]
+name = "quaint"
+version = "0.2.0-alpha.13"
+source = "git+https://github.com/Brendonovich/quaint?tag=0.6.5#2bf0c3620f76d83982c17e567b71da6fc9d65d14"
+dependencies = [
+ "async-trait",
+ "base64 0.12.3",
+ "bigdecimal",
+ "chrono",
+ "connection-string",
+ "futures",
+ "hex",
+ "libsqlite3-sys",
+ "metrics 0.18.1",
+ "mobc",
+ "num_cpus",
+ "percent-encoding",
+ "rusqlite",
+ "serde_json",
+ "sqlformat",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "tracing-core",
+ "url",
+ "uuid 1.3.0",
+]
+
+[[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.5#7cc20cc54a7ab0b5e38c81901826939a91a17ba0"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "chrono",
+ "futures",
+ "indexmap",
+ "itertools",
+ "prisma-models",
+ "prisma-value",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "user-facing-errors",
+ "uuid 1.3.0",
+]
+
+[[package]]
+name = "query-core"
+version = "0.1.0"
+source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.5#7cc20cc54a7ab0b5e38c81901826939a91a17ba0"
+dependencies = [
+ "async-trait",
+ "base64 0.12.3",
+ "bigdecimal",
+ "chrono",
+ "connection-string",
+ "crossbeam-queue",
+ "cuid",
+ "enumflags2",
+ "futures",
+ "indexmap",
+ "itertools",
+ "lazy_static",
+ "lru",
+ "once_cell",
+ "opentelemetry",
+ "parking_lot 0.12.1",
+ "petgraph",
+ "pin-utils",
+ "prisma-models",
+ "prisma-value",
+ "psl",
+ "query-connector",
+ "query-engine-metrics",
+ "schema",
+ "schema-builder",
+ "serde",
+ "serde_json",
+ "sql-query-connector",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "tracing-futures",
+ "tracing-opentelemetry",
+ "tracing-subscriber",
+ "url",
+ "user-facing-errors",
+ "uuid 1.3.0",
+]
+
+[[package]]
+name = "query-engine-metrics"
+version = "0.1.0"
+source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.5#7cc20cc54a7ab0b5e38c81901826939a91a17ba0"
+dependencies = [
+ "metrics 0.18.1",
+ "metrics-exporter-prometheus",
+ "metrics-util 0.12.1",
+ "once_cell",
+ "parking_lot 0.12.1",
+ "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 = "quick-error"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3"
+
[[package]]
name = "quick-xml"
version = "0.26.0"
@@ -2150,13 +3514,36 @@ dependencies = [
[[package]]
name = "quote"
-version = "1.0.23"
+version = "1.0.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b"
+checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
dependencies = [
"proc-macro2",
]
+[[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.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293"
+dependencies = [
+ "fuchsia-cprng",
+ "libc",
+ "rand_core 0.3.1",
+ "rdrand",
+ "winapi",
+]
+
[[package]]
name = "rand"
version = "0.7.3"
@@ -2202,6 +3589,21 @@ dependencies = [
"rand_core 0.6.4",
]
+[[package]]
+name = "rand_core"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
+dependencies = [
+ "rand_core 0.4.2",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
+
[[package]]
name = "rand_core"
version = "0.5.1"
@@ -2238,6 +3640,24 @@ dependencies = [
"rand_core 0.5.1",
]
+[[package]]
+name = "rand_xorshift"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f"
+dependencies = [
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "raw-cpuid"
+version = "10.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c297679cb867470fa8c9f67dbba74a78d78e3e98d7cf2b08d6d71540f797332"
+dependencies = [
+ "bitflags",
+]
+
[[package]]
name = "raw-window-handle"
version = "0.5.0"
@@ -2247,6 +3667,15 @@ dependencies = [
"cty",
]
+[[package]]
+name = "rdrand"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
[[package]]
name = "redox_syscall"
version = "0.2.16"
@@ -2303,20 +3732,86 @@ dependencies = [
]
[[package]]
-name = "ring"
-version = "0.16.20"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+name = "request-handlers"
+version = "0.1.0"
+source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.5#7cc20cc54a7ab0b5e38c81901826939a91a17ba0"
dependencies = [
- "cc",
- "libc",
- "once_cell",
- "spin 0.5.2",
- "untrusted",
- "web-sys",
- "winapi",
+ "bigdecimal",
+ "connection-string",
+ "dmmf",
+ "futures",
+ "graphql-parser",
+ "indexmap",
+ "itertools",
+ "psl",
+ "query-core",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "tracing",
+ "url",
+ "user-facing-errors",
]
+[[package]]
+name = "reqwest"
+version = "0.11.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27b71749df584b7f4cac2c426c127a7c785a5106cc98f7a8feb044115f0fa254"
+dependencies = [
+ "base64 0.21.0",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "log",
+ "mime",
+ "native-tls",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-native-tls",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "winreg",
+]
+
+[[package]]
+name = "rusqlite"
+version = "0.25.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c4b1eaf239b47034fb450ee9cdedd7d0226571689d8823030c4b6c2cb407152"
+dependencies = [
+ "bitflags",
+ "chrono",
+ "fallible-iterator",
+ "fallible-streaming-iterator",
+ "hashlink",
+ "libsqlite3-sys",
+ "memchr",
+ "smallvec",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4a36c42d1873f9a77c53bde094f9664d9891bc604a45b4798fd2c389ed12e5b"
+
[[package]]
name = "rustc_version"
version = "0.3.3"
@@ -2335,33 +3830,24 @@ dependencies = [
"semver 1.0.16",
]
-[[package]]
-name = "rustls"
-version = "0.20.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f"
-dependencies = [
- "log",
- "ring",
- "sct",
- "webpki",
-]
-
-[[package]]
-name = "rustls-pemfile"
-version = "1.0.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b"
-dependencies = [
- "base64 0.21.0",
-]
-
[[package]]
name = "rustversion"
version = "1.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70"
+[[package]]
+name = "rusty-fork"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f"
+dependencies = [
+ "fnv",
+ "quick-error 1.2.3",
+ "tempfile",
+ "wait-timeout",
+]
+
[[package]]
name = "ryu"
version = "1.0.12"
@@ -2392,6 +3878,39 @@ dependencies = [
"windows-sys 0.42.0",
]
+[[package]]
+name = "schema"
+version = "0.1.0"
+source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.5#7cc20cc54a7ab0b5e38c81901826939a91a17ba0"
+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.5#7cc20cc54a7ab0b5e38c81901826939a91a17ba0"
+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.5#7cc20cc54a7ab0b5e38c81901826939a91a17ba0"
+dependencies = [
+ "itertools",
+ "lazy_static",
+ "once_cell",
+ "prisma-models",
+ "psl",
+ "schema",
+]
+
[[package]]
name = "scoped-tls"
version = "1.0.1"
@@ -2405,14 +3924,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
[[package]]
-name = "sct"
-version = "0.7.0"
+name = "scratch"
+version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
-dependencies = [
- "ring",
- "untrusted",
-]
+checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1"
[[package]]
name = "security-framework"
@@ -2493,6 +4008,16 @@ 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_derive"
version = "1.0.152"
@@ -2501,20 +4026,30 @@ checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.107",
]
[[package]]
name = "serde_json"
-version = "1.0.92"
+version = "1.0.95"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7434af0dc1cbd59268aa98b4c22c131c0584d2232f6fb166efb993e2832e896a"
+checksum = "d721eca97ac802aa7777b701877c8004d950fc142651367300d21c1cc0194744"
dependencies = [
+ "indexmap",
"itoa 1.0.5",
"ryu",
"serde",
]
+[[package]]
+name = "serde_path_to_error"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7f05c1d5476066defcdfacce1f52fc3cae3af1d3089727100c02ae92e5abbe0"
+dependencies = [
+ "serde",
+]
+
[[package]]
name = "serde_repr"
version = "0.1.10"
@@ -2523,7 +4058,7 @@ checksum = "9a5ec9fa74a20ebbe5d9ac23dac1fc96ba0ecfe9f50f2843b52e537b10fbcb4e"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.107",
]
[[package]]
@@ -2557,7 +4092,7 @@ dependencies = [
"darling",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.107",
]
[[package]]
@@ -2579,7 +4114,7 @@ checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.107",
]
[[package]]
@@ -2592,6 +4127,19 @@ dependencies = [
"stable_deref_trait",
]
+[[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.6"
@@ -2600,7 +4148,17 @@ checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
dependencies = [
"cfg-if",
"cpufeatures",
- "digest",
+ "digest 0.10.6",
+]
+
+[[package]]
+name = "sha3"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bdf0c33fae925bdc080598b84bc15c55e7b9a4a43b3c704da051f977469691c9"
+dependencies = [
+ "digest 0.10.6",
+ "keccak",
]
[[package]]
@@ -2618,6 +4176,12 @@ version = "0.3.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
+[[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.7"
@@ -2635,9 +4199,9 @@ checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
[[package]]
name = "socket2"
-version = "0.4.7"
+version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
dependencies = [
"libc",
"winapi",
@@ -2672,18 +4236,144 @@ dependencies = [
]
[[package]]
-name = "spin"
-version = "0.5.2"
+name = "specta"
+version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+checksum = "4be6d92bb3d2a34fd5da2463089b44e67d6e83eedff074a82ba0b3e830dbff7c"
+dependencies = [
+ "chrono",
+ "document-features",
+ "indexmap",
+ "indoc 1.0.9",
+ "once_cell",
+ "paste",
+ "serde",
+ "serde_json",
+ "specta-macros",
+ "tauri",
+ "thiserror",
+ "uuid 1.3.0",
+]
[[package]]
-name = "spin"
-version = "0.9.4"
+name = "specta-macros"
+version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f6002a767bff9e83f8eeecf883ecb8011875a21ae8da43bffb817a57e78cc09"
+checksum = "123bd8f0d65f556dce3d0e84346b759ad9701c49700cd9aa12c522bd0310d90b"
dependencies = [
- "lock_api",
+ "Inflector",
+ "itertools",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.107",
+ "termcolor",
+]
+
+[[package]]
+name = "sql-ddl"
+version = "0.1.0"
+source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.5#7cc20cc54a7ab0b5e38c81901826939a91a17ba0"
+
+[[package]]
+name = "sql-introspection-connector"
+version = "0.1.0"
+source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.5#7cc20cc54a7ab0b5e38c81901826939a91a17ba0"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "bigdecimal",
+ "datamodel-renderer",
+ "enumflags2",
+ "introspection-connector",
+ "once_cell",
+ "psl",
+ "quaint",
+ "regex",
+ "serde",
+ "serde_json",
+ "sql-schema-describer",
+ "thiserror",
+ "tracing",
+ "tracing-futures",
+ "user-facing-errors",
+]
+
+[[package]]
+name = "sql-migration-connector"
+version = "0.1.0"
+source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.5#7cc20cc54a7ab0b5e38c81901826939a91a17ba0"
+dependencies = [
+ "chrono",
+ "connection-string",
+ "either",
+ "enumflags2",
+ "indoc 1.0.9",
+ "migration-connector",
+ "once_cell",
+ "psl",
+ "quaint",
+ "regex",
+ "serde_json",
+ "sql-ddl",
+ "sql-introspection-connector",
+ "sql-schema-describer",
+ "tokio",
+ "tracing",
+ "tracing-futures",
+ "url",
+ "user-facing-errors",
+ "uuid 1.3.0",
+]
+
+[[package]]
+name = "sql-query-connector"
+version = "0.1.0"
+source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.5#7cc20cc54a7ab0b5e38c81901826939a91a17ba0"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "bigdecimal",
+ "chrono",
+ "cuid",
+ "futures",
+ "itertools",
+ "once_cell",
+ "opentelemetry",
+ "prisma-models",
+ "prisma-value",
+ "psl",
+ "quaint",
+ "query-connector",
+ "rand 0.7.3",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "tracing-futures",
+ "tracing-opentelemetry",
+ "user-facing-errors",
+ "uuid 1.3.0",
+]
+
+[[package]]
+name = "sql-schema-describer"
+version = "0.1.0"
+source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.5#7cc20cc54a7ab0b5e38c81901826939a91a17ba0"
+dependencies = [
+ "async-trait",
+ "bigdecimal",
+ "enumflags2",
+ "indexmap",
+ "indoc 1.0.9",
+ "once_cell",
+ "psl",
+ "quaint",
+ "regex",
+ "serde",
+ "tracing",
+ "tracing-error",
+ "tracing-futures",
]
[[package]]
@@ -2697,95 +4387,6 @@ dependencies = [
"unicode_categories",
]
-[[package]]
-name = "sqlx"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9249290c05928352f71c077cc44a464d880c63f26f7534728cca008e135c0428"
-dependencies = [
- "sqlx-core",
- "sqlx-macros",
-]
-
-[[package]]
-name = "sqlx-core"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dcbc16ddba161afc99e14d1713a453747a2b07fc097d2009f4c300ec99286105"
-dependencies = [
- "ahash",
- "atoi",
- "bitflags",
- "byteorder",
- "bytes",
- "crc",
- "crossbeam-queue",
- "dotenvy",
- "either",
- "event-listener",
- "flume",
- "futures-channel",
- "futures-core",
- "futures-executor",
- "futures-intrusive",
- "futures-util",
- "hashlink",
- "hex",
- "indexmap",
- "itoa 1.0.5",
- "libc",
- "libsqlite3-sys",
- "log",
- "memchr",
- "once_cell",
- "paste",
- "percent-encoding",
- "rustls",
- "rustls-pemfile",
- "serde",
- "serde_json",
- "sha2",
- "smallvec",
- "sqlformat",
- "sqlx-rt",
- "stringprep",
- "thiserror",
- "tokio-stream",
- "url",
- "webpki-roots",
-]
-
-[[package]]
-name = "sqlx-macros"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b850fa514dc11f2ee85be9d055c512aa866746adfacd1cb42d867d68e6a5b0d9"
-dependencies = [
- "dotenvy",
- "either",
- "heck 0.4.1",
- "once_cell",
- "proc-macro2",
- "quote",
- "serde_json",
- "sha2",
- "sqlx-core",
- "sqlx-rt",
- "syn",
- "url",
-]
-
-[[package]]
-name = "sqlx-rt"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "24c5b2d25fa654cc5f841750b8e1cdedbe21189bf9a9382ee90bfa9dd3562396"
-dependencies = [
- "once_cell",
- "tokio",
- "tokio-rustls",
-]
-
[[package]]
name = "stable_deref_trait"
version = "1.2.0"
@@ -2827,16 +4428,6 @@ dependencies = [
"quote",
]
-[[package]]
-name = "stringprep"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ee348cb74b87454fff4b551cbf727025810a004f88aeacae7f85b87f4e9a1c1"
-dependencies = [
- "unicode-bidi",
- "unicode-normalization",
-]
-
[[package]]
name = "strsim"
version = "0.10.0"
@@ -2854,6 +4445,29 @@ dependencies = [
"unicode-ident",
]
+[[package]]
+name = "syn"
+version = "2.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c9da457c5285ac1f936ebd076af6dac17a61cfe7826f2076b4d015cf47bc8ec"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[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.107",
+ "unicode-xid",
+]
+
[[package]]
name = "system-deps"
version = "5.0.0"
@@ -3022,10 +4636,10 @@ dependencies = [
"semver 1.0.16",
"serde",
"serde_json",
- "sha2",
+ "sha2 0.10.6",
"tauri-utils",
"thiserror",
- "time",
+ "time 0.3.17",
"uuid 1.3.0",
"walkdir",
]
@@ -3039,26 +4653,11 @@ dependencies = [
"heck 0.4.1",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.107",
"tauri-codegen",
"tauri-utils",
]
-[[package]]
-name = "tauri-plugin-sql"
-version = "0.1.0"
-source = "git+https://github.com/tauri-apps/plugins-workspace?branch=dev#8f34eb83e4f9a8c72fd3823a066c94f861f2d021"
-dependencies = [
- "futures",
- "log",
- "serde",
- "serde_json",
- "sqlx",
- "tauri",
- "thiserror",
- "tokio",
-]
-
[[package]]
name = "tauri-runtime"
version = "0.12.1"
@@ -3099,6 +4698,21 @@ dependencies = [
"wry",
]
+[[package]]
+name = "tauri-specta"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23419889204476d5a70a04077d4628061a5bb667b18804a4572df2fe6ccb8ba5"
+dependencies = [
+ "heck 0.4.1",
+ "indoc 2.0.1",
+ "serde",
+ "serde_json",
+ "specta",
+ "tauri",
+ "thiserror",
+]
+
[[package]]
name = "tauri-utils"
version = "1.2.1"
@@ -3127,6 +4741,16 @@ dependencies = [
"windows",
]
+[[package]]
+name = "tempdir"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8"
+dependencies = [
+ "rand 0.4.6",
+ "remove_dir_all",
+]
+
[[package]]
name = "tempfile"
version = "3.3.0"
@@ -3152,6 +4776,15 @@ dependencies = [
"utf-8",
]
+[[package]]
+name = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
[[package]]
name = "thin-slice"
version = "0.1.1"
@@ -3175,7 +4808,7 @@ checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.107",
]
[[package]]
@@ -3187,6 +4820,16 @@ dependencies = [
"once_cell",
]
+[[package]]
+name = "time"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
[[package]]
name = "time"
version = "0.3.17"
@@ -3231,41 +4874,55 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]]
name = "tokio"
-version = "1.25.0"
+version = "1.27.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c8e00990ebabbe4c14c08aca901caed183ecd5c09562a12c824bb53d3c3fd3af"
+checksum = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001"
dependencies = [
"autocfg",
"bytes",
"libc",
- "memchr",
"mio",
"num_cpus",
+ "parking_lot 0.12.1",
"pin-project-lite",
"socket2",
- "windows-sys 0.42.0",
+ "tokio-macros",
+ "windows-sys 0.45.0",
]
[[package]]
-name = "tokio-rustls"
-version = "0.23.4"
+name = "tokio-macros"
+version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59"
+checksum = "61a573bdc87985e9d6ddeed1b3d864e8a302c847e40d647746df2f1de209d1ce"
dependencies = [
- "rustls",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.13",
+]
+
+[[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",
- "webpki",
]
[[package]]
-name = "tokio-stream"
-version = "0.1.11"
+name = "tokio-util"
+version = "0.7.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d660770404473ccd7bc9f8b28494a811bc18542b915c0855c51e8f419d5223ce"
+checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2"
dependencies = [
+ "bytes",
"futures-core",
+ "futures-sink",
"pin-project-lite",
"tokio",
+ "tracing",
]
[[package]]
@@ -3294,6 +4951,12 @@ dependencies = [
"toml_datetime",
]
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
[[package]]
name = "tracing"
version = "0.1.37"
@@ -3314,7 +4977,7 @@ checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.107",
]
[[package]]
@@ -3327,6 +4990,26 @@ dependencies = [
"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.3"
@@ -3338,6 +5021,20 @@ dependencies = [
"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",
+ "tracing-subscriber",
+]
+
[[package]]
name = "tracing-subscriber"
version = "0.3.16"
@@ -3365,6 +5062,12 @@ dependencies = [
"serde_json",
]
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
[[package]]
name = "typenum"
version = "1.16.0"
@@ -3377,6 +5080,12 @@ version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81"
+[[package]]
+name = "unarray"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94"
+
[[package]]
name = "unicode-bidi"
version = "0.3.10"
@@ -3404,6 +5113,18 @@ version = "1.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
+
[[package]]
name = "unicode_categories"
version = "0.1.1"
@@ -3411,10 +5132,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e"
[[package]]
-name = "untrusted"
-version = "0.7.1"
+name = "unreachable"
+version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+checksum = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56"
+dependencies = [
+ "void",
+]
[[package]]
name = "url"
@@ -3428,6 +5152,30 @@ dependencies = [
"serde",
]
+[[package]]
+name = "user-facing-error-macros"
+version = "0.1.0"
+source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.5#7cc20cc54a7ab0b5e38c81901826939a91a17ba0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.107",
+]
+
+[[package]]
+name = "user-facing-errors"
+version = "0.1.0"
+source = "git+https://github.com/Brendonovich/prisma-engines?tag=pcr-0.6.5#7cc20cc54a7ab0b5e38c81901826939a91a17ba0"
+dependencies = [
+ "backtrace",
+ "indoc 1.0.9",
+ "quaint",
+ "serde",
+ "serde_json",
+ "tracing",
+ "user-facing-error-macros",
+]
+
[[package]]
name = "utf-8"
version = "0.7.6"
@@ -3447,6 +5195,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1674845326ee10d37ca60470760d4288a6f80f304007d92e5c53bab78c9cfd79"
dependencies = [
"getrandom 0.2.8",
+ "serde",
]
[[package]]
@@ -3479,6 +5228,21 @@ version = "0.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+[[package]]
+name = "void"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
+
+[[package]]
+name = "wait-timeout"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
+dependencies = [
+ "libc",
+]
+
[[package]]
name = "walkdir"
version = "2.3.2"
@@ -3490,12 +5254,28 @@ dependencies = [
"winapi-util",
]
+[[package]]
+name = "want"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+dependencies = [
+ "log",
+ "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"
@@ -3504,9 +5284,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
[[package]]
name = "wasm-bindgen"
-version = "0.2.84"
+version = "0.2.79"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b"
+checksum = "25f1af7423d8588a3d840681122e72e6a24ddbcb3f0ec385cac0d12d24256c06"
dependencies = [
"cfg-if",
"wasm-bindgen-macro",
@@ -3514,24 +5294,36 @@ dependencies = [
[[package]]
name = "wasm-bindgen-backend"
-version = "0.2.84"
+version = "0.2.79"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9"
+checksum = "8b21c0df030f5a177f3cba22e9bc4322695ec43e7257d865302900290bcdedca"
dependencies = [
"bumpalo",
+ "lazy_static",
"log",
- "once_cell",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.107",
"wasm-bindgen-shared",
]
[[package]]
-name = "wasm-bindgen-macro"
-version = "0.2.84"
+name = "wasm-bindgen-futures"
+version = "0.4.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5"
+checksum = "2eb6ec270a31b1d3c7e266b999739109abce8b6c87e4b31fcfcd788b65267395"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f4203d69e40a52ee523b2529a773d5ffc1dc0071801c87b3d270b471b80ed01"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -3539,28 +5331,28 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
-version = "0.2.84"
+version = "0.2.79"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6"
+checksum = "bfa8a30d46208db204854cadbb5d4baf5fcf8071ba5bf48190c3e59937962ebc"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.107",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-shared"
-version = "0.2.84"
+version = "0.2.79"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d"
+checksum = "3d958d035c4438e28c70e4321a2911302f10135ce78a9c7834c0cab4123d06a2"
[[package]]
name = "web-sys"
-version = "0.3.61"
+version = "0.3.56"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97"
+checksum = "c060b319f29dd25724f09a2ba1418f142f539b2be99fbf4d2d5a8f7330afb8eb"
dependencies = [
"js-sys",
"wasm-bindgen",
@@ -3613,25 +5405,6 @@ dependencies = [
"system-deps 6.0.3",
]
-[[package]]
-name = "webpki"
-version = "0.22.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd"
-dependencies = [
- "ring",
- "untrusted",
-]
-
-[[package]]
-name = "webpki-roots"
-version = "0.22.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87"
-dependencies = [
- "webpki",
-]
-
[[package]]
name = "webview2-com"
version = "0.19.1"
@@ -3652,7 +5425,7 @@ checksum = "eaebe196c01691db62e9e4ca52c5ef1e4fd837dcae27dae3ada599b5a8fd05ac"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.107",
]
[[package]]
@@ -3731,7 +5504,7 @@ version = "0.39.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba01f98f509cb5dc05f4e5fc95e535f78260f15fea8fe1a8abdd08f774f1cee7"
dependencies = [
- "syn",
+ "syn 1.0.107",
"windows-tokens",
]
@@ -3858,6 +5631,15 @@ version = "0.42.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd"
+[[package]]
+name = "winreg"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
+dependencies = [
+ "winapi",
+]
+
[[package]]
name = "winres"
version = "0.1.12"
@@ -3893,7 +5675,7 @@ dependencies = [
"once_cell",
"serde",
"serde_json",
- "sha2",
+ "sha2 0.10.6",
"soup2",
"tao",
"thiserror",
diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml
index b95c9fe2..6cd5dc26 100644
--- a/src-tauri/Cargo.toml
+++ b/src-tauri/Cargo.toml
@@ -17,11 +17,10 @@ tauri-build = { version = "1.2", features = [] }
serde_json = "1.0"
serde = { version = "1.0", features = ["derive"] }
tauri = { version = "1.2", features = ["clipboard-read-text", "clipboard-write-text", "http-request", "os-all", "shell-open", "system-tray", "window-close", "window-start-dragging"] }
-
-[dependencies.tauri-plugin-sql]
-git = "https://github.com/tauri-apps/plugins-workspace"
-branch = "dev"
-features = ["sqlite"]
+prisma-client-rust = { git = "https://github.com/Brendonovich/prisma-client-rust", tag = "0.6.7", default-features = false, features = ["sqlite", "migrations", "mocking", "specta"] }
+prisma-client-rust-cli = { git = "https://github.com/Brendonovich/prisma-client-rust", tag = "0.6.7", default-features = false, features = ["sqlite", "migrations", "mocking", "specta"] }
+specta = "1.0.0"
+tauri-specta = { version = "1.0.0", features = ["typescript"] }
[target.'cfg(target_os = "macos")'.dependencies]
objc = "0.2.7"
diff --git a/src-tauri/prisma/migrations/.keep b/src-tauri/prisma/migrations/.keep
new file mode 100644
index 00000000..e69de29b
diff --git a/src-tauri/prisma/schema.prisma b/src-tauri/prisma/schema.prisma
new file mode 100644
index 00000000..801e4503
--- /dev/null
+++ b/src-tauri/prisma/schema.prisma
@@ -0,0 +1,11 @@
+datasource db {
+ provider = "sqlite"
+ url = "file:lume.db"
+}
+
+generator client {
+ // Corresponds to the cargo alias created earlier
+ provider = "cargo prisma"
+ // The location to generate the client. Is relative to the position of the schema
+ output = "../src/prisma.rs"
+}
diff --git a/src-tauri/src/bin/prisma.rs b/src-tauri/src/bin/prisma.rs
new file mode 100644
index 00000000..b873b532
--- /dev/null
+++ b/src-tauri/src/bin/prisma.rs
@@ -0,0 +1,3 @@
+fn main() {
+ prisma_client_rust_cli::run();
+}
diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs
index 5001c2e3..67fe56dc 100644
--- a/src-tauri/src/main.rs
+++ b/src-tauri/src/main.rs
@@ -8,7 +8,6 @@
extern crate objc;
use tauri::{Manager, WindowEvent};
-use tauri_plugin_sql::{Migration, MigrationKind};
#[cfg(target_os = "macos")]
use window_ext::WindowExt;
@@ -25,23 +24,11 @@ fn main() {
Ok(())
})
- .plugin(
- tauri_plugin_sql::Builder::default()
- .add_migrations(
- "sqlite:lume.db",
- vec![Migration {
- version: 1,
- description: "create default tables",
- sql: include_str!("../migrations/20230226004139_create_tables.sql"),
- kind: MigrationKind::Up,
- }],
- )
- .build(),
- )
.on_window_event(|e| {
#[cfg(target_os = "macos")]
let apply_offset = || {
let win = e.window();
+ // keep inset for traffic lights when window resize (macos)
win.position_traffic_lights(8.0, 20.0);
};
#[cfg(target_os = "macos")]
From 39e7c9bf34c05fe04e22b3cc63ee345e93e98051 Mon Sep 17 00:00:00 2001
From: Ren Amamiya <123083837+reyamir@users.noreply.github.com>
Date: Sun, 2 Apr 2023 16:22:50 +0700
Subject: [PATCH 06/21] wip: convert tauri sql to prisma
---
src-tauri/.gitignore | 3 +-
src-tauri/Cargo.lock | 1 +
src-tauri/Cargo.toml | 1 +
.../20230226004139_create_tables.sql | 104 ------------------
src-tauri/prisma/schema.prisma | 72 +++++++++++-
src-tauri/src/main.rs | 84 +++++++++++++-
src/pages/index.tsx | 17 +--
src/pages/onboarding/create/index.tsx | 38 +++----
src/pages/onboarding/create/step-2.tsx | 35 ++----
src/utils/bindings.ts | 26 +++++
src/utils/transform.tsx | 9 ++
11 files changed, 228 insertions(+), 162 deletions(-)
delete mode 100644 src-tauri/migrations/20230226004139_create_tables.sql
create mode 100644 src/utils/bindings.ts
diff --git a/src-tauri/.gitignore b/src-tauri/.gitignore
index d35e841c..9f4929f3 100644
--- a/src-tauri/.gitignore
+++ b/src-tauri/.gitignore
@@ -3,4 +3,5 @@
/target/
# prisma
-src/prisma.rs
+src/db.rs
+lume.db
diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock
index 7640a8e0..7129ab10 100644
--- a/src-tauri/Cargo.lock
+++ b/src-tauri/Cargo.lock
@@ -2193,6 +2193,7 @@ dependencies = [
"tauri",
"tauri-build",
"tauri-specta",
+ "tokio",
]
[[package]]
diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml
index 6cd5dc26..a01d8208 100644
--- a/src-tauri/Cargo.toml
+++ b/src-tauri/Cargo.toml
@@ -21,6 +21,7 @@ prisma-client-rust = { git = "https://github.com/Brendonovich/prisma-client-rust
prisma-client-rust-cli = { git = "https://github.com/Brendonovich/prisma-client-rust", tag = "0.6.7", default-features = false, features = ["sqlite", "migrations", "mocking", "specta"] }
specta = "1.0.0"
tauri-specta = { version = "1.0.0", features = ["typescript"] }
+tokio = { version = "1.26.0", features = ["macros"] }
[target.'cfg(target_os = "macos")'.dependencies]
objc = "0.2.7"
diff --git a/src-tauri/migrations/20230226004139_create_tables.sql b/src-tauri/migrations/20230226004139_create_tables.sql
deleted file mode 100644
index ee4a05b7..00000000
--- a/src-tauri/migrations/20230226004139_create_tables.sql
+++ /dev/null
@@ -1,104 +0,0 @@
--- Add migration script here
--- create relays
-CREATE TABLE
- relays (
- id INTEGER PRIMARY KEY,
- relay_url TEXT NOT NULL,
- relay_status INTEGER NOT NULL DEFAULT 1,
- created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
- updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
- );
-
--- add default relays
--- relay status:
--- 0: off
--- 1: on
-INSERT INTO
- relays (relay_url, relay_status)
-VALUES
- ("wss://relay.damus.io", "1"),
- ("wss://eden.nostr.land", "0"),
- ("wss://nostr-pub.wellorder.net", "1"),
- ("wss://nostr.bongbong.com", "1"),
- ("wss://nostr.zebedee.cloud", "1"),
- ("wss://nostr.fmt.wiz.biz", "1"),
- ("wss://nostr.walletofsatoshi.com", "0"),
- ("wss://relay.snort.social", "1"),
- ("wss://offchain.pub", "1"),
- ("wss://brb.io", "0"),
- ("wss://relay.current.fyi", "1"),
- ("wss://nostr.relayer.se", "0"),
- ("wss://nostr.bitcoiner.social", "1"),
- ("wss://relay.nostr.info", "1"),
- ("wss://relay.zeh.app", "0"),
- ("wss://nostr-01.dorafactory.org", "1"),
- ("wss://nostr.zhongwen.world", "1"),
- ("wss://nostro.cc", "1"),
- ("wss://relay.nostr.net.in", "1"),
- ("wss://nos.lol", "1");
-
--- create accounts
--- is_active (part of multi-account feature):
--- 0: false
--- 1: true
-CREATE TABLE
- accounts (
- id TEXT PRIMARY KEY,
- privkey TEXT NOT NULL,
- npub TEXT NOT NULL,
- nsec TEXT NOT NULL,
- is_active INTEGER NOT NULL DEFAULT 0,
- metadata TEXT
- );
-
--- create follows
--- kind (part of multi-newsfeed feature):
--- 0: direct
--- 1: follow of follow
-CREATE TABLE
- follows (
- id INTEGER PRIMARY KEY,
- pubkey TEXT NOT NULL,
- account TEXT NOT NULL,
- kind INTEGER NOT NULL DEFAULT 0,
- metadata TEXT
- );
-
--- create index for pubkey in follows
-CREATE UNIQUE INDEX index_pubkey_on_follows ON follows (pubkey);
-
--- create cache profiles
-CREATE TABLE
- cache_profiles (
- id TEXT PRIMARY KEY,
- metadata TEXT,
- created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
- updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
- );
-
--- create cache notes
-CREATE TABLE
- cache_notes (
- id TEXT PRIMARY KEY,
- pubkey TEXT NOT NULL,
- created_at TEXT,
- kind INTEGER NOT NULL DEFAULT 1,
- tags TEXT NOT NULL,
- content TEXT NOT NULL,
- parent_id TEXT,
- parent_comment_id TEXT
- );
-
--- create settings
-CREATE TABLE
- settings (
- id INTEGER PRIMARY KEY AUTOINCREMENT,
- setting_key TEXT NOT NULL,
- setting_value TEXT NOT NULL
- );
-
--- add default setting
-INSERT INTO
- settings (setting_key, setting_value)
-VALUES
- ("last_login", "0");
\ No newline at end of file
diff --git a/src-tauri/prisma/schema.prisma b/src-tauri/prisma/schema.prisma
index 801e4503..3d8f7c78 100644
--- a/src-tauri/prisma/schema.prisma
+++ b/src-tauri/prisma/schema.prisma
@@ -1,11 +1,75 @@
datasource db {
provider = "sqlite"
- url = "file:lume.db"
+ url = "file:../lume.db"
}
generator client {
- // Corresponds to the cargo alias created earlier
- provider = "cargo prisma"
+ provider = "cargo prisma"
// The location to generate the client. Is relative to the position of the schema
- output = "../src/prisma.rs"
+ output = "../src/db.rs"
+ module_path = "db"
+}
+
+model Account {
+ id Int @id @default(autoincrement())
+ pubkey String
+ privkey String @unique
+ active Boolean @default(false)
+ metadata String
+
+ // related
+ follows Follow[]
+ messages Message[]
+ notes Note[]
+
+ @@index([pubkey])
+}
+
+model Follow {
+ id Int @id @default(autoincrement())
+ pubkey String
+ kind Int
+ metadata String
+
+ Account Account @relation(fields: [accountId], references: [id])
+ accountId Int
+}
+
+model Note {
+ id Int @id @default(autoincrement())
+ pubkey String
+ kind Int
+ tags String
+ content String
+ parent_id String
+ parent_comment_id String
+ createdAt DateTime @default(now())
+
+ Account Account @relation(fields: [accountId], references: [id])
+ accountId Int
+}
+
+model Message {
+ id Int @id @default(autoincrement())
+ pubkey String
+ content String
+ tags String
+ createdAt DateTime @default(now())
+
+ Account Account @relation(fields: [accountId], references: [id])
+ accountId Int
+
+ @@index([pubkey])
+}
+
+model Relay {
+ id Int @id @default(autoincrement())
+ url String
+ active Boolean @default(true)
+}
+
+model Setting {
+ id Int @id @default(autoincrement())
+ key String
+ value String
}
diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs
index 67fe56dc..fafb703b 100644
--- a/src-tauri/src/main.rs
+++ b/src-tauri/src/main.rs
@@ -8,13 +8,87 @@
extern crate objc;
use tauri::{Manager, WindowEvent};
-
#[cfg(target_os = "macos")]
use window_ext::WindowExt;
#[cfg(target_os = "macos")]
mod window_ext;
-fn main() {
+mod db;
+
+use db::*;
+use serde::Deserialize;
+use specta::{collect_types, Type};
+use std::sync::Arc;
+use tauri::State;
+use tauri_specta::ts;
+
+type DbState<'a> = State<'a, Arc
>;
+
+#[derive(Deserialize, Type)]
+struct CreateAccountData {
+ pubkey: String,
+ privkey: String,
+ metadata: String,
+}
+
+#[derive(Deserialize, Type)]
+struct CreateFollowData {
+ pubkey: String,
+ kind: i32,
+ metadata: String,
+ account_id: i32,
+}
+
+#[tauri::command]
+#[specta::specta]
+async fn get_account(db: DbState<'_>) -> Result, ()> {
+ db.account()
+ .find_many(vec![account::active::equals(true)])
+ .exec()
+ .await
+ .map_err(|_| ())
+}
+
+#[tauri::command]
+#[specta::specta]
+async fn create_account(db: DbState<'_>, data: CreateAccountData) -> Result {
+ db.account()
+ .create(data.pubkey, data.privkey, data.metadata, vec![])
+ .exec()
+ .await
+ .map_err(|_| ())
+}
+
+#[tauri::command]
+#[specta::specta]
+async fn create_follow(db: DbState<'_>, data: CreateFollowData) -> Result {
+ db.follow()
+ .create(
+ data.pubkey,
+ data.kind,
+ data.metadata,
+ account::id::equals(data.account_id),
+ vec![],
+ )
+ .exec()
+ .await
+ .map_err(|_| ())
+}
+
+#[tokio::main]
+async fn main() {
+ let db = PrismaClient::_builder().build().await.unwrap();
+
+ #[cfg(debug_assertions)]
+ ts::export(
+ collect_types![get_account, create_account, create_follow],
+ "../src/utils/bindings.ts",
+ )
+ .unwrap();
+
+ #[cfg(debug_assertions)]
+ db._db_push().await.unwrap();
+
tauri::Builder::default()
.setup(|app| {
let main_window = app.get_window("main").unwrap();
@@ -38,6 +112,12 @@ fn main() {
_ => {}
}
})
+ .invoke_handler(tauri::generate_handler![
+ get_account,
+ create_account,
+ create_follow
+ ])
+ .manage(Arc::new(db))
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
diff --git a/src/pages/index.tsx b/src/pages/index.tsx
index 7b816aa6..c9581d5a 100644
--- a/src/pages/index.tsx
+++ b/src/pages/index.tsx
@@ -2,24 +2,27 @@ import BaseLayout from '@layouts/base';
import { activeAccountAtom } from '@stores/account';
-import { getActiveAccount } from '@utils/storage';
-
import LumeSymbol from '@assets/icons/Lume';
import { useSetAtom } from 'jotai';
import { useRouter } from 'next/router';
-import { JSXElementConstructor, ReactElement, ReactFragment, ReactPortal, useEffect } from 'react';
+import { JSXElementConstructor, ReactElement, ReactFragment, ReactPortal, useCallback, useEffect } from 'react';
export default function Page() {
const router = useRouter();
const setActiveAccount = useSetAtom(activeAccountAtom);
+ const fetchActiveAccount = useCallback(async () => {
+ const { getAccount } = await import('@utils/bindings');
+ return await getAccount();
+ }, []);
+
useEffect(() => {
- getActiveAccount()
+ fetchActiveAccount()
.then((res: any) => {
- if (res) {
+ if (res.length > 0) {
// update local storage
- setActiveAccount(res);
+ setActiveAccount(res[0]);
// redirect
router.replace('/init');
} else {
@@ -27,7 +30,7 @@ export default function Page() {
}
})
.catch(console.error);
- }, [router, setActiveAccount]);
+ }, [fetchActiveAccount, setActiveAccount, router]);
return (
diff --git a/src/pages/onboarding/create/index.tsx b/src/pages/onboarding/create/index.tsx
index 70e3c265..55f86ea4 100644
--- a/src/pages/onboarding/create/index.tsx
+++ b/src/pages/onboarding/create/index.tsx
@@ -2,13 +2,20 @@ import BaseLayout from '@layouts/base';
import { RelayContext } from '@components/relaysProvider';
-import { createAccount } from '@utils/storage';
-
import { ArrowLeftIcon, EyeClosedIcon, EyeOpenIcon } from '@radix-ui/react-icons';
import Image from 'next/image';
import { useRouter } from 'next/router';
import { generatePrivateKey, getEventHash, getPublicKey, nip19, signEvent } from 'nostr-tools';
-import { JSXElementConstructor, ReactElement, ReactFragment, ReactPortal, useContext, useMemo, useState } from 'react';
+import {
+ JSXElementConstructor,
+ ReactElement,
+ ReactFragment,
+ ReactPortal,
+ useCallback,
+ useContext,
+ useMemo,
+ useState,
+} from 'react';
import { Config, names, uniqueNamesGenerator } from 'unique-names-generator';
const config: Config = {
@@ -39,23 +46,11 @@ export default function Page() {
display_name: name,
name: name,
username: name.toLowerCase(),
- picture: 'https://void.cat/d/KmypFh2fBdYCEvyJrPiN89',
+ picture: 'https://void.cat/d/KmypFh2fBdYCEvyJrPiN89.webp',
}),
[name]
);
- // build profile
- const data = useMemo(
- () => ({
- pubkey: pubKey,
- privkey: privKey,
- npub: npub,
- nsec: nsec,
- metadata: metadata,
- }),
- [metadata, npub, nsec, privKey, pubKey]
- );
-
// toggle privatek key
const showPrivateKey = () => {
if (type === 'password') {
@@ -66,7 +61,8 @@ export default function Page() {
};
// create account and broadcast to all relays
- const submit = () => {
+ const submit = useCallback(async () => {
+ const { createAccount } = await import('@utils/bindings');
setLoading(true);
// build event
@@ -81,16 +77,16 @@ export default function Page() {
event.sig = signEvent(event, privKey);
// insert to database then broadcast
- createAccount(data)
- .then(() => {
+ createAccount({ pubkey: pubKey, privkey: privKey, metadata: JSON.stringify(metadata) })
+ .then((res) => {
pool.publish(event, relays);
router.push({
pathname: '/onboarding/create/step-2',
- query: { id: pubKey, privkey: privKey },
+ query: { id: res.id, privkey: res.privkey },
});
})
.catch(console.error);
- };
+ }, [pool, pubKey, privKey, metadata, relays, router]);
return (
diff --git a/src/pages/onboarding/create/step-2.tsx b/src/pages/onboarding/create/step-2.tsx
index 9c8e6bd5..b31d4f78 100644
--- a/src/pages/onboarding/create/step-2.tsx
+++ b/src/pages/onboarding/create/step-2.tsx
@@ -3,7 +3,7 @@ import BaseLayout from '@layouts/base';
import { RelayContext } from '@components/relaysProvider';
import { UserBase } from '@components/user/base';
-import { createFollows } from '@utils/storage';
+import { followsTag } from '@utils/transform';
import { CheckCircledIcon } from '@radix-ui/react-icons';
import { createClient } from '@supabase/supabase-js';
@@ -15,6 +15,7 @@ import {
ReactElement,
ReactFragment,
ReactPortal,
+ useCallback,
useContext,
useEffect,
useState,
@@ -76,18 +77,9 @@ export default function Page() {
setFollows(arr);
};
- // build event tags
- const tags = () => {
- const arr = [];
- // push item to tags
- follows.forEach((item) => {
- arr.push(['p', item]);
- });
- return arr;
- };
-
// save follows to database then broadcast
- const submit = () => {
+ const submit = useCallback(async () => {
+ const { createFollow } = await import('@utils/bindings');
setLoading(true);
// build event
@@ -96,21 +88,18 @@ export default function Page() {
created_at: Math.floor(Date.now() / 1000),
kind: 3,
pubkey: id,
- tags: tags(),
+ tags: followsTag(follows),
};
event.id = getEventHash(event);
event.sig = signEvent(event, privkey);
- createFollows(follows, id, 0)
- .then((res) => {
- if (res === 'ok') {
- // publish to relays
- pool.publish(event, relays);
- router.replace('/');
- }
- })
- .catch(console.error);
- };
+ follows.forEach((item) => {
+ createFollow({ pubkey: item, kind: 0, metadata: JSON.stringify({}), account_id: id });
+ });
+
+ pool.publish(event, relays);
+ router.replace('/');
+ }, [follows, id, pool, privkey, relays, router]);
useEffect(() => {
const fetchData = async () => {
diff --git a/src/utils/bindings.ts b/src/utils/bindings.ts
new file mode 100644
index 00000000..28b56dab
--- /dev/null
+++ b/src/utils/bindings.ts
@@ -0,0 +1,26 @@
+// This file was generated by [tauri-specta](https://github.com/oscartbeaumont/tauri-specta). Do not edit this file manually.
+
+declare global {
+ interface Window {
+ __TAURI_INVOKE__
(cmd: string, args?: Record): Promise;
+ }
+}
+
+const invoke = window.__TAURI_INVOKE__;
+
+export function getAccount() {
+ return invoke('get_account');
+}
+
+export function createAccount(data: CreateAccountData) {
+ return invoke('create_account', { data });
+}
+
+export function createFollow(data: CreateFollowData) {
+ return invoke('create_follow', { data });
+}
+
+export type Account = { id: number; pubkey: string; privkey: string; active: boolean; metadata: string };
+export type Follow = { id: number; pubkey: string; kind: number; metadata: string; accountId: number };
+export type CreateFollowData = { pubkey: string; kind: number; metadata: string; account_id: number };
+export type CreateAccountData = { pubkey: string; privkey: string; metadata: string };
diff --git a/src/utils/transform.tsx b/src/utils/transform.tsx
index 31dda620..ebc01fb9 100644
--- a/src/utils/transform.tsx
+++ b/src/utils/transform.tsx
@@ -9,6 +9,15 @@ export const tagsToArray = (arr) => {
return newarr;
};
+export const followsTag = (arr) => {
+ const newarr = [];
+ // push item to tags
+ arr.forEach((item) => {
+ arr.push(['p', item]);
+ });
+ return newarr;
+};
+
export const pubkeyArray = (arr) => {
const newarr = [];
// push item to newarr
From 33000979edbe5f7f2195003d641723979eb4ff85 Mon Sep 17 00:00:00 2001
From: Ren Amamiya <123083837+reyamir@users.noreply.github.com>
Date: Mon, 3 Apr 2023 08:43:37 +0700
Subject: [PATCH 07/21] refactor user component and updated onboarding
---
src-tauri/src/main.rs | 2 +-
src/components/user/base.tsx | 27 +++++-----------
src/components/user/extend.tsx | 33 +++++--------------
src/components/user/large.tsx | 33 +++++--------------
src/components/user/mention.tsx | 34 ++++++-------------
src/components/user/mini.tsx | 18 +++++------
src/pages/onboarding/create/index.tsx | 2 +-
src/pages/onboarding/create/step-2.tsx | 16 +++++----
src/pages/onboarding/login/step-2.tsx | 45 +++++++++++++++++---------
src/utils/metadata.tsx | 6 ++++
src/utils/transform.tsx | 2 +-
11 files changed, 89 insertions(+), 129 deletions(-)
create mode 100644 src/utils/metadata.tsx
diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs
index fafb703b..3a431503 100644
--- a/src-tauri/src/main.rs
+++ b/src-tauri/src/main.rs
@@ -43,7 +43,7 @@ struct CreateFollowData {
#[specta::specta]
async fn get_account(db: DbState<'_>) -> Result, ()> {
db.account()
- .find_many(vec![account::active::equals(true)])
+ .find_many(vec![account::active::equals(false)])
.exec()
.await
.map_err(|_| ())
diff --git a/src/components/user/base.tsx b/src/components/user/base.tsx
index d8feabba..9f87cfbd 100644
--- a/src/components/user/base.tsx
+++ b/src/components/user/base.tsx
@@ -1,33 +1,22 @@
import { ImageWithFallback } from '@components/imageWithFallback';
+import { RelayContext } from '@components/relaysProvider';
import { DEFAULT_AVATAR } from '@stores/constants';
-import { createCacheProfile } from '@utils/storage';
import { truncate } from '@utils/truncate';
-import { fetch } from '@tauri-apps/api/http';
-import destr from 'destr';
-import { memo, useCallback, useEffect, useState } from 'react';
+import { Author } from 'nostr-relaypool';
+import { memo, useContext, useEffect, useMemo, useState } from 'react';
export const UserBase = memo(function UserBase({ pubkey }: { pubkey: string }) {
- const [profile, setProfile] = useState(null);
+ const [pool, relays]: any = useContext(RelayContext);
- const fetchProfile = useCallback(async (id: string) => {
- const res = await fetch(`https://rbr.bio/${id}/metadata.json`, {
- method: 'GET',
- timeout: 30,
- });
- return res.data;
- }, []);
+ const [profile, setProfile] = useState(null);
+ const user = useMemo(() => new Author(pool, relays, pubkey), [pubkey, pool, relays]);
useEffect(() => {
- fetchProfile(pubkey)
- .then((res: any) => {
- setProfile(destr(res.content));
- createCacheProfile(res.pubkey, res.content);
- })
- .catch(console.error);
- }, [fetchProfile, pubkey]);
+ user.metaData((res) => setProfile(JSON.parse(res.content)), 0);
+ }, [user]);
return (
diff --git a/src/components/user/extend.tsx b/src/components/user/extend.tsx
index 8672de8c..7039cea1 100644
--- a/src/components/user/extend.tsx
+++ b/src/components/user/extend.tsx
@@ -1,51 +1,34 @@
import { ImageWithFallback } from '@components/imageWithFallback';
+import { RelayContext } from '@components/relaysProvider';
import { DEFAULT_AVATAR } from '@stores/constants';
-import { createCacheProfile, getCacheProfile } from '@utils/storage';
import { truncate } from '@utils/truncate';
import { DotsHorizontalIcon } from '@radix-ui/react-icons';
-import { fetch } from '@tauri-apps/api/http';
import dayjs from 'dayjs';
import relativeTime from 'dayjs/plugin/relativeTime';
-import destr from 'destr';
import { useRouter } from 'next/router';
-import { memo, useCallback, useEffect, useState } from 'react';
+import { Author } from 'nostr-relaypool';
+import { memo, useContext, useEffect, useMemo, useState } from 'react';
dayjs.extend(relativeTime);
export const UserExtend = memo(function UserExtend({ pubkey, time }: { pubkey: string; time: any }) {
+ const [pool, relays]: any = useContext(RelayContext);
const router = useRouter();
+
const [profile, setProfile] = useState(null);
+ const user = useMemo(() => new Author(pool, relays, pubkey), [pubkey, pool, relays]);
const openUserPage = (e) => {
e.stopPropagation();
router.push(`/users/${pubkey}`);
};
- const fetchProfile = useCallback(async (id: string) => {
- const res = await fetch(`https://rbr.bio/${id}/metadata.json`, {
- method: 'GET',
- timeout: 30,
- });
- return res.data;
- }, []);
-
useEffect(() => {
- getCacheProfile(pubkey).then((res) => {
- if (res) {
- setProfile(destr(res.metadata));
- } else {
- fetchProfile(pubkey)
- .then((res: any) => {
- setProfile(destr(res.content));
- createCacheProfile(pubkey, res.content);
- })
- .catch(console.error);
- }
- });
- }, [fetchProfile, pubkey]);
+ user.metaData((res) => setProfile(JSON.parse(res.content)), 0);
+ }, [user]);
return (
diff --git a/src/components/user/large.tsx b/src/components/user/large.tsx
index 634ab02e..0a660dd2 100644
--- a/src/components/user/large.tsx
+++ b/src/components/user/large.tsx
@@ -1,44 +1,27 @@
import { ImageWithFallback } from '@components/imageWithFallback';
+import { RelayContext } from '@components/relaysProvider';
import { DEFAULT_AVATAR } from '@stores/constants';
-import { createCacheProfile, getCacheProfile } from '@utils/storage';
import { truncate } from '@utils/truncate';
import { DotsHorizontalIcon } from '@radix-ui/react-icons';
-import { fetch } from '@tauri-apps/api/http';
import dayjs from 'dayjs';
import relativeTime from 'dayjs/plugin/relativeTime';
-import destr from 'destr';
-import { memo, useCallback, useEffect, useState } from 'react';
+import { Author } from 'nostr-relaypool';
+import { memo, useContext, useEffect, useMemo, useState } from 'react';
dayjs.extend(relativeTime);
export const UserLarge = memo(function UserLarge({ pubkey, time }: { pubkey: string; time: any }) {
- const [profile, setProfile] = useState(null);
+ const [pool, relays]: any = useContext(RelayContext);
- const fetchProfile = useCallback(async (id: string) => {
- const res = await fetch(`https://rbr.bio/${id}/metadata.json`, {
- method: 'GET',
- timeout: 30,
- });
- return res.data;
- }, []);
+ const [profile, setProfile] = useState(null);
+ const user = useMemo(() => new Author(pool, relays, pubkey), [pubkey, pool, relays]);
useEffect(() => {
- getCacheProfile(pubkey).then((res) => {
- if (res) {
- setProfile(destr(res.metadata));
- } else {
- fetchProfile(pubkey)
- .then((res: any) => {
- setProfile(destr(res.content));
- createCacheProfile(pubkey, res.content);
- })
- .catch(console.error);
- }
- });
- }, [fetchProfile, pubkey]);
+ user.metaData((res) => setProfile(JSON.parse(res.content)), 0);
+ }, [user]);
return (
diff --git a/src/components/user/mention.tsx b/src/components/user/mention.tsx
index 06b4b0bf..4cae27fd 100644
--- a/src/components/user/mention.tsx
+++ b/src/components/user/mention.tsx
@@ -1,35 +1,19 @@
-import { createCacheProfile, getCacheProfile } from '@utils/storage';
+import { RelayContext } from '@components/relaysProvider';
+
import { truncate } from '@utils/truncate';
-import { fetch } from '@tauri-apps/api/http';
-import destr from 'destr';
-import { memo, useCallback, useEffect, useState } from 'react';
+import { Author } from 'nostr-relaypool';
+import { memo, useContext, useEffect, useMemo, useState } from 'react';
export const UserMention = memo(function UserMention({ pubkey }: { pubkey: string }) {
- const [profile, setProfile] = useState(null);
+ const [pool, relays]: any = useContext(RelayContext);
- const fetchProfile = useCallback(async (id: string) => {
- const res = await fetch(`https://rbr.bio/${id}/metadata.json`, {
- method: 'GET',
- timeout: 30,
- });
- return res.data;
- }, []);
+ const [profile, setProfile] = useState(null);
+ const user = useMemo(() => new Author(pool, relays, pubkey), [pubkey, pool, relays]);
useEffect(() => {
- getCacheProfile(pubkey).then((res) => {
- if (res) {
- setProfile(destr(res.metadata));
- } else {
- fetchProfile(pubkey)
- .then((res: any) => {
- setProfile(destr(res.content));
- createCacheProfile(pubkey, res.content);
- })
- .catch(console.error);
- }
- });
- }, [fetchProfile, pubkey]);
+ user.metaData((res) => setProfile(JSON.parse(res.content)), 0);
+ }, [user]);
return
@{profile?.name || truncate(pubkey, 16, ' .... ')};
});
diff --git a/src/components/user/mini.tsx b/src/components/user/mini.tsx
index b5fa2bdd..22b74547 100644
--- a/src/components/user/mini.tsx
+++ b/src/components/user/mini.tsx
@@ -1,24 +1,22 @@
import { ImageWithFallback } from '@components/imageWithFallback';
+import { RelayContext } from '@components/relaysProvider';
import { DEFAULT_AVATAR } from '@stores/constants';
-import { getCacheProfile } from '@utils/storage';
import { truncate } from '@utils/truncate';
-import { useCallback, useEffect, useState } from 'react';
+import { Author } from 'nostr-relaypool';
+import { useContext, useEffect, useMemo, useState } from 'react';
export const UserMini = ({ pubkey }: { pubkey: string }) => {
- const [profile, setProfile] = useState(null);
+ const [pool, relays]: any = useContext(RelayContext);
- const fetchCacheProfile = useCallback(async (id: string) => {
- const res = await getCacheProfile(id);
- const data = JSON.parse(res.metadata);
- setProfile(data);
- }, []);
+ const [profile, setProfile] = useState(null);
+ const user = useMemo(() => new Author(pool, relays, pubkey), [pubkey, pool, relays]);
useEffect(() => {
- fetchCacheProfile(pubkey).catch(console.error);
- }, [fetchCacheProfile, pubkey]);
+ user.metaData((res) => setProfile(JSON.parse(res.content)), 0);
+ }, [user]);
if (profile) {
return (
diff --git a/src/pages/onboarding/create/index.tsx b/src/pages/onboarding/create/index.tsx
index 55f86ea4..9e9d7880 100644
--- a/src/pages/onboarding/create/index.tsx
+++ b/src/pages/onboarding/create/index.tsx
@@ -82,7 +82,7 @@ export default function Page() {
pool.publish(event, relays);
router.push({
pathname: '/onboarding/create/step-2',
- query: { id: res.id, privkey: res.privkey },
+ query: { id: res.id, pubkey: res.pubkey, privkey: res.privkey },
});
})
.catch(console.error);
diff --git a/src/pages/onboarding/create/step-2.tsx b/src/pages/onboarding/create/step-2.tsx
index b31d4f78..4831a6e4 100644
--- a/src/pages/onboarding/create/step-2.tsx
+++ b/src/pages/onboarding/create/step-2.tsx
@@ -3,6 +3,7 @@ import BaseLayout from '@layouts/base';
import { RelayContext } from '@components/relaysProvider';
import { UserBase } from '@components/user/base';
+import { fetchMetadata } from '@utils/metadata';
import { followsTag } from '@utils/transform';
import { CheckCircledIcon } from '@radix-ui/react-icons';
@@ -65,7 +66,7 @@ export default function Page() {
const [pool, relays]: any = useContext(RelayContext);
const router = useRouter();
- const { id, privkey }: any = router.query || '';
+ const { id, pubkey, privkey }: any = router.query || '';
const [loading, setLoading] = useState(false);
const [list, setList]: any = useState(initialList);
@@ -82,24 +83,25 @@ export default function Page() {
const { createFollow } = await import('@utils/bindings');
setLoading(true);
+ for (const follow of follows) {
+ const metadata: any = await fetchMetadata(follow, pool, relays);
+ createFollow({ pubkey: follow, kind: 0, metadata: metadata.content, account_id: parseInt(id) });
+ }
+
// build event
const event: any = {
content: '',
created_at: Math.floor(Date.now() / 1000),
kind: 3,
- pubkey: id,
+ pubkey: pubkey,
tags: followsTag(follows),
};
event.id = getEventHash(event);
event.sig = signEvent(event, privkey);
- follows.forEach((item) => {
- createFollow({ pubkey: item, kind: 0, metadata: JSON.stringify({}), account_id: id });
- });
-
pool.publish(event, relays);
router.replace('/');
- }, [follows, id, pool, privkey, relays, router]);
+ }, [follows, id, pool, pubkey, privkey, relays, router]);
useEffect(() => {
const fetchData = async () => {
diff --git a/src/pages/onboarding/login/step-2.tsx b/src/pages/onboarding/login/step-2.tsx
index 9e40f6c0..fee12df2 100644
--- a/src/pages/onboarding/login/step-2.tsx
+++ b/src/pages/onboarding/login/step-2.tsx
@@ -2,21 +2,21 @@ import BaseLayout from '@layouts/base';
import { RelayContext } from '@components/relaysProvider';
-import { createAccount, createFollows } from '@utils/storage';
-import { tagsToArray } from '@utils/transform';
+import { fetchMetadata } from '@utils/metadata';
import { truncate } from '@utils/truncate';
-import destr from 'destr';
import Image from 'next/image';
import { useRouter } from 'next/router';
-import { getPublicKey, nip19 } from 'nostr-tools';
+import { getPublicKey } from 'nostr-tools';
import {
JSXElementConstructor,
ReactElement,
ReactFragment,
ReactPortal,
+ useCallback,
useContext,
useEffect,
+ useRef,
useState,
} from 'react';
@@ -30,6 +30,28 @@ export default function Page() {
const [profile, setProfile] = useState(null);
const [done, setDone] = useState(false);
+ const accountId = useRef(null);
+
+ const insertAccountToStorage = useCallback(async (pubkey, privkey, metadata) => {
+ const { createAccount } = await import('@utils/bindings');
+ createAccount({ pubkey: pubkey, privkey: privkey, metadata: JSON.stringify(metadata) }).then(
+ (res) => (accountId.current = res.id)
+ );
+ }, []);
+
+ const insertFollowsToStorage = useCallback(
+ async (tags) => {
+ const { createFollow } = await import('@utils/bindings');
+ if (accountId.current !== null) {
+ for (const tag of tags) {
+ const metadata: any = await fetchMetadata(tag[1], pool, relays);
+ createFollow({ pubkey: tag[1], kind: 0, metadata: metadata.content, account_id: accountId.current });
+ }
+ }
+ },
+ [pool, relays]
+ );
+
useEffect(() => {
const unsubscribe = pool.subscribe(
[
@@ -42,18 +64,11 @@ export default function Page() {
relays,
(event: any) => {
if (event.kind === 0) {
- const data = {
- pubkey: pubkey,
- privkey: privkey,
- npub: nip19.npubEncode(pubkey),
- nsec: nip19.nsecEncode(privkey),
- metadata: event.content,
- };
- setProfile(destr(event.content));
- createAccount(data);
+ setProfile(JSON.parse(event.content));
+ insertAccountToStorage(pubkey, privkey, event.content);
} else {
if (event.tags.length > 0) {
- createFollows(tagsToArray(event.tags), pubkey, 0);
+ insertFollowsToStorage(event.tags);
}
}
},
@@ -69,7 +84,7 @@ export default function Page() {
return () => {
unsubscribe;
};
- }, [pool, privkey, pubkey, relays]);
+ }, [insertAccountToStorage, insertFollowsToStorage, pool, relays, privkey, pubkey]);
// submit then redirect to home
const submit = () => {
diff --git a/src/utils/metadata.tsx b/src/utils/metadata.tsx
new file mode 100644
index 00000000..5598ed8a
--- /dev/null
+++ b/src/utils/metadata.tsx
@@ -0,0 +1,6 @@
+import { Author } from 'nostr-relaypool';
+
+export const fetchMetadata = (pubkey: string, pool: any, relays: any) => {
+ const author = new Author(pool, relays, pubkey);
+ return new Promise((resolve) => author.metaData(resolve, 0));
+};
diff --git a/src/utils/transform.tsx b/src/utils/transform.tsx
index ebc01fb9..e9bb58e5 100644
--- a/src/utils/transform.tsx
+++ b/src/utils/transform.tsx
@@ -13,7 +13,7 @@ export const followsTag = (arr) => {
const newarr = [];
// push item to tags
arr.forEach((item) => {
- arr.push(['p', item]);
+ newarr.push(['p', item]);
});
return newarr;
};
From 3f87d510ab4c63b1f22923a6fa750b17f1884ba2 Mon Sep 17 00:00:00 2001
From: Ren Amamiya <123083837+reyamir@users.noreply.github.com>
Date: Mon, 3 Apr 2023 15:03:07 +0700
Subject: [PATCH 08/21] converted full sql from onboarding flow to prisma
---
.gitignore | 2 +
src-tauri/.gitignore | 1 -
.../20230403043730_initial/migration.sql | 73 ++++++++++++++
.../prisma/migrations/migration_lock.toml | 3 +
src-tauri/prisma/schema.prisma | 5 +-
src-tauri/src/main.rs | 91 ++++++++++++++++-
src/components/note/connector.tsx | 7 +-
src/pages/index.tsx | 14 ++-
src/pages/init.tsx | 97 ++++++++++---------
src/pages/onboarding/create/index.tsx | 4 +-
src/pages/onboarding/create/step-2.tsx | 4 +-
src/pages/onboarding/login/step-2.tsx | 42 +++++---
src/stores/account.tsx | 2 +
src/utils/bindings.ts | 43 +++++++-
14 files changed, 314 insertions(+), 74 deletions(-)
create mode 100644 src-tauri/prisma/migrations/20230403043730_initial/migration.sql
create mode 100644 src-tauri/prisma/migrations/migration_lock.toml
diff --git a/.gitignore b/.gitignore
index 4094a70b..7afdbe21 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,6 +15,8 @@ out
.next
.vscode
pnpm-lock.yaml
+*.db
+*.db-journal
# Editor directories and files
.vscode/*
diff --git a/src-tauri/.gitignore b/src-tauri/.gitignore
index 9f4929f3..0c1d05c7 100644
--- a/src-tauri/.gitignore
+++ b/src-tauri/.gitignore
@@ -4,4 +4,3 @@
# prisma
src/db.rs
-lume.db
diff --git a/src-tauri/prisma/migrations/20230403043730_initial/migration.sql b/src-tauri/prisma/migrations/20230403043730_initial/migration.sql
new file mode 100644
index 00000000..e86009dc
--- /dev/null
+++ b/src-tauri/prisma/migrations/20230403043730_initial/migration.sql
@@ -0,0 +1,73 @@
+-- CreateTable
+CREATE TABLE "Account" (
+ "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ "pubkey" TEXT NOT NULL,
+ "privkey" TEXT NOT NULL,
+ "active" BOOLEAN NOT NULL DEFAULT false,
+ "metadata" TEXT NOT NULL
+);
+
+-- CreateTable
+CREATE TABLE "Follow" (
+ "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ "pubkey" TEXT NOT NULL,
+ "kind" INTEGER NOT NULL,
+ "metadata" TEXT NOT NULL,
+ "accountId" INTEGER NOT NULL,
+ CONSTRAINT "Follow_accountId_fkey" FOREIGN KEY ("accountId") REFERENCES "Account" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
+);
+
+-- CreateTable
+CREATE TABLE "Note" (
+ "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ "eventId" TEXT NOT NULL,
+ "pubkey" TEXT NOT NULL,
+ "kind" INTEGER NOT NULL,
+ "tags" TEXT NOT NULL,
+ "content" TEXT NOT NULL,
+ "parent_id" TEXT NOT NULL,
+ "parent_comment_id" TEXT NOT NULL,
+ "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "accountId" INTEGER NOT NULL,
+ CONSTRAINT "Note_accountId_fkey" FOREIGN KEY ("accountId") REFERENCES "Account" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
+);
+
+-- CreateTable
+CREATE TABLE "Message" (
+ "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ "pubkey" TEXT NOT NULL,
+ "content" TEXT NOT NULL,
+ "tags" TEXT NOT NULL,
+ "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "accountId" INTEGER NOT NULL,
+ CONSTRAINT "Message_accountId_fkey" FOREIGN KEY ("accountId") REFERENCES "Account" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
+);
+
+-- CreateTable
+CREATE TABLE "Relay" (
+ "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ "url" TEXT NOT NULL,
+ "active" BOOLEAN NOT NULL DEFAULT true
+);
+
+-- CreateTable
+CREATE TABLE "Setting" (
+ "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ "key" TEXT NOT NULL,
+ "value" TEXT NOT NULL
+);
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Account_privkey_key" ON "Account"("privkey");
+
+-- CreateIndex
+CREATE INDEX "Account_pubkey_idx" ON "Account"("pubkey");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Note_eventId_key" ON "Note"("eventId");
+
+-- CreateIndex
+CREATE INDEX "Note_eventId_idx" ON "Note"("eventId");
+
+-- CreateIndex
+CREATE INDEX "Message_pubkey_idx" ON "Message"("pubkey");
diff --git a/src-tauri/prisma/migrations/migration_lock.toml b/src-tauri/prisma/migrations/migration_lock.toml
new file mode 100644
index 00000000..e5e5c470
--- /dev/null
+++ b/src-tauri/prisma/migrations/migration_lock.toml
@@ -0,0 +1,3 @@
+# Please do not edit this file manually
+# It should be added in your version-control system (i.e. Git)
+provider = "sqlite"
\ No newline at end of file
diff --git a/src-tauri/prisma/schema.prisma b/src-tauri/prisma/schema.prisma
index 3d8f7c78..44f8fae3 100644
--- a/src-tauri/prisma/schema.prisma
+++ b/src-tauri/prisma/schema.prisma
@@ -1,6 +1,6 @@
datasource db {
provider = "sqlite"
- url = "file:../lume.db"
+ url = "file:../../lume.db"
}
generator client {
@@ -37,6 +37,7 @@ model Follow {
model Note {
id Int @id @default(autoincrement())
+ eventId String @unique
pubkey String
kind Int
tags String
@@ -47,6 +48,8 @@ model Note {
Account Account @relation(fields: [accountId], references: [id])
accountId Int
+
+ @@index([eventId])
}
model Message {
diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs
index 3a431503..c6bde5af 100644
--- a/src-tauri/src/main.rs
+++ b/src-tauri/src/main.rs
@@ -7,6 +7,7 @@
#[macro_use]
extern crate objc;
+use prisma_client_rust::raw;
use tauri::{Manager, WindowEvent};
#[cfg(target_os = "macos")]
use window_ext::WindowExt;
@@ -31,6 +32,11 @@ struct CreateAccountData {
metadata: String,
}
+#[derive(Deserialize, Type)]
+struct GetFollowData {
+ account_id: i32,
+}
+
#[derive(Deserialize, Type)]
struct CreateFollowData {
pubkey: String,
@@ -39,6 +45,18 @@ struct CreateFollowData {
account_id: i32,
}
+#[derive(Deserialize, Type)]
+struct CreateNoteData {
+ event_id: String,
+ pubkey: String,
+ kind: i32,
+ tags: String,
+ content: String,
+ parent_id: String,
+ parent_comment_id: String,
+ account_id: i32,
+}
+
#[tauri::command]
#[specta::specta]
async fn get_account(db: DbState<'_>) -> Result
, ()> {
@@ -59,6 +77,16 @@ async fn create_account(db: DbState<'_>, data: CreateAccountData) -> Result, data: GetFollowData) -> Result, ()> {
+ db.follow()
+ .find_many(vec![follow::account_id::equals(data.account_id)])
+ .exec()
+ .await
+ .map_err(|_| ())
+}
+
#[tauri::command]
#[specta::specta]
async fn create_follow(db: DbState<'_>, data: CreateFollowData) -> Result {
@@ -75,13 +103,68 @@ async fn create_follow(db: DbState<'_>, data: CreateFollowData) -> Result, data: CreateNoteData) -> Result {
+ let event_id = data.event_id.clone();
+ let content = data.content.clone();
+
+ db.note()
+ .upsert(
+ note::event_id::equals(event_id),
+ note::create(
+ data.event_id,
+ data.pubkey,
+ data.kind,
+ data.tags,
+ data.content,
+ data.parent_id,
+ data.parent_comment_id,
+ account::id::equals(data.account_id),
+ vec![],
+ ),
+ vec![note::content::set(content)],
+ )
+ .exec()
+ .await
+ .map_err(|_| ())
+}
+
+#[tauri::command]
+#[specta::specta]
+async fn get_notes(db: DbState<'_>) -> Result, ()> {
+ db._query_raw(raw!("SELECT * FROM Note"))
+ .exec()
+ .await
+ .map_err(|_| ())
+}
+
+#[tauri::command]
+#[specta::specta]
+async fn check_note(db: DbState<'_>) -> Result, ()> {
+ db.note()
+ .find_many(vec![])
+ .take(5)
+ .exec()
+ .await
+ .map_err(|_| ())
+}
+
#[tokio::main]
async fn main() {
let db = PrismaClient::_builder().build().await.unwrap();
#[cfg(debug_assertions)]
ts::export(
- collect_types![get_account, create_account, create_follow],
+ collect_types![
+ get_account,
+ create_account,
+ get_follows,
+ create_follow,
+ create_note,
+ get_notes,
+ check_note
+ ],
"../src/utils/bindings.ts",
)
.unwrap();
@@ -115,7 +198,11 @@ async fn main() {
.invoke_handler(tauri::generate_handler![
get_account,
create_account,
- create_follow
+ get_follows,
+ create_follow,
+ create_note,
+ get_notes,
+ check_note
])
.manage(Arc::new(db))
.run(tauri::generate_context!())
diff --git a/src/components/note/connector.tsx b/src/components/note/connector.tsx
index 12ef9ac7..49852348 100644
--- a/src/components/note/connector.tsx
+++ b/src/components/note/connector.tsx
@@ -1,10 +1,10 @@
import { RelayContext } from '@components/relaysProvider';
-import { activeAccountAtom } from '@stores/account';
+import { activeAccountAtom, lastLoginAtom } from '@stores/account';
import { hasNewerNoteAtom } from '@stores/note';
import { dateToUnix } from '@utils/getDate';
-import { createCacheNote, getAllFollowsByID, updateLastLoginTime } from '@utils/storage';
+import { createCacheNote, getAllFollowsByID } from '@utils/storage';
import { pubkeyArray } from '@utils/transform';
import { TauriEvent } from '@tauri-apps/api/event';
@@ -15,6 +15,7 @@ import { useCallback, useContext, useEffect, useRef, useState } from 'react';
export default function NoteConnector() {
const [pool, relays]: any = useContext(RelayContext);
+ const setLastLoginAtom = useSetAtom(lastLoginAtom);
const setHasNewerNote = useSetAtom(hasNewerNoteAtom);
const activeAccount: any = useAtomValue(activeAccountAtom);
@@ -44,7 +45,7 @@ export default function NoteConnector() {
useEffect(() => {
subscribe();
getCurrent().listen(TauriEvent.WINDOW_CLOSE_REQUESTED, () => {
- updateLastLoginTime(now.current);
+ setLastLoginAtom(now.current);
appWindow.close();
});
}, [activeAccount.id, pool, relays, setHasNewerNote, subscribe]);
diff --git a/src/pages/index.tsx b/src/pages/index.tsx
index c9581d5a..4b0af815 100644
--- a/src/pages/index.tsx
+++ b/src/pages/index.tsx
@@ -1,6 +1,6 @@
import BaseLayout from '@layouts/base';
-import { activeAccountAtom } from '@stores/account';
+import { activeAccountAtom, activeAccountFollowsAtom } from '@stores/account';
import LumeSymbol from '@assets/icons/Lume';
@@ -11,16 +11,26 @@ import { JSXElementConstructor, ReactElement, ReactFragment, ReactPortal, useCal
export default function Page() {
const router = useRouter();
const setActiveAccount = useSetAtom(activeAccountAtom);
+ const setActiveAccountFollows = useSetAtom(activeAccountFollowsAtom);
const fetchActiveAccount = useCallback(async () => {
const { getAccount } = await import('@utils/bindings');
return await getAccount();
}, []);
+ const fetchFollowsByAccount = useCallback(async (id) => {
+ const { getFollows } = await import('@utils/bindings');
+ return await getFollows({ account_id: id });
+ }, []);
+
useEffect(() => {
fetchActiveAccount()
.then((res: any) => {
if (res.length > 0) {
+ // fetch follows
+ fetchFollowsByAccount(res[0].id).then((follows) => {
+ setActiveAccountFollows(follows);
+ });
// update local storage
setActiveAccount(res[0]);
// redirect
@@ -30,7 +40,7 @@ export default function Page() {
}
})
.catch(console.error);
- }, [fetchActiveAccount, setActiveAccount, router]);
+ }, [fetchActiveAccount, setActiveAccount, fetchFollowsByAccount, setActiveAccountFollows, router]);
return (
diff --git a/src/pages/init.tsx b/src/pages/init.tsx
index 562318e4..4ab32b69 100644
--- a/src/pages/init.tsx
+++ b/src/pages/init.tsx
@@ -2,12 +2,10 @@ import BaseLayout from '@layouts/base';
import { RelayContext } from '@components/relaysProvider';
-import { activeAccountAtom } from '@stores/account';
-import { relaysAtom } from '@stores/relays';
+import { activeAccountAtom, activeAccountFollowsAtom, lastLoginAtom } from '@stores/account';
import { dateToUnix, hoursAgo } from '@utils/getDate';
-import { countTotalNotes, createCacheNote, getAllFollowsByID, getLastLoginTime } from '@utils/storage';
-import { pubkeyArray } from '@utils/transform';
+import { getParentID, pubkeyArray } from '@utils/transform';
import LumeSymbol from '@assets/icons/Lume';
@@ -30,64 +28,75 @@ export default function Page() {
const [pool, relays]: any = useContext(RelayContext);
const activeAccount: any = useAtomValue(activeAccountAtom);
- const [done, setDone] = useState(false);
+ const activeAccountFollows: any = useAtomValue(activeAccountFollowsAtom);
+ const lastLogin: any = useAtomValue(lastLoginAtom);
const now = useRef(new Date());
const unsubscribe = useRef(null);
- const timer = useRef(null);
+
+ const [eose, setEose] = useState(false);
const fetchData = useCallback(
- (since) => {
- getAllFollowsByID(activeAccount.id).then((follows) => {
- unsubscribe.current = pool.subscribe(
- [
- {
- kinds: [1],
- authors: pubkeyArray(follows),
- since: dateToUnix(since),
- until: dateToUnix(now.current),
- },
- ],
- relays,
- (event) => {
- // insert event to local database
- createCacheNote(event);
- },
- undefined,
- () => {
- // wait for 8 seconds
- timer.current = setTimeout(() => setDone(true), 8000);
- },
+ async (since) => {
+ const { createNote } = await import('@utils/bindings');
+ unsubscribe.current = pool.subscribe(
+ [
{
- unsubscribeOnEose: true,
- }
- );
- });
+ kinds: [1],
+ authors: pubkeyArray(activeAccountFollows),
+ since: dateToUnix(since),
+ until: dateToUnix(now.current),
+ },
+ ],
+ relays,
+ (event) => {
+ const parentID = getParentID(event.tags, event.id);
+ // insert event to local database
+ createNote({
+ event_id: event.id,
+ pubkey: event.pubkey,
+ kind: event.kind,
+ tags: JSON.stringify(event.tags),
+ content: event.content,
+ parent_id: parentID,
+ parent_comment_id: 'aaa',
+ account_id: activeAccount.id,
+ }).catch(console.error);
+ },
+ undefined,
+ () => {
+ setEose(true);
+ }
+ );
},
- [activeAccount.id, pool, relays]
+ [activeAccount.id, activeAccountFollows, pool, relays]
);
- useEffect(() => {
- if (!done) {
- countTotalNotes().then((count) => {
- if (count.total === 0) {
- fetchData(hoursAgo(24, now.current));
+ const isNoteExist = useCallback(async () => {
+ const { checkNote } = await import('@utils/bindings');
+ checkNote()
+ .then((res) => {
+ if (res.length === 5) {
+ const parseDate = new Date(lastLogin);
+ fetchData(parseDate);
} else {
- getLastLoginTime().then((time) => {
- const parseDate = new Date(time.setting_value);
- fetchData(parseDate);
- });
+ fetchData(hoursAgo(24, now.current));
}
- });
+ })
+ .catch(console.error);
+ }, [fetchData, lastLogin]);
+
+ useEffect(() => {
+ if (eose === false) {
+ isNoteExist();
} else {
router.replace('/newsfeed/following');
}
return () => {
unsubscribe.current;
- clearTimeout(timer.current);
};
- }, [activeAccount.id, done, pool, relays, router, fetchData]);
+ }, [router, eose, isNoteExist]);
return (
diff --git a/src/pages/onboarding/create/index.tsx b/src/pages/onboarding/create/index.tsx
index 9e9d7880..b445e068 100644
--- a/src/pages/onboarding/create/index.tsx
+++ b/src/pages/onboarding/create/index.tsx
@@ -41,7 +41,7 @@ export default function Page() {
};
// auto-generated profile metadata
- const metadata = useMemo(
+ const metadata: any = useMemo(
() => ({
display_name: name,
name: name,
@@ -77,7 +77,7 @@ export default function Page() {
event.sig = signEvent(event, privKey);
// insert to database then broadcast
- createAccount({ pubkey: pubKey, privkey: privKey, metadata: JSON.stringify(metadata) })
+ createAccount({ pubkey: pubKey, privkey: privKey, metadata: metadata })
.then((res) => {
pool.publish(event, relays);
router.push({
diff --git a/src/pages/onboarding/create/step-2.tsx b/src/pages/onboarding/create/step-2.tsx
index 4831a6e4..63b5e7c8 100644
--- a/src/pages/onboarding/create/step-2.tsx
+++ b/src/pages/onboarding/create/step-2.tsx
@@ -85,7 +85,9 @@ export default function Page() {
for (const follow of follows) {
const metadata: any = await fetchMetadata(follow, pool, relays);
- createFollow({ pubkey: follow, kind: 0, metadata: metadata.content, account_id: parseInt(id) });
+ createFollow({ pubkey: follow, kind: 0, metadata: metadata.content, account_id: parseInt(id) }).catch(
+ console.error
+ );
}
// build event
diff --git a/src/pages/onboarding/login/step-2.tsx b/src/pages/onboarding/login/step-2.tsx
index fee12df2..c9d16c7b 100644
--- a/src/pages/onboarding/login/step-2.tsx
+++ b/src/pages/onboarding/login/step-2.tsx
@@ -2,6 +2,8 @@ import BaseLayout from '@layouts/base';
import { RelayContext } from '@components/relaysProvider';
+import { DEFAULT_AVATAR } from '@stores/constants';
+
import { fetchMetadata } from '@utils/metadata';
import { truncate } from '@utils/truncate';
@@ -27,29 +29,34 @@ export default function Page() {
const privkey: any = router.query.privkey || null;
const pubkey = privkey ? getPublicKey(privkey) : null;
- const [profile, setProfile] = useState(null);
+ const [profile, setProfile] = useState({ id: null, metadata: null });
const [done, setDone] = useState(false);
- const accountId = useRef(null);
-
const insertAccountToStorage = useCallback(async (pubkey, privkey, metadata) => {
const { createAccount } = await import('@utils/bindings');
- createAccount({ pubkey: pubkey, privkey: privkey, metadata: JSON.stringify(metadata) }).then(
- (res) => (accountId.current = res.id)
- );
+ createAccount({ pubkey: pubkey, privkey: privkey, metadata: metadata })
+ .then((res) =>
+ setProfile({
+ id: res.id,
+ metadata: JSON.parse(res.metadata),
+ })
+ )
+ .catch(console.error);
}, []);
const insertFollowsToStorage = useCallback(
async (tags) => {
const { createFollow } = await import('@utils/bindings');
- if (accountId.current !== null) {
+ if (profile?.id !== null) {
for (const tag of tags) {
const metadata: any = await fetchMetadata(tag[1], pool, relays);
- createFollow({ pubkey: tag[1], kind: 0, metadata: metadata.content, account_id: accountId.current });
+ createFollow({ pubkey: tag[1], kind: 0, metadata: metadata.content, account_id: profile.id }).catch(
+ console.error
+ );
}
}
},
- [pool, relays]
+ [pool, profile.id, relays]
);
useEffect(() => {
@@ -64,7 +71,6 @@ export default function Page() {
relays,
(event: any) => {
if (event.kind === 0) {
- setProfile(JSON.parse(event.content));
insertAccountToStorage(pubkey, privkey, event.content);
} else {
if (event.tags.length > 0) {
@@ -75,9 +81,6 @@ export default function Page() {
undefined,
() => {
setDone(true);
- },
- {
- unsubscribeOnEose: true,
}
);
@@ -106,13 +109,20 @@ export default function Page() {
-
+
-
{profile?.display_name || profile?.name}
+
{profile.metadata?.display_name || profile.metadata?.name}
·
-
@{profile?.username || (pubkey && truncate(pubkey, 16, ' .... '))}
+
+ @{profile.metadata?.username || (pubkey && truncate(pubkey, 16, ' .... '))}
+
diff --git a/src/stores/account.tsx b/src/stores/account.tsx
index f5568ba4..7c70b99e 100644
--- a/src/stores/account.tsx
+++ b/src/stores/account.tsx
@@ -10,3 +10,5 @@ const createMyJsonStorage = () => {
};
export const activeAccountAtom = atomWithStorage('activeAccount', {}, createMyJsonStorage());
+export const activeAccountFollowsAtom = atomWithStorage('activeAccountFollows', [], createMyJsonStorage());
+export const lastLoginAtom = atomWithStorage('lastLoginAtom', [], createMyJsonStorage());
diff --git a/src/utils/bindings.ts b/src/utils/bindings.ts
index 28b56dab..b483e75c 100644
--- a/src/utils/bindings.ts
+++ b/src/utils/bindings.ts
@@ -16,11 +16,50 @@ export function createAccount(data: CreateAccountData) {
return invoke
('create_account', { data });
}
+export function getFollows(data: GetFollowData) {
+ return invoke('get_follows', { data });
+}
+
export function createFollow(data: CreateFollowData) {
return invoke('create_follow', { data });
}
-export type Account = { id: number; pubkey: string; privkey: string; active: boolean; metadata: string };
-export type Follow = { id: number; pubkey: string; kind: number; metadata: string; accountId: number };
+export function createNote(data: CreateNoteData) {
+ return invoke('create_note', { data });
+}
+
+export function getNotes() {
+ return invoke('get_notes');
+}
+
+export function checkNote() {
+ return invoke('check_note');
+}
+
+export type GetFollowData = { account_id: number };
+export type Note = {
+ id: number;
+ eventId: string;
+ pubkey: string;
+ kind: number;
+ tags: string;
+ content: string;
+ parent_id: string;
+ parent_comment_id: string;
+ createdAt: string;
+ accountId: number;
+};
export type CreateFollowData = { pubkey: string; kind: number; metadata: string; account_id: number };
+export type Account = { id: number; pubkey: string; privkey: string; active: boolean; metadata: string };
+export type CreateNoteData = {
+ event_id: string;
+ pubkey: string;
+ kind: number;
+ tags: string;
+ content: string;
+ parent_id: string;
+ parent_comment_id: string;
+ account_id: number;
+};
export type CreateAccountData = { pubkey: string; privkey: string; metadata: string };
+export type Follow = { id: number; pubkey: string; kind: number; metadata: string; accountId: number };
From fc8dc8fd0dc053b99e5022b23e91294d0480c9e0 Mon Sep 17 00:00:00 2001
From: Ren Amamiya <123083837+reyamir@users.noreply.github.com>
Date: Wed, 5 Apr 2023 09:20:33 +0700
Subject: [PATCH 09/21] completed migrate to prisma-rust-client
---
.../migration.sql | 4 +-
.../migration.sql | 11 +++
src-tauri/prisma/schema.prisma | 14 +--
src-tauri/src/main.rs | 63 +++++++++---
.../multiAccounts/activeAccount.tsx | 24 ++++-
src/components/multiAccounts/index.tsx | 40 ++++----
src/components/note/base.tsx | 10 +-
src/components/note/comment.tsx | 6 +-
src/components/note/connector.tsx | 98 +++++++++++--------
src/components/note/extend.tsx | 6 +-
src/components/note/parent.tsx | 50 +++++++---
src/components/note/repost.tsx | 46 ++++++---
src/components/user/base.tsx | 6 +-
src/components/user/extend.tsx | 8 +-
src/components/user/follow.tsx | 27 ++---
src/components/user/large.tsx | 7 +-
src/components/user/mention.tsx | 7 +-
src/components/user/mini.tsx | 7 +-
src/pages/index.tsx | 4 +-
src/pages/init.tsx | 42 ++++----
src/pages/newsfeed/following.tsx | 29 ++++--
src/stores/account.tsx | 2 +-
src/stores/relays.tsx | 9 --
src/utils/bindings.ts | 22 +++--
src/utils/transform.tsx | 13 +++
25 files changed, 342 insertions(+), 213 deletions(-)
rename src-tauri/prisma/migrations/{20230403043730_initial => 20230404081740_initial}/migration.sql (94%)
create mode 100644 src-tauri/prisma/migrations/20230405012355_add_index_to_created_at/migration.sql
delete mode 100644 src/stores/relays.tsx
diff --git a/src-tauri/prisma/migrations/20230403043730_initial/migration.sql b/src-tauri/prisma/migrations/20230404081740_initial/migration.sql
similarity index 94%
rename from src-tauri/prisma/migrations/20230403043730_initial/migration.sql
rename to src-tauri/prisma/migrations/20230404081740_initial/migration.sql
index e86009dc..a682a658 100644
--- a/src-tauri/prisma/migrations/20230403043730_initial/migration.sql
+++ b/src-tauri/prisma/migrations/20230404081740_initial/migration.sql
@@ -27,7 +27,7 @@ CREATE TABLE "Note" (
"content" TEXT NOT NULL,
"parent_id" TEXT NOT NULL,
"parent_comment_id" TEXT NOT NULL,
- "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "createdAt" INTEGER NOT NULL,
"accountId" INTEGER NOT NULL,
CONSTRAINT "Note_accountId_fkey" FOREIGN KEY ("accountId") REFERENCES "Account" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
);
@@ -38,7 +38,7 @@ CREATE TABLE "Message" (
"pubkey" TEXT NOT NULL,
"content" TEXT NOT NULL,
"tags" TEXT NOT NULL,
- "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "createdAt" INTEGER NOT NULL,
"accountId" INTEGER NOT NULL,
CONSTRAINT "Message_accountId_fkey" FOREIGN KEY ("accountId") REFERENCES "Account" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
);
diff --git a/src-tauri/prisma/migrations/20230405012355_add_index_to_created_at/migration.sql b/src-tauri/prisma/migrations/20230405012355_add_index_to_created_at/migration.sql
new file mode 100644
index 00000000..bea82ded
--- /dev/null
+++ b/src-tauri/prisma/migrations/20230405012355_add_index_to_created_at/migration.sql
@@ -0,0 +1,11 @@
+-- DropIndex
+DROP INDEX "Message_pubkey_idx";
+
+-- DropIndex
+DROP INDEX "Note_eventId_idx";
+
+-- CreateIndex
+CREATE INDEX "Message_pubkey_createdAt_idx" ON "Message"("pubkey", "createdAt");
+
+-- CreateIndex
+CREATE INDEX "Note_eventId_createdAt_idx" ON "Note"("eventId", "createdAt");
diff --git a/src-tauri/prisma/schema.prisma b/src-tauri/prisma/schema.prisma
index 44f8fae3..7cc44f70 100644
--- a/src-tauri/prisma/schema.prisma
+++ b/src-tauri/prisma/schema.prisma
@@ -36,33 +36,33 @@ model Follow {
}
model Note {
- id Int @id @default(autoincrement())
- eventId String @unique
+ id Int @id @default(autoincrement())
+ eventId String @unique
pubkey String
kind Int
tags String
content String
parent_id String
parent_comment_id String
- createdAt DateTime @default(now())
+ createdAt Int
Account Account @relation(fields: [accountId], references: [id])
accountId Int
- @@index([eventId])
+ @@index([eventId, createdAt])
}
model Message {
- id Int @id @default(autoincrement())
+ id Int @id @default(autoincrement())
pubkey String
content String
tags String
- createdAt DateTime @default(now())
+ createdAt Int
Account Account @relation(fields: [accountId], references: [id])
accountId Int
- @@index([pubkey])
+ @@index([pubkey, createdAt])
}
model Relay {
diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs
index c6bde5af..196aa2ff 100644
--- a/src-tauri/src/main.rs
+++ b/src-tauri/src/main.rs
@@ -7,7 +7,7 @@
#[macro_use]
extern crate objc;
-use prisma_client_rust::raw;
+use prisma_client_rust::Direction;
use tauri::{Manager, WindowEvent};
#[cfg(target_os = "macos")]
use window_ext::WindowExt;
@@ -54,12 +54,30 @@ struct CreateNoteData {
content: String,
parent_id: String,
parent_comment_id: String,
+ created_at: i32,
account_id: i32,
}
+#[derive(Deserialize, Type)]
+struct GetNoteByIdData {
+ event_id: String,
+}
+
+#[derive(Deserialize, Type)]
+struct GetNoteData {
+ date: i32,
+ limit: i32,
+ offset: i32,
+}
+
+#[derive(Deserialize, Type)]
+struct GetLatestNoteData {
+ date: i32,
+}
+
#[tauri::command]
#[specta::specta]
-async fn get_account(db: DbState<'_>) -> Result, ()> {
+async fn get_accounts(db: DbState<'_>) -> Result, ()> {
db.account()
.find_many(vec![account::active::equals(false)])
.exec()
@@ -120,6 +138,7 @@ async fn create_note(db: DbState<'_>, data: CreateNoteData) -> Result, data: CreateNoteData) -> Result) -> Result, ()> {
- db._query_raw(raw!("SELECT * FROM Note"))
+async fn get_notes(db: DbState<'_>, data: GetNoteData) -> Result, ()> {
+ db.note()
+ .find_many(vec![note::created_at::lte(data.date)])
+ .order_by(note::created_at::order(Direction::Desc))
+ .take(data.limit.into())
+ .skip(data.offset.into())
.exec()
.await
.map_err(|_| ())
@@ -141,15 +164,30 @@ async fn get_notes(db: DbState<'_>) -> Result, ()> {
#[tauri::command]
#[specta::specta]
-async fn check_note(db: DbState<'_>) -> Result, ()> {
+async fn get_latest_notes(db: DbState<'_>, data: GetLatestNoteData) -> Result, ()> {
db.note()
- .find_many(vec![])
- .take(5)
+ .find_many(vec![note::created_at::gt(data.date)])
+ .order_by(note::created_at::order(Direction::Desc))
.exec()
.await
.map_err(|_| ())
}
+#[tauri::command]
+#[specta::specta]
+async fn get_note_by_id(db: DbState<'_>, data: GetNoteByIdData) -> Result